Merge branch 'main' into add-collab-tests

This commit is contained in:
Mikayla 2023-11-08 09:57:08 -08:00
commit 9b30f490c7
No known key found for this signature in database
171 changed files with 50671 additions and 7748 deletions

64
Cargo.lock generated
View File

@ -2749,7 +2749,7 @@ dependencies = [
"env_logger 0.9.3", "env_logger 0.9.3",
"futures 0.3.28", "futures 0.3.28",
"fuzzy2", "fuzzy2",
"git", "git3",
"gpui2", "gpui2",
"indoc", "indoc",
"itertools 0.10.5", "itertools 0.10.5",
@ -3601,6 +3601,23 @@ dependencies = [
"workspace", "workspace",
] ]
[[package]]
name = "go_to_line2"
version = "0.1.0"
dependencies = [
"editor2",
"gpui2",
"menu2",
"postage",
"serde",
"settings2",
"text2",
"theme2",
"ui2",
"util",
"workspace2",
]
[[package]] [[package]]
name = "gpui" name = "gpui"
version = "0.1.0" version = "0.1.0"
@ -5042,7 +5059,8 @@ dependencies = [
name = "menu2" name = "menu2"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"gpui2", "serde",
"serde_derive",
] ]
[[package]] [[package]]
@ -6078,6 +6096,23 @@ dependencies = [
"workspace", "workspace",
] ]
[[package]]
name = "picker2"
version = "0.1.0"
dependencies = [
"ctor",
"editor2",
"env_logger 0.9.3",
"gpui2",
"menu2",
"parking_lot 0.11.2",
"serde_json",
"settings2",
"theme2",
"util",
"workspace2",
]
[[package]] [[package]]
name = "pico-args" name = "pico-args"
version = "0.4.2" version = "0.4.2"
@ -8596,9 +8631,14 @@ dependencies = [
"backtrace-on-stack-overflow", "backtrace-on-stack-overflow",
"chrono", "chrono",
"clap 4.4.4", "clap 4.4.4",
"editor2",
"fuzzy2",
"gpui2", "gpui2",
"itertools 0.11.0", "itertools 0.11.0",
"language2",
"log", "log",
"menu2",
"picker2",
"rust-embed", "rust-embed",
"serde", "serde",
"settings2", "settings2",
@ -9062,6 +9102,7 @@ dependencies = [
"fs2", "fs2",
"gpui2", "gpui2",
"indexmap 1.9.3", "indexmap 1.9.3",
"itertools 0.11.0",
"parking_lot 0.11.2", "parking_lot 0.11.2",
"refineable", "refineable",
"schemars", "schemars",
@ -9071,6 +9112,22 @@ dependencies = [
"settings2", "settings2",
"toml 0.5.11", "toml 0.5.11",
"util", "util",
"uuid 1.4.1",
]
[[package]]
name = "theme_importer"
version = "0.1.0"
dependencies = [
"anyhow",
"convert_case 0.6.0",
"gpui2",
"log",
"rust-embed",
"serde",
"simplelog",
"theme2",
"uuid 1.4.1",
] ]
[[package]] [[package]]
@ -11118,7 +11175,7 @@ dependencies = [
[[package]] [[package]]
name = "zed" name = "zed"
version = "0.112.0" version = "0.113.0"
dependencies = [ dependencies = [
"activity_indicator", "activity_indicator",
"ai", "ai",
@ -11282,6 +11339,7 @@ dependencies = [
"fsevent", "fsevent",
"futures 0.3.28", "futures 0.3.28",
"fuzzy", "fuzzy",
"go_to_line2",
"gpui2", "gpui2",
"ignore", "ignore",
"image", "image",

View File

@ -43,6 +43,7 @@ members = [
"crates/fuzzy2", "crates/fuzzy2",
"crates/git", "crates/git",
"crates/go_to_line", "crates/go_to_line",
"crates/go_to_line2",
"crates/gpui", "crates/gpui",
"crates/gpui_macros", "crates/gpui_macros",
"crates/gpui2", "crates/gpui2",
@ -68,6 +69,7 @@ members = [
"crates/notifications", "crates/notifications",
"crates/outline", "crates/outline",
"crates/picker", "crates/picker",
"crates/picker2",
"crates/plugin", "crates/plugin",
"crates/plugin_macros", "crates/plugin_macros",
"crates/plugin_runtime", "crates/plugin_runtime",
@ -95,6 +97,7 @@ members = [
"crates/text", "crates/text",
"crates/theme", "crates/theme",
"crates/theme2", "crates/theme2",
"crates/theme_importer",
"crates/theme_selector", "crates/theme_selector",
"crates/ui2", "crates/ui2",
"crates/util", "crates/util",

View File

@ -0,0 +1,7 @@
Copyright (c) 2017 eliverlara@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,369 @@
{
"name": "Andromeda Bordered",
"type": "dark",
"colors": {
"focusBorder": "#746f77",
"foreground": "#D5CED9",
"widget.shadow": "#14151A",
"selection.background": "#746f77",
"errorForeground": "#FC644D",
"button.background": "#00e8c5cc",
"button.hoverBackground": "#07d4b6cc",
"dropdown.background": "#2b303b",
"dropdown.border": "#363c49",
"input.background": "#2b303b",
"input.placeholderForeground": "#746f77",
"inputOption.activeBorder": "#C668BA",
"inputValidation.errorBackground": "#D65343",
"inputValidation.errorBorder": "#D65343",
"inputValidation.infoBackground": "#3A6395",
"inputValidation.infoBorder": "#3A6395",
"inputValidation.warningBackground": "#DE9237",
"inputValidation.warningBorder": "#DE9237",
"scrollbar.shadow": "#23262E",
"scrollbarSlider.activeBackground": "#3A3F4CCC",
"scrollbarSlider.background": "#3A3F4C77",
"scrollbarSlider.hoverBackground": "#3A3F4CAA",
"badge.background": "#00b0ff",
"badge.foreground": "#20232B",
"progressBar.background": "#C668BA",
"list.activeSelectionBackground": "#23262E",
"list.activeSelectionForeground": "#00e8c6",
"list.dropBackground": "#3a404e",
"list.focusBackground": "#282b35",
"list.focusForeground": "#eee",
"list.hoverBackground": "#23262E",
"list.hoverForeground": "#eee",
"list.inactiveSelectionBackground": "#23262E",
"list.inactiveSelectionForeground": "#00e8c6",
"activityBar.background": "#20232B",
"activityBar.dropBackground": "#3a404e",
"activityBar.foreground": "#BAAFC0",
"activityBarBadge.background": "#00b0ff",
"activityBarBadge.foreground": "#20232B",
"activityBar.border": "#1B1D23",
"sideBar.background": "#23262E",
"sideBarSectionHeader.background": "#23262E",
"sideBarTitle.foreground": "#00e8c6",
"sideBar.foreground": "#999999",
"sideBar.border": "#1B1D23",
"editorGroup.background": "#23262E",
"editorGroup.dropBackground": "#495061d7",
"editorGroupHeader.tabsBackground": "#23262E",
"tab.activeBackground": "#262A33",
"tab.inactiveBackground": "#23262E",
"tab.activeForeground": "#00e8c6",
"tab.inactiveForeground": "#746f77",
"editor.background": "#262A33",
"editor.foreground": "#D5CED9",
"editorLineNumber.foreground": "#746f77",
"editorCursor.foreground": "#FFF",
"editor.selectionBackground": "#3D4352",
"editor.selectionHighlightBackground": "#4F435580",
"editor.wordHighlightBackground": "#4F4355",
"editor.wordHighlightStrongBackground": "#db45a280",
"editor.findMatchBackground": "#f39d1256",
"editor.findMatchHighlightBackground": "#59b8b377",
"editor.findMatchBorder": "#f39d12b6",
"editor.hoverHighlightBackground": "#373941",
"editor.lineHighlightBackground": "#2e323d",
"editor.lineHighlightBorder": "#2e323d",
"editorLink.activeForeground": "#3B79C7",
"editor.rangeHighlightBackground": "#372F3C",
"editorWhitespace.foreground": "#333844",
"editorIndentGuide.background": "#333844",
"editorIndentGuide.activeBackground": "#585C66",
"editorRuler.foreground": "#4F4355",
"editorCodeLens.foreground": "#746f77",
"editorBracketMatch.background": "#746f77",
"editorBracketMatch.border": "#746f77",
"editorOverviewRuler.border": "#1B1D23",
"editorError.foreground": "#FC644D",
"editorWarning.foreground": "#FF9F2E",
"editorGutter.modifiedBackground": "#5BC0EBBB",
"editorGutter.addedBackground": "#9BC53DBB",
"editorGutter.deletedBackground": "#FC644DBB",
"diffEditor.insertedTextBackground": "#29BF1220",
"diffEditor.removedTextBackground": "#F21B3F20",
"editorWidget.background": "#20232A",
"editorSuggestWidget.background": "#20232A",
"editorSuggestWidget.border": "#372F3C",
"editorSuggestWidget.selectedBackground": "#373941",
"editorHoverWidget.background": "#373941",
"editorHoverWidget.border": "#00e8c5cc",
"debugExceptionWidget.background": "#FF9F2E60",
"debugExceptionWidget.border": "#FF9F2E60",
"minimapSlider.background": "#58607460",
"minimapSlider.hoverBackground": "#60698060",
"minimapSlider.activeBackground": "#60698060",
"peekView.border": "#23262E",
"peekViewEditor.background": "#1A1C22",
"peekViewEditor.matchHighlightBackground": "#FF9F2E60",
"peekViewResult.background": "#1A1C22",
"peekViewResult.matchHighlightBackground": "#FF9F2E60",
"peekViewResult.selectionBackground": "#23262E",
"peekViewTitle.background": "#1A1C22",
"peekViewTitleDescription.foreground": "#746f77",
"merge.currentHeaderBackground": "#F92672",
"merge.currentContentBackground": "#F9267240",
"merge.incomingHeaderBackground": "#3B79C7BB",
"merge.incomingContentBackground": "#3B79C740",
"panel.background": "#23262E",
"panel.border": "#1B1D23",
"panelTitle.activeBorder": "#23262E",
"panelTitle.inactiveForeground": "#746f77",
"statusBar.background": "#23262E",
"statusBar.debuggingBackground": "#FC644D",
"statusBar.noFolderBackground": "#23262E",
"statusBarItem.activeBackground": "#00e8c5cc",
"statusBarItem.hoverBackground": "#07d4b5b0",
"statusBarItem.prominentBackground": "#07d4b5b0",
"statusBarItem.prominentHoverBackground": "#00e8c5cc",
"terminal.ansiRed":"#ee5d43",
"terminal.ansiGreen":"#96E072",
"terminal.ansiYellow":"#FFE66D",
"terminal.ansiBlue":"#7cb7ff",
"terminal.ansiMagenta":"#ff00aa",
"terminal.ansiCyan":"#00e8c6",
"terminal.ansiBrightRed":"#ee5d43",
"terminal.ansiBrightGreen":"#96E072",
"terminal.ansiBrightYellow":"#FFE66D",
"terminal.ansiBrightBlue":"#7cb7ff",
"terminal.ansiBrightMagenta":"#ff00aa",
"terminal.ansiBrightCyan":"#00e8c6",
"terminalCursor.background": "#23262E",
"terminalCursor.foreground": "#FFE66D",
"titleBar.activeBackground": "#23262E",
"notification.background": "#2d313b",
"notification.buttonBackground": "#00e8c5cc",
"notification.buttonHoverBackground": "#07d4b5b0",
"notification.infoBackground": "#00b0ff",
"notification.warningBackground": "#FF9F2E",
"notification.errorBackground": "#FC644D",
"extensionButton.prominentBackground": "#07d4b6cc",
"extensionButton.prominentHoverBackground": "#07d4b5b0",
"pickerGroup.border": "#4F4355",
"pickerGroup.foreground": "#746f77",
"debugToolBar.background": "#20232A",
"walkThrough.embeddedEditorBackground": "#23262E",
"gitDecoration.ignoredResourceForeground": "#555555"
},
"tokenColors": [
{
"settings": {
"foreground": "#D5CED9",
"background": "#23262E"
}
},
{
"name": "Comment color",
"scope": [
"comment",
"markup.quote.markdown",
"meta.diff",
"meta.diff.header"
],
"settings": {
"foreground": "#A0A1A7cc"
}
},
{
"name": "Text Color",
"scope": [
"meta.template.expression.js",
"constant.name.attribute.tag.jade",
"punctuation.definition.metadata.markdown",
"punctuation.definition.string.end.markdown",
"punctuation.definition.string.begin.markdown"
],
"settings": {
"foreground": "#D5CED9"
}
},
{
"name": "Cyan",
"scope": [
"variable",
"support.variable",
"entity.name.tag.yaml",
"constant.character.entity.html",
"source.css entity.name.tag.reference",
"beginning.punctuation.definition.list.markdown",
"source.css entity.other.attribute-name.parent-selector",
"meta.structure.dictionary.json support.type.property-name"
],
"settings": {
"foreground": "#00e8c6"
}
},
{
"name": "Orange",
"scope": [
"markup.bold",
"constant.numeric",
"meta.group.regexp",
"constant.other.php",
"support.constant.ext.php",
"constant.other.class.php",
"support.constant.core.php",
"fenced_code.block.language",
"constant.other.caps.python",
"entity.other.attribute-name",
"support.type.exception.python",
"source.css keyword.other.unit",
"variable.other.object.property.js.jsx", "variable.other.object.js"
],
"settings": {
"foreground": "#f39c12"
}
},
{
"name": "Yellow",
"scope": [
"markup.list",
"text.xml string",
"entity.name.type",
"support.function",
"entity.other.attribute-name",
"meta.at-rule.extend",
"entity.name.function",
"entity.other.inherited-class",
"entity.other.keyframe-offset.css",
"text.html.markdown string.quoted",
"meta.function-call.generic.python",
"meta.at-rule.extend support.constant",
"entity.other.attribute-name.class.jade",
"source.css entity.other.attribute-name",
"text.xml punctuation.definition.string"
],
"settings": {
"foreground": "#FFE66D"
}
},
{
"name": "Pink",
"scope": [
"markup.heading",
"variable.language.this.js",
"variable.language.special.self.python"
],
"settings": {
"foreground": "#ff00aa"
}
},
{
"name": "Hot Pink",
"scope": [
"punctuation.definition.interpolation",
"punctuation.section.embedded.end.php",
"punctuation.section.embedded.end.ruby",
"punctuation.section.embedded.begin.php",
"punctuation.section.embedded.begin.ruby",
"punctuation.definition.template-expression",
"entity.name.tag"
],
"settings": {
"foreground": "#f92672"
}
},
{
"name": "Purple",
"scope": [
"storage",
"keyword",
"meta.link",
"meta.image",
"markup.italic",
"source.js support.type"
],
"settings": {
"foreground": "#c74ded"
}
},
{
"name": "Blue",
"scope": [
"string.regexp",
"markup.changed"
],
"settings": {
"foreground": "#7cb7ff"
}
},
{
"name": "Red",
"scope": [
"constant",
"support.class",
"keyword.operator",
"support.constant",
"text.html.markdown string",
"source.css support.function",
"source.php support.function",
"support.function.magic.python",
"entity.other.attribute-name.id",
"markup.deleted"
],
"settings": {
"foreground": "#ee5d43"
}
},
{
"name": "Green",
"scope": [
"string",
"text.html.php string",
"markup.inline.raw",
"markup.inserted",
"punctuation.definition.string",
"punctuation.definition.markdown",
"text.html meta.embedded source.js string",
"text.html.php punctuation.definition.string",
"text.html meta.embedded source.js punctuation.definition.string",
"text.html punctuation.definition.string",
"text.html string"
],
"settings": {
"foreground": "#96E072"
}
},
{
"name": "Font Underline",
"scope": [
"entity.other.inherited-class"
],
"settings": {
"fontStyle": "underline"
}
}
]
}

View File

@ -0,0 +1,367 @@
{
"name": "Andromeda",
"type": "dark",
"colors": {
"focusBorder": "#746f77",
"foreground": "#D5CED9",
"widget.shadow": "#14151A",
"selection.background": "#746f77",
"errorForeground": "#FC644D",
"button.background": "#00e8c5cc",
"button.hoverBackground": "#07d4b6cc",
"dropdown.background": "#2b303b",
"dropdown.border": "#363c49",
"input.background": "#2b303b",
"input.placeholderForeground": "#746f77",
"inputOption.activeBorder": "#C668BA",
"inputValidation.errorBackground": "#D65343",
"inputValidation.errorBorder": "#D65343",
"inputValidation.infoBackground": "#3A6395",
"inputValidation.infoBorder": "#3A6395",
"inputValidation.warningBackground": "#DE9237",
"inputValidation.warningBorder": "#DE9237",
"scrollbar.shadow": "#23262E",
"scrollbarSlider.activeBackground": "#3A3F4CCC",
"scrollbarSlider.background": "#3A3F4C77",
"scrollbarSlider.hoverBackground": "#3A3F4CAA",
"badge.background": "#00b0ff",
"badge.foreground": "#20232B",
"progressBar.background": "#C668BA",
"list.activeSelectionBackground": "#23262E",
"list.activeSelectionForeground": "#00e8c6",
"list.dropBackground": "#3a404e",
"list.focusBackground": "#282b35",
"list.focusForeground": "#eee",
"list.hoverBackground": "#23262E",
"list.hoverForeground": "#eee",
"list.inactiveSelectionBackground": "#23262E",
"list.inactiveSelectionForeground": "#00e8c6",
"activityBar.background": "#23262E",
"activityBar.dropBackground": "#3a404e",
"activityBar.foreground": "#BAAFC0",
"activityBarBadge.background": "#00b0ff",
"activityBarBadge.foreground": "#20232B",
"sideBar.background": "#23262E",
"sideBarSectionHeader.background": "#23262E",
"sideBarTitle.foreground": "#00e8c6",
"sideBar.foreground": "#999999",
"editorGroup.background": "#23262E",
"editorGroup.dropBackground": "#495061d7",
"editorGroupHeader.tabsBackground": "#23262E",
"tab.activeBackground": "#23262e",
"tab.inactiveBackground": "#23262E",
"tab.activeForeground": "#00e8c6",
"tab.inactiveForeground": "#746f77",
"editor.background": "#23262E",
"editor.foreground": "#D5CED9",
"editorLineNumber.foreground": "#746f77",
"editorCursor.foreground": "#FFF",
"editor.selectionBackground": "#3D4352",
"editor.selectionHighlightBackground": "#4F435580",
"editor.wordHighlightBackground": "#4F4355",
"editor.wordHighlightStrongBackground": "#db45a280",
"editor.findMatchBackground": "#f39d1256",
"editor.findMatchHighlightBackground": "#59b8b377",
"editor.findMatchBorder": "#f39d12b6",
"editor.hoverHighlightBackground": "#373941",
"editor.lineHighlightBackground": "#2e323d",
"editor.lineHighlightBorder": "#2e323d",
"editorLink.activeForeground": "#3B79C7",
"editor.rangeHighlightBackground": "#372F3C",
"editorWhitespace.foreground": "#333844",
"editorIndentGuide.background": "#333844",
"editorIndentGuide.activeBackground": "#585C66",
"editorRuler.foreground": "#4F4355",
"editorCodeLens.foreground": "#746f77",
"editorBracketMatch.background": "#746f77",
"editorBracketMatch.border": "#746f77",
"editorOverviewRuler.border": "#1B1D23",
"editorError.foreground": "#FC644D",
"editorWarning.foreground": "#FF9F2E",
"editorGutter.modifiedBackground": "#5BC0EBBB",
"editorGutter.addedBackground": "#9BC53DBB",
"editorGutter.deletedBackground": "#FC644DBB",
"diffEditor.insertedTextBackground": "#29BF1220",
"diffEditor.removedTextBackground": "#F21B3F20",
"editorWidget.background": "#20232A",
"editorSuggestWidget.background": "#20232A",
"editorSuggestWidget.border": "#372F3C",
"editorSuggestWidget.selectedBackground": "#373941",
"editorHoverWidget.background": "#373941",
"editorHoverWidget.border": "#00e8c5cc",
"debugExceptionWidget.background": "#FF9F2E60",
"debugExceptionWidget.border": "#FF9F2E60",
"minimapSlider.background": "#58607460",
"minimapSlider.hoverBackground": "#60698060",
"minimapSlider.activeBackground": "#60698060",
"peekView.border": "#23262E",
"peekViewEditor.background": "#1A1C22",
"peekViewEditor.matchHighlightBackground": "#FF9F2E60",
"peekViewResult.background": "#1A1C22",
"peekViewResult.matchHighlightBackground": "#FF9F2E60",
"peekViewResult.selectionBackground": "#23262E",
"peekViewTitle.background": "#1A1C22",
"peekViewTitleDescription.foreground": "#746f77",
"merge.currentHeaderBackground": "#F92672",
"merge.currentContentBackground": "#F9267240",
"merge.incomingHeaderBackground": "#3B79C7BB",
"merge.incomingContentBackground": "#3B79C740",
"panel.background": "#23262E",
"panel.border": "#1B1D23",
"panelTitle.activeBorder": "#23262E",
"panelTitle.inactiveForeground": "#746f77",
"statusBar.background": "#23262E",
"statusBar.debuggingBackground": "#FC644D",
"statusBar.noFolderBackground": "#23262E",
"statusBarItem.activeBackground": "#00e8c5cc",
"statusBarItem.hoverBackground": "#07d4b5b0",
"statusBarItem.prominentBackground": "#07d4b5b0",
"statusBarItem.prominentHoverBackground": "#00e8c5cc",
"terminal.ansiRed":"#ee5d43",
"terminal.ansiGreen":"#96E072",
"terminal.ansiYellow":"#FFE66D",
"terminal.ansiBlue":"#7cb7ff",
"terminal.ansiMagenta":"#ff00aa",
"terminal.ansiCyan":"#00e8c6",
"terminal.ansiBrightRed":"#ee5d43",
"terminal.ansiBrightGreen":"#96E072",
"terminal.ansiBrightYellow":"#FFE66D",
"terminal.ansiBrightBlue":"#7cb7ff",
"terminal.ansiBrightMagenta":"#ff00aa",
"terminal.ansiBrightCyan":"#00e8c6",
"terminalCursor.background": "#23262E",
"terminalCursor.foreground": "#FFE66D",
"titleBar.activeBackground": "#23262E",
"notification.background": "#2d313b",
"notification.buttonBackground": "#00e8c5cc",
"notification.buttonHoverBackground": "#07d4b5b0",
"notification.infoBackground": "#00b0ff",
"notification.warningBackground": "#FF9F2E",
"notification.errorBackground": "#FC644D",
"extensionButton.prominentBackground": "#07d4b6cc",
"extensionButton.prominentHoverBackground": "#07d4b5b0",
"pickerGroup.border": "#4F4355",
"pickerGroup.foreground": "#746f77",
"debugToolBar.background": "#20232A",
"walkThrough.embeddedEditorBackground": "#23262E",
"gitDecoration.ignoredResourceForeground": "#555555"
},
"tokenColors": [
{
"settings": {
"foreground": "#D5CED9",
"background": "#23262E"
}
},
{
"name": "Comment color",
"scope": [
"comment",
"markup.quote.markdown",
"meta.diff",
"meta.diff.header"
],
"settings": {
"foreground": "#A0A1A7cc"
}
},
{
"name": "Text Color",
"scope": [
"meta.template.expression.js",
"constant.name.attribute.tag.jade",
"punctuation.definition.metadata.markdown",
"punctuation.definition.string.end.markdown",
"punctuation.definition.string.begin.markdown"
],
"settings": {
"foreground": "#D5CED9"
}
},
{
"name": "Cyan",
"scope": [
"variable",
"support.variable",
"entity.name.tag.yaml",
"constant.character.entity.html",
"source.css entity.name.tag.reference",
"beginning.punctuation.definition.list.markdown",
"source.css entity.other.attribute-name.parent-selector",
"meta.structure.dictionary.json support.type.property-name"
],
"settings": {
"foreground": "#00e8c6"
}
},
{
"name": "Orange",
"scope": [
"markup.bold",
"constant.numeric",
"meta.group.regexp",
"constant.other.php",
"support.constant.ext.php",
"constant.other.class.php",
"support.constant.core.php",
"fenced_code.block.language",
"constant.other.caps.python",
"entity.other.attribute-name",
"support.type.exception.python",
"source.css keyword.other.unit",
"variable.other.object.property.js.jsx", "variable.other.object.js"
],
"settings": {
"foreground": "#f39c12"
}
},
{
"name": "Yellow",
"scope": [
"markup.list",
"text.xml string",
"entity.name.type",
"support.function",
"entity.other.attribute-name",
"meta.at-rule.extend",
"entity.name.function",
"entity.other.inherited-class",
"entity.other.keyframe-offset.css",
"text.html.markdown string.quoted",
"meta.function-call.generic.python",
"meta.at-rule.extend support.constant",
"entity.other.attribute-name.class.jade",
"source.css entity.other.attribute-name",
"text.xml punctuation.definition.string"
],
"settings": {
"foreground": "#FFE66D"
}
},
{
"name": "Pink",
"scope": [
"markup.heading",
"variable.language.this.js",
"variable.language.special.self.python"
],
"settings": {
"foreground": "#ff00aa"
}
},
{
"name": "Hot Pink",
"scope": [
"punctuation.definition.interpolation",
"punctuation.section.embedded.end.php",
"punctuation.section.embedded.end.ruby",
"punctuation.section.embedded.begin.php",
"punctuation.section.embedded.begin.ruby",
"punctuation.definition.template-expression",
"entity.name.tag"
],
"settings": {
"foreground": "#f92672"
}
},
{
"name": "Purple",
"scope": [
"storage",
"keyword",
"meta.link",
"meta.image",
"markup.italic",
"source.js support.type"
],
"settings": {
"foreground": "#c74ded"
}
},
{
"name": "Blue",
"scope": [
"string.regexp",
"markup.changed"
],
"settings": {
"foreground": "#7cb7ff"
}
},
{
"name": "Red",
"scope": [
"constant",
"support.class",
"keyword.operator",
"support.constant",
"text.html.markdown string",
"source.css support.function",
"source.php support.function",
"support.function.magic.python",
"entity.other.attribute-name.id",
"markup.deleted"
],
"settings": {
"foreground": "#ee5d43"
}
},
{
"name": "Green",
"scope": [
"string",
"text.html.php string",
"markup.inline.raw",
"markup.inserted",
"punctuation.definition.string",
"punctuation.definition.markdown",
"text.html meta.embedded source.js string",
"text.html.php punctuation.definition.string",
"text.html meta.embedded source.js punctuation.definition.string",
"text.html punctuation.definition.string",
"text.html string"
],
"settings": {
"foreground": "#96E072"
}
},
{
"name": "Font Underline",
"scope": [
"entity.other.inherited-class"
],
"settings": {
"fontStyle": "underline"
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"name": "Andromeda",
"author": "Eliver Lara (EliverLara)",
"themes": [
{
"name": "Andromeda",
"file_name": "andromeda.json",
"appearance": "dark"
},
{
"name": "Andromeda Bordered",
"file_name": "andromeda-bordered.json",
"appearance": "dark"
}
]
}

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2016 Ike Ku
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,847 @@
{
"type": "dark",
"colors": {
"focusBorder": "#e6b450b3",
"foreground": "#565b66",
"widget.shadow": "#00000080",
"selection.background": "#409fff4d",
"icon.foreground": "#565b66",
"errorForeground": "#d95757",
"descriptionForeground": "#565b66",
"textBlockQuote.background": "#0f131a",
"textLink.foreground": "#e6b450",
"textLink.activeForeground": "#e6b450",
"textPreformat.foreground": "#bfbdb6",
"button.background": "#e6b450",
"button.foreground": "#734d00",
"button.hoverBackground": "#e1af4b",
"button.secondaryBackground": "#565b6633",
"button.secondaryForeground": "#bfbdb6",
"button.secondaryHoverBackground": "#565b6680",
"dropdown.background": "#0d1017",
"dropdown.foreground": "#565b66",
"dropdown.border": "#565b6645",
"input.background": "#0d1017",
"input.border": "#565b6645",
"input.foreground": "#bfbdb6",
"input.placeholderForeground": "#565b6680",
"inputOption.activeBorder": "#e6b4504d",
"inputOption.activeBackground": "#e6b45033",
"inputOption.activeForeground": "#e6b450",
"inputValidation.errorBackground": "#0d1017",
"inputValidation.errorBorder": "#d95757",
"inputValidation.infoBackground": "#0b0e14",
"inputValidation.infoBorder": "#39bae6",
"inputValidation.warningBackground": "#0b0e14",
"inputValidation.warningBorder": "#ffb454",
"scrollbar.shadow": "#1e232b00",
"scrollbarSlider.background": "#565b6666",
"scrollbarSlider.hoverBackground": "#565b6699",
"scrollbarSlider.activeBackground": "#565b66b3",
"badge.background": "#e6b45033",
"badge.foreground": "#e6b450",
"progressBar.background": "#e6b450",
"list.activeSelectionBackground": "#47526640",
"list.activeSelectionForeground": "#bfbdb6",
"list.focusBackground": "#47526640",
"list.focusForeground": "#bfbdb6",
"list.focusOutline": "#47526640",
"list.highlightForeground": "#e6b450",
"list.deemphasizedForeground": "#d95757",
"list.hoverBackground": "#47526640",
"list.inactiveSelectionBackground": "#47526633",
"list.inactiveSelectionForeground": "#565b66",
"list.invalidItemForeground": "#565b664d",
"list.errorForeground": "#d95757",
"tree.indentGuidesStroke": "#6c738080",
"listFilterWidget.background": "#0f131a",
"listFilterWidget.outline": "#e6b450",
"listFilterWidget.noMatchesOutline": "#d95757",
"list.filterMatchBackground": "#5f4c7266",
"list.filterMatchBorder": "#6c598066",
"activityBar.background": "#0b0e14",
"activityBar.foreground": "#565b66cc",
"activityBar.inactiveForeground": "#565b6699",
"activityBar.border": "#0b0e14",
"activityBar.activeBorder": "#e6b450",
"activityBarBadge.background": "#e6b450",
"activityBarBadge.foreground": "#734d00",
"sideBar.background": "#0b0e14",
"sideBar.border": "#0b0e14",
"sideBarTitle.foreground": "#565b66",
"sideBarSectionHeader.background": "#0b0e14",
"sideBarSectionHeader.foreground": "#565b66",
"sideBarSectionHeader.border": "#0b0e14",
"minimap.background": "#0b0e14",
"minimap.selectionHighlight": "#409fff4d",
"minimap.errorHighlight": "#d95757",
"minimap.findMatchHighlight": "#6c5980",
"minimapGutter.addedBackground": "#7fd962",
"minimapGutter.modifiedBackground": "#73b8ff",
"minimapGutter.deletedBackground": "#f26d78",
"editorGroup.border": "#1e232b",
"editorGroup.background": "#0f131a",
"editorGroupHeader.noTabsBackground": "#0b0e14",
"editorGroupHeader.tabsBackground": "#0b0e14",
"editorGroupHeader.tabsBorder": "#0b0e14",
"tab.activeBackground": "#0b0e14",
"tab.activeForeground": "#bfbdb6",
"tab.border": "#0b0e14",
"tab.activeBorder": "#e6b450",
"tab.unfocusedActiveBorder": "#565b66",
"tab.inactiveBackground": "#0b0e14",
"tab.inactiveForeground": "#565b66",
"tab.unfocusedActiveForeground": "#565b66",
"tab.unfocusedInactiveForeground": "#565b66",
"editor.background": "#0b0e14",
"editor.foreground": "#bfbdb6",
"editorLineNumber.foreground": "#6c738099",
"editorLineNumber.activeForeground": "#6c7380e6",
"editorCursor.foreground": "#e6b450",
"editor.inactiveSelectionBackground": "#409fff21",
"editor.selectionBackground": "#409fff4d",
"editor.selectionHighlightBackground": "#7fd96226",
"editor.selectionHighlightBorder": "#7fd96200",
"editor.wordHighlightBackground": "#73b8ff14",
"editor.wordHighlightStrongBackground": "#7fd96214",
"editor.wordHighlightBorder": "#73b8ff80",
"editor.wordHighlightStrongBorder": "#7fd96280",
"editor.findMatchBackground": "#6c5980",
"editor.findMatchBorder": "#6c5980",
"editor.findMatchHighlightBackground": "#6c598066",
"editor.findMatchHighlightBorder": "#5f4c7266",
"editor.findRangeHighlightBackground": "#6c598040",
"editor.rangeHighlightBackground": "#6c598033",
"editor.lineHighlightBackground": "#131721",
"editorLink.activeForeground": "#e6b450",
"editorWhitespace.foreground": "#6c738099",
"editorIndentGuide.background": "#6c738033",
"editorIndentGuide.activeBackground": "#6c738080",
"editorRuler.foreground": "#6c738033",
"editorCodeLens.foreground": "#acb6bf8c",
"editorBracketMatch.background": "#6c73804d",
"editorBracketMatch.border": "#6c73804d",
"editor.snippetTabstopHighlightBackground": "#7fd96233",
"editorOverviewRuler.border": "#1e232b",
"editorOverviewRuler.modifiedForeground": "#73b8ff",
"editorOverviewRuler.addedForeground": "#7fd962",
"editorOverviewRuler.deletedForeground": "#f26d78",
"editorOverviewRuler.errorForeground": "#d95757",
"editorOverviewRuler.warningForeground": "#e6b450",
"editorOverviewRuler.bracketMatchForeground": "#6c7380b3",
"editorOverviewRuler.wordHighlightForeground": "#73b8ff66",
"editorOverviewRuler.wordHighlightStrongForeground": "#7fd96266",
"editorOverviewRuler.findMatchForeground": "#6c5980",
"editorError.foreground": "#d95757",
"editorWarning.foreground": "#e6b450",
"editorGutter.modifiedBackground": "#73b8ffcc",
"editorGutter.addedBackground": "#7fd962cc",
"editorGutter.deletedBackground": "#f26d78cc",
"diffEditor.insertedTextBackground": "#7fd9621f",
"diffEditor.removedTextBackground": "#f26d781f",
"diffEditor.diagonalFill": "#1e232b",
"editorWidget.background": "#0f131a",
"editorWidget.border": "#1e232b",
"editorHoverWidget.background": "#0f131a",
"editorHoverWidget.border": "#1e232b",
"editorSuggestWidget.background": "#0f131a",
"editorSuggestWidget.border": "#1e232b",
"editorSuggestWidget.highlightForeground": "#e6b450",
"editorSuggestWidget.selectedBackground": "#47526640",
"debugExceptionWidget.border": "#1e232b",
"debugExceptionWidget.background": "#0f131a",
"editorMarkerNavigation.background": "#0f131a",
"peekView.border": "#47526640",
"peekViewTitle.background": "#47526640",
"peekViewTitleDescription.foreground": "#565b66",
"peekViewTitleLabel.foreground": "#bfbdb6",
"peekViewEditor.background": "#0f131a",
"peekViewEditor.matchHighlightBackground": "#6c598066",
"peekViewEditor.matchHighlightBorder": "#5f4c7266",
"peekViewResult.background": "#0f131a",
"peekViewResult.fileForeground": "#bfbdb6",
"peekViewResult.lineForeground": "#565b66",
"peekViewResult.matchHighlightBackground": "#6c598066",
"peekViewResult.selectionBackground": "#47526640",
"panel.background": "#0b0e14",
"panel.border": "#1e232b",
"panelTitle.activeBorder": "#e6b450",
"panelTitle.activeForeground": "#bfbdb6",
"panelTitle.inactiveForeground": "#565b66",
"statusBar.background": "#0b0e14",
"statusBar.foreground": "#565b66",
"statusBar.border": "#0b0e14",
"statusBar.debuggingBackground": "#f29668",
"statusBar.debuggingForeground": "#0d1017",
"statusBar.noFolderBackground": "#0f131a",
"statusBarItem.activeBackground": "#565b6633",
"statusBarItem.hoverBackground": "#565b6633",
"statusBarItem.prominentBackground": "#1e232b",
"statusBarItem.prominentHoverBackground": "#00000030",
"statusBarItem.remoteBackground": "#e6b450",
"statusBarItem.remoteForeground": "#734d00",
"titleBar.activeBackground": "#0b0e14",
"titleBar.activeForeground": "#bfbdb6",
"titleBar.inactiveBackground": "#0b0e14",
"titleBar.inactiveForeground": "#565b66",
"titleBar.border": "#0b0e14",
"extensionButton.prominentForeground": "#734d00",
"extensionButton.prominentBackground": "#e6b450",
"extensionButton.prominentHoverBackground": "#e1af4b",
"pickerGroup.border": "#1e232b",
"pickerGroup.foreground": "#565b6680",
"debugToolBar.background": "#0f131a",
"debugIcon.breakpointForeground": "#f29668",
"debugIcon.breakpointDisabledForeground": "#f2966880",
"debugConsoleInputIcon.foreground": "#e6b450",
"welcomePage.tileBackground": "#0b0e14",
"welcomePage.tileShadow": "#00000080",
"welcomePage.progress.background": "#131721",
"welcomePage.buttonBackground": "#e6b45066",
"walkThrough.embeddedEditorBackground": "#0f131a",
"gitDecoration.modifiedResourceForeground": "#73b8ffb3",
"gitDecoration.deletedResourceForeground": "#f26d78b3",
"gitDecoration.untrackedResourceForeground": "#7fd962b3",
"gitDecoration.ignoredResourceForeground": "#565b6680",
"gitDecoration.conflictingResourceForeground": "",
"gitDecoration.submoduleResourceForeground": "#d2a6ffb3",
"settings.headerForeground": "#bfbdb6",
"settings.modifiedItemIndicator": "#73b8ff",
"keybindingLabel.background": "#565b661a",
"keybindingLabel.foreground": "#bfbdb6",
"keybindingLabel.border": "#bfbdb61a",
"keybindingLabel.bottomBorder": "#bfbdb61a",
"terminal.background": "#0b0e14",
"terminal.foreground": "#bfbdb6",
"terminal.ansiBlack": "#1e232b",
"terminal.ansiRed": "#ea6c73",
"terminal.ansiGreen": "#7fd962",
"terminal.ansiYellow": "#f9af4f",
"terminal.ansiBlue": "#53bdfa",
"terminal.ansiMagenta": "#cda1fa",
"terminal.ansiCyan": "#90e1c6",
"terminal.ansiWhite": "#c7c7c7",
"terminal.ansiBrightBlack": "#686868",
"terminal.ansiBrightRed": "#f07178",
"terminal.ansiBrightGreen": "#aad94c",
"terminal.ansiBrightYellow": "#ffb454",
"terminal.ansiBrightBlue": "#59c2ff",
"terminal.ansiBrightMagenta": "#d2a6ff",
"terminal.ansiBrightCyan": "#95e6cb",
"terminal.ansiBrightWhite": "#ffffff"
},
"tokenColors": [
{
"settings": {
"background": "#0b0e14",
"foreground": "#bfbdb6"
}
},
{
"name": "Comment",
"scope": [
"comment"
],
"settings": {
"fontStyle": "italic",
"foreground": "#acb6bf8c"
}
},
{
"name": "String",
"scope": [
"string",
"constant.other.symbol"
],
"settings": {
"foreground": "#aad94c"
}
},
{
"name": "Regular Expressions and Escape Characters",
"scope": [
"string.regexp",
"constant.character",
"constant.other"
],
"settings": {
"foreground": "#95e6cb"
}
},
{
"name": "Number",
"scope": [
"constant.numeric"
],
"settings": {
"foreground": "#d2a6ff"
}
},
{
"name": "Built-in constants",
"scope": [
"constant.language"
],
"settings": {
"foreground": "#d2a6ff"
}
},
{
"name": "Variable",
"scope": [
"variable",
"variable.parameter.function-call"
],
"settings": {
"foreground": "#bfbdb6"
}
},
{
"name": "Member Variable",
"scope": [
"variable.member"
],
"settings": {
"foreground": "#f07178"
}
},
{
"name": "Language variable",
"scope": [
"variable.language"
],
"settings": {
"fontStyle": "italic",
"foreground": "#39bae6"
}
},
{
"name": "Storage",
"scope": [
"storage"
],
"settings": {
"foreground": "#ff8f40"
}
},
{
"name": "Keyword",
"scope": [
"keyword"
],
"settings": {
"foreground": "#ff8f40"
}
},
{
"name": "Operators",
"scope": [
"keyword.operator"
],
"settings": {
"foreground": "#f29668"
}
},
{
"name": "Separators like ; or ,",
"scope": [
"punctuation.separator",
"punctuation.terminator"
],
"settings": {
"foreground": "#bfbdb6b3"
}
},
{
"name": "Punctuation",
"scope": [
"punctuation.section"
],
"settings": {
"foreground": "#bfbdb6"
}
},
{
"name": "Accessor",
"scope": [
"punctuation.accessor"
],
"settings": {
"foreground": "#f29668"
}
},
{
"name": "JavaScript/TypeScript interpolation punctuation",
"scope": [
"punctuation.definition.template-expression"
],
"settings": {
"foreground": "#ff8f40"
}
},
{
"name": "Ruby interpolation punctuation",
"scope": [
"punctuation.section.embedded"
],
"settings": {
"foreground": "#ff8f40"
}
},
{
"name": "Interpolation text",
"scope": [
"meta.embedded"
],
"settings": {
"foreground": "#bfbdb6"
}
},
{
"name": "Types fixes",
"scope": [
"source.java storage.type",
"source.haskell storage.type",
"source.c storage.type"
],
"settings": {
"foreground": "#59c2ff"
}
},
{
"name": "Inherited class type",
"scope": [
"entity.other.inherited-class"
],
"settings": {
"foreground": "#39bae6"
}
},
{
"name": "Lambda arrow",
"scope": [
"storage.type.function"
],
"settings": {
"foreground": "#ff8f40"
}
},
{
"name": "Java primitive variable types",
"scope": [
"source.java storage.type.primitive"
],
"settings": {
"foreground": "#39bae6"
}
},
{
"name": "Function name",
"scope": [
"entity.name.function"
],
"settings": {
"foreground": "#ffb454"
}
},
{
"name": "Function arguments",
"scope": [
"variable.parameter",
"meta.parameter"
],
"settings": {
"foreground": "#d2a6ff"
}
},
{
"name": "Function call",
"scope": [
"variable.function",
"variable.annotation",
"meta.function-call.generic",
"support.function.go"
],
"settings": {
"foreground": "#ffb454"
}
},
{
"name": "Library function",
"scope": [
"support.function",
"support.macro"
],
"settings": {
"foreground": "#f07178"
}
},
{
"name": "Imports and packages",
"scope": [
"entity.name.import",
"entity.name.package"
],
"settings": {
"foreground": "#aad94c"
}
},
{
"name": "Entity name",
"scope": [
"entity.name"
],
"settings": {
"foreground": "#59c2ff"
}
},
{
"name": "Tag",
"scope": [
"entity.name.tag",
"meta.tag.sgml"
],
"settings": {
"foreground": "#39bae6"
}
},
{
"name": "JSX Component",
"scope": [
"support.class.component"
],
"settings": {
"foreground": "#59c2ff"
}
},
{
"name": "Tag start/end",
"scope": [
"punctuation.definition.tag.end",
"punctuation.definition.tag.begin",
"punctuation.definition.tag"
],
"settings": {
"foreground": "#39bae680"
}
},
{
"name": "Tag attribute",
"scope": [
"entity.other.attribute-name"
],
"settings": {
"foreground": "#ffb454"
}
},
{
"name": "Library constant",
"scope": [
"support.constant"
],
"settings": {
"fontStyle": "italic",
"foreground": "#f29668"
}
},
{
"name": "Library class/type",
"scope": [
"support.type",
"support.class",
"source.go storage.type"
],
"settings": {
"foreground": "#39bae6"
}
},
{
"name": "Decorators/annotation",
"scope": [
"meta.decorator variable.other",
"meta.decorator punctuation.decorator",
"storage.type.annotation"
],
"settings": {
"foreground": "#e6b673"
}
},
{
"name": "Invalid",
"scope": [
"invalid"
],
"settings": {
"foreground": "#d95757"
}
},
{
"name": "diff.header",
"scope": [
"meta.diff",
"meta.diff.header"
],
"settings": {
"foreground": "#c594c5"
}
},
{
"name": "Ruby class methods",
"scope": [
"source.ruby variable.other.readwrite"
],
"settings": {
"foreground": "#ffb454"
}
},
{
"name": "CSS tag names",
"scope": [
"source.css entity.name.tag",
"source.sass entity.name.tag",
"source.scss entity.name.tag",
"source.less entity.name.tag",
"source.stylus entity.name.tag"
],
"settings": {
"foreground": "#59c2ff"
}
},
{
"name": "CSS browser prefix",
"scope": [
"source.css support.type",
"source.sass support.type",
"source.scss support.type",
"source.less support.type",
"source.stylus support.type"
],
"settings": {
"foreground": "#acb6bf8c"
}
},
{
"name": "CSS Properties",
"scope": [
"support.type.property-name"
],
"settings": {
"fontStyle": "normal",
"foreground": "#39bae6"
}
},
{
"name": "Search Results Numbers",
"scope": [
"constant.numeric.line-number.find-in-files - match"
],
"settings": {
"foreground": "#acb6bf8c"
}
},
{
"name": "Search Results Match Numbers",
"scope": [
"constant.numeric.line-number.match"
],
"settings": {
"foreground": "#ff8f40"
}
},
{
"name": "Search Results Lines",
"scope": [
"entity.name.filename.find-in-files"
],
"settings": {
"foreground": "#aad94c"
}
},
{
"scope": [
"message.error"
],
"settings": {
"foreground": "#d95757"
}
},
{
"name": "Markup heading",
"scope": [
"markup.heading",
"markup.heading entity.name"
],
"settings": {
"fontStyle": "bold",
"foreground": "#aad94c"
}
},
{
"name": "Markup links",
"scope": [
"markup.underline.link",
"string.other.link"
],
"settings": {
"foreground": "#39bae6"
}
},
{
"name": "Markup Italic",
"scope": [
"markup.italic"
],
"settings": {
"fontStyle": "italic",
"foreground": "#f07178"
}
},
{
"name": "Markup Bold",
"scope": [
"markup.bold"
],
"settings": {
"fontStyle": "bold",
"foreground": "#f07178"
}
},
{
"name": "Markup Bold/italic",
"scope": [
"markup.italic markup.bold",
"markup.bold markup.italic"
],
"settings": {
"fontStyle": "bold italic"
}
},
{
"name": "Markup Code",
"scope": [
"markup.raw"
],
"settings": {
"background": "#bfbdb605"
}
},
{
"name": "Markup Code Inline",
"scope": [
"markup.raw.inline"
],
"settings": {
"background": "#bfbdb60f"
}
},
{
"name": "Markdown Separator",
"scope": [
"meta.separator"
],
"settings": {
"fontStyle": "bold",
"background": "#bfbdb60f",
"foreground": "#acb6bf8c"
}
},
{
"name": "Markup Blockquote",
"scope": [
"markup.quote"
],
"settings": {
"foreground": "#95e6cb",
"fontStyle": "italic"
}
},
{
"name": "Markup List Bullet",
"scope": [
"markup.list punctuation.definition.list.begin"
],
"settings": {
"foreground": "#ffb454"
}
},
{
"name": "Markup added",
"scope": [
"markup.inserted"
],
"settings": {
"foreground": "#7fd962"
}
},
{
"name": "Markup modified",
"scope": [
"markup.changed"
],
"settings": {
"foreground": "#73b8ff"
}
},
{
"name": "Markup removed",
"scope": [
"markup.deleted"
],
"settings": {
"foreground": "#f26d78"
}
},
{
"name": "Markup Strike",
"scope": [
"markup.strike"
],
"settings": {
"foreground": "#e6b673"
}
},
{
"name": "Markup Table",
"scope": [
"markup.table"
],
"settings": {
"background": "#bfbdb60f",
"foreground": "#39bae6"
}
},
{
"name": "Markup Raw Inline",
"scope": [
"text.html.markdown markup.inline.raw"
],
"settings": {
"foreground": "#f29668"
}
},
{
"name": "Markdown - Line Break",
"scope": [
"text.html.markdown meta.dummy.line-break"
],
"settings": {
"background": "#acb6bf8c",
"foreground": "#acb6bf8c"
}
},
{
"name": "Markdown - Raw Block Fenced",
"scope": [
"punctuation.definition.markdown"
],
"settings": {
"background": "#bfbdb6",
"foreground": "#acb6bf8c"
}
}
],
"semanticHighlighting": true,
"semanticTokenColors": {
"parameter.label": "#bfbdb6"
}
}

View File

@ -0,0 +1,847 @@
{
"type": "light",
"colors": {
"focusBorder": "#ffaa33b3",
"foreground": "#8a9199",
"widget.shadow": "#00000026",
"selection.background": "#035bd626",
"icon.foreground": "#8a9199",
"errorForeground": "#e65050",
"descriptionForeground": "#8a9199",
"textBlockQuote.background": "#f3f4f5",
"textLink.foreground": "#ffaa33",
"textLink.activeForeground": "#ffaa33",
"textPreformat.foreground": "#5c6166",
"button.background": "#ffaa33",
"button.foreground": "#804a00",
"button.hoverBackground": "#f9a52e",
"button.secondaryBackground": "#8a919933",
"button.secondaryForeground": "#5c6166",
"button.secondaryHoverBackground": "#8a919980",
"dropdown.background": "#fcfcfc",
"dropdown.foreground": "#8a9199",
"dropdown.border": "#8a919945",
"input.background": "#fcfcfc",
"input.border": "#8a919945",
"input.foreground": "#5c6166",
"input.placeholderForeground": "#8a919980",
"inputOption.activeBorder": "#f4a0284d",
"inputOption.activeBackground": "#ffaa3333",
"inputOption.activeForeground": "#f4a028",
"inputValidation.errorBackground": "#fcfcfc",
"inputValidation.errorBorder": "#e65050",
"inputValidation.infoBackground": "#f8f9fa",
"inputValidation.infoBorder": "#55b4d4",
"inputValidation.warningBackground": "#f8f9fa",
"inputValidation.warningBorder": "#f2ae49",
"scrollbar.shadow": "#6b7d8f00",
"scrollbarSlider.background": "#8a919966",
"scrollbarSlider.hoverBackground": "#8a919999",
"scrollbarSlider.activeBackground": "#8a9199b3",
"badge.background": "#ffaa3333",
"badge.foreground": "#f4a028",
"progressBar.background": "#ffaa33",
"list.activeSelectionBackground": "#56728f1f",
"list.activeSelectionForeground": "#5c6166",
"list.focusBackground": "#56728f1f",
"list.focusForeground": "#5c6166",
"list.focusOutline": "#56728f1f",
"list.highlightForeground": "#ffaa33",
"list.deemphasizedForeground": "#e65050",
"list.hoverBackground": "#56728f1f",
"list.inactiveSelectionBackground": "#6b7d8f1f",
"list.inactiveSelectionForeground": "#8a9199",
"list.invalidItemForeground": "#8a91994d",
"list.errorForeground": "#e65050",
"tree.indentGuidesStroke": "#8a919959",
"listFilterWidget.background": "#f3f4f5",
"listFilterWidget.outline": "#ffaa33",
"listFilterWidget.noMatchesOutline": "#e65050",
"list.filterMatchBackground": "#ddcaef73",
"list.filterMatchBorder": "#ecd9ff73",
"activityBar.background": "#f8f9fa",
"activityBar.foreground": "#8a9199cc",
"activityBar.inactiveForeground": "#8a919999",
"activityBar.border": "#f8f9fa",
"activityBar.activeBorder": "#ffaa33",
"activityBarBadge.background": "#ffaa33",
"activityBarBadge.foreground": "#f8f9fa",
"sideBar.background": "#f8f9fa",
"sideBar.border": "#f8f9fa",
"sideBarTitle.foreground": "#8a9199",
"sideBarSectionHeader.background": "#f8f9fa",
"sideBarSectionHeader.foreground": "#8a9199",
"sideBarSectionHeader.border": "#f8f9fa",
"minimap.background": "#f8f9fa",
"minimap.selectionHighlight": "#035bd626",
"minimap.errorHighlight": "#e65050",
"minimap.findMatchHighlight": "#ecd9ff",
"minimapGutter.addedBackground": "#6cbf43",
"minimapGutter.modifiedBackground": "#478acc",
"minimapGutter.deletedBackground": "#ff7383",
"editorGroup.border": "#6b7d8f1f",
"editorGroup.background": "#f3f4f5",
"editorGroupHeader.noTabsBackground": "#f8f9fa",
"editorGroupHeader.tabsBackground": "#f8f9fa",
"editorGroupHeader.tabsBorder": "#f8f9fa",
"tab.activeBackground": "#f8f9fa",
"tab.activeForeground": "#5c6166",
"tab.border": "#f8f9fa",
"tab.activeBorder": "#ffaa33",
"tab.unfocusedActiveBorder": "#8a9199",
"tab.inactiveBackground": "#f8f9fa",
"tab.inactiveForeground": "#8a9199",
"tab.unfocusedActiveForeground": "#8a9199",
"tab.unfocusedInactiveForeground": "#8a9199",
"editor.background": "#f8f9fa",
"editor.foreground": "#5c6166",
"editorLineNumber.foreground": "#8a919966",
"editorLineNumber.activeForeground": "#8a9199cc",
"editorCursor.foreground": "#ffaa33",
"editor.inactiveSelectionBackground": "#035bd612",
"editor.selectionBackground": "#035bd626",
"editor.selectionHighlightBackground": "#6cbf4326",
"editor.selectionHighlightBorder": "#6cbf4300",
"editor.wordHighlightBackground": "#478acc14",
"editor.wordHighlightStrongBackground": "#6cbf4314",
"editor.wordHighlightBorder": "#478acc80",
"editor.wordHighlightStrongBorder": "#6cbf4380",
"editor.findMatchBackground": "#ecd9ff",
"editor.findMatchBorder": "#ecd9ff",
"editor.findMatchHighlightBackground": "#ecd9ff73",
"editor.findMatchHighlightBorder": "#ddcaef73",
"editor.findRangeHighlightBackground": "#ecd9ff40",
"editor.rangeHighlightBackground": "#ecd9ff33",
"editor.lineHighlightBackground": "#8a91991a",
"editorLink.activeForeground": "#ffaa33",
"editorWhitespace.foreground": "#8a919966",
"editorIndentGuide.background": "#8a91992e",
"editorIndentGuide.activeBackground": "#8a919959",
"editorRuler.foreground": "#8a91992e",
"editorCodeLens.foreground": "#787b8099",
"editorBracketMatch.background": "#8a91994d",
"editorBracketMatch.border": "#8a91994d",
"editor.snippetTabstopHighlightBackground": "#6cbf4333",
"editorOverviewRuler.border": "#6b7d8f1f",
"editorOverviewRuler.modifiedForeground": "#478acc",
"editorOverviewRuler.addedForeground": "#6cbf43",
"editorOverviewRuler.deletedForeground": "#ff7383",
"editorOverviewRuler.errorForeground": "#e65050",
"editorOverviewRuler.warningForeground": "#ffaa33",
"editorOverviewRuler.bracketMatchForeground": "#8a9199b3",
"editorOverviewRuler.wordHighlightForeground": "#478acc66",
"editorOverviewRuler.wordHighlightStrongForeground": "#6cbf4366",
"editorOverviewRuler.findMatchForeground": "#ecd9ff",
"editorError.foreground": "#e65050",
"editorWarning.foreground": "#ffaa33",
"editorGutter.modifiedBackground": "#478acccc",
"editorGutter.addedBackground": "#6cbf43cc",
"editorGutter.deletedBackground": "#ff7383cc",
"diffEditor.insertedTextBackground": "#6cbf431f",
"diffEditor.removedTextBackground": "#ff73831f",
"diffEditor.diagonalFill": "#6b7d8f1f",
"editorWidget.background": "#f3f4f5",
"editorWidget.border": "#6b7d8f1f",
"editorHoverWidget.background": "#f3f4f5",
"editorHoverWidget.border": "#6b7d8f1f",
"editorSuggestWidget.background": "#f3f4f5",
"editorSuggestWidget.border": "#6b7d8f1f",
"editorSuggestWidget.highlightForeground": "#ffaa33",
"editorSuggestWidget.selectedBackground": "#56728f1f",
"debugExceptionWidget.border": "#6b7d8f1f",
"debugExceptionWidget.background": "#f3f4f5",
"editorMarkerNavigation.background": "#f3f4f5",
"peekView.border": "#56728f1f",
"peekViewTitle.background": "#56728f1f",
"peekViewTitleDescription.foreground": "#8a9199",
"peekViewTitleLabel.foreground": "#5c6166",
"peekViewEditor.background": "#f3f4f5",
"peekViewEditor.matchHighlightBackground": "#ecd9ff73",
"peekViewEditor.matchHighlightBorder": "#ddcaef73",
"peekViewResult.background": "#f3f4f5",
"peekViewResult.fileForeground": "#5c6166",
"peekViewResult.lineForeground": "#8a9199",
"peekViewResult.matchHighlightBackground": "#ecd9ff73",
"peekViewResult.selectionBackground": "#56728f1f",
"panel.background": "#f8f9fa",
"panel.border": "#6b7d8f1f",
"panelTitle.activeBorder": "#ffaa33",
"panelTitle.activeForeground": "#5c6166",
"panelTitle.inactiveForeground": "#8a9199",
"statusBar.background": "#f8f9fa",
"statusBar.foreground": "#8a9199",
"statusBar.border": "#f8f9fa",
"statusBar.debuggingBackground": "#ed9366",
"statusBar.debuggingForeground": "#fcfcfc",
"statusBar.noFolderBackground": "#f3f4f5",
"statusBarItem.activeBackground": "#8a919933",
"statusBarItem.hoverBackground": "#8a919933",
"statusBarItem.prominentBackground": "#6b7d8f1f",
"statusBarItem.prominentHoverBackground": "#00000030",
"statusBarItem.remoteBackground": "#ffaa33",
"statusBarItem.remoteForeground": "#804a00",
"titleBar.activeBackground": "#f8f9fa",
"titleBar.activeForeground": "#5c6166",
"titleBar.inactiveBackground": "#f8f9fa",
"titleBar.inactiveForeground": "#8a9199",
"titleBar.border": "#f8f9fa",
"extensionButton.prominentForeground": "#804a00",
"extensionButton.prominentBackground": "#ffaa33",
"extensionButton.prominentHoverBackground": "#f9a52e",
"pickerGroup.border": "#6b7d8f1f",
"pickerGroup.foreground": "#8a919980",
"debugToolBar.background": "#f3f4f5",
"debugIcon.breakpointForeground": "#ed9366",
"debugIcon.breakpointDisabledForeground": "#ed936680",
"debugConsoleInputIcon.foreground": "#ffaa33",
"welcomePage.tileBackground": "#f8f9fa",
"welcomePage.tileShadow": "#00000026",
"welcomePage.progress.background": "#8a91991a",
"welcomePage.buttonBackground": "#ffaa3366",
"walkThrough.embeddedEditorBackground": "#f3f4f5",
"gitDecoration.modifiedResourceForeground": "#478accb3",
"gitDecoration.deletedResourceForeground": "#ff7383b3",
"gitDecoration.untrackedResourceForeground": "#6cbf43b3",
"gitDecoration.ignoredResourceForeground": "#8a919980",
"gitDecoration.conflictingResourceForeground": "",
"gitDecoration.submoduleResourceForeground": "#a37accb3",
"settings.headerForeground": "#5c6166",
"settings.modifiedItemIndicator": "#478acc",
"keybindingLabel.background": "#8a91991a",
"keybindingLabel.foreground": "#5c6166",
"keybindingLabel.border": "#5c61661a",
"keybindingLabel.bottomBorder": "#5c61661a",
"terminal.background": "#f8f9fa",
"terminal.foreground": "#5c6166",
"terminal.ansiBlack": "#000000",
"terminal.ansiRed": "#ea6c6d",
"terminal.ansiGreen": "#6cbf43",
"terminal.ansiYellow": "#eca944",
"terminal.ansiBlue": "#3199e1",
"terminal.ansiMagenta": "#9e75c7",
"terminal.ansiCyan": "#46ba94",
"terminal.ansiWhite": "#c7c7c7",
"terminal.ansiBrightBlack": "#686868",
"terminal.ansiBrightRed": "#f07171",
"terminal.ansiBrightGreen": "#86b300",
"terminal.ansiBrightYellow": "#f2ae49",
"terminal.ansiBrightBlue": "#399ee6",
"terminal.ansiBrightMagenta": "#a37acc",
"terminal.ansiBrightCyan": "#4cbf99",
"terminal.ansiBrightWhite": "#d1d1d1"
},
"tokenColors": [
{
"settings": {
"background": "#f8f9fa",
"foreground": "#5c6166"
}
},
{
"name": "Comment",
"scope": [
"comment"
],
"settings": {
"fontStyle": "italic",
"foreground": "#787b8099"
}
},
{
"name": "String",
"scope": [
"string",
"constant.other.symbol"
],
"settings": {
"foreground": "#86b300"
}
},
{
"name": "Regular Expressions and Escape Characters",
"scope": [
"string.regexp",
"constant.character",
"constant.other"
],
"settings": {
"foreground": "#4cbf99"
}
},
{
"name": "Number",
"scope": [
"constant.numeric"
],
"settings": {
"foreground": "#a37acc"
}
},
{
"name": "Built-in constants",
"scope": [
"constant.language"
],
"settings": {
"foreground": "#a37acc"
}
},
{
"name": "Variable",
"scope": [
"variable",
"variable.parameter.function-call"
],
"settings": {
"foreground": "#5c6166"
}
},
{
"name": "Member Variable",
"scope": [
"variable.member"
],
"settings": {
"foreground": "#f07171"
}
},
{
"name": "Language variable",
"scope": [
"variable.language"
],
"settings": {
"fontStyle": "italic",
"foreground": "#55b4d4"
}
},
{
"name": "Storage",
"scope": [
"storage"
],
"settings": {
"foreground": "#fa8d3e"
}
},
{
"name": "Keyword",
"scope": [
"keyword"
],
"settings": {
"foreground": "#fa8d3e"
}
},
{
"name": "Operators",
"scope": [
"keyword.operator"
],
"settings": {
"foreground": "#ed9366"
}
},
{
"name": "Separators like ; or ,",
"scope": [
"punctuation.separator",
"punctuation.terminator"
],
"settings": {
"foreground": "#5c6166b3"
}
},
{
"name": "Punctuation",
"scope": [
"punctuation.section"
],
"settings": {
"foreground": "#5c6166"
}
},
{
"name": "Accessor",
"scope": [
"punctuation.accessor"
],
"settings": {
"foreground": "#ed9366"
}
},
{
"name": "JavaScript/TypeScript interpolation punctuation",
"scope": [
"punctuation.definition.template-expression"
],
"settings": {
"foreground": "#fa8d3e"
}
},
{
"name": "Ruby interpolation punctuation",
"scope": [
"punctuation.section.embedded"
],
"settings": {
"foreground": "#fa8d3e"
}
},
{
"name": "Interpolation text",
"scope": [
"meta.embedded"
],
"settings": {
"foreground": "#5c6166"
}
},
{
"name": "Types fixes",
"scope": [
"source.java storage.type",
"source.haskell storage.type",
"source.c storage.type"
],
"settings": {
"foreground": "#399ee6"
}
},
{
"name": "Inherited class type",
"scope": [
"entity.other.inherited-class"
],
"settings": {
"foreground": "#55b4d4"
}
},
{
"name": "Lambda arrow",
"scope": [
"storage.type.function"
],
"settings": {
"foreground": "#fa8d3e"
}
},
{
"name": "Java primitive variable types",
"scope": [
"source.java storage.type.primitive"
],
"settings": {
"foreground": "#55b4d4"
}
},
{
"name": "Function name",
"scope": [
"entity.name.function"
],
"settings": {
"foreground": "#f2ae49"
}
},
{
"name": "Function arguments",
"scope": [
"variable.parameter",
"meta.parameter"
],
"settings": {
"foreground": "#a37acc"
}
},
{
"name": "Function call",
"scope": [
"variable.function",
"variable.annotation",
"meta.function-call.generic",
"support.function.go"
],
"settings": {
"foreground": "#f2ae49"
}
},
{
"name": "Library function",
"scope": [
"support.function",
"support.macro"
],
"settings": {
"foreground": "#f07171"
}
},
{
"name": "Imports and packages",
"scope": [
"entity.name.import",
"entity.name.package"
],
"settings": {
"foreground": "#86b300"
}
},
{
"name": "Entity name",
"scope": [
"entity.name"
],
"settings": {
"foreground": "#399ee6"
}
},
{
"name": "Tag",
"scope": [
"entity.name.tag",
"meta.tag.sgml"
],
"settings": {
"foreground": "#55b4d4"
}
},
{
"name": "JSX Component",
"scope": [
"support.class.component"
],
"settings": {
"foreground": "#399ee6"
}
},
{
"name": "Tag start/end",
"scope": [
"punctuation.definition.tag.end",
"punctuation.definition.tag.begin",
"punctuation.definition.tag"
],
"settings": {
"foreground": "#55b4d480"
}
},
{
"name": "Tag attribute",
"scope": [
"entity.other.attribute-name"
],
"settings": {
"foreground": "#f2ae49"
}
},
{
"name": "Library constant",
"scope": [
"support.constant"
],
"settings": {
"fontStyle": "italic",
"foreground": "#ed9366"
}
},
{
"name": "Library class/type",
"scope": [
"support.type",
"support.class",
"source.go storage.type"
],
"settings": {
"foreground": "#55b4d4"
}
},
{
"name": "Decorators/annotation",
"scope": [
"meta.decorator variable.other",
"meta.decorator punctuation.decorator",
"storage.type.annotation"
],
"settings": {
"foreground": "#e6ba7e"
}
},
{
"name": "Invalid",
"scope": [
"invalid"
],
"settings": {
"foreground": "#e65050"
}
},
{
"name": "diff.header",
"scope": [
"meta.diff",
"meta.diff.header"
],
"settings": {
"foreground": "#c594c5"
}
},
{
"name": "Ruby class methods",
"scope": [
"source.ruby variable.other.readwrite"
],
"settings": {
"foreground": "#f2ae49"
}
},
{
"name": "CSS tag names",
"scope": [
"source.css entity.name.tag",
"source.sass entity.name.tag",
"source.scss entity.name.tag",
"source.less entity.name.tag",
"source.stylus entity.name.tag"
],
"settings": {
"foreground": "#399ee6"
}
},
{
"name": "CSS browser prefix",
"scope": [
"source.css support.type",
"source.sass support.type",
"source.scss support.type",
"source.less support.type",
"source.stylus support.type"
],
"settings": {
"foreground": "#787b8099"
}
},
{
"name": "CSS Properties",
"scope": [
"support.type.property-name"
],
"settings": {
"fontStyle": "normal",
"foreground": "#55b4d4"
}
},
{
"name": "Search Results Numbers",
"scope": [
"constant.numeric.line-number.find-in-files - match"
],
"settings": {
"foreground": "#787b8099"
}
},
{
"name": "Search Results Match Numbers",
"scope": [
"constant.numeric.line-number.match"
],
"settings": {
"foreground": "#fa8d3e"
}
},
{
"name": "Search Results Lines",
"scope": [
"entity.name.filename.find-in-files"
],
"settings": {
"foreground": "#86b300"
}
},
{
"scope": [
"message.error"
],
"settings": {
"foreground": "#e65050"
}
},
{
"name": "Markup heading",
"scope": [
"markup.heading",
"markup.heading entity.name"
],
"settings": {
"fontStyle": "bold",
"foreground": "#86b300"
}
},
{
"name": "Markup links",
"scope": [
"markup.underline.link",
"string.other.link"
],
"settings": {
"foreground": "#55b4d4"
}
},
{
"name": "Markup Italic",
"scope": [
"markup.italic"
],
"settings": {
"fontStyle": "italic",
"foreground": "#f07171"
}
},
{
"name": "Markup Bold",
"scope": [
"markup.bold"
],
"settings": {
"fontStyle": "bold",
"foreground": "#f07171"
}
},
{
"name": "Markup Bold/italic",
"scope": [
"markup.italic markup.bold",
"markup.bold markup.italic"
],
"settings": {
"fontStyle": "bold italic"
}
},
{
"name": "Markup Code",
"scope": [
"markup.raw"
],
"settings": {
"background": "#5c616605"
}
},
{
"name": "Markup Code Inline",
"scope": [
"markup.raw.inline"
],
"settings": {
"background": "#5c61660f"
}
},
{
"name": "Markdown Separator",
"scope": [
"meta.separator"
],
"settings": {
"fontStyle": "bold",
"background": "#5c61660f",
"foreground": "#787b8099"
}
},
{
"name": "Markup Blockquote",
"scope": [
"markup.quote"
],
"settings": {
"foreground": "#4cbf99",
"fontStyle": "italic"
}
},
{
"name": "Markup List Bullet",
"scope": [
"markup.list punctuation.definition.list.begin"
],
"settings": {
"foreground": "#f2ae49"
}
},
{
"name": "Markup added",
"scope": [
"markup.inserted"
],
"settings": {
"foreground": "#6cbf43"
}
},
{
"name": "Markup modified",
"scope": [
"markup.changed"
],
"settings": {
"foreground": "#478acc"
}
},
{
"name": "Markup removed",
"scope": [
"markup.deleted"
],
"settings": {
"foreground": "#ff7383"
}
},
{
"name": "Markup Strike",
"scope": [
"markup.strike"
],
"settings": {
"foreground": "#e6ba7e"
}
},
{
"name": "Markup Table",
"scope": [
"markup.table"
],
"settings": {
"background": "#5c61660f",
"foreground": "#55b4d4"
}
},
{
"name": "Markup Raw Inline",
"scope": [
"text.html.markdown markup.inline.raw"
],
"settings": {
"foreground": "#ed9366"
}
},
{
"name": "Markdown - Line Break",
"scope": [
"text.html.markdown meta.dummy.line-break"
],
"settings": {
"background": "#787b8099",
"foreground": "#787b8099"
}
},
{
"name": "Markdown - Raw Block Fenced",
"scope": [
"punctuation.definition.markdown"
],
"settings": {
"background": "#5c6166",
"foreground": "#787b8099"
}
}
],
"semanticHighlighting": true,
"semanticTokenColors": {
"parameter.label": "#5c6166"
}
}

View File

@ -0,0 +1,847 @@
{
"type": "dark",
"colors": {
"focusBorder": "#ffcc66b3",
"foreground": "#707a8c",
"widget.shadow": "#12151cb3",
"selection.background": "#409fff40",
"icon.foreground": "#707a8c",
"errorForeground": "#ff6666",
"descriptionForeground": "#707a8c",
"textBlockQuote.background": "#1c212b",
"textLink.foreground": "#ffcc66",
"textLink.activeForeground": "#ffcc66",
"textPreformat.foreground": "#cccac2",
"button.background": "#ffcc66",
"button.foreground": "#805500",
"button.hoverBackground": "#fac761",
"button.secondaryBackground": "#707a8c33",
"button.secondaryForeground": "#cccac2",
"button.secondaryHoverBackground": "#707a8c80",
"dropdown.background": "#242936",
"dropdown.foreground": "#707a8c",
"dropdown.border": "#707a8c45",
"input.background": "#242936",
"input.border": "#707a8c45",
"input.foreground": "#cccac2",
"input.placeholderForeground": "#707a8c80",
"inputOption.activeBorder": "#ffcc664d",
"inputOption.activeBackground": "#ffcc6633",
"inputOption.activeForeground": "#ffcc66",
"inputValidation.errorBackground": "#242936",
"inputValidation.errorBorder": "#ff6666",
"inputValidation.infoBackground": "#1f2430",
"inputValidation.infoBorder": "#5ccfe6",
"inputValidation.warningBackground": "#1f2430",
"inputValidation.warningBorder": "#ffd173",
"scrollbar.shadow": "#171b2400",
"scrollbarSlider.background": "#707a8c66",
"scrollbarSlider.hoverBackground": "#707a8c99",
"scrollbarSlider.activeBackground": "#707a8cb3",
"badge.background": "#ffcc6633",
"badge.foreground": "#ffcc66",
"progressBar.background": "#ffcc66",
"list.activeSelectionBackground": "#63759926",
"list.activeSelectionForeground": "#cccac2",
"list.focusBackground": "#63759926",
"list.focusForeground": "#cccac2",
"list.focusOutline": "#63759926",
"list.highlightForeground": "#ffcc66",
"list.deemphasizedForeground": "#ff6666",
"list.hoverBackground": "#63759926",
"list.inactiveSelectionBackground": "#69758c1f",
"list.inactiveSelectionForeground": "#707a8c",
"list.invalidItemForeground": "#707a8c4d",
"list.errorForeground": "#ff6666",
"tree.indentGuidesStroke": "#8a919959",
"listFilterWidget.background": "#1c212b",
"listFilterWidget.outline": "#ffcc66",
"listFilterWidget.noMatchesOutline": "#ff6666",
"list.filterMatchBackground": "#5c467266",
"list.filterMatchBorder": "#69538066",
"activityBar.background": "#1f2430",
"activityBar.foreground": "#707a8ccc",
"activityBar.inactiveForeground": "#707a8c99",
"activityBar.border": "#1f2430",
"activityBar.activeBorder": "#ffcc66",
"activityBarBadge.background": "#ffcc66",
"activityBarBadge.foreground": "#805500",
"sideBar.background": "#1f2430",
"sideBar.border": "#1f2430",
"sideBarTitle.foreground": "#707a8c",
"sideBarSectionHeader.background": "#1f2430",
"sideBarSectionHeader.foreground": "#707a8c",
"sideBarSectionHeader.border": "#1f2430",
"minimap.background": "#1f2430",
"minimap.selectionHighlight": "#409fff40",
"minimap.errorHighlight": "#ff6666",
"minimap.findMatchHighlight": "#695380",
"minimapGutter.addedBackground": "#87d96c",
"minimapGutter.modifiedBackground": "#80bfff",
"minimapGutter.deletedBackground": "#f27983",
"editorGroup.border": "#171b24",
"editorGroup.background": "#1c212b",
"editorGroupHeader.noTabsBackground": "#1f2430",
"editorGroupHeader.tabsBackground": "#1f2430",
"editorGroupHeader.tabsBorder": "#1f2430",
"tab.activeBackground": "#1f2430",
"tab.activeForeground": "#cccac2",
"tab.border": "#1f2430",
"tab.activeBorder": "#ffcc66",
"tab.unfocusedActiveBorder": "#707a8c",
"tab.inactiveBackground": "#1f2430",
"tab.inactiveForeground": "#707a8c",
"tab.unfocusedActiveForeground": "#707a8c",
"tab.unfocusedInactiveForeground": "#707a8c",
"editor.background": "#1f2430",
"editor.foreground": "#cccac2",
"editorLineNumber.foreground": "#8a919966",
"editorLineNumber.activeForeground": "#8a9199cc",
"editorCursor.foreground": "#ffcc66",
"editor.inactiveSelectionBackground": "#409fff21",
"editor.selectionBackground": "#409fff40",
"editor.selectionHighlightBackground": "#87d96c26",
"editor.selectionHighlightBorder": "#87d96c00",
"editor.wordHighlightBackground": "#80bfff14",
"editor.wordHighlightStrongBackground": "#87d96c14",
"editor.wordHighlightBorder": "#80bfff80",
"editor.wordHighlightStrongBorder": "#87d96c80",
"editor.findMatchBackground": "#695380",
"editor.findMatchBorder": "#695380",
"editor.findMatchHighlightBackground": "#69538066",
"editor.findMatchHighlightBorder": "#5c467266",
"editor.findRangeHighlightBackground": "#69538040",
"editor.rangeHighlightBackground": "#69538033",
"editor.lineHighlightBackground": "#1a1f29",
"editorLink.activeForeground": "#ffcc66",
"editorWhitespace.foreground": "#8a919966",
"editorIndentGuide.background": "#8a91992e",
"editorIndentGuide.activeBackground": "#8a919959",
"editorRuler.foreground": "#8a91992e",
"editorCodeLens.foreground": "#b8cfe680",
"editorBracketMatch.background": "#8a91994d",
"editorBracketMatch.border": "#8a91994d",
"editor.snippetTabstopHighlightBackground": "#87d96c33",
"editorOverviewRuler.border": "#171b24",
"editorOverviewRuler.modifiedForeground": "#80bfff",
"editorOverviewRuler.addedForeground": "#87d96c",
"editorOverviewRuler.deletedForeground": "#f27983",
"editorOverviewRuler.errorForeground": "#ff6666",
"editorOverviewRuler.warningForeground": "#ffcc66",
"editorOverviewRuler.bracketMatchForeground": "#8a9199b3",
"editorOverviewRuler.wordHighlightForeground": "#80bfff66",
"editorOverviewRuler.wordHighlightStrongForeground": "#87d96c66",
"editorOverviewRuler.findMatchForeground": "#695380",
"editorError.foreground": "#ff6666",
"editorWarning.foreground": "#ffcc66",
"editorGutter.modifiedBackground": "#80bfffcc",
"editorGutter.addedBackground": "#87d96ccc",
"editorGutter.deletedBackground": "#f27983cc",
"diffEditor.insertedTextBackground": "#87d96c1f",
"diffEditor.removedTextBackground": "#f279831f",
"diffEditor.diagonalFill": "#171b24",
"editorWidget.background": "#1c212b",
"editorWidget.border": "#171b24",
"editorHoverWidget.background": "#1c212b",
"editorHoverWidget.border": "#171b24",
"editorSuggestWidget.background": "#1c212b",
"editorSuggestWidget.border": "#171b24",
"editorSuggestWidget.highlightForeground": "#ffcc66",
"editorSuggestWidget.selectedBackground": "#63759926",
"debugExceptionWidget.border": "#171b24",
"debugExceptionWidget.background": "#1c212b",
"editorMarkerNavigation.background": "#1c212b",
"peekView.border": "#63759926",
"peekViewTitle.background": "#63759926",
"peekViewTitleDescription.foreground": "#707a8c",
"peekViewTitleLabel.foreground": "#cccac2",
"peekViewEditor.background": "#1c212b",
"peekViewEditor.matchHighlightBackground": "#69538066",
"peekViewEditor.matchHighlightBorder": "#5c467266",
"peekViewResult.background": "#1c212b",
"peekViewResult.fileForeground": "#cccac2",
"peekViewResult.lineForeground": "#707a8c",
"peekViewResult.matchHighlightBackground": "#69538066",
"peekViewResult.selectionBackground": "#63759926",
"panel.background": "#1f2430",
"panel.border": "#171b24",
"panelTitle.activeBorder": "#ffcc66",
"panelTitle.activeForeground": "#cccac2",
"panelTitle.inactiveForeground": "#707a8c",
"statusBar.background": "#1f2430",
"statusBar.foreground": "#707a8c",
"statusBar.border": "#1f2430",
"statusBar.debuggingBackground": "#f29e74",
"statusBar.debuggingForeground": "#242936",
"statusBar.noFolderBackground": "#1c212b",
"statusBarItem.activeBackground": "#707a8c33",
"statusBarItem.hoverBackground": "#707a8c33",
"statusBarItem.prominentBackground": "#171b24",
"statusBarItem.prominentHoverBackground": "#00000030",
"statusBarItem.remoteBackground": "#ffcc66",
"statusBarItem.remoteForeground": "#805500",
"titleBar.activeBackground": "#1f2430",
"titleBar.activeForeground": "#cccac2",
"titleBar.inactiveBackground": "#1f2430",
"titleBar.inactiveForeground": "#707a8c",
"titleBar.border": "#1f2430",
"extensionButton.prominentForeground": "#805500",
"extensionButton.prominentBackground": "#ffcc66",
"extensionButton.prominentHoverBackground": "#fac761",
"pickerGroup.border": "#171b24",
"pickerGroup.foreground": "#707a8c80",
"debugToolBar.background": "#1c212b",
"debugIcon.breakpointForeground": "#f29e74",
"debugIcon.breakpointDisabledForeground": "#f29e7480",
"debugConsoleInputIcon.foreground": "#ffcc66",
"welcomePage.tileBackground": "#1f2430",
"welcomePage.tileShadow": "#12151cb3",
"welcomePage.progress.background": "#1a1f29",
"welcomePage.buttonBackground": "#ffcc6666",
"walkThrough.embeddedEditorBackground": "#1c212b",
"gitDecoration.modifiedResourceForeground": "#80bfffb3",
"gitDecoration.deletedResourceForeground": "#f27983b3",
"gitDecoration.untrackedResourceForeground": "#87d96cb3",
"gitDecoration.ignoredResourceForeground": "#707a8c80",
"gitDecoration.conflictingResourceForeground": "",
"gitDecoration.submoduleResourceForeground": "#dfbfffb3",
"settings.headerForeground": "#cccac2",
"settings.modifiedItemIndicator": "#80bfff",
"keybindingLabel.background": "#707a8c1a",
"keybindingLabel.foreground": "#cccac2",
"keybindingLabel.border": "#cccac21a",
"keybindingLabel.bottomBorder": "#cccac21a",
"terminal.background": "#1f2430",
"terminal.foreground": "#cccac2",
"terminal.ansiBlack": "#171b24",
"terminal.ansiRed": "#ed8274",
"terminal.ansiGreen": "#87d96c",
"terminal.ansiYellow": "#facc6e",
"terminal.ansiBlue": "#6dcbfa",
"terminal.ansiMagenta": "#dabafa",
"terminal.ansiCyan": "#90e1c6",
"terminal.ansiWhite": "#c7c7c7",
"terminal.ansiBrightBlack": "#686868",
"terminal.ansiBrightRed": "#f28779",
"terminal.ansiBrightGreen": "#d5ff80",
"terminal.ansiBrightYellow": "#ffd173",
"terminal.ansiBrightBlue": "#73d0ff",
"terminal.ansiBrightMagenta": "#dfbfff",
"terminal.ansiBrightCyan": "#95e6cb",
"terminal.ansiBrightWhite": "#ffffff"
},
"tokenColors": [
{
"settings": {
"background": "#1f2430",
"foreground": "#cccac2"
}
},
{
"name": "Comment",
"scope": [
"comment"
],
"settings": {
"fontStyle": "italic",
"foreground": "#b8cfe680"
}
},
{
"name": "String",
"scope": [
"string",
"constant.other.symbol"
],
"settings": {
"foreground": "#d5ff80"
}
},
{
"name": "Regular Expressions and Escape Characters",
"scope": [
"string.regexp",
"constant.character",
"constant.other"
],
"settings": {
"foreground": "#95e6cb"
}
},
{
"name": "Number",
"scope": [
"constant.numeric"
],
"settings": {
"foreground": "#dfbfff"
}
},
{
"name": "Built-in constants",
"scope": [
"constant.language"
],
"settings": {
"foreground": "#dfbfff"
}
},
{
"name": "Variable",
"scope": [
"variable",
"variable.parameter.function-call"
],
"settings": {
"foreground": "#cccac2"
}
},
{
"name": "Member Variable",
"scope": [
"variable.member"
],
"settings": {
"foreground": "#f28779"
}
},
{
"name": "Language variable",
"scope": [
"variable.language"
],
"settings": {
"fontStyle": "italic",
"foreground": "#5ccfe6"
}
},
{
"name": "Storage",
"scope": [
"storage"
],
"settings": {
"foreground": "#ffad66"
}
},
{
"name": "Keyword",
"scope": [
"keyword"
],
"settings": {
"foreground": "#ffad66"
}
},
{
"name": "Operators",
"scope": [
"keyword.operator"
],
"settings": {
"foreground": "#f29e74"
}
},
{
"name": "Separators like ; or ,",
"scope": [
"punctuation.separator",
"punctuation.terminator"
],
"settings": {
"foreground": "#cccac2b3"
}
},
{
"name": "Punctuation",
"scope": [
"punctuation.section"
],
"settings": {
"foreground": "#cccac2"
}
},
{
"name": "Accessor",
"scope": [
"punctuation.accessor"
],
"settings": {
"foreground": "#f29e74"
}
},
{
"name": "JavaScript/TypeScript interpolation punctuation",
"scope": [
"punctuation.definition.template-expression"
],
"settings": {
"foreground": "#ffad66"
}
},
{
"name": "Ruby interpolation punctuation",
"scope": [
"punctuation.section.embedded"
],
"settings": {
"foreground": "#ffad66"
}
},
{
"name": "Interpolation text",
"scope": [
"meta.embedded"
],
"settings": {
"foreground": "#cccac2"
}
},
{
"name": "Types fixes",
"scope": [
"source.java storage.type",
"source.haskell storage.type",
"source.c storage.type"
],
"settings": {
"foreground": "#73d0ff"
}
},
{
"name": "Inherited class type",
"scope": [
"entity.other.inherited-class"
],
"settings": {
"foreground": "#5ccfe6"
}
},
{
"name": "Lambda arrow",
"scope": [
"storage.type.function"
],
"settings": {
"foreground": "#ffad66"
}
},
{
"name": "Java primitive variable types",
"scope": [
"source.java storage.type.primitive"
],
"settings": {
"foreground": "#5ccfe6"
}
},
{
"name": "Function name",
"scope": [
"entity.name.function"
],
"settings": {
"foreground": "#ffd173"
}
},
{
"name": "Function arguments",
"scope": [
"variable.parameter",
"meta.parameter"
],
"settings": {
"foreground": "#dfbfff"
}
},
{
"name": "Function call",
"scope": [
"variable.function",
"variable.annotation",
"meta.function-call.generic",
"support.function.go"
],
"settings": {
"foreground": "#ffd173"
}
},
{
"name": "Library function",
"scope": [
"support.function",
"support.macro"
],
"settings": {
"foreground": "#f28779"
}
},
{
"name": "Imports and packages",
"scope": [
"entity.name.import",
"entity.name.package"
],
"settings": {
"foreground": "#d5ff80"
}
},
{
"name": "Entity name",
"scope": [
"entity.name"
],
"settings": {
"foreground": "#73d0ff"
}
},
{
"name": "Tag",
"scope": [
"entity.name.tag",
"meta.tag.sgml"
],
"settings": {
"foreground": "#5ccfe6"
}
},
{
"name": "JSX Component",
"scope": [
"support.class.component"
],
"settings": {
"foreground": "#73d0ff"
}
},
{
"name": "Tag start/end",
"scope": [
"punctuation.definition.tag.end",
"punctuation.definition.tag.begin",
"punctuation.definition.tag"
],
"settings": {
"foreground": "#5ccfe680"
}
},
{
"name": "Tag attribute",
"scope": [
"entity.other.attribute-name"
],
"settings": {
"foreground": "#ffd173"
}
},
{
"name": "Library constant",
"scope": [
"support.constant"
],
"settings": {
"fontStyle": "italic",
"foreground": "#f29e74"
}
},
{
"name": "Library class/type",
"scope": [
"support.type",
"support.class",
"source.go storage.type"
],
"settings": {
"foreground": "#5ccfe6"
}
},
{
"name": "Decorators/annotation",
"scope": [
"meta.decorator variable.other",
"meta.decorator punctuation.decorator",
"storage.type.annotation"
],
"settings": {
"foreground": "#ffdfb3"
}
},
{
"name": "Invalid",
"scope": [
"invalid"
],
"settings": {
"foreground": "#ff6666"
}
},
{
"name": "diff.header",
"scope": [
"meta.diff",
"meta.diff.header"
],
"settings": {
"foreground": "#c594c5"
}
},
{
"name": "Ruby class methods",
"scope": [
"source.ruby variable.other.readwrite"
],
"settings": {
"foreground": "#ffd173"
}
},
{
"name": "CSS tag names",
"scope": [
"source.css entity.name.tag",
"source.sass entity.name.tag",
"source.scss entity.name.tag",
"source.less entity.name.tag",
"source.stylus entity.name.tag"
],
"settings": {
"foreground": "#73d0ff"
}
},
{
"name": "CSS browser prefix",
"scope": [
"source.css support.type",
"source.sass support.type",
"source.scss support.type",
"source.less support.type",
"source.stylus support.type"
],
"settings": {
"foreground": "#b8cfe680"
}
},
{
"name": "CSS Properties",
"scope": [
"support.type.property-name"
],
"settings": {
"fontStyle": "normal",
"foreground": "#5ccfe6"
}
},
{
"name": "Search Results Numbers",
"scope": [
"constant.numeric.line-number.find-in-files - match"
],
"settings": {
"foreground": "#b8cfe680"
}
},
{
"name": "Search Results Match Numbers",
"scope": [
"constant.numeric.line-number.match"
],
"settings": {
"foreground": "#ffad66"
}
},
{
"name": "Search Results Lines",
"scope": [
"entity.name.filename.find-in-files"
],
"settings": {
"foreground": "#d5ff80"
}
},
{
"scope": [
"message.error"
],
"settings": {
"foreground": "#ff6666"
}
},
{
"name": "Markup heading",
"scope": [
"markup.heading",
"markup.heading entity.name"
],
"settings": {
"fontStyle": "bold",
"foreground": "#d5ff80"
}
},
{
"name": "Markup links",
"scope": [
"markup.underline.link",
"string.other.link"
],
"settings": {
"foreground": "#5ccfe6"
}
},
{
"name": "Markup Italic",
"scope": [
"markup.italic"
],
"settings": {
"fontStyle": "italic",
"foreground": "#f28779"
}
},
{
"name": "Markup Bold",
"scope": [
"markup.bold"
],
"settings": {
"fontStyle": "bold",
"foreground": "#f28779"
}
},
{
"name": "Markup Bold/italic",
"scope": [
"markup.italic markup.bold",
"markup.bold markup.italic"
],
"settings": {
"fontStyle": "bold italic"
}
},
{
"name": "Markup Code",
"scope": [
"markup.raw"
],
"settings": {
"background": "#cccac205"
}
},
{
"name": "Markup Code Inline",
"scope": [
"markup.raw.inline"
],
"settings": {
"background": "#cccac20f"
}
},
{
"name": "Markdown Separator",
"scope": [
"meta.separator"
],
"settings": {
"fontStyle": "bold",
"background": "#cccac20f",
"foreground": "#b8cfe680"
}
},
{
"name": "Markup Blockquote",
"scope": [
"markup.quote"
],
"settings": {
"foreground": "#95e6cb",
"fontStyle": "italic"
}
},
{
"name": "Markup List Bullet",
"scope": [
"markup.list punctuation.definition.list.begin"
],
"settings": {
"foreground": "#ffd173"
}
},
{
"name": "Markup added",
"scope": [
"markup.inserted"
],
"settings": {
"foreground": "#87d96c"
}
},
{
"name": "Markup modified",
"scope": [
"markup.changed"
],
"settings": {
"foreground": "#80bfff"
}
},
{
"name": "Markup removed",
"scope": [
"markup.deleted"
],
"settings": {
"foreground": "#f27983"
}
},
{
"name": "Markup Strike",
"scope": [
"markup.strike"
],
"settings": {
"foreground": "#ffdfb3"
}
},
{
"name": "Markup Table",
"scope": [
"markup.table"
],
"settings": {
"background": "#cccac20f",
"foreground": "#5ccfe6"
}
},
{
"name": "Markup Raw Inline",
"scope": [
"text.html.markdown markup.inline.raw"
],
"settings": {
"foreground": "#f29e74"
}
},
{
"name": "Markdown - Line Break",
"scope": [
"text.html.markdown meta.dummy.line-break"
],
"settings": {
"background": "#b8cfe680",
"foreground": "#b8cfe680"
}
},
{
"name": "Markdown - Raw Block Fenced",
"scope": [
"punctuation.definition.markdown"
],
"settings": {
"background": "#cccac2",
"foreground": "#b8cfe680"
}
}
],
"semanticHighlighting": true,
"semanticTokenColors": {
"parameter.label": "#cccac2"
}
}

View File

@ -0,0 +1,21 @@
{
"name": "Ayu",
"author": "dempfi (Ike Ku)",
"themes": [
{
"name": "Ayu Light",
"file_name": "ayu-light.json",
"appearance": "light"
},
{
"name": "Ayu Mirage",
"file_name": "ayu-mirage.json",
"appearance": "dark"
},
{
"name": "Ayu Dark",
"file_name": "ayu-dark.json",
"appearance": "dark"
}
]
}

View File

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 Dracula Theme
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
{
"name": "Dracula",
"author": "Zeno Rocha",
"themes": [
{
"name": "Dracula",
"file_name": "dracula.json",
"appearance": "dark"
}
]
}

View File

@ -0,0 +1 @@
MIT/X11

View File

@ -0,0 +1,36 @@
{
"name": "Gruvbox",
"author": "morhetz",
"themes": [
{
"name": "Gruvbox Dark Hard",
"file_name": "gruvbox-dark-hard.json",
"appearance": "dark"
},
{
"name": "Gruvbox Dark Medium",
"file_name": "gruvbox-dark-medium.json",
"appearance": "dark"
},
{
"name": "Gruvbox Dark Soft",
"file_name": "gruvbox-dark-soft.json",
"appearance": "dark"
},
{
"name": "Gruvbox Light Hard",
"file_name": "gruvbox-light-hard.json",
"appearance": "light"
},
{
"name": "Gruvbox Light Medium",
"file_name": "gruvbox-light-medium.json",
"appearance": "light"
},
{
"name": "Gruvbox Light Soft",
"file_name": "gruvbox-light-soft.json",
"appearance": "light"
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018 Sarah Drasner
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,16 @@
{
"name": "Night Owl",
"author": "Sarah Drasner (sdras)",
"themes": [
{
"name": "Night Owl",
"file_name": "night-owl.json",
"appearance": "dark"
},
{
"name": "Night Owl Light",
"file_name": "night-owl-light.json",
"appearance": "light"
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
MIT License
Copyright (c) 2018 Liviu Schera
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,61 @@
{
"name": "Notctis",
"author": "Liviu Schera (liviuschera)",
"themes": [
{
"name": "Noctis Azureus",
"file_name": "azureus.json",
"appearance": "dark"
},
{
"name": "Noctis Bordo",
"file_name": "bordo.json",
"appearance": "dark"
},
{
"name": "Noctus Hibernus",
"file_name": "hibernus.json",
"appearance": "light"
},
{
"name": "Noctis Lilac",
"file_name": "lilac.json",
"appearance": "dark"
},
{
"name": "Noctis Lux",
"file_name": "lux.json",
"appearance": "light"
},
{
"name": "Noctis Minimus",
"file_name": "minimus.json",
"appearance": "dark"
},
{
"name": "Noctis",
"file_name": "noctis.json",
"appearance": "dark"
},
{
"name": "Noctis Obscuro",
"file_name": "obscuro.json",
"appearance": "dark"
},
{
"name": "Noctis Sereno",
"file_name": "obscuro.json",
"appearance": "dark"
},
{
"name": "Noctis Uva",
"file_name": "uva.json",
"appearance": "dark"
},
{
"name": "Noctis Viola",
"file_name": "viola.json",
"appearance": "dark"
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,21 @@
MIT License (MIT)
Copyright (c) 2016-present Sven Greb <development@svengreb.de> (https://www.svengreb.de)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,11 @@
{
"name": "Nord",
"author": "Sven Greb (svengreb)",
"themes": [
{
"name": "Nord",
"file_name": "nord.json",
"appearance": "dark"
}
]
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
Copyright (c) 2017-present Olaolu Olawuyi
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,21 @@
{
"name": "Palenight",
"author": "Olaolu Olawuyi (whizkydee)",
"themes": [
{
"name": "Palenight",
"file_name": "palenight.json",
"appearance": "dark"
},
{
"name": "Palenight Operator",
"file_name": "palenight-operator.json",
"appearance": "dark"
},
{
"name": "Palenight (Mild Contrast)",
"file_name": "palenight-mild-contrast.json",
"appearance": "dark"
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Rosé Pine
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,21 @@
{
"name": "Rose Pine",
"author": "Rosé Pine",
"themes": [
{
"name": "Rose Pine",
"file_name": "rose-pine.json",
"appearance": "dark"
},
{
"name": "Rose Moon",
"file_name": "rose-pine-moon.json",
"appearance": "dark"
},
{
"name": "Rose Pine Dawn",
"file_name": "rose-pine-dawn.json",
"appearance": "light"
}
]
}

View File

@ -0,0 +1,680 @@
{
"name": "Rosé Pine Dawn",
"type": "light",
"colors": {
"activityBar.activeBorder": "#575279",
"activityBar.background": "#faf4ed",
"activityBar.dropBorder": "#f2e9e1",
"activityBar.foreground": "#575279",
"activityBar.inactiveForeground": "#797593",
"activityBarBadge.background": "#d7827e",
"activityBarBadge.foreground": "#faf4ed",
"badge.background": "#d7827e",
"badge.foreground": "#faf4ed",
"banner.background": "#fffaf3",
"banner.foreground": "#575279",
"banner.iconForeground": "#797593",
"breadcrumb.activeSelectionForeground": "#d7827e",
"breadcrumb.background": "#faf4ed",
"breadcrumb.focusForeground": "#797593",
"breadcrumb.foreground": "#9893a5",
"breadcrumbPicker.background": "#fffaf3",
"button.background": "#d7827e",
"button.foreground": "#faf4ed",
"button.hoverBackground": "#d7827ee6",
"button.secondaryBackground": "#fffaf3",
"button.secondaryForeground": "#575279",
"button.secondaryHoverBackground": "#f2e9e1",
"charts.blue": "#56949f",
"charts.foreground": "#575279",
"charts.green": "#286983",
"charts.lines": "#797593",
"charts.orange": "#d7827e",
"charts.purple": "#907aa9",
"charts.red": "#b4637a",
"charts.yellow": "#ea9d34",
"checkbox.background": "#fffaf3",
"checkbox.border": "#6e6a8614",
"checkbox.foreground": "#575279",
"debugExceptionWidget.background": "#fffaf3",
"debugExceptionWidget.border": "#6e6a8614",
"debugIcon.breakpointCurrentStackframeForeground": "#797593",
"debugIcon.breakpointDisabledForeground": "#797593",
"debugIcon.breakpointForeground": "#797593",
"debugIcon.breakpointStackframeForeground": "#797593",
"debugIcon.breakpointUnverifiedForeground": "#797593",
"debugIcon.continueForeground": "#797593",
"debugIcon.disconnectForeground": "#797593",
"debugIcon.pauseForeground": "#797593",
"debugIcon.restartForeground": "#797593",
"debugIcon.startForeground": "#797593",
"debugIcon.stepBackForeground": "#797593",
"debugIcon.stepIntoForeground": "#797593",
"debugIcon.stepOutForeground": "#797593",
"debugIcon.stepOverForeground": "#797593",
"debugIcon.stopForeground": "#b4637a",
"debugToolBar.background": "#fffaf3",
"debugToolBar.border": "#f2e9e1",
"descriptionForeground": "#797593",
"diffEditor.border": "#f2e9e1",
"diffEditor.diagonalFill": "#6e6a8626",
"diffEditor.insertedLineBackground": "#56949f26",
"diffEditor.insertedTextBackground": "#56949f26",
"diffEditor.removedLineBackground": "#b4637a26",
"diffEditor.removedTextBackground": "#b4637a26",
"diffEditorOverview.insertedForeground": "#56949f80",
"diffEditorOverview.removedForeground": "#b4637a80",
"dropdown.background": "#fffaf3",
"dropdown.border": "#6e6a8614",
"dropdown.foreground": "#575279",
"dropdown.listBackground": "#fffaf3",
"editor.background": "#faf4ed",
"editor.findMatchBackground": "#6e6a8626",
"editor.findMatchHighlightBackground": "#6e6a8626",
"editor.findRangeHighlightBackground": "#6e6a8626",
"editor.findRangeHighlightBorder": "#000000",
"editor.focusedStackFrameHighlightBackground": "#6e6a8614",
"editor.foldBackground": "#fffaf3",
"editor.foreground": "#575279",
"editor.hoverHighlightBackground": "#000000",
"editor.inactiveSelectionBackground": "#6e6a860d",
"editor.inlineValuesBackground": "#000000",
"editor.inlineValuesForeground": "#797593",
"editor.lineHighlightBackground": "#6e6a860d",
"editor.lineHighlightBorder": "#000000",
"editor.linkedEditingBackground": "#fffaf3",
"editor.rangeHighlightBackground": "#6e6a860d",
"editor.selectionBackground": "#6e6a8614",
"editor.selectionForeground": "#575279",
"editor.selectionHighlightBackground": "#6e6a8614",
"editor.selectionHighlightBorder": "#faf4ed",
"editor.snippetFinalTabstopHighlightBackground": "#6e6a8614",
"editor.snippetFinalTabstopHighlightBorder": "#fffaf3",
"editor.snippetTabstopHighlightBackground": "#6e6a8614",
"editor.snippetTabstopHighlightBorder": "#fffaf3",
"editor.stackFrameHighlightBackground": "#6e6a8614",
"editor.symbolHighlightBackground": "#6e6a8614",
"editor.symbolHighlightBorder": "#000000",
"editor.wordHighlightBackground": "#6e6a8614",
"editor.wordHighlightBorder": "#000000",
"editor.wordHighlightStrongBackground": "#6e6a8614",
"editor.wordHighlightStrongBorder": "#6e6a8614",
"editorBracketHighlight.foreground1": "#b4637a80",
"editorBracketHighlight.foreground2": "#28698380",
"editorBracketHighlight.foreground3": "#ea9d3480",
"editorBracketHighlight.foreground4": "#56949f80",
"editorBracketHighlight.foreground5": "#d7827e80",
"editorBracketHighlight.foreground6": "#907aa980",
"editorBracketMatch.background": "#000000",
"editorBracketMatch.border": "#797593",
"editorBracketPairGuide.activeBackground1": "#286983",
"editorBracketPairGuide.activeBackground2": "#d7827e",
"editorBracketPairGuide.activeBackground3": "#907aa9",
"editorBracketPairGuide.activeBackground4": "#56949f",
"editorBracketPairGuide.activeBackground5": "#ea9d34",
"editorBracketPairGuide.activeBackground6": "#b4637a",
"editorBracketPairGuide.background1": "#28698380",
"editorBracketPairGuide.background2": "#d7827e80",
"editorBracketPairGuide.background3": "#907aa980",
"editorBracketPairGuide.background4": "#56949f80",
"editorBracketPairGuide.background5": "#ea9d3480",
"editorBracketPairGuide.background6": "#b4637a80",
"editorCodeLens.foreground": "#d7827e",
"editorCursor.background": "#575279",
"editorCursor.foreground": "#9893a5",
"editorError.border": "#000000",
"editorError.foreground": "#b4637a",
"editorGhostText.foreground": "#797593",
"editorGroup.border": "#000000",
"editorGroup.dropBackground": "#fffaf3",
"editorGroup.emptyBackground": "#000000",
"editorGroup.focusedEmptyBorder": "#000000",
"editorGroupHeader.noTabsBackground": "#000000",
"editorGroupHeader.tabsBackground": "#000000",
"editorGroupHeader.tabsBorder": "#000000",
"editorGutter.addedBackground": "#56949f",
"editorGutter.background": "#faf4ed",
"editorGutter.commentRangeForeground": "#797593",
"editorGutter.deletedBackground": "#b4637a",
"editorGutter.foldingControlForeground": "#907aa9",
"editorGutter.modifiedBackground": "#d7827e",
"editorHint.border": "#000000",
"editorHint.foreground": "#797593",
"editorHoverWidget.background": "#fffaf3",
"editorHoverWidget.border": "#9893a580",
"editorHoverWidget.foreground": "#797593",
"editorHoverWidget.highlightForeground": "#575279",
"editorHoverWidget.statusBarBackground": "#000000",
"editorIndentGuide.activeBackground": "#9893a5",
"editorIndentGuide.background": "#6e6a8626",
"editorInfo.border": "#f2e9e1",
"editorInfo.foreground": "#56949f",
"editorInlayHint.background": "#f2e9e1",
"editorInlayHint.foreground": "#797593",
"editorInlayHint.parameterBackground": "#f2e9e1",
"editorInlayHint.parameterForeground": "#907aa9",
"editorInlayHint.typeBackground": "#f2e9e1",
"editorInlayHint.typeForeground": "#56949f",
"editorLightBulb.foreground": "#286983",
"editorLightBulbAutoFix.foreground": "#d7827e",
"editorLineNumber.activeForeground": "#575279",
"editorLineNumber.foreground": "#797593",
"editorLink.activeForeground": "#d7827e",
"editorMarkerNavigation.background": "#fffaf3",
"editorMarkerNavigationError.background": "#fffaf3",
"editorMarkerNavigationInfo.background": "#fffaf3",
"editorMarkerNavigationWarning.background": "#fffaf3",
"editorOverviewRuler.addedForeground": "#56949f80",
"editorOverviewRuler.background": "#faf4ed",
"editorOverviewRuler.border": "#6e6a8626",
"editorOverviewRuler.bracketMatchForeground": "#797593",
"editorOverviewRuler.commonContentForeground": "#6e6a860d",
"editorOverviewRuler.currentContentForeground": "#6e6a8614",
"editorOverviewRuler.deletedForeground": "#b4637a80",
"editorOverviewRuler.errorForeground": "#b4637a80",
"editorOverviewRuler.findMatchForeground": "#6e6a8626",
"editorOverviewRuler.incomingContentForeground": "#907aa980",
"editorOverviewRuler.infoForeground": "#56949f80",
"editorOverviewRuler.modifiedForeground": "#d7827e80",
"editorOverviewRuler.rangeHighlightForeground": "#6e6a8626",
"editorOverviewRuler.selectionHighlightForeground": "#6e6a8626",
"editorOverviewRuler.warningForeground": "#ea9d3480",
"editorOverviewRuler.wordHighlightForeground": "#6e6a8614",
"editorOverviewRuler.wordHighlightStrongForeground": "#6e6a8626",
"editorPane.background": "#000000",
"editorRuler.foreground": "#6e6a8626",
"editorSuggestWidget.background": "#fffaf3",
"editorSuggestWidget.border": "#000000",
"editorSuggestWidget.focusHighlightForeground": "#d7827e",
"editorSuggestWidget.foreground": "#797593",
"editorSuggestWidget.highlightForeground": "#d7827e",
"editorSuggestWidget.selectedBackground": "#6e6a8614",
"editorSuggestWidget.selectedForeground": "#575279",
"editorSuggestWidget.selectedIconForeground": "#575279",
"editorUnnecessaryCode.border": "#000000",
"editorUnnecessaryCode.opacity": "#57527980",
"editorWarning.border": "#000000",
"editorWarning.foreground": "#ea9d34",
"editorWhitespace.foreground": "#9893a5",
"editorWidget.background": "#fffaf3",
"editorWidget.border": "#f2e9e1",
"editorWidget.foreground": "#797593",
"editorWidget.resizeBorder": "#9893a5",
"errorForeground": "#b4637a",
"extensionBadge.remoteBackground": "#907aa9",
"extensionBadge.remoteForeground": "#faf4ed",
"extensionButton.prominentBackground": "#d7827e",
"extensionButton.prominentForeground": "#faf4ed",
"extensionButton.prominentHoverBackground": "#d7827ee6",
"extensionIcon.preReleaseForeground": "#286983",
"extensionIcon.starForeground": "#d7827e",
"extensionIcon.verifiedForeground": "#907aa9",
"focusBorder": "#6e6a8614",
"foreground": "#575279",
"gitDecoration.addedResourceForeground": "#56949f",
"gitDecoration.conflictingResourceForeground": "#b4637a",
"gitDecoration.deletedResourceForeground": "#797593",
"gitDecoration.ignoredResourceForeground": "#9893a5",
"gitDecoration.modifiedResourceForeground": "#d7827e",
"gitDecoration.renamedResourceForeground": "#286983",
"gitDecoration.stageDeletedResourceForeground": "#b4637a",
"gitDecoration.stageModifiedResourceForeground": "#907aa9",
"gitDecoration.submoduleResourceForeground": "#ea9d34",
"gitDecoration.untrackedResourceForeground": "#ea9d34",
"icon.foreground": "#797593",
"input.background": "#f2e9e180",
"input.border": "#6e6a8614",
"input.foreground": "#575279",
"input.placeholderForeground": "#797593",
"inputOption.activeBackground": "#d7827e26",
"inputOption.activeForeground": "#d7827e",
"inputValidation.errorBackground": "#fffaf3",
"inputValidation.errorBorder": "#6e6a8626",
"inputValidation.errorForeground": "#b4637a",
"inputValidation.infoBackground": "#fffaf3",
"inputValidation.infoBorder": "#6e6a8626",
"inputValidation.infoForeground": "#56949f",
"inputValidation.warningBackground": "#fffaf3",
"inputValidation.warningBorder": "#6e6a8626",
"inputValidation.warningForeground": "#56949f80",
"keybindingLabel.background": "#f2e9e1",
"keybindingLabel.border": "#6e6a8626",
"keybindingLabel.bottomBorder": "#6e6a8626",
"keybindingLabel.foreground": "#907aa9",
"keybindingTable.headerBackground": "#f2e9e1",
"keybindingTable.rowsBackground": "#fffaf3",
"list.activeSelectionBackground": "#6e6a8614",
"list.activeSelectionForeground": "#575279",
"list.deemphasizedForeground": "#797593",
"list.dropBackground": "#fffaf3",
"list.errorForeground": "#b4637a",
"list.filterMatchBackground": "#fffaf3",
"list.filterMatchBorder": "#d7827e",
"list.focusBackground": "#6e6a8626",
"list.focusForeground": "#575279",
"list.focusOutline": "#6e6a8614",
"list.highlightForeground": "#d7827e",
"list.hoverBackground": "#6e6a860d",
"list.hoverForeground": "#575279",
"list.inactiveFocusBackground": "#6e6a860d",
"list.inactiveSelectionBackground": "#fffaf3",
"list.inactiveSelectionForeground": "#575279",
"list.invalidItemForeground": "#b4637a",
"list.warningForeground": "#ea9d34",
"listFilterWidget.background": "#fffaf3",
"listFilterWidget.noMatchesOutline": "#b4637a",
"listFilterWidget.outline": "#f2e9e1",
"menu.background": "#fffaf3",
"menu.border": "#6e6a860d",
"menu.foreground": "#575279",
"menu.selectionBackground": "#6e6a8614",
"menu.selectionBorder": "#f2e9e1",
"menu.selectionForeground": "#575279",
"menu.separatorBackground": "#6e6a8626",
"menubar.selectionBackground": "#6e6a8614",
"menubar.selectionBorder": "#6e6a860d",
"menubar.selectionForeground": "#575279",
"merge.border": "#f2e9e1",
"merge.commonContentBackground": "#6e6a8614",
"merge.commonHeaderBackground": "#6e6a8614",
"merge.currentContentBackground": "#ea9d3480",
"merge.currentHeaderBackground": "#ea9d3480",
"merge.incomingContentBackground": "#56949f80",
"merge.incomingHeaderBackground": "#56949f80",
"minimap.background": "#fffaf3",
"minimap.errorHighlight": "#b4637a80",
"minimap.findMatchHighlight": "#6e6a8614",
"minimap.selectionHighlight": "#6e6a8614",
"minimap.warningHighlight": "#ea9d3480",
"minimapGutter.addedBackground": "#56949f",
"minimapGutter.deletedBackground": "#b4637a",
"minimapGutter.modifiedBackground": "#d7827e",
"minimapSlider.activeBackground": "#6e6a8626",
"minimapSlider.background": "#6e6a8614",
"minimapSlider.hoverBackground": "#6e6a8614",
"notebook.cellBorderColor": "#56949f80",
"notebook.cellEditorBackground": "#fffaf3",
"notebook.cellHoverBackground": "#f2e9e180",
"notebook.focusedCellBackground": "#6e6a860d",
"notebook.focusedCellBorder": "#56949f",
"notebook.outputContainerBackgroundColor": "#6e6a860d",
"notificationCenter.border": "#6e6a8614",
"notificationCenterHeader.background": "#fffaf3",
"notificationCenterHeader.foreground": "#797593",
"notificationLink.foreground": "#907aa9",
"notifications.background": "#fffaf3",
"notifications.border": "#6e6a8614",
"notifications.foreground": "#575279",
"notificationsErrorIcon.foreground": "#b4637a",
"notificationsInfoIcon.foreground": "#56949f",
"notificationsWarningIcon.foreground": "#ea9d34",
"notificationToast.border": "#6e6a8614",
"panel.background": "#fffaf3",
"panel.border": "#000000",
"panel.dropBorder": "#f2e9e1",
"panelInput.border": "#fffaf3",
"panelSection.dropBackground": "#6e6a8614",
"panelSectionHeader.background": "#fffaf3",
"panelSectionHeader.foreground": "#575279",
"panelTitle.activeBorder": "#6e6a8626",
"panelTitle.activeForeground": "#575279",
"panelTitle.inactiveForeground": "#797593",
"peekView.border": "#f2e9e1",
"peekViewEditor.background": "#fffaf3",
"peekViewEditor.matchHighlightBackground": "#6e6a8626",
"peekViewResult.background": "#fffaf3",
"peekViewResult.fileForeground": "#797593",
"peekViewResult.lineForeground": "#797593",
"peekViewResult.matchHighlightBackground": "#6e6a8626",
"peekViewResult.selectionBackground": "#6e6a8614",
"peekViewResult.selectionForeground": "#575279",
"peekViewTitle.background": "#f2e9e1",
"peekViewTitleDescription.foreground": "#797593",
"pickerGroup.border": "#6e6a8626",
"pickerGroup.foreground": "#907aa9",
"ports.iconRunningProcessForeground": "#d7827e",
"problemsErrorIcon.foreground": "#b4637a",
"problemsInfoIcon.foreground": "#56949f",
"problemsWarningIcon.foreground": "#ea9d34",
"progressBar.background": "#d7827e",
"quickInput.background": "#fffaf3",
"quickInput.foreground": "#797593",
"quickInputList.focusBackground": "#6e6a8614",
"quickInputList.focusForeground": "#575279",
"quickInputList.focusIconForeground": "#575279",
"scrollbar.shadow": "#fffaf34d",
"scrollbarSlider.activeBackground": "#28698380",
"scrollbarSlider.background": "#6e6a8614",
"scrollbarSlider.hoverBackground": "#6e6a8626",
"searchEditor.findMatchBackground": "#6e6a8614",
"selection.background": "#6e6a8626",
"settings.focusedRowBackground": "#fffaf3",
"settings.headerForeground": "#575279",
"settings.modifiedItemIndicator": "#d7827e",
"settings.focusedRowBorder": "#6e6a8614",
"settings.rowHoverBackground": "#fffaf3",
"sideBar.background": "#faf4ed",
"sideBar.dropBackground": "#fffaf3",
"sideBar.foreground": "#797593",
"sideBarSectionHeader.background": "#000000",
"sideBarSectionHeader.border": "#6e6a8614",
"statusBar.background": "#faf4ed",
"statusBar.debuggingBackground": "#907aa9",
"statusBar.debuggingForeground": "#faf4ed",
"statusBar.foreground": "#797593",
"statusBar.noFolderBackground": "#faf4ed",
"statusBar.noFolderForeground": "#797593",
"statusBarItem.activeBackground": "#6e6a8626",
"statusBarItem.hoverBackground": "#6e6a8614",
"statusBarItem.prominentBackground": "#f2e9e1",
"statusBarItem.prominentForeground": "#575279",
"statusBarItem.prominentHoverBackground": "#6e6a8614",
"statusBarItem.remoteBackground": "#faf4ed",
"statusBarItem.remoteForeground": "#ea9d34",
"statusBarItem.errorBackground": "#faf4ed",
"statusBarItem.errorForeground": "#b4637a",
"symbolIcon.arrayForeground": "#797593",
"symbolIcon.classForeground": "#797593",
"symbolIcon.colorForeground": "#797593",
"symbolIcon.constantForeground": "#797593",
"symbolIcon.constructorForeground": "#797593",
"symbolIcon.enumeratorForeground": "#797593",
"symbolIcon.enumeratorMemberForeground": "#797593",
"symbolIcon.eventForeground": "#797593",
"symbolIcon.fieldForeground": "#797593",
"symbolIcon.fileForeground": "#797593",
"symbolIcon.folderForeground": "#797593",
"symbolIcon.functionForeground": "#797593",
"symbolIcon.interfaceForeground": "#797593",
"symbolIcon.keyForeground": "#797593",
"symbolIcon.keywordForeground": "#797593",
"symbolIcon.methodForeground": "#797593",
"symbolIcon.moduleForeground": "#797593",
"symbolIcon.namespaceForeground": "#797593",
"symbolIcon.nullForeground": "#797593",
"symbolIcon.numberForeground": "#797593",
"symbolIcon.objectForeground": "#797593",
"symbolIcon.operatorForeground": "#797593",
"symbolIcon.packageForeground": "#797593",
"symbolIcon.propertyForeground": "#797593",
"symbolIcon.referenceForeground": "#797593",
"symbolIcon.snippetForeground": "#797593",
"symbolIcon.stringForeground": "#797593",
"symbolIcon.structForeground": "#797593",
"symbolIcon.textForeground": "#797593",
"symbolIcon.typeParameterForeground": "#797593",
"symbolIcon.unitForeground": "#797593",
"symbolIcon.variableForeground": "#797593",
"tab.activeBackground": "#6e6a860d",
"tab.activeForeground": "#575279",
"tab.activeModifiedBorder": "#56949f",
"tab.border": "#000000",
"tab.hoverBackground": "#6e6a8614",
"tab.inactiveBackground": "#000000",
"tab.inactiveForeground": "#797593",
"tab.inactiveModifiedBorder": "#56949f80",
"tab.lastPinnedBorder": "#9893a5",
"tab.unfocusedActiveBackground": "#000000",
"tab.unfocusedHoverBackground": "#000000",
"tab.unfocusedInactiveBackground": "#000000",
"tab.unfocusedInactiveModifiedBorder": "#56949f80",
"terminal.ansiBlack": "#f2e9e1",
"terminal.ansiBlue": "#56949f",
"terminal.ansiBrightBlack": "#797593",
"terminal.ansiBrightBlue": "#56949f",
"terminal.ansiBrightCyan": "#d7827e",
"terminal.ansiBrightGreen": "#286983",
"terminal.ansiBrightMagenta": "#907aa9",
"terminal.ansiBrightRed": "#b4637a",
"terminal.ansiBrightWhite": "#575279",
"terminal.ansiBrightYellow": "#ea9d34",
"terminal.ansiCyan": "#d7827e",
"terminal.ansiGreen": "#286983",
"terminal.ansiMagenta": "#907aa9",
"terminal.ansiRed": "#b4637a",
"terminal.ansiWhite": "#575279",
"terminal.ansiYellow": "#ea9d34",
"terminal.dropBackground": "#6e6a8614",
"terminal.foreground": "#575279",
"terminal.selectionBackground": "#6e6a8614",
"terminal.tab.activeBorder": "#575279",
"terminalCursor.background": "#575279",
"terminalCursor.foreground": "#9893a5",
"textBlockQuote.background": "#fffaf3",
"textBlockQuote.border": "#6e6a8614",
"textCodeBlock.background": "#fffaf3",
"textLink.activeForeground": "#907aa9e6",
"textLink.foreground": "#907aa9",
"textPreformat.foreground": "#ea9d34",
"textSeparator.foreground": "#797593",
"titleBar.activeBackground": "#faf4ed",
"titleBar.activeForeground": "#797593",
"titleBar.inactiveBackground": "#fffaf3",
"titleBar.inactiveForeground": "#797593",
"toolbar.activeBackground": "#6e6a8626",
"toolbar.hoverBackground": "#6e6a8614",
"tree.indentGuidesStroke": "#797593",
"walkThrough.embeddedEditorBackground": "#faf4ed",
"welcomePage.background": "#faf4ed",
"welcomePage.buttonBackground": "#fffaf3",
"welcomePage.buttonHoverBackground": "#f2e9e1",
"widget.shadow": "#fffaf34d",
"window.activeBorder": "#fffaf3",
"window.inactiveBorder": "#fffaf3"
},
"tokenColors": [
{
"scope": ["comment"],
"settings": {
"foreground": "#9893a5",
"fontStyle": "italic"
}
},
{
"scope": ["constant"],
"settings": {
"foreground": "#286983"
}
},
{
"scope": ["constant.numeric", "constant.language"],
"settings": {
"foreground": "#d7827e"
}
},
{
"scope": ["entity.name"],
"settings": {
"foreground": "#d7827e"
}
},
{
"scope": [
"entity.name.section",
"entity.name.tag",
"entity.name.namespace",
"entity.name.type"
],
"settings": {
"foreground": "#56949f"
}
},
{
"scope": ["entity.other.attribute-name", "entity.other.inherited-class"],
"settings": {
"foreground": "#907aa9",
"fontStyle": "italic"
}
},
{
"scope": ["invalid"],
"settings": {
"foreground": "#b4637a"
}
},
{
"scope": ["invalid.deprecated"],
"settings": {
"foreground": "#797593"
}
},
{
"scope": ["keyword"],
"settings": {
"foreground": "#286983"
}
},
{
"scope": ["markup.inserted.diff"],
"settings": {
"foreground": "#56949f"
}
},
{
"scope": ["markup.deleted.diff"],
"settings": {
"foreground": "#b4637a"
}
},
{
"scope": "markup.heading",
"settings": {
"fontStyle": "bold"
}
},
{
"scope": "markup.bold.markdown",
"settings": {
"fontStyle": "bold"
}
},
{
"scope": "markup.italic.markdown",
"settings": {
"fontStyle": "italic"
}
},
{
"scope": ["meta.diff.range"],
"settings": {
"foreground": "#907aa9"
}
},
{
"scope": ["meta.tag", "meta.brace"],
"settings": {
"foreground": "#575279"
}
},
{
"scope": ["meta.import", "meta.export"],
"settings": {
"foreground": "#286983"
}
},
{
"scope": "meta.directive.vue",
"settings": {
"foreground": "#907aa9",
"fontStyle": "italic"
}
},
{
"scope": "meta.property-name.css",
"settings": {
"foreground": "#56949f"
}
},
{
"scope": "meta.property-value.css",
"settings": {
"foreground": "#ea9d34"
}
},
{
"scope": "meta.tag.other.html",
"settings": {
"foreground": "#797593"
}
},
{
"scope": ["punctuation"],
"settings": {
"foreground": "#797593"
}
},
{
"scope": ["punctuation.accessor"],
"settings": {
"foreground": "#286983"
}
},
{
"scope": ["punctuation.definition.string"],
"settings": {
"foreground": "#ea9d34"
}
},
{
"scope": ["punctuation.definition.tag"],
"settings": {
"foreground": "#9893a5"
}
},
{
"scope": ["storage.type", "storage.modifier"],
"settings": {
"foreground": "#286983"
}
},
{
"scope": ["string"],
"settings": {
"foreground": "#ea9d34"
}
},
{
"scope": ["support"],
"settings": {
"foreground": "#56949f"
}
},
{
"scope": ["support.constant"],
"settings": {
"foreground": "#ea9d34"
}
},
{
"scope": ["support.function"],
"settings": {
"foreground": "#b4637a",
"fontStyle": "italic"
}
},
{
"scope": ["variable"],
"settings": {
"foreground": "#d7827e",
"fontStyle": "italic"
}
},
{
"scope": [
"variable.other",
"variable.language",
"variable.function",
"variable.argument"
],
"settings": {
"foreground": "#575279"
}
},
{
"scope": ["variable.parameter"],
"settings": {
"foreground": "#907aa9"
}
}
]
}

View File

@ -0,0 +1,680 @@
{
"name": "Rosé Pine Moon",
"type": "dark",
"colors": {
"activityBar.activeBorder": "#e0def4",
"activityBar.background": "#232136",
"activityBar.dropBorder": "#393552",
"activityBar.foreground": "#e0def4",
"activityBar.inactiveForeground": "#908caa",
"activityBarBadge.background": "#ea9a97",
"activityBarBadge.foreground": "#232136",
"badge.background": "#ea9a97",
"badge.foreground": "#232136",
"banner.background": "#2a273f",
"banner.foreground": "#e0def4",
"banner.iconForeground": "#908caa",
"breadcrumb.activeSelectionForeground": "#ea9a97",
"breadcrumb.background": "#232136",
"breadcrumb.focusForeground": "#908caa",
"breadcrumb.foreground": "#6e6a86",
"breadcrumbPicker.background": "#2a273f",
"button.background": "#ea9a97",
"button.foreground": "#232136",
"button.hoverBackground": "#ea9a97e6",
"button.secondaryBackground": "#2a273f",
"button.secondaryForeground": "#e0def4",
"button.secondaryHoverBackground": "#393552",
"charts.blue": "#9ccfd8",
"charts.foreground": "#e0def4",
"charts.green": "#3e8fb0",
"charts.lines": "#908caa",
"charts.orange": "#ea9a97",
"charts.purple": "#c4a7e7",
"charts.red": "#eb6f92",
"charts.yellow": "#f6c177",
"checkbox.background": "#2a273f",
"checkbox.border": "#817c9c26",
"checkbox.foreground": "#e0def4",
"debugExceptionWidget.background": "#2a273f",
"debugExceptionWidget.border": "#817c9c26",
"debugIcon.breakpointCurrentStackframeForeground": "#908caa",
"debugIcon.breakpointDisabledForeground": "#908caa",
"debugIcon.breakpointForeground": "#908caa",
"debugIcon.breakpointStackframeForeground": "#908caa",
"debugIcon.breakpointUnverifiedForeground": "#908caa",
"debugIcon.continueForeground": "#908caa",
"debugIcon.disconnectForeground": "#908caa",
"debugIcon.pauseForeground": "#908caa",
"debugIcon.restartForeground": "#908caa",
"debugIcon.startForeground": "#908caa",
"debugIcon.stepBackForeground": "#908caa",
"debugIcon.stepIntoForeground": "#908caa",
"debugIcon.stepOutForeground": "#908caa",
"debugIcon.stepOverForeground": "#908caa",
"debugIcon.stopForeground": "#eb6f92",
"debugToolBar.background": "#2a273f",
"debugToolBar.border": "#393552",
"descriptionForeground": "#908caa",
"diffEditor.border": "#393552",
"diffEditor.diagonalFill": "#817c9c4d",
"diffEditor.insertedLineBackground": "#9ccfd826",
"diffEditor.insertedTextBackground": "#9ccfd826",
"diffEditor.removedLineBackground": "#eb6f9226",
"diffEditor.removedTextBackground": "#eb6f9226",
"diffEditorOverview.insertedForeground": "#9ccfd880",
"diffEditorOverview.removedForeground": "#eb6f9280",
"dropdown.background": "#2a273f",
"dropdown.border": "#817c9c26",
"dropdown.foreground": "#e0def4",
"dropdown.listBackground": "#2a273f",
"editor.background": "#232136",
"editor.findMatchBackground": "#817c9c4d",
"editor.findMatchHighlightBackground": "#817c9c4d",
"editor.findRangeHighlightBackground": "#817c9c4d",
"editor.findRangeHighlightBorder": "#000000",
"editor.focusedStackFrameHighlightBackground": "#817c9c26",
"editor.foldBackground": "#2a273f",
"editor.foreground": "#e0def4",
"editor.hoverHighlightBackground": "#000000",
"editor.inactiveSelectionBackground": "#817c9c14",
"editor.inlineValuesBackground": "#000000",
"editor.inlineValuesForeground": "#908caa",
"editor.lineHighlightBackground": "#817c9c14",
"editor.lineHighlightBorder": "#000000",
"editor.linkedEditingBackground": "#2a273f",
"editor.rangeHighlightBackground": "#817c9c14",
"editor.selectionBackground": "#817c9c26",
"editor.selectionForeground": "#e0def4",
"editor.selectionHighlightBackground": "#817c9c26",
"editor.selectionHighlightBorder": "#232136",
"editor.snippetFinalTabstopHighlightBackground": "#817c9c26",
"editor.snippetFinalTabstopHighlightBorder": "#2a273f",
"editor.snippetTabstopHighlightBackground": "#817c9c26",
"editor.snippetTabstopHighlightBorder": "#2a273f",
"editor.stackFrameHighlightBackground": "#817c9c26",
"editor.symbolHighlightBackground": "#817c9c26",
"editor.symbolHighlightBorder": "#000000",
"editor.wordHighlightBackground": "#817c9c26",
"editor.wordHighlightBorder": "#000000",
"editor.wordHighlightStrongBackground": "#817c9c26",
"editor.wordHighlightStrongBorder": "#817c9c26",
"editorBracketHighlight.foreground1": "#eb6f9280",
"editorBracketHighlight.foreground2": "#3e8fb080",
"editorBracketHighlight.foreground3": "#f6c17780",
"editorBracketHighlight.foreground4": "#9ccfd880",
"editorBracketHighlight.foreground5": "#ea9a9780",
"editorBracketHighlight.foreground6": "#c4a7e780",
"editorBracketMatch.background": "#000000",
"editorBracketMatch.border": "#908caa",
"editorBracketPairGuide.activeBackground1": "#3e8fb0",
"editorBracketPairGuide.activeBackground2": "#ea9a97",
"editorBracketPairGuide.activeBackground3": "#c4a7e7",
"editorBracketPairGuide.activeBackground4": "#9ccfd8",
"editorBracketPairGuide.activeBackground5": "#f6c177",
"editorBracketPairGuide.activeBackground6": "#eb6f92",
"editorBracketPairGuide.background1": "#3e8fb080",
"editorBracketPairGuide.background2": "#ea9a9780",
"editorBracketPairGuide.background3": "#c4a7e780",
"editorBracketPairGuide.background4": "#9ccfd880",
"editorBracketPairGuide.background5": "#f6c17780",
"editorBracketPairGuide.background6": "#eb6f9280",
"editorCodeLens.foreground": "#ea9a97",
"editorCursor.background": "#e0def4",
"editorCursor.foreground": "#6e6a86",
"editorError.border": "#000000",
"editorError.foreground": "#eb6f92",
"editorGhostText.foreground": "#908caa",
"editorGroup.border": "#000000",
"editorGroup.dropBackground": "#2a273f",
"editorGroup.emptyBackground": "#000000",
"editorGroup.focusedEmptyBorder": "#000000",
"editorGroupHeader.noTabsBackground": "#000000",
"editorGroupHeader.tabsBackground": "#000000",
"editorGroupHeader.tabsBorder": "#000000",
"editorGutter.addedBackground": "#9ccfd8",
"editorGutter.background": "#232136",
"editorGutter.commentRangeForeground": "#908caa",
"editorGutter.deletedBackground": "#eb6f92",
"editorGutter.foldingControlForeground": "#c4a7e7",
"editorGutter.modifiedBackground": "#ea9a97",
"editorHint.border": "#000000",
"editorHint.foreground": "#908caa",
"editorHoverWidget.background": "#2a273f",
"editorHoverWidget.border": "#6e6a8680",
"editorHoverWidget.foreground": "#908caa",
"editorHoverWidget.highlightForeground": "#e0def4",
"editorHoverWidget.statusBarBackground": "#000000",
"editorIndentGuide.activeBackground": "#6e6a86",
"editorIndentGuide.background": "#817c9c4d",
"editorInfo.border": "#393552",
"editorInfo.foreground": "#9ccfd8",
"editorInlayHint.background": "#393552",
"editorInlayHint.foreground": "#908caa",
"editorInlayHint.parameterBackground": "#393552",
"editorInlayHint.parameterForeground": "#c4a7e7",
"editorInlayHint.typeBackground": "#393552",
"editorInlayHint.typeForeground": "#9ccfd8",
"editorLightBulb.foreground": "#3e8fb0",
"editorLightBulbAutoFix.foreground": "#ea9a97",
"editorLineNumber.activeForeground": "#e0def4",
"editorLineNumber.foreground": "#908caa",
"editorLink.activeForeground": "#ea9a97",
"editorMarkerNavigation.background": "#2a273f",
"editorMarkerNavigationError.background": "#2a273f",
"editorMarkerNavigationInfo.background": "#2a273f",
"editorMarkerNavigationWarning.background": "#2a273f",
"editorOverviewRuler.addedForeground": "#9ccfd880",
"editorOverviewRuler.background": "#232136",
"editorOverviewRuler.border": "#817c9c4d",
"editorOverviewRuler.bracketMatchForeground": "#908caa",
"editorOverviewRuler.commonContentForeground": "#817c9c14",
"editorOverviewRuler.currentContentForeground": "#817c9c26",
"editorOverviewRuler.deletedForeground": "#eb6f9280",
"editorOverviewRuler.errorForeground": "#eb6f9280",
"editorOverviewRuler.findMatchForeground": "#817c9c4d",
"editorOverviewRuler.incomingContentForeground": "#c4a7e780",
"editorOverviewRuler.infoForeground": "#9ccfd880",
"editorOverviewRuler.modifiedForeground": "#ea9a9780",
"editorOverviewRuler.rangeHighlightForeground": "#817c9c4d",
"editorOverviewRuler.selectionHighlightForeground": "#817c9c4d",
"editorOverviewRuler.warningForeground": "#f6c17780",
"editorOverviewRuler.wordHighlightForeground": "#817c9c26",
"editorOverviewRuler.wordHighlightStrongForeground": "#817c9c4d",
"editorPane.background": "#000000",
"editorRuler.foreground": "#817c9c4d",
"editorSuggestWidget.background": "#2a273f",
"editorSuggestWidget.border": "#000000",
"editorSuggestWidget.focusHighlightForeground": "#ea9a97",
"editorSuggestWidget.foreground": "#908caa",
"editorSuggestWidget.highlightForeground": "#ea9a97",
"editorSuggestWidget.selectedBackground": "#817c9c26",
"editorSuggestWidget.selectedForeground": "#e0def4",
"editorSuggestWidget.selectedIconForeground": "#e0def4",
"editorUnnecessaryCode.border": "#000000",
"editorUnnecessaryCode.opacity": "#e0def480",
"editorWarning.border": "#000000",
"editorWarning.foreground": "#f6c177",
"editorWhitespace.foreground": "#6e6a86",
"editorWidget.background": "#2a273f",
"editorWidget.border": "#393552",
"editorWidget.foreground": "#908caa",
"editorWidget.resizeBorder": "#6e6a86",
"errorForeground": "#eb6f92",
"extensionBadge.remoteBackground": "#c4a7e7",
"extensionBadge.remoteForeground": "#232136",
"extensionButton.prominentBackground": "#ea9a97",
"extensionButton.prominentForeground": "#232136",
"extensionButton.prominentHoverBackground": "#ea9a97e6",
"extensionIcon.preReleaseForeground": "#3e8fb0",
"extensionIcon.starForeground": "#ea9a97",
"extensionIcon.verifiedForeground": "#c4a7e7",
"focusBorder": "#817c9c26",
"foreground": "#e0def4",
"gitDecoration.addedResourceForeground": "#9ccfd8",
"gitDecoration.conflictingResourceForeground": "#eb6f92",
"gitDecoration.deletedResourceForeground": "#908caa",
"gitDecoration.ignoredResourceForeground": "#6e6a86",
"gitDecoration.modifiedResourceForeground": "#ea9a97",
"gitDecoration.renamedResourceForeground": "#3e8fb0",
"gitDecoration.stageDeletedResourceForeground": "#eb6f92",
"gitDecoration.stageModifiedResourceForeground": "#c4a7e7",
"gitDecoration.submoduleResourceForeground": "#f6c177",
"gitDecoration.untrackedResourceForeground": "#f6c177",
"icon.foreground": "#908caa",
"input.background": "#39355280",
"input.border": "#817c9c26",
"input.foreground": "#e0def4",
"input.placeholderForeground": "#908caa",
"inputOption.activeBackground": "#ea9a9726",
"inputOption.activeForeground": "#ea9a97",
"inputValidation.errorBackground": "#2a273f",
"inputValidation.errorBorder": "#817c9c4d",
"inputValidation.errorForeground": "#eb6f92",
"inputValidation.infoBackground": "#2a273f",
"inputValidation.infoBorder": "#817c9c4d",
"inputValidation.infoForeground": "#9ccfd8",
"inputValidation.warningBackground": "#2a273f",
"inputValidation.warningBorder": "#817c9c4d",
"inputValidation.warningForeground": "#9ccfd880",
"keybindingLabel.background": "#393552",
"keybindingLabel.border": "#817c9c4d",
"keybindingLabel.bottomBorder": "#817c9c4d",
"keybindingLabel.foreground": "#c4a7e7",
"keybindingTable.headerBackground": "#393552",
"keybindingTable.rowsBackground": "#2a273f",
"list.activeSelectionBackground": "#817c9c26",
"list.activeSelectionForeground": "#e0def4",
"list.deemphasizedForeground": "#908caa",
"list.dropBackground": "#2a273f",
"list.errorForeground": "#eb6f92",
"list.filterMatchBackground": "#2a273f",
"list.filterMatchBorder": "#ea9a97",
"list.focusBackground": "#817c9c4d",
"list.focusForeground": "#e0def4",
"list.focusOutline": "#817c9c26",
"list.highlightForeground": "#ea9a97",
"list.hoverBackground": "#817c9c14",
"list.hoverForeground": "#e0def4",
"list.inactiveFocusBackground": "#817c9c14",
"list.inactiveSelectionBackground": "#2a273f",
"list.inactiveSelectionForeground": "#e0def4",
"list.invalidItemForeground": "#eb6f92",
"list.warningForeground": "#f6c177",
"listFilterWidget.background": "#2a273f",
"listFilterWidget.noMatchesOutline": "#eb6f92",
"listFilterWidget.outline": "#393552",
"menu.background": "#2a273f",
"menu.border": "#817c9c14",
"menu.foreground": "#e0def4",
"menu.selectionBackground": "#817c9c26",
"menu.selectionBorder": "#393552",
"menu.selectionForeground": "#e0def4",
"menu.separatorBackground": "#817c9c4d",
"menubar.selectionBackground": "#817c9c26",
"menubar.selectionBorder": "#817c9c14",
"menubar.selectionForeground": "#e0def4",
"merge.border": "#393552",
"merge.commonContentBackground": "#817c9c26",
"merge.commonHeaderBackground": "#817c9c26",
"merge.currentContentBackground": "#f6c17780",
"merge.currentHeaderBackground": "#f6c17780",
"merge.incomingContentBackground": "#9ccfd880",
"merge.incomingHeaderBackground": "#9ccfd880",
"minimap.background": "#2a273f",
"minimap.errorHighlight": "#eb6f9280",
"minimap.findMatchHighlight": "#817c9c26",
"minimap.selectionHighlight": "#817c9c26",
"minimap.warningHighlight": "#f6c17780",
"minimapGutter.addedBackground": "#9ccfd8",
"minimapGutter.deletedBackground": "#eb6f92",
"minimapGutter.modifiedBackground": "#ea9a97",
"minimapSlider.activeBackground": "#817c9c4d",
"minimapSlider.background": "#817c9c26",
"minimapSlider.hoverBackground": "#817c9c26",
"notebook.cellBorderColor": "#9ccfd880",
"notebook.cellEditorBackground": "#2a273f",
"notebook.cellHoverBackground": "#39355280",
"notebook.focusedCellBackground": "#817c9c14",
"notebook.focusedCellBorder": "#9ccfd8",
"notebook.outputContainerBackgroundColor": "#817c9c14",
"notificationCenter.border": "#817c9c26",
"notificationCenterHeader.background": "#2a273f",
"notificationCenterHeader.foreground": "#908caa",
"notificationLink.foreground": "#c4a7e7",
"notifications.background": "#2a273f",
"notifications.border": "#817c9c26",
"notifications.foreground": "#e0def4",
"notificationsErrorIcon.foreground": "#eb6f92",
"notificationsInfoIcon.foreground": "#9ccfd8",
"notificationsWarningIcon.foreground": "#f6c177",
"notificationToast.border": "#817c9c26",
"panel.background": "#2a273f",
"panel.border": "#000000",
"panel.dropBorder": "#393552",
"panelInput.border": "#2a273f",
"panelSection.dropBackground": "#817c9c26",
"panelSectionHeader.background": "#2a273f",
"panelSectionHeader.foreground": "#e0def4",
"panelTitle.activeBorder": "#817c9c4d",
"panelTitle.activeForeground": "#e0def4",
"panelTitle.inactiveForeground": "#908caa",
"peekView.border": "#393552",
"peekViewEditor.background": "#2a273f",
"peekViewEditor.matchHighlightBackground": "#817c9c4d",
"peekViewResult.background": "#2a273f",
"peekViewResult.fileForeground": "#908caa",
"peekViewResult.lineForeground": "#908caa",
"peekViewResult.matchHighlightBackground": "#817c9c4d",
"peekViewResult.selectionBackground": "#817c9c26",
"peekViewResult.selectionForeground": "#e0def4",
"peekViewTitle.background": "#393552",
"peekViewTitleDescription.foreground": "#908caa",
"pickerGroup.border": "#817c9c4d",
"pickerGroup.foreground": "#c4a7e7",
"ports.iconRunningProcessForeground": "#ea9a97",
"problemsErrorIcon.foreground": "#eb6f92",
"problemsInfoIcon.foreground": "#9ccfd8",
"problemsWarningIcon.foreground": "#f6c177",
"progressBar.background": "#ea9a97",
"quickInput.background": "#2a273f",
"quickInput.foreground": "#908caa",
"quickInputList.focusBackground": "#817c9c26",
"quickInputList.focusForeground": "#e0def4",
"quickInputList.focusIconForeground": "#e0def4",
"scrollbar.shadow": "#2a273f4d",
"scrollbarSlider.activeBackground": "#3e8fb080",
"scrollbarSlider.background": "#817c9c26",
"scrollbarSlider.hoverBackground": "#817c9c4d",
"searchEditor.findMatchBackground": "#817c9c26",
"selection.background": "#817c9c4d",
"settings.focusedRowBackground": "#2a273f",
"settings.headerForeground": "#e0def4",
"settings.modifiedItemIndicator": "#ea9a97",
"settings.focusedRowBorder": "#817c9c26",
"settings.rowHoverBackground": "#2a273f",
"sideBar.background": "#232136",
"sideBar.dropBackground": "#2a273f",
"sideBar.foreground": "#908caa",
"sideBarSectionHeader.background": "#000000",
"sideBarSectionHeader.border": "#817c9c26",
"statusBar.background": "#232136",
"statusBar.debuggingBackground": "#c4a7e7",
"statusBar.debuggingForeground": "#232136",
"statusBar.foreground": "#908caa",
"statusBar.noFolderBackground": "#232136",
"statusBar.noFolderForeground": "#908caa",
"statusBarItem.activeBackground": "#817c9c4d",
"statusBarItem.hoverBackground": "#817c9c26",
"statusBarItem.prominentBackground": "#393552",
"statusBarItem.prominentForeground": "#e0def4",
"statusBarItem.prominentHoverBackground": "#817c9c26",
"statusBarItem.remoteBackground": "#232136",
"statusBarItem.remoteForeground": "#f6c177",
"statusBarItem.errorBackground": "#232136",
"statusBarItem.errorForeground": "#eb6f92",
"symbolIcon.arrayForeground": "#908caa",
"symbolIcon.classForeground": "#908caa",
"symbolIcon.colorForeground": "#908caa",
"symbolIcon.constantForeground": "#908caa",
"symbolIcon.constructorForeground": "#908caa",
"symbolIcon.enumeratorForeground": "#908caa",
"symbolIcon.enumeratorMemberForeground": "#908caa",
"symbolIcon.eventForeground": "#908caa",
"symbolIcon.fieldForeground": "#908caa",
"symbolIcon.fileForeground": "#908caa",
"symbolIcon.folderForeground": "#908caa",
"symbolIcon.functionForeground": "#908caa",
"symbolIcon.interfaceForeground": "#908caa",
"symbolIcon.keyForeground": "#908caa",
"symbolIcon.keywordForeground": "#908caa",
"symbolIcon.methodForeground": "#908caa",
"symbolIcon.moduleForeground": "#908caa",
"symbolIcon.namespaceForeground": "#908caa",
"symbolIcon.nullForeground": "#908caa",
"symbolIcon.numberForeground": "#908caa",
"symbolIcon.objectForeground": "#908caa",
"symbolIcon.operatorForeground": "#908caa",
"symbolIcon.packageForeground": "#908caa",
"symbolIcon.propertyForeground": "#908caa",
"symbolIcon.referenceForeground": "#908caa",
"symbolIcon.snippetForeground": "#908caa",
"symbolIcon.stringForeground": "#908caa",
"symbolIcon.structForeground": "#908caa",
"symbolIcon.textForeground": "#908caa",
"symbolIcon.typeParameterForeground": "#908caa",
"symbolIcon.unitForeground": "#908caa",
"symbolIcon.variableForeground": "#908caa",
"tab.activeBackground": "#817c9c14",
"tab.activeForeground": "#e0def4",
"tab.activeModifiedBorder": "#9ccfd8",
"tab.border": "#000000",
"tab.hoverBackground": "#817c9c26",
"tab.inactiveBackground": "#000000",
"tab.inactiveForeground": "#908caa",
"tab.inactiveModifiedBorder": "#9ccfd880",
"tab.lastPinnedBorder": "#6e6a86",
"tab.unfocusedActiveBackground": "#000000",
"tab.unfocusedHoverBackground": "#000000",
"tab.unfocusedInactiveBackground": "#000000",
"tab.unfocusedInactiveModifiedBorder": "#9ccfd880",
"terminal.ansiBlack": "#393552",
"terminal.ansiBlue": "#9ccfd8",
"terminal.ansiBrightBlack": "#908caa",
"terminal.ansiBrightBlue": "#9ccfd8",
"terminal.ansiBrightCyan": "#ea9a97",
"terminal.ansiBrightGreen": "#3e8fb0",
"terminal.ansiBrightMagenta": "#c4a7e7",
"terminal.ansiBrightRed": "#eb6f92",
"terminal.ansiBrightWhite": "#e0def4",
"terminal.ansiBrightYellow": "#f6c177",
"terminal.ansiCyan": "#ea9a97",
"terminal.ansiGreen": "#3e8fb0",
"terminal.ansiMagenta": "#c4a7e7",
"terminal.ansiRed": "#eb6f92",
"terminal.ansiWhite": "#e0def4",
"terminal.ansiYellow": "#f6c177",
"terminal.dropBackground": "#817c9c26",
"terminal.foreground": "#e0def4",
"terminal.selectionBackground": "#817c9c26",
"terminal.tab.activeBorder": "#e0def4",
"terminalCursor.background": "#e0def4",
"terminalCursor.foreground": "#6e6a86",
"textBlockQuote.background": "#2a273f",
"textBlockQuote.border": "#817c9c26",
"textCodeBlock.background": "#2a273f",
"textLink.activeForeground": "#c4a7e7e6",
"textLink.foreground": "#c4a7e7",
"textPreformat.foreground": "#f6c177",
"textSeparator.foreground": "#908caa",
"titleBar.activeBackground": "#232136",
"titleBar.activeForeground": "#908caa",
"titleBar.inactiveBackground": "#2a273f",
"titleBar.inactiveForeground": "#908caa",
"toolbar.activeBackground": "#817c9c4d",
"toolbar.hoverBackground": "#817c9c26",
"tree.indentGuidesStroke": "#908caa",
"walkThrough.embeddedEditorBackground": "#232136",
"welcomePage.background": "#232136",
"welcomePage.buttonBackground": "#2a273f",
"welcomePage.buttonHoverBackground": "#393552",
"widget.shadow": "#2a273f4d",
"window.activeBorder": "#2a273f",
"window.inactiveBorder": "#2a273f"
},
"tokenColors": [
{
"scope": ["comment"],
"settings": {
"foreground": "#6e6a86",
"fontStyle": "italic"
}
},
{
"scope": ["constant"],
"settings": {
"foreground": "#3e8fb0"
}
},
{
"scope": ["constant.numeric", "constant.language"],
"settings": {
"foreground": "#ea9a97"
}
},
{
"scope": ["entity.name"],
"settings": {
"foreground": "#ea9a97"
}
},
{
"scope": [
"entity.name.section",
"entity.name.tag",
"entity.name.namespace",
"entity.name.type"
],
"settings": {
"foreground": "#9ccfd8"
}
},
{
"scope": ["entity.other.attribute-name", "entity.other.inherited-class"],
"settings": {
"foreground": "#c4a7e7",
"fontStyle": "italic"
}
},
{
"scope": ["invalid"],
"settings": {
"foreground": "#eb6f92"
}
},
{
"scope": ["invalid.deprecated"],
"settings": {
"foreground": "#908caa"
}
},
{
"scope": ["keyword"],
"settings": {
"foreground": "#3e8fb0"
}
},
{
"scope": ["markup.inserted.diff"],
"settings": {
"foreground": "#9ccfd8"
}
},
{
"scope": ["markup.deleted.diff"],
"settings": {
"foreground": "#eb6f92"
}
},
{
"scope": "markup.heading",
"settings": {
"fontStyle": "bold"
}
},
{
"scope": "markup.bold.markdown",
"settings": {
"fontStyle": "bold"
}
},
{
"scope": "markup.italic.markdown",
"settings": {
"fontStyle": "italic"
}
},
{
"scope": ["meta.diff.range"],
"settings": {
"foreground": "#c4a7e7"
}
},
{
"scope": ["meta.tag", "meta.brace"],
"settings": {
"foreground": "#e0def4"
}
},
{
"scope": ["meta.import", "meta.export"],
"settings": {
"foreground": "#3e8fb0"
}
},
{
"scope": "meta.directive.vue",
"settings": {
"foreground": "#c4a7e7",
"fontStyle": "italic"
}
},
{
"scope": "meta.property-name.css",
"settings": {
"foreground": "#9ccfd8"
}
},
{
"scope": "meta.property-value.css",
"settings": {
"foreground": "#f6c177"
}
},
{
"scope": "meta.tag.other.html",
"settings": {
"foreground": "#908caa"
}
},
{
"scope": ["punctuation"],
"settings": {
"foreground": "#908caa"
}
},
{
"scope": ["punctuation.accessor"],
"settings": {
"foreground": "#3e8fb0"
}
},
{
"scope": ["punctuation.definition.string"],
"settings": {
"foreground": "#f6c177"
}
},
{
"scope": ["punctuation.definition.tag"],
"settings": {
"foreground": "#6e6a86"
}
},
{
"scope": ["storage.type", "storage.modifier"],
"settings": {
"foreground": "#3e8fb0"
}
},
{
"scope": ["string"],
"settings": {
"foreground": "#f6c177"
}
},
{
"scope": ["support"],
"settings": {
"foreground": "#9ccfd8"
}
},
{
"scope": ["support.constant"],
"settings": {
"foreground": "#f6c177"
}
},
{
"scope": ["support.function"],
"settings": {
"foreground": "#eb6f92",
"fontStyle": "italic"
}
},
{
"scope": ["variable"],
"settings": {
"foreground": "#ea9a97",
"fontStyle": "italic"
}
},
{
"scope": [
"variable.other",
"variable.language",
"variable.function",
"variable.argument"
],
"settings": {
"foreground": "#e0def4"
}
},
{
"scope": ["variable.parameter"],
"settings": {
"foreground": "#c4a7e7"
}
}
]
}

View File

@ -0,0 +1,680 @@
{
"name": "Rosé Pine",
"type": "dark",
"colors": {
"activityBar.activeBorder": "#e0def4",
"activityBar.background": "#191724",
"activityBar.dropBorder": "#26233a",
"activityBar.foreground": "#e0def4",
"activityBar.inactiveForeground": "#908caa",
"activityBarBadge.background": "#ebbcba",
"activityBarBadge.foreground": "#191724",
"badge.background": "#ebbcba",
"badge.foreground": "#191724",
"banner.background": "#1f1d2e",
"banner.foreground": "#e0def4",
"banner.iconForeground": "#908caa",
"breadcrumb.activeSelectionForeground": "#ebbcba",
"breadcrumb.background": "#191724",
"breadcrumb.focusForeground": "#908caa",
"breadcrumb.foreground": "#6e6a86",
"breadcrumbPicker.background": "#1f1d2e",
"button.background": "#ebbcba",
"button.foreground": "#191724",
"button.hoverBackground": "#ebbcbae6",
"button.secondaryBackground": "#1f1d2e",
"button.secondaryForeground": "#e0def4",
"button.secondaryHoverBackground": "#26233a",
"charts.blue": "#9ccfd8",
"charts.foreground": "#e0def4",
"charts.green": "#31748f",
"charts.lines": "#908caa",
"charts.orange": "#ebbcba",
"charts.purple": "#c4a7e7",
"charts.red": "#eb6f92",
"charts.yellow": "#f6c177",
"checkbox.background": "#1f1d2e",
"checkbox.border": "#6e6a8633",
"checkbox.foreground": "#e0def4",
"debugExceptionWidget.background": "#1f1d2e",
"debugExceptionWidget.border": "#6e6a8633",
"debugIcon.breakpointCurrentStackframeForeground": "#908caa",
"debugIcon.breakpointDisabledForeground": "#908caa",
"debugIcon.breakpointForeground": "#908caa",
"debugIcon.breakpointStackframeForeground": "#908caa",
"debugIcon.breakpointUnverifiedForeground": "#908caa",
"debugIcon.continueForeground": "#908caa",
"debugIcon.disconnectForeground": "#908caa",
"debugIcon.pauseForeground": "#908caa",
"debugIcon.restartForeground": "#908caa",
"debugIcon.startForeground": "#908caa",
"debugIcon.stepBackForeground": "#908caa",
"debugIcon.stepIntoForeground": "#908caa",
"debugIcon.stepOutForeground": "#908caa",
"debugIcon.stepOverForeground": "#908caa",
"debugIcon.stopForeground": "#eb6f92",
"debugToolBar.background": "#1f1d2e",
"debugToolBar.border": "#26233a",
"descriptionForeground": "#908caa",
"diffEditor.border": "#26233a",
"diffEditor.diagonalFill": "#6e6a8666",
"diffEditor.insertedLineBackground": "#9ccfd826",
"diffEditor.insertedTextBackground": "#9ccfd826",
"diffEditor.removedLineBackground": "#eb6f9226",
"diffEditor.removedTextBackground": "#eb6f9226",
"diffEditorOverview.insertedForeground": "#9ccfd880",
"diffEditorOverview.removedForeground": "#eb6f9280",
"dropdown.background": "#1f1d2e",
"dropdown.border": "#6e6a8633",
"dropdown.foreground": "#e0def4",
"dropdown.listBackground": "#1f1d2e",
"editor.background": "#191724",
"editor.findMatchBackground": "#6e6a8666",
"editor.findMatchHighlightBackground": "#6e6a8666",
"editor.findRangeHighlightBackground": "#6e6a8666",
"editor.findRangeHighlightBorder": "#000000",
"editor.focusedStackFrameHighlightBackground": "#6e6a8633",
"editor.foldBackground": "#1f1d2e",
"editor.foreground": "#e0def4",
"editor.hoverHighlightBackground": "#000000",
"editor.inactiveSelectionBackground": "#6e6a861a",
"editor.inlineValuesBackground": "#000000",
"editor.inlineValuesForeground": "#908caa",
"editor.lineHighlightBackground": "#6e6a861a",
"editor.lineHighlightBorder": "#000000",
"editor.linkedEditingBackground": "#1f1d2e",
"editor.rangeHighlightBackground": "#6e6a861a",
"editor.selectionBackground": "#6e6a8633",
"editor.selectionForeground": "#e0def4",
"editor.selectionHighlightBackground": "#6e6a8633",
"editor.selectionHighlightBorder": "#191724",
"editor.snippetFinalTabstopHighlightBackground": "#6e6a8633",
"editor.snippetFinalTabstopHighlightBorder": "#1f1d2e",
"editor.snippetTabstopHighlightBackground": "#6e6a8633",
"editor.snippetTabstopHighlightBorder": "#1f1d2e",
"editor.stackFrameHighlightBackground": "#6e6a8633",
"editor.symbolHighlightBackground": "#6e6a8633",
"editor.symbolHighlightBorder": "#000000",
"editor.wordHighlightBackground": "#6e6a8633",
"editor.wordHighlightBorder": "#000000",
"editor.wordHighlightStrongBackground": "#6e6a8633",
"editor.wordHighlightStrongBorder": "#6e6a8633",
"editorBracketHighlight.foreground1": "#eb6f9280",
"editorBracketHighlight.foreground2": "#31748f80",
"editorBracketHighlight.foreground3": "#f6c17780",
"editorBracketHighlight.foreground4": "#9ccfd880",
"editorBracketHighlight.foreground5": "#ebbcba80",
"editorBracketHighlight.foreground6": "#c4a7e780",
"editorBracketMatch.background": "#000000",
"editorBracketMatch.border": "#908caa",
"editorBracketPairGuide.activeBackground1": "#31748f",
"editorBracketPairGuide.activeBackground2": "#ebbcba",
"editorBracketPairGuide.activeBackground3": "#c4a7e7",
"editorBracketPairGuide.activeBackground4": "#9ccfd8",
"editorBracketPairGuide.activeBackground5": "#f6c177",
"editorBracketPairGuide.activeBackground6": "#eb6f92",
"editorBracketPairGuide.background1": "#31748f80",
"editorBracketPairGuide.background2": "#ebbcba80",
"editorBracketPairGuide.background3": "#c4a7e780",
"editorBracketPairGuide.background4": "#9ccfd880",
"editorBracketPairGuide.background5": "#f6c17780",
"editorBracketPairGuide.background6": "#eb6f9280",
"editorCodeLens.foreground": "#ebbcba",
"editorCursor.background": "#e0def4",
"editorCursor.foreground": "#6e6a86",
"editorError.border": "#000000",
"editorError.foreground": "#eb6f92",
"editorGhostText.foreground": "#908caa",
"editorGroup.border": "#000000",
"editorGroup.dropBackground": "#1f1d2e",
"editorGroup.emptyBackground": "#000000",
"editorGroup.focusedEmptyBorder": "#000000",
"editorGroupHeader.noTabsBackground": "#000000",
"editorGroupHeader.tabsBackground": "#000000",
"editorGroupHeader.tabsBorder": "#000000",
"editorGutter.addedBackground": "#9ccfd8",
"editorGutter.background": "#191724",
"editorGutter.commentRangeForeground": "#908caa",
"editorGutter.deletedBackground": "#eb6f92",
"editorGutter.foldingControlForeground": "#c4a7e7",
"editorGutter.modifiedBackground": "#ebbcba",
"editorHint.border": "#000000",
"editorHint.foreground": "#908caa",
"editorHoverWidget.background": "#1f1d2e",
"editorHoverWidget.border": "#6e6a8680",
"editorHoverWidget.foreground": "#908caa",
"editorHoverWidget.highlightForeground": "#e0def4",
"editorHoverWidget.statusBarBackground": "#000000",
"editorIndentGuide.activeBackground": "#6e6a86",
"editorIndentGuide.background": "#6e6a8666",
"editorInfo.border": "#26233a",
"editorInfo.foreground": "#9ccfd8",
"editorInlayHint.background": "#26233a",
"editorInlayHint.foreground": "#908caa",
"editorInlayHint.parameterBackground": "#26233a",
"editorInlayHint.parameterForeground": "#c4a7e7",
"editorInlayHint.typeBackground": "#26233a",
"editorInlayHint.typeForeground": "#9ccfd8",
"editorLightBulb.foreground": "#31748f",
"editorLightBulbAutoFix.foreground": "#ebbcba",
"editorLineNumber.activeForeground": "#e0def4",
"editorLineNumber.foreground": "#908caa",
"editorLink.activeForeground": "#ebbcba",
"editorMarkerNavigation.background": "#1f1d2e",
"editorMarkerNavigationError.background": "#1f1d2e",
"editorMarkerNavigationInfo.background": "#1f1d2e",
"editorMarkerNavigationWarning.background": "#1f1d2e",
"editorOverviewRuler.addedForeground": "#9ccfd880",
"editorOverviewRuler.background": "#191724",
"editorOverviewRuler.border": "#6e6a8666",
"editorOverviewRuler.bracketMatchForeground": "#908caa",
"editorOverviewRuler.commonContentForeground": "#6e6a861a",
"editorOverviewRuler.currentContentForeground": "#6e6a8633",
"editorOverviewRuler.deletedForeground": "#eb6f9280",
"editorOverviewRuler.errorForeground": "#eb6f9280",
"editorOverviewRuler.findMatchForeground": "#6e6a8666",
"editorOverviewRuler.incomingContentForeground": "#c4a7e780",
"editorOverviewRuler.infoForeground": "#9ccfd880",
"editorOverviewRuler.modifiedForeground": "#ebbcba80",
"editorOverviewRuler.rangeHighlightForeground": "#6e6a8666",
"editorOverviewRuler.selectionHighlightForeground": "#6e6a8666",
"editorOverviewRuler.warningForeground": "#f6c17780",
"editorOverviewRuler.wordHighlightForeground": "#6e6a8633",
"editorOverviewRuler.wordHighlightStrongForeground": "#6e6a8666",
"editorPane.background": "#000000",
"editorRuler.foreground": "#6e6a8666",
"editorSuggestWidget.background": "#1f1d2e",
"editorSuggestWidget.border": "#000000",
"editorSuggestWidget.focusHighlightForeground": "#ebbcba",
"editorSuggestWidget.foreground": "#908caa",
"editorSuggestWidget.highlightForeground": "#ebbcba",
"editorSuggestWidget.selectedBackground": "#6e6a8633",
"editorSuggestWidget.selectedForeground": "#e0def4",
"editorSuggestWidget.selectedIconForeground": "#e0def4",
"editorUnnecessaryCode.border": "#000000",
"editorUnnecessaryCode.opacity": "#e0def480",
"editorWarning.border": "#000000",
"editorWarning.foreground": "#f6c177",
"editorWhitespace.foreground": "#6e6a86",
"editorWidget.background": "#1f1d2e",
"editorWidget.border": "#26233a",
"editorWidget.foreground": "#908caa",
"editorWidget.resizeBorder": "#6e6a86",
"errorForeground": "#eb6f92",
"extensionBadge.remoteBackground": "#c4a7e7",
"extensionBadge.remoteForeground": "#191724",
"extensionButton.prominentBackground": "#ebbcba",
"extensionButton.prominentForeground": "#191724",
"extensionButton.prominentHoverBackground": "#ebbcbae6",
"extensionIcon.preReleaseForeground": "#31748f",
"extensionIcon.starForeground": "#ebbcba",
"extensionIcon.verifiedForeground": "#c4a7e7",
"focusBorder": "#6e6a8633",
"foreground": "#e0def4",
"gitDecoration.addedResourceForeground": "#9ccfd8",
"gitDecoration.conflictingResourceForeground": "#eb6f92",
"gitDecoration.deletedResourceForeground": "#908caa",
"gitDecoration.ignoredResourceForeground": "#6e6a86",
"gitDecoration.modifiedResourceForeground": "#ebbcba",
"gitDecoration.renamedResourceForeground": "#31748f",
"gitDecoration.stageDeletedResourceForeground": "#eb6f92",
"gitDecoration.stageModifiedResourceForeground": "#c4a7e7",
"gitDecoration.submoduleResourceForeground": "#f6c177",
"gitDecoration.untrackedResourceForeground": "#f6c177",
"icon.foreground": "#908caa",
"input.background": "#26233a80",
"input.border": "#6e6a8633",
"input.foreground": "#e0def4",
"input.placeholderForeground": "#908caa",
"inputOption.activeBackground": "#ebbcba26",
"inputOption.activeForeground": "#ebbcba",
"inputValidation.errorBackground": "#1f1d2e",
"inputValidation.errorBorder": "#6e6a8666",
"inputValidation.errorForeground": "#eb6f92",
"inputValidation.infoBackground": "#1f1d2e",
"inputValidation.infoBorder": "#6e6a8666",
"inputValidation.infoForeground": "#9ccfd8",
"inputValidation.warningBackground": "#1f1d2e",
"inputValidation.warningBorder": "#6e6a8666",
"inputValidation.warningForeground": "#9ccfd880",
"keybindingLabel.background": "#26233a",
"keybindingLabel.border": "#6e6a8666",
"keybindingLabel.bottomBorder": "#6e6a8666",
"keybindingLabel.foreground": "#c4a7e7",
"keybindingTable.headerBackground": "#26233a",
"keybindingTable.rowsBackground": "#1f1d2e",
"list.activeSelectionBackground": "#6e6a8633",
"list.activeSelectionForeground": "#e0def4",
"list.deemphasizedForeground": "#908caa",
"list.dropBackground": "#1f1d2e",
"list.errorForeground": "#eb6f92",
"list.filterMatchBackground": "#1f1d2e",
"list.filterMatchBorder": "#ebbcba",
"list.focusBackground": "#6e6a8666",
"list.focusForeground": "#e0def4",
"list.focusOutline": "#6e6a8633",
"list.highlightForeground": "#ebbcba",
"list.hoverBackground": "#6e6a861a",
"list.hoverForeground": "#e0def4",
"list.inactiveFocusBackground": "#6e6a861a",
"list.inactiveSelectionBackground": "#1f1d2e",
"list.inactiveSelectionForeground": "#e0def4",
"list.invalidItemForeground": "#eb6f92",
"list.warningForeground": "#f6c177",
"listFilterWidget.background": "#1f1d2e",
"listFilterWidget.noMatchesOutline": "#eb6f92",
"listFilterWidget.outline": "#26233a",
"menu.background": "#1f1d2e",
"menu.border": "#6e6a861a",
"menu.foreground": "#e0def4",
"menu.selectionBackground": "#6e6a8633",
"menu.selectionBorder": "#26233a",
"menu.selectionForeground": "#e0def4",
"menu.separatorBackground": "#6e6a8666",
"menubar.selectionBackground": "#6e6a8633",
"menubar.selectionBorder": "#6e6a861a",
"menubar.selectionForeground": "#e0def4",
"merge.border": "#26233a",
"merge.commonContentBackground": "#6e6a8633",
"merge.commonHeaderBackground": "#6e6a8633",
"merge.currentContentBackground": "#f6c17780",
"merge.currentHeaderBackground": "#f6c17780",
"merge.incomingContentBackground": "#9ccfd880",
"merge.incomingHeaderBackground": "#9ccfd880",
"minimap.background": "#1f1d2e",
"minimap.errorHighlight": "#eb6f9280",
"minimap.findMatchHighlight": "#6e6a8633",
"minimap.selectionHighlight": "#6e6a8633",
"minimap.warningHighlight": "#f6c17780",
"minimapGutter.addedBackground": "#9ccfd8",
"minimapGutter.deletedBackground": "#eb6f92",
"minimapGutter.modifiedBackground": "#ebbcba",
"minimapSlider.activeBackground": "#6e6a8666",
"minimapSlider.background": "#6e6a8633",
"minimapSlider.hoverBackground": "#6e6a8633",
"notebook.cellBorderColor": "#9ccfd880",
"notebook.cellEditorBackground": "#1f1d2e",
"notebook.cellHoverBackground": "#26233a80",
"notebook.focusedCellBackground": "#6e6a861a",
"notebook.focusedCellBorder": "#9ccfd8",
"notebook.outputContainerBackgroundColor": "#6e6a861a",
"notificationCenter.border": "#6e6a8633",
"notificationCenterHeader.background": "#1f1d2e",
"notificationCenterHeader.foreground": "#908caa",
"notificationLink.foreground": "#c4a7e7",
"notifications.background": "#1f1d2e",
"notifications.border": "#6e6a8633",
"notifications.foreground": "#e0def4",
"notificationsErrorIcon.foreground": "#eb6f92",
"notificationsInfoIcon.foreground": "#9ccfd8",
"notificationsWarningIcon.foreground": "#f6c177",
"notificationToast.border": "#6e6a8633",
"panel.background": "#1f1d2e",
"panel.border": "#000000",
"panel.dropBorder": "#26233a",
"panelInput.border": "#1f1d2e",
"panelSection.dropBackground": "#6e6a8633",
"panelSectionHeader.background": "#1f1d2e",
"panelSectionHeader.foreground": "#e0def4",
"panelTitle.activeBorder": "#6e6a8666",
"panelTitle.activeForeground": "#e0def4",
"panelTitle.inactiveForeground": "#908caa",
"peekView.border": "#26233a",
"peekViewEditor.background": "#1f1d2e",
"peekViewEditor.matchHighlightBackground": "#6e6a8666",
"peekViewResult.background": "#1f1d2e",
"peekViewResult.fileForeground": "#908caa",
"peekViewResult.lineForeground": "#908caa",
"peekViewResult.matchHighlightBackground": "#6e6a8666",
"peekViewResult.selectionBackground": "#6e6a8633",
"peekViewResult.selectionForeground": "#e0def4",
"peekViewTitle.background": "#26233a",
"peekViewTitleDescription.foreground": "#908caa",
"pickerGroup.border": "#6e6a8666",
"pickerGroup.foreground": "#c4a7e7",
"ports.iconRunningProcessForeground": "#ebbcba",
"problemsErrorIcon.foreground": "#eb6f92",
"problemsInfoIcon.foreground": "#9ccfd8",
"problemsWarningIcon.foreground": "#f6c177",
"progressBar.background": "#ebbcba",
"quickInput.background": "#1f1d2e",
"quickInput.foreground": "#908caa",
"quickInputList.focusBackground": "#6e6a8633",
"quickInputList.focusForeground": "#e0def4",
"quickInputList.focusIconForeground": "#e0def4",
"scrollbar.shadow": "#1f1d2e4d",
"scrollbarSlider.activeBackground": "#31748f80",
"scrollbarSlider.background": "#6e6a8633",
"scrollbarSlider.hoverBackground": "#6e6a8666",
"searchEditor.findMatchBackground": "#6e6a8633",
"selection.background": "#6e6a8666",
"settings.focusedRowBackground": "#1f1d2e",
"settings.headerForeground": "#e0def4",
"settings.modifiedItemIndicator": "#ebbcba",
"settings.focusedRowBorder": "#6e6a8633",
"settings.rowHoverBackground": "#1f1d2e",
"sideBar.background": "#191724",
"sideBar.dropBackground": "#1f1d2e",
"sideBar.foreground": "#908caa",
"sideBarSectionHeader.background": "#000000",
"sideBarSectionHeader.border": "#6e6a8633",
"statusBar.background": "#191724",
"statusBar.debuggingBackground": "#c4a7e7",
"statusBar.debuggingForeground": "#191724",
"statusBar.foreground": "#908caa",
"statusBar.noFolderBackground": "#191724",
"statusBar.noFolderForeground": "#908caa",
"statusBarItem.activeBackground": "#6e6a8666",
"statusBarItem.hoverBackground": "#6e6a8633",
"statusBarItem.prominentBackground": "#26233a",
"statusBarItem.prominentForeground": "#e0def4",
"statusBarItem.prominentHoverBackground": "#6e6a8633",
"statusBarItem.remoteBackground": "#191724",
"statusBarItem.remoteForeground": "#f6c177",
"statusBarItem.errorBackground": "#191724",
"statusBarItem.errorForeground": "#eb6f92",
"symbolIcon.arrayForeground": "#908caa",
"symbolIcon.classForeground": "#908caa",
"symbolIcon.colorForeground": "#908caa",
"symbolIcon.constantForeground": "#908caa",
"symbolIcon.constructorForeground": "#908caa",
"symbolIcon.enumeratorForeground": "#908caa",
"symbolIcon.enumeratorMemberForeground": "#908caa",
"symbolIcon.eventForeground": "#908caa",
"symbolIcon.fieldForeground": "#908caa",
"symbolIcon.fileForeground": "#908caa",
"symbolIcon.folderForeground": "#908caa",
"symbolIcon.functionForeground": "#908caa",
"symbolIcon.interfaceForeground": "#908caa",
"symbolIcon.keyForeground": "#908caa",
"symbolIcon.keywordForeground": "#908caa",
"symbolIcon.methodForeground": "#908caa",
"symbolIcon.moduleForeground": "#908caa",
"symbolIcon.namespaceForeground": "#908caa",
"symbolIcon.nullForeground": "#908caa",
"symbolIcon.numberForeground": "#908caa",
"symbolIcon.objectForeground": "#908caa",
"symbolIcon.operatorForeground": "#908caa",
"symbolIcon.packageForeground": "#908caa",
"symbolIcon.propertyForeground": "#908caa",
"symbolIcon.referenceForeground": "#908caa",
"symbolIcon.snippetForeground": "#908caa",
"symbolIcon.stringForeground": "#908caa",
"symbolIcon.structForeground": "#908caa",
"symbolIcon.textForeground": "#908caa",
"symbolIcon.typeParameterForeground": "#908caa",
"symbolIcon.unitForeground": "#908caa",
"symbolIcon.variableForeground": "#908caa",
"tab.activeBackground": "#6e6a861a",
"tab.activeForeground": "#e0def4",
"tab.activeModifiedBorder": "#9ccfd8",
"tab.border": "#000000",
"tab.hoverBackground": "#6e6a8633",
"tab.inactiveBackground": "#000000",
"tab.inactiveForeground": "#908caa",
"tab.inactiveModifiedBorder": "#9ccfd880",
"tab.lastPinnedBorder": "#6e6a86",
"tab.unfocusedActiveBackground": "#000000",
"tab.unfocusedHoverBackground": "#000000",
"tab.unfocusedInactiveBackground": "#000000",
"tab.unfocusedInactiveModifiedBorder": "#9ccfd880",
"terminal.ansiBlack": "#26233a",
"terminal.ansiBlue": "#9ccfd8",
"terminal.ansiBrightBlack": "#908caa",
"terminal.ansiBrightBlue": "#9ccfd8",
"terminal.ansiBrightCyan": "#ebbcba",
"terminal.ansiBrightGreen": "#31748f",
"terminal.ansiBrightMagenta": "#c4a7e7",
"terminal.ansiBrightRed": "#eb6f92",
"terminal.ansiBrightWhite": "#e0def4",
"terminal.ansiBrightYellow": "#f6c177",
"terminal.ansiCyan": "#ebbcba",
"terminal.ansiGreen": "#31748f",
"terminal.ansiMagenta": "#c4a7e7",
"terminal.ansiRed": "#eb6f92",
"terminal.ansiWhite": "#e0def4",
"terminal.ansiYellow": "#f6c177",
"terminal.dropBackground": "#6e6a8633",
"terminal.foreground": "#e0def4",
"terminal.selectionBackground": "#6e6a8633",
"terminal.tab.activeBorder": "#e0def4",
"terminalCursor.background": "#e0def4",
"terminalCursor.foreground": "#6e6a86",
"textBlockQuote.background": "#1f1d2e",
"textBlockQuote.border": "#6e6a8633",
"textCodeBlock.background": "#1f1d2e",
"textLink.activeForeground": "#c4a7e7e6",
"textLink.foreground": "#c4a7e7",
"textPreformat.foreground": "#f6c177",
"textSeparator.foreground": "#908caa",
"titleBar.activeBackground": "#191724",
"titleBar.activeForeground": "#908caa",
"titleBar.inactiveBackground": "#1f1d2e",
"titleBar.inactiveForeground": "#908caa",
"toolbar.activeBackground": "#6e6a8666",
"toolbar.hoverBackground": "#6e6a8633",
"tree.indentGuidesStroke": "#908caa",
"walkThrough.embeddedEditorBackground": "#191724",
"welcomePage.background": "#191724",
"welcomePage.buttonBackground": "#1f1d2e",
"welcomePage.buttonHoverBackground": "#26233a",
"widget.shadow": "#1f1d2e4d",
"window.activeBorder": "#1f1d2e",
"window.inactiveBorder": "#1f1d2e"
},
"tokenColors": [
{
"scope": ["comment"],
"settings": {
"foreground": "#6e6a86",
"fontStyle": "italic"
}
},
{
"scope": ["constant"],
"settings": {
"foreground": "#31748f"
}
},
{
"scope": ["constant.numeric", "constant.language"],
"settings": {
"foreground": "#ebbcba"
}
},
{
"scope": ["entity.name"],
"settings": {
"foreground": "#ebbcba"
}
},
{
"scope": [
"entity.name.section",
"entity.name.tag",
"entity.name.namespace",
"entity.name.type"
],
"settings": {
"foreground": "#9ccfd8"
}
},
{
"scope": ["entity.other.attribute-name", "entity.other.inherited-class"],
"settings": {
"foreground": "#c4a7e7",
"fontStyle": "italic"
}
},
{
"scope": ["invalid"],
"settings": {
"foreground": "#eb6f92"
}
},
{
"scope": ["invalid.deprecated"],
"settings": {
"foreground": "#908caa"
}
},
{
"scope": ["keyword"],
"settings": {
"foreground": "#31748f"
}
},
{
"scope": ["markup.inserted.diff"],
"settings": {
"foreground": "#9ccfd8"
}
},
{
"scope": ["markup.deleted.diff"],
"settings": {
"foreground": "#eb6f92"
}
},
{
"scope": "markup.heading",
"settings": {
"fontStyle": "bold"
}
},
{
"scope": "markup.bold.markdown",
"settings": {
"fontStyle": "bold"
}
},
{
"scope": "markup.italic.markdown",
"settings": {
"fontStyle": "italic"
}
},
{
"scope": ["meta.diff.range"],
"settings": {
"foreground": "#c4a7e7"
}
},
{
"scope": ["meta.tag", "meta.brace"],
"settings": {
"foreground": "#e0def4"
}
},
{
"scope": ["meta.import", "meta.export"],
"settings": {
"foreground": "#31748f"
}
},
{
"scope": "meta.directive.vue",
"settings": {
"foreground": "#c4a7e7",
"fontStyle": "italic"
}
},
{
"scope": "meta.property-name.css",
"settings": {
"foreground": "#9ccfd8"
}
},
{
"scope": "meta.property-value.css",
"settings": {
"foreground": "#f6c177"
}
},
{
"scope": "meta.tag.other.html",
"settings": {
"foreground": "#908caa"
}
},
{
"scope": ["punctuation"],
"settings": {
"foreground": "#908caa"
}
},
{
"scope": ["punctuation.accessor"],
"settings": {
"foreground": "#31748f"
}
},
{
"scope": ["punctuation.definition.string"],
"settings": {
"foreground": "#f6c177"
}
},
{
"scope": ["punctuation.definition.tag"],
"settings": {
"foreground": "#6e6a86"
}
},
{
"scope": ["storage.type", "storage.modifier"],
"settings": {
"foreground": "#31748f"
}
},
{
"scope": ["string"],
"settings": {
"foreground": "#f6c177"
}
},
{
"scope": ["support"],
"settings": {
"foreground": "#9ccfd8"
}
},
{
"scope": ["support.constant"],
"settings": {
"foreground": "#f6c177"
}
},
{
"scope": ["support.function"],
"settings": {
"foreground": "#eb6f92",
"fontStyle": "italic"
}
},
{
"scope": ["variable"],
"settings": {
"foreground": "#ebbcba",
"fontStyle": "italic"
}
},
{
"scope": [
"variable.other",
"variable.language",
"variable.function",
"variable.argument"
],
"settings": {
"foreground": "#e0def4"
}
},
{
"scope": ["variable.parameter"],
"settings": {
"foreground": "#c4a7e7"
}
}
]
}

View File

@ -0,0 +1,19 @@
Copyright (c) 2011 Ethan Schoonover
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -0,0 +1,558 @@
{
"type": "dark",
"colors": {
"errorForeground": "#ffeaea",
"focusBorder": "#2aa19899",
"selection.background": "#2aa19899",
"input.background": "#003847",
"input.foreground": "#93a1a1",
"inputOption.activeBorder": "#2aa19899",
"input.placeholderForeground": "#93a1a1aa",
"inputValidation.infoBackground": "#052730",
"inputValidation.infoBorder": "#363b5f",
"inputValidation.warningBackground": "#5d5938",
"inputValidation.warningBorder": "#9d8a5e",
"inputValidation.errorBackground": "#571b26",
"inputValidation.errorBorder": "#a92049",
"dropdown.background": "#00212b",
"dropdown.border": "#2aa19899",
"list.focusBackground": "#005a6f",
"list.activeSelectionBackground": "#005a6f",
"list.inactiveSelectionBackground": "#00445488",
"list.hoverBackground": "#004454aa",
"list.dropBackground": "#00445488",
"list.highlightForeground": "#1ebcc5",
"pickerGroup.foreground": "#2aa19899",
"pickerGroup.border": "#2aa19899",
"button.background": "#2aa19899",
"badge.background": "#047aa6",
"progressBar.background": "#047aa6",
"editor.background": "#002b36",
"editorWidget.background": "#00212b",
"editor.selectionBackground": "#073642",
"editor.selectionHighlightBackground": "#005a6faa",
"editorHoverWidget.background": "#004052",
"editor.lineHighlightBackground": "#073642",
"editorCursor.foreground": "#839496",
"editorWhitespace.foreground": "#93a1a180",
"editorLineNumber.foreground": "#566c74",
"editorLineNumber.activeForeground": "#6e8a93",
"editorGutter.background": "#073642",
"editorMarkerNavigationError.background": "#ab395b",
"editorMarkerNavigationWarning.background": "#5b7e7a",
"editor.wordHighlightBackground": "#004454aa",
"editor.wordHighlightStrongBackground": "#005a6faa",
"peekViewTitle.background": "#00212b",
"peekView.border": "#003847",
"peekViewResult.background": "#00212b",
"peekViewEditor.background": "#10192c",
"peekViewEditorGutter.background": "#073642",
"peekViewEditor.matchHighlightBackground": "#7744aa40",
"tab.activeBackground": "#002b37",
"tab.inactiveBackground": "#004052",
"tab.border": "#003847",
"tab.activeForeground": "#d6dbdb",
"tab.inactiveForeground": "#93a1a1",
"editorGroup.background": "#011b23",
"editorGroupHeader.tabsBackground": "#004052",
"editorGroup.border": "#00212b",
"editorGroup.dropBackground": "#2aa19844",
"panel.border": "#003847",
"statusBar.foreground": "#93a1a1",
"statusBar.background": "#00212b",
"statusBar.noFolderBackground": "#00212b",
"statusBarItem.prominentBackground": "#003847",
"statusBarItem.prominentHoverBackground": "#003847",
"activityBar.background": "#003847",
"sideBar.background": "#00212b",
"sideBarTitle.foreground": "#93a1a1",
"titleBar.activeBackground": "#002c39",
"terminal.foreground": "#839496",
"statusBar.debuggingBackground": "#00212b",
"debugExceptionWidget.border": "#ab395b",
"debugExceptionWidget.background": "#00212b",
"debugToolBar.background": "#00212b",
"terminal.ansiBlack": "#073642",
"terminal.ansiRed": "#dc322f",
"terminal.ansiGreen": "#859900",
"terminal.ansiYellow": "#b58900",
"terminal.ansiBlue": "#268bd2",
"terminal.ansiMagenta": "#d33682",
"terminal.ansiCyan": "#2aa198",
"terminal.ansiWhite": "#839496",
"terminal.ansiBrightBlack": "#586e75",
"terminal.ansiBrightRed": "#cb4b16",
"terminal.ansiBrightGreen": "#859900",
"terminal.ansiBrightYellow": "#657b83",
"terminal.ansiBrightBlue": "#839496",
"terminal.ansiBrightMagenta": "#6c71c4",
"terminal.ansiBrightCyan": "#93a1a1",
"terminal.ansiBrightWhite": "#839496",
"editorBracketHighlight.foreground1": "#268bd2",
"editorBracketHighlight.foreground2": "#b58900",
"editorBracketHighlight.foreground3": "#d33682"
},
"tokenColors": [
{
"settings": {
"foreground": "#bbbbbbff",
"background": "#002b36ff"
}
},
{
"scope": ["meta.embedded", "source.groovy.embedded"],
"settings": {
"background": "#002B36",
"foreground": "#93A1A1"
}
},
{
"name": "Comment",
"scope": "comment",
"settings": {
"fontStyle": "italic",
"foreground": "#657B83"
}
},
{
"name": "String",
"scope": "string",
"settings": {
"foreground": "#2AA198"
}
},
{
"name": "Regexp",
"scope": "string.regexp",
"settings": {
"foreground": "#D30102"
}
},
{
"name": "Number",
"scope": "constant.numeric",
"settings": {
"foreground": "#D33682"
}
},
{
"name": "Variable",
"scope": ["variable.language", "variable.other"],
"settings": {
"foreground": "#268BD2"
}
},
{
"name": "Keyword",
"scope": "keyword",
"settings": {
"foreground": "#859900"
}
},
{
"name": "Storage",
"scope": "storage",
"settings": {
"fontStyle": "bold",
"foreground": "#93A1A1"
}
},
{
"name": "Class name",
"scope": ["entity.name.class", "entity.name.type"],
"settings": {
"fontStyle": "",
"foreground": "#CB4B16"
}
},
{
"name": "Function name",
"scope": "entity.name.function",
"settings": {
"foreground": "#268BD2"
}
},
{
"name": "Variable start",
"scope": "punctuation.definition.variable",
"settings": {
"foreground": "#859900"
}
},
{
"name": "Embedded code markers",
"scope": [
"punctuation.section.embedded.begin",
"punctuation.section.embedded.end"
],
"settings": {
"foreground": "#D30102"
}
},
{
"name": "Built-in constant",
"scope": ["constant.language", "meta.preprocessor"],
"settings": {
"foreground": "#B58900"
}
},
{
"name": "Support.construct",
"scope": ["support.function.construct", "keyword.other.new"],
"settings": {
"foreground": "#CB4B16"
}
},
{
"name": "User-defined constant",
"scope": ["constant.character", "constant.other"],
"settings": {
"foreground": "#CB4B16"
}
},
{
"name": "Inherited class",
"scope": "entity.other.inherited-class",
"settings": {
"foreground": "#6C71C4"
}
},
{
"name": "Function argument",
"scope": "variable.parameter",
"settings": {}
},
{
"name": "Tag name",
"scope": "entity.name.tag",
"settings": {
"foreground": "#268BD2"
}
},
{
"name": "Tag start/end",
"scope": "punctuation.definition.tag",
"settings": {
"foreground": "#657B83"
}
},
{
"name": "Tag attribute",
"scope": "entity.other.attribute-name",
"settings": {
"foreground": "#93A1A1"
}
},
{
"name": "Library function",
"scope": "support.function",
"settings": {
"foreground": "#268BD2"
}
},
{
"name": "Continuation",
"scope": "punctuation.separator.continuation",
"settings": {
"foreground": "#D30102"
}
},
{
"name": "Library constant",
"scope": "support.constant",
"settings": {}
},
{
"name": "Library class/type",
"scope": ["support.type", "support.class"],
"settings": {
"foreground": "#859900"
}
},
{
"name": "Library Exception",
"scope": "support.type.exception",
"settings": {
"foreground": "#CB4B16"
}
},
{
"name": "Library variable",
"scope": "support.other.variable",
"settings": {}
},
{
"name": "Invalid",
"scope": "invalid",
"settings": {}
},
{
"name": "diff: header",
"scope": ["meta.diff", "meta.diff.header"],
"settings": {
"background": "#b58900",
"fontStyle": "italic",
"foreground": "#E0EDDD"
}
},
{
"name": "diff: deleted",
"scope": "markup.deleted",
"settings": {
"background": "#eee8d5",
"fontStyle": "",
"foreground": "#dc322f"
}
},
{
"name": "diff: changed",
"scope": "markup.changed",
"settings": {
"background": "#eee8d5",
"fontStyle": "",
"foreground": "#cb4b16"
}
},
{
"name": "diff: inserted",
"scope": "markup.inserted",
"settings": {
"background": "#eee8d5",
"foreground": "#219186"
}
},
{
"name": "Markup Quote",
"scope": "markup.quote",
"settings": {
"foreground": "#859900"
}
},
{
"name": "Markup Lists",
"scope": "markup.list",
"settings": {
"foreground": "#B58900"
}
},
{
"name": "Markup Styling",
"scope": ["markup.bold", "markup.italic"],
"settings": {
"foreground": "#D33682"
}
},
{
"name": "Markup Inline",
"scope": "markup.inline.raw",
"settings": {
"fontStyle": "",
"foreground": "#2AA198"
}
},
{
"name": "Markup Headings",
"scope": "markup.heading",
"settings": {
"foreground": "#268BD2"
}
},
{
"name": "Markup Setext Header",
"scope": "markup.heading.setext",
"settings": {
"fontStyle": "",
"foreground": "#268BD2"
}
},
{
"scope": "token.info-token",
"settings": {
"foreground": "#6796e6"
}
},
{
"scope": "token.warn-token",
"settings": {
"foreground": "#cd9731"
}
},
{
"scope": "token.error-token",
"settings": {
"foreground": "#f44747"
}
},
{
"scope": "token.debug-token",
"settings": {
"foreground": "#b267e6"
}
},
{
"scope": "variable.object.property",
"settings": {
"foreground": "#839496"
}
},
{
"scope": "variable.parameter",
"settings": {
"foreground": "#839496"
}
},
{
"scope": "support.type",
"settings": {
"fontStyle": ""
}
},
{
"scope": "storage.type.function",
"settings": {
"fontStyle": ""
}
},
{
"scope": "entity.other.inherited-class",
"settings": {
"foreground": "#b58900"
}
},
{
"scope": "storage.modifier",
"settings": {
"foreground": "#859900ff",
"fontStyle": ""
}
},
{
"scope": "storage.type",
"settings": {
"foreground": "#859900ff",
"fontStyle": ""
}
},
{
"scope": "keyword.control.import",
"settings": {
"foreground": "#D33682"
}
},
{
"scope": "storage.modifier.async",
"settings": {
"foreground": "#859900ff",
"fontStyle": ""
}
},
{
"scope": "meta.import",
"settings": {
"foreground": "#839496"
}
},
{
"scope": "source.ts",
"settings": {
"foreground": "#839496"
}
},
{
"scope": "meta.function-call",
"settings": {
"foreground": "#839496"
}
},
{
"scope": "entity.name.type",
"settings": {
"foreground": "#b58900"
}
},
{
"scope": "entity.name.function",
"settings": {
"foreground": "#839496"
}
},
{
"scope": "variable.other",
"settings": {
"foreground": "#839496"
}
},
{
"scope": "storage.modifier.tsx",
"settings": {
"foreground": "#859900"
}
},
{
"scope": "entity.name.type.class.python",
"settings": {
"foreground": "#268BD2"
}
},
{
"scope": "support.type.python",
"settings": {
"foreground": "#268BD2"
}
},
{
"scope": "source.python",
"settings": {
"foreground": "#839496"
}
},
{
"scope": "keyword.control.import",
"settings": {
"foreground": "#cb4b16"
}
},
{
"scope": "keyword.control.from",
"settings": {
"foreground": "#cb4b16"
}
},
{
"scope": "constant.language.python",
"settings": {
"foreground": "#268BD2"
}
},
{
"scope": "entity.name.function.python",
"settings": {
"foreground": "#268BD2"
}
},
{
"scope": "punctuation.separator.dictionary.key-value.json, punctuation.separator.array.json, punctuation.separator.dictionary.pair.json",
"settings": {
"foreground": "#657B83"
}
},
{
"scope": "storage.type.ts",
"settings": {
"foreground": "#268BD2"
}
},
{
"scope": "support.type.primitive",
"settings": {
"foreground": "#b58900"
}
},
{
"scope": "punctuation.definition.dictionary.begin.json, punctuation.definition.dictionary.end.json, punctuation.definition.array.begin.json, punctuation.definition.array.end.json",
"settings": {
"foreground": "#DC3272"
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"name": "Solarized",
"author": "Ethan Schoonover (altercation)",
"themes": [
{
"name": "Solarized Dark",
"file_name": "dark.json",
"appearance": "dark"
},
{
"name": "Solarized Light",
"file_name": "light.json",
"appearance": "light"
}
]
}

View File

@ -0,0 +1,591 @@
{
"type": "light",
"colors": {
"focusBorder": "#d3af86",
"selection.background": "#ccc4b0",
"input.background": "#ddd6c1",
"input.foreground": "#586e75",
"inputOption.activeBorder": "#d3af86",
"input.placeholderForeground": "#586e75aa",
"dropdown.background": "#eee8d5",
"dropdown.border": "#d3af86",
"list.focusBackground": "#dfca8866",
"list.activeSelectionBackground": "#dfca88",
"list.activeSelectionForeground": "#6c6c6c",
"list.inactiveSelectionBackground": "#d1cbb8",
"list.hoverBackground": "#dfca8844",
"list.highlightForeground": "#b58900",
"pickerGroup.foreground": "#2aa19899",
"pickerGroup.border": "#2aa19899",
"button.background": "#ac9d57",
"badge.background": "#b58900aa",
"progressBar.background": "#b58900",
"editor.background": "#fdf6e3",
"editorWidget.background": "#eee8d5",
"editor.selectionBackground": "#eee8d5",
"editorHoverWidget.background": "#ccc4b0",
"editor.lineHighlightBackground": "#eee8d5",
"editorCursor.foreground": "#657b83",
"editorWhitespace.foreground": "#586e7580",
"editorLineNumber.foreground": "#9ca8a6",
"editorLineNumber.activeForeground": "#6f7776",
"editorGutter.background": "#eee8d5",
"peekViewTitle.background": "#eee8d5",
"peekView.border": "#b58900",
"peekViewResult.background": "#eee8d5",
"peekViewEditor.background": "#fffbf2",
"peekViewEditor.matchHighlightBackground": "#7744aa40",
"tab.activeBackground": "#fdf6e3",
"tab.inactiveBackground": "#d3cbb7",
"tab.border": "#ddd6c1",
"tab.inactiveForeground": "#586e75",
"editorGroup.background": "#fffbf2",
"editorGroupHeader.tabsBackground": "#d9d2c2",
"editorGroup.border": "#ddd6c1",
"editorGroup.dropBackground": "#ddd6c1aa",
"panel.border": "#ddd6c1",
"statusBar.foreground": "#586e75",
"statusBar.background": "#eee8d5",
"statusBar.noFolderBackground": "#eee8d5",
"statusBarItem.prominentBackground": "#ddd6c1",
"statusBarItem.prominentHoverBackground": "#ddd6c199",
"activityBar.background": "#ddd6c1",
"activityBar.foreground": "#584c27",
"activityBar.dropBackground": "#eee8d5",
"activityBarBadge.background": "#b58900",
"sideBar.background": "#eee8d5",
"sideBarTitle.foreground": "#586e75",
"titleBar.activeBackground": "#eee8d5",
"terminal.foreground": "#657b83",
"statusBar.debuggingBackground": "#eee8d5",
"debugExceptionWidget.border": "#ab395b",
"debugExceptionWidget.background": "#ddd6c1",
"debugToolBar.background": "#ddd6c1",
"extensionButton.prominentBackground": "#b58900",
"extensionButton.prominentHoverBackground": "#584c27aa",
"terminal.ansiBlack": "#657b83",
"terminal.ansiRed": "#dc322f",
"terminal.ansiGreen": "#859900",
"terminal.ansiYellow": "#b58900",
"terminal.ansiBlue": "#268bd2",
"terminal.ansiMagenta": "#d33682",
"terminal.ansiCyan": "#2aa198",
"terminal.ansiWhite": "#eee8d5",
"terminal.ansiBrightBlack": "#657b83",
"terminal.ansiBrightRed": "#cb4b16",
"terminal.ansiBrightGreen": "#859900",
"terminal.ansiBrightYellow": "#657b83",
"terminal.ansiBrightBlue": "#839496",
"terminal.ansiBrightMagenta": "#6c71c4",
"terminal.ansiBrightCyan": "#93a1a1",
"terminal.ansiBrightWhite": "#eee8d5",
"editorBracketHighlight.foreground1": "#268bd2",
"editorBracketHighlight.foreground2": "#b58900",
"editorBracketHighlight.foreground3": "#d33682"
},
"tokenColors": [
{
"settings": {
"foreground": "#333333ff",
"background": "#fdf6e3ff"
}
},
{
"scope": [
"meta.embedded",
"source.groovy.embedded"
],
"settings": {
"background": "#FDF6E3",
"foreground": "#657B83"
}
},
{
"name": "Comment",
"scope": "comment",
"settings": {
"fontStyle": "italic",
"foreground": "#93A1A1"
}
},
{
"name": "String",
"scope": "string",
"settings": {
"foreground": "#2AA198"
}
},
{
"name": "Regexp",
"scope": "string.regexp",
"settings": {
"foreground": "#D30102"
}
},
{
"name": "Number",
"scope": "constant.numeric",
"settings": {
"foreground": "#D33682"
}
},
{
"name": "Variable",
"scope": [
"variable.language",
"variable.other"
],
"settings": {
"foreground": "#268BD2"
}
},
{
"name": "Keyword",
"scope": "keyword",
"settings": {
"foreground": "#859900"
}
},
{
"name": "Storage",
"scope": "storage",
"settings": {
"fontStyle": "bold",
"foreground": "#073642"
}
},
{
"name": "Class name",
"scope": [
"entity.name.class",
"entity.name.type"
],
"settings": {
"foreground": "#268BD2"
}
},
{
"name": "Function name",
"scope": "entity.name.function",
"settings": {
"foreground": "#268BD2"
}
},
{
"name": "Variable start",
"scope": "punctuation.definition.variable",
"settings": {
"foreground": "#859900"
}
},
{
"name": "Embedded code markers",
"scope": [
"punctuation.section.embedded.begin",
"punctuation.section.embedded.end"
],
"settings": {
"foreground": "#D30102"
}
},
{
"name": "Built-in constant",
"scope": [
"constant.language",
"meta.preprocessor"
],
"settings": {
"foreground": "#B58900"
}
},
{
"name": "Support.construct",
"scope": [
"support.function.construct",
"keyword.other.new"
],
"settings": {
"foreground": "#D30102"
}
},
{
"name": "User-defined constant",
"scope": [
"constant.character",
"constant.other"
],
"settings": {
"foreground": "#CB4B16"
}
},
{
"name": "Inherited class",
"scope": "entity.other.inherited-class",
"settings": {}
},
{
"name": "Function argument",
"scope": "variable.parameter",
"settings": {}
},
{
"name": "Tag name",
"scope": "entity.name.tag",
"settings": {
"foreground": "#268BD2"
}
},
{
"name": "Tag start/end",
"scope": [
"punctuation.definition.tag.begin",
"punctuation.definition.tag.end"
],
"settings": {
"foreground": "#93A1A1"
}
},
{
"name": "Tag attribute",
"scope": "entity.other.attribute-name",
"settings": {
"foreground": "#93A1A1"
}
},
{
"name": "Library function",
"scope": "support.function",
"settings": {
"foreground": "#268BD2"
}
},
{
"name": "Continuation",
"scope": "punctuation.separator.continuation",
"settings": {
"foreground": "#D30102"
}
},
{
"name": "Library constant",
"scope": "support.constant",
"settings": {}
},
{
"name": "Library class/type",
"scope": [
"support.type",
"support.class"
],
"settings": {
"foreground": "#859900"
}
},
{
"name": "Library Exception",
"scope": "support.type.exception",
"settings": {
"foreground": "#CB4B16"
}
},
{
"name": "Library variable",
"scope": "support.other.variable",
"settings": {}
},
{
"name": "Invalid",
"scope": "invalid",
"settings": {}
},
{
"name": "diff: header",
"scope": [
"meta.diff",
"meta.diff.header"
],
"settings": {
"background": "#b58900",
"fontStyle": "italic",
"foreground": "#E0EDDD"
}
},
{
"name": "diff: deleted",
"scope": "markup.deleted",
"settings": {
"background": "#eee8d5",
"fontStyle": "",
"foreground": "#dc322f"
}
},
{
"name": "diff: changed",
"scope": "markup.changed",
"settings": {
"background": "#eee8d5",
"fontStyle": "",
"foreground": "#cb4b16"
}
},
{
"name": "diff: inserted",
"scope": "markup.inserted",
"settings": {
"background": "#eee8d5",
"foreground": "#219186"
}
},
{
"name": "Markup Quote",
"scope": "markup.quote",
"settings": {
"foreground": "#859900"
}
},
{
"name": "Markup Lists",
"scope": "markup.list",
"settings": {
"foreground": "#B58900"
}
},
{
"name": "Markup Styling",
"scope": [
"markup.bold",
"markup.italic"
],
"settings": {
"foreground": "#D33682"
}
},
{
"name": "Markup Inline",
"scope": "markup.inline.raw",
"settings": {
"fontStyle": "",
"foreground": "#2AA198"
}
},
{
"name": "Markup Headings",
"scope": "markup.heading",
"settings": {
"foreground": "#268BD2"
}
},
{
"name": "Markup Setext Header",
"scope": "markup.heading.setext",
"settings": {
"fontStyle": "",
"foreground": "#268BD2"
}
},
{
"scope": "token.info-token",
"settings": {
"foreground": "#316bcd"
}
},
{
"scope": "token.warn-token",
"settings": {
"foreground": "#cd9731"
}
},
{
"scope": "token.error-token",
"settings": {
"foreground": "#cd3131"
}
},
{
"scope": "token.debug-token",
"settings": {
"foreground": "#800080"
}
},
{
"scope": "storage.modifier",
"settings": {
"foreground": "#859900ff",
"fontStyle": ""
}
},
{
"scope": "storage.type",
"settings": {
"foreground": "#859900ff",
"fontStyle": ""
}
},
{
"scope": "keyword.control.import",
"settings": {
"foreground": "#D33682"
}
},
{
"scope": "storage.modifier.async",
"settings": {
"foreground": "#859900ff",
"fontStyle": ""
}
},
{
"scope": "meta.import",
"settings": {
"foreground": "#657b83"
}
},
{
"scope": "source.ts",
"settings": {
"foreground": "#657b83"
}
},
{
"scope": "meta.function-call",
"settings": {
"foreground": "#657b83"
}
},
{
"scope": "entity.name.type",
"settings": {
"foreground": "#b58900"
}
},
{
"scope": "entity.name.function",
"settings": {
"foreground": "#657b83"
}
},
{
"scope": "variable.other",
"settings": {
"foreground": "#657b83"
}
},
{
"scope": "storage.modifier.tsx",
"settings": {
"foreground": "#859900"
}
},
{
"scope": "storage.modifier",
"settings": {
"foreground": "#859900ff",
"fontStyle": ""
}
},
{
"scope": "storage.type",
"settings": {
"foreground": "#859900ff",
"fontStyle": ""
}
},
{
"scope": "keyword.control.import",
"settings": {
"foreground": "#D33682"
}
},
{
"scope": "storage.modifier.async",
"settings": {
"foreground": "#859900ff",
"fontStyle": ""
}
},
{
"scope": "meta.import",
"settings": {
"foreground": "#657b83"
}
},
{
"scope": "source.ts",
"settings": {
"foreground": "#657b83"
}
},
{
"scope": "meta.function-call",
"settings": {
"foreground": "#657b83"
}
},
{
"scope": "entity.name.type",
"settings": {
"foreground": "#b58900"
}
},
{
"scope": "entity.name.function",
"settings": {
"foreground": "#657b83"
}
},
{
"scope": "variable.other",
"settings": {
"foreground": "#657b83"
}
},
{
"scope": "storage.modifier.tsx",
"settings": {
"foreground": "#859900"
}
},
{
"scope": "punctuation.separator.dictionary.key-value.json, punctuation.separator.array.json, punctuation.separator.dictionary.pair.json",
"settings": {
"foreground": "#657B83"
}
},
{
"scope": "storage.type",
"settings": {
"foreground": "#268BD2"
}
},
{
"scope": "punctuation.definition.dictionary.begin.json, punctuation.definition.dictionary.end.json, punctuation.definition.array.begin.json, punctuation.definition.array.end.json",
"settings": {
"foreground": "#DC3272"
}
},
{
"scope": "support.type.primitive",
"settings": {
"foreground": "#b58900"
}
},
{
"scope": "keyword.control.import",
"settings": {
"foreground": "#cb4b16"
}
},
{
"scope": "keyword.control.from",
"settings": {
"foreground": "#cb4b16"
}
},
{
"scope": "source",
"settings": {
"foreground": "#657b83"
}
}
]
}

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 Robb Owen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,11 @@
{
"name": "Synthwave 84",
"author": "Robb Owen (robb0wen)",
"themes": [
{
"name": "Synthwave 84",
"file_name": "synthwave.json",
"appearance": "dark"
}
]
}

View File

@ -0,0 +1,822 @@
{
"name": "SynthWave 84",
"type": "dark",
"semanticHighlighting": true,
"colors": {
"focusBorder": "#1f212b",
"foreground": "#ffffff",
"widget.shadow": "#2a2139",
"selection.background": "#ffffff20",
"errorForeground": "#fe4450",
"textLink.activeForeground": "#ff7edb",
"textLink.foreground": "#f97e72",
"button.background": "#614D85",
"dropdown.background": "#232530",
"dropdown.listBackground": "#2a2139",
"input.background": "#2a2139",
"inputOption.activeBorder": "#ff7edb99",
"inputValidation.errorBackground": "#fe445080",
"inputValidation.errorBorder": "#fe445000",
"scrollbar.shadow": "#2a2139",
"scrollbarSlider.activeBackground": "#9d8bca20",
"scrollbarSlider.background": "#9d8bca30",
"scrollbarSlider.hoverBackground": "#9d8bca50",
"badge.foreground": "#ffffff",
"badge.background": "#2a2139",
"progressBar.background": "#f97e72",
"list.activeSelectionBackground": "#ffffff20",
"list.activeSelectionForeground": "#ffffff",
"list.dropBackground": "#34294f66",
"list.focusBackground": "#ffffff20",
"list.focusForeground": "#ffffff",
"list.highlightForeground": "#f97e72",
"list.hoverBackground": "#37294d99",
"list.hoverForeground": "#ffffff",
"list.inactiveSelectionBackground": "#ffffff20",
"list.inactiveSelectionForeground": "#ffffff",
"list.inactiveFocusBackground": "#2a213999",
"list.errorForeground": "#fe4450E6",
"list.warningForeground": "#72f1b8bb",
"activityBar.background": "#171520",
"activityBar.dropBackground": "#34294f66",
"activityBar.foreground": "#ffffffCC",
"activityBarBadge.background": "#f97e72",
"activityBarBadge.foreground": "#2a2139",
"sideBar.background": "#241b2f",
"sideBar.foreground": "#ffffff99",
"sideBar.dropBackground": "#34294f4c",
"sideBarSectionHeader.background": "#241b2f",
"sideBarSectionHeader.foreground": "#ffffffca",
"menu.background": "#463465",
"editorGroup.border": "#495495",
"editorGroup.dropBackground": "#4954954a",
"editorGroupHeader.tabsBackground": "#241b2f",
"tab.border": "#241b2f00",
"tab.activeBorder": "#880088",
"tab.inactiveBackground": "#262335",
"editor.background": "#262335",
"editorLineNumber.foreground": "#ffffff73",
"editorLineNumber.activeForeground": "#ffffffcc",
"editorCursor.background": "#241b2f",
"editorCursor.foreground": "#f97e72",
"editor.selectionBackground": "#ffffff20",
"editor.selectionHighlightBackground": "#ffffff20",
"editor.wordHighlightBackground": "#34294f88",
"editor.wordHighlightStrongBackground": "#34294f88",
"editor.findMatchBackground": "#D18616bb",
"editor.findMatchHighlightBackground": "#D1861655",
"editor.findRangeHighlightBackground": "#34294f1a",
"editor.hoverHighlightBackground": "#463564",
"editor.lineHighlightBorder": "#7059AB66",
"editor.rangeHighlightBackground": "#49549539",
"editorIndentGuide.background": "#444251",
"editorIndentGuide.activeBackground": "#A148AB80",
"editorRuler.foreground": "#A148AB80",
"editorCodeLens.foreground": "#ffffff7c",
"editorBracketMatch.background": "#34294f66",
"editorBracketMatch.border": "#495495",
"editorOverviewRuler.border": "#34294fb3",
"editorOverviewRuler.findMatchForeground": "#D1861699",
"editorOverviewRuler.modifiedForeground": "#b893ce99",
"editorOverviewRuler.addedForeground": "#09f7a099",
"editorOverviewRuler.deletedForeground": "#fe445099",
"editorOverviewRuler.errorForeground": "#fe4450dd",
"editorOverviewRuler.warningForeground": "#72f1b8cc",
"editorError.foreground": "#fe4450",
"editorWarning.foreground": "#72f1b8cc",
"editorGutter.modifiedBackground": "#b893ce8f",
"editorGutter.addedBackground": "#206d4bd6",
"editorGutter.deletedBackground": "#fa2e46a4",
"diffEditor.insertedTextBackground": "#0beb9935",
"diffEditor.removedTextBackground": "#fe445035",
"editorWidget.background": "#171520DC",
"editorWidget.border": "#ffffff22",
"editorWidget.resizeBorder": "#ffffff44",
"editorSuggestWidget.highlightForeground": "#f97e72",
"editorSuggestWidget.selectedBackground": "#ffffff36",
"peekView.border": "#495495",
"peekViewEditor.background": "#232530",
"peekViewEditor.matchHighlightBackground": "#D18616bb",
"peekViewResult.background": "#232530",
"peekViewResult.matchHighlightBackground": "#D1861655",
"peekViewResult.selectionBackground": "#2a213980",
"peekViewTitle.background": "#232530",
"panelTitle.activeBorder": "#f97e72",
"statusBar.background": "#241b2f",
"statusBar.foreground": "#ffffff80",
"statusBar.debuggingBackground": "#f97e72",
"statusBar.debuggingForeground": "#08080f",
"statusBar.noFolderBackground": "#241b2f",
"statusBarItem.prominentBackground": "#2a2139",
"statusBarItem.prominentHoverBackground": "#34294f",
"titleBar.activeBackground": "#241b2f",
"titleBar.inactiveBackground": "#241b2f",
"extensionButton.prominentBackground": "#f97e72",
"extensionButton.prominentHoverBackground": "#ff7edb",
"pickerGroup.foreground": "#f97e72ea",
"terminal.foreground": "#ffffff",
"terminal.ansiBlue": "#03edf9",
"terminal.ansiBrightBlue": "#03edf9",
"terminal.ansiBrightCyan": "#03edf9",
"terminal.ansiBrightGreen": "#72f1b8",
"terminal.ansiBrightMagenta": "#ff7edb",
"terminal.ansiBrightRed": "#fe4450",
"terminal.ansiBrightYellow": "#fede5d",
"terminal.ansiCyan": "#03edf9",
"terminal.ansiGreen": "#72f1b8",
"terminal.ansiMagenta": "#ff7edb",
"terminal.ansiRed": "#fe4450",
"terminal.ansiYellow": "#f3e70f",
"terminal.selectionBackground": "#ffffff20",
"terminalCursor.background": "#ffffff",
"terminalCursor.foreground": "#03edf9",
"debugToolBar.background": "#463465",
"walkThrough.embeddedEditorBackground": "#232530",
"gitDecoration.modifiedResourceForeground": "#b893ceee",
"gitDecoration.deletedResourceForeground": "#fe4450",
"gitDecoration.addedResourceForeground": "#72f1b8cc",
"gitDecoration.untrackedResourceForeground": "#72f1b8",
"gitDecoration.ignoredResourceForeground": "#ffffff59",
"minimapGutter.addedBackground": "#09f7a099",
"minimapGutter.modifiedBackground": "#b893ce",
"minimapGutter.deletedBackground": "#fe4450",
"breadcrumbPicker.background": "#232530"
},
"tokenColors": [
{
"name": "Comment",
"scope": [
"comment",
"string.quoted.docstring.multi.python",
"string.quoted.docstring.multi.python punctuation.definition.string.begin.python",
"string.quoted.docstring.multi.python punctuation.definition.string.end.python"
],
"settings": {
"foreground": "#848bbd",
"fontStyle": "italic"
}
},
{
"name": "String",
"scope": ["string.quoted", "string.template", "punctuation.definition.string"],
"settings": {
"foreground": "#ff8b39"
}
},
{
"name": "Punctuation within templates",
"scope": "string.template meta.embedded.line",
"settings": {
"foreground": "#b6b1b1"
}
},
{
"name": "Variable",
"scope": ["variable", "entity.name.variable"],
"settings": {
"foreground": "#ff7edb"
}
},
{
"name": "Language variable",
"scope": "variable.language",
"settings": {
"foreground": "#fe4450",
"fontStyle": "bold"
}
},
{
"name": "Parameter",
"scope": "variable.parameter",
"settings": {
"fontStyle": "italic"
}
},
{
"name": "Storage (declaration or modifier keyword)",
"scope": ["storage.type", "storage.modifier"],
"settings": {
"foreground": "#fede5d"
}
},
{
"name": "Constant",
"scope": "constant",
"settings": {
"foreground": "#f97e72"
}
},
{
"name": "Regex",
"scope": "string.regexp",
"settings": {
"foreground": "#f97e72"
}
},
{
"name": "Number",
"scope": "constant.numeric",
"settings": {
"foreground": "#f97e72"
}
},
{
"name": "Language constant (boolean, null)",
"scope": "constant.language",
"settings": {
"foreground": "#f97e72"
}
},
{
"name": "Character escape",
"scope": "constant.character.escape",
"settings": {
"foreground": "#36f9f6"
}
},
{
"name": "Entity",
"scope": "entity.name",
"settings": {
"foreground": "#fe4450"
}
},
{
"name": "HTML or XML tag",
"scope": "entity.name.tag",
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "HTML or XML tag brackets",
"scope": ["punctuation.definition.tag"],
"settings": {
"foreground": "#36f9f6"
}
},
{
"name": "Tag attribute",
"scope": "entity.other.attribute-name",
"settings": {
"foreground": "#fede5d"
}
},
{
"name": "Tag attribute HTML",
"scope": "entity.other.attribute-name.html",
"settings": {
"foreground": "#fede5d",
"fontStyle": "italic"
}
},
{
"name": "Class",
"scope": ["entity.name.type", "meta.attribute.class.html"],
"settings": {
"foreground": "#fe4450"
}
},
{
"name": "Inherited class",
"scope": "entity.other.inherited-class",
"settings": {
"foreground": "#D50"
}
},
{
"name": "Function",
"scope": ["entity.name.function", "variable.function"],
"settings": {
"foreground": "#36f9f6"
}
},
{
"name": "JS Export",
"scope": ["keyword.control.export.js", "keyword.control.import.js"],
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "JS Numerics",
"scope": ["constant.numeric.decimal.js"],
"settings": {
"foreground": "#2EE2FA"
}
},
{
"name": "Keyword",
"scope": "keyword",
"settings": {
"foreground": "#fede5d"
}
},
{
"name": "Control keyword",
"scope": "keyword.control",
"settings": {
"foreground": "#fede5d"
}
},
{
"name": "Operator",
"scope": "keyword.operator",
"settings": {
"foreground": "#fede5d"
}
},
{
"name": "Special operator",
"scope": [
"keyword.operator.new",
"keyword.operator.expression",
"keyword.operator.logical"
],
"settings": {
"foreground": "#fede5d"
}
},
{
"name": "Unit",
"scope": "keyword.other.unit",
"settings": {
"foreground": "#f97e72"
}
},
{
"name": "Support",
"scope": "support",
"settings": {
"foreground": "#fe4450"
}
},
{
"name": "Support function",
"scope": "support.function",
"settings": {
"foreground": "#36f9f6"
}
},
{
"name": "Support variable",
"scope": "support.variable",
"settings": {
"foreground": "#ff7edb"
}
},
{
"name": "Object literal key / property",
"scope": ["meta.object-literal.key", "support.type.property-name"],
"settings": {
"foreground": "#ff7edb"
}
},
{
"name": "Key-value separator",
"scope": "punctuation.separator.key-value",
"settings": {
"foreground": "#b6b1b1"
}
},
{
"name": "Embedded punctuation",
"scope": "punctuation.section.embedded",
"settings": {
"foreground": "#fede5d"
}
},
{
"name": "Template expression",
"scope": [
"punctuation.definition.template-expression.begin",
"punctuation.definition.template-expression.end"
],
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "CSS property",
"scope": ["support.type.property-name.css", "support.type.property-name.json"],
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "JS Switch control",
"scope": "switch-block.expr.js",
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "JS object path",
"scope": "variable.other.constant.property.js, variable.other.property.js",
"settings": {
"foreground": "#2ee2fa"
}
},
{
"name": "Color",
"scope": "constant.other.color",
"settings": {
"foreground": "#f97e72"
}
},
{
"name": "Font names",
"scope": "support.constant.font-name",
"settings": {
"foreground": "#f97e72"
}
},
{
"name": "CSS #id",
"scope": "entity.other.attribute-name.id",
"settings": {
"foreground": "#36f9f6"
}
},
{
"name": "Pseudo CSS",
"scope": [
"entity.other.attribute-name.pseudo-element",
"entity.other.attribute-name.pseudo-class"
],
"settings": {
"foreground": "#D50"
}
},
{
"name": "CSS support functions (rgb)",
"scope": "support.function.misc.css",
"settings": {
"foreground": "#fe4450"
}
},
{
"name": "Markup heading",
"scope": ["markup.heading", "entity.name.section"],
"settings": {
"foreground": "#ff7edb"
}
},
{
"name": "Markup text",
"scope": ["text.html", "keyword.operator.assignment"],
"settings": {
"foreground": "#ffffffee"
}
},
{
"name": "Markup quote",
"scope": "markup.quote",
"settings": {
"foreground": "#b6b1b1cc",
"fontStyle": "italic"
}
},
{
"name": "Markup list",
"scope": "beginning.punctuation.definition.list",
"settings": {
"foreground": "#ff7edb"
}
},
{
"name": "Markup link",
"scope": "markup.underline.link",
"settings": {
"foreground": "#D50"
}
},
{
"name": "Markup link description",
"scope": "string.other.link.description",
"settings": {
"foreground": "#f97e72"
}
},
{
"name": "Python function call",
"scope": "meta.function-call.generic.python",
"settings": {
"foreground": "#36f9f6"
}
},
{
"name": "Python variable params",
"scope": "variable.parameter.function-call.python",
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "C# storage type",
"scope": "storage.type.cs",
"settings": {
"foreground": "#fe4450"
}
},
{
"name": "C# local variable",
"scope": "entity.name.variable.local.cs",
"settings": {
"foreground": "#ff7edb"
}
},
{
"name": "C# properties and fields",
"scope": ["entity.name.variable.field.cs", "entity.name.variable.property.cs"],
"settings": {
"foreground": "#ff7edb"
}
},
{
"name": "C placeholder",
"scope": "constant.other.placeholder.c",
"settings": {
"foreground": "#72f1b8",
"fontStyle": "italic"
}
},
{
"name": "C preprocessors",
"scope": ["keyword.control.directive.include.c", "keyword.control.directive.define.c"],
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "C storage modifier",
"scope": "storage.modifier.c",
"settings": {
"foreground": "#fe4450"
}
},
{
"name": "C++ operators",
"scope": "source.cpp keyword.operator",
"settings": {
"foreground": "#fede5d"
}
},
{
"name": "C++ placeholder",
"scope": "constant.other.placeholder.cpp",
"settings": {
"foreground": "#72f1b8",
"fontStyle": "italic"
}
},
{
"name": "C++ include",
"scope": [
"keyword.control.directive.include.cpp",
"keyword.control.directive.define.cpp"
],
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "C++ constant modifier",
"scope": "storage.modifier.specifier.const.cpp",
"settings": {
"foreground": "#fe4450"
}
},
{
"name": "Elixir Classes",
"scope": [
"source.elixir support.type.elixir",
"source.elixir meta.module.elixir entity.name.class.elixir"
],
"settings": {
"foreground": "#36f9f6"
}
},
{
"name": "Elixir Functions",
"scope": "source.elixir entity.name.function",
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "Elixir Constants",
"scope": [
"source.elixir constant.other.symbol.elixir",
"source.elixir constant.other.keywords.elixir"
],
"settings": {
"foreground": "#36f9f6"
}
},
{
"name": "Elixir String Punctuation",
"scope": "source.elixir punctuation.definition.string",
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "Elixir",
"scope": [
"source.elixir variable.other.readwrite.module.elixir",
"source.elixir variable.other.readwrite.module.elixir punctuation.definition.variable.elixir"
],
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "Elixir Binary Punctuation",
"scope": "source.elixir .punctuation.binary.elixir",
"settings": {
"foreground": "#ff7edb",
"fontStyle": "italic"
}
},
{
"name": "Clojure Globals",
"scope": ["entity.global.clojure"],
"settings": {
"foreground": "#36f9f6",
"fontStyle": "bold"
}
},
{
"name": "Clojure Storage",
"scope": ["storage.control.clojure"],
"settings": {
"foreground": "#36f9f6",
"fontStyle": "italic"
}
},
{
"name": "Clojure Metadata",
"scope": ["meta.metadata.simple.clojure", "meta.metadata.map.clojure"],
"settings": {
"foreground": "#fe4450",
"fontStyle": "italic"
}
},
{
"name": "Clojure Macros, Quoted",
"scope": ["meta.quoted-expression.clojure"],
"settings": {
"fontStyle": "italic"
}
},
{
"name": "Clojure Symbols",
"scope": ["meta.symbol.clojure"],
"settings": {
"foreground": "#ff7edbff"
}
},
{
"name": "Go basic",
"scope": "source.go",
"settings": {
"foreground": "#ff7edbff"
}
},
{
"name": "Go Function Calls",
"scope": "source.go meta.function-call.go",
"settings": {
"foreground": "#36f9f6"
}
},
{
"name": "Go Keywords",
"scope": [
"source.go keyword.package.go",
"source.go keyword.import.go",
"source.go keyword.function.go",
"source.go keyword.type.go",
"source.go keyword.const.go",
"source.go keyword.var.go",
"source.go keyword.map.go",
"source.go keyword.channel.go",
"source.go keyword.control.go"
],
"settings": {
"foreground": "#fede5d"
}
},
{
"name": "Go interfaces",
"scope": [
"source.go storage.type",
"source.go keyword.struct.go",
"source.go keyword.interface.go"
],
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "Go Constants e.g. nil, string format (%s, %d, etc.)",
"scope": [
"source.go constant.language.go",
"source.go constant.other.placeholder.go",
"source.go variable"
],
"settings": {
"foreground": "#2EE2FA"
}
},
{
"name": "Markdown links and image paths",
"scope": ["markup.underline.link.markdown", "markup.inline.raw.string.markdown"],
"settings": {
"foreground": "#72f1b8",
"fontStyle": "italic"
}
},
{
"name": "Markdown links and image paths",
"scope": ["string.other.link.title.markdown"],
"settings": {
"foreground": "#fede5d"
}
},
{
"name": "Markdown headings",
"scope": ["markup.heading.markdown", "entity.name.section.markdown"],
"settings": {
"foreground": "#ff7edb",
"fontStyle": "bold"
}
},
{
"name": "Markdown italic",
"scope": ["markup.italic.markdown"],
"settings": {
"foreground": "#2EE2FA",
"fontStyle": "italic"
}
},
{
"name": "Markdown bold",
"scope": ["markup.bold.markdown"],
"settings": {
"foreground": "#2EE2FA",
"fontStyle": "bold"
}
},
{
"name": "Markdown quotes",
"scope": ["punctuation.definition.quote.begin.markdown", "markup.quote.markdown"],
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "Basic source colours",
"scope": ["source.dart", "source.python", "source.scala"],
"settings": {
"foreground": "#ff7edbff"
}
},
{
"name": "Dart strings",
"scope": ["string.interpolated.single.dart"],
"settings": {
"foreground": "#f97e72"
}
},
{
"name": "Dart variable params",
"scope": ["variable.parameter.dart"],
"settings": {
"foreground": "#72f1b8"
}
},
{
"name": "Dart numerics",
"scope": ["constant.numeric.dart"],
"settings": {
"foreground": "#2EE2FA"
}
},
{
"name": "Scala variable params",
"scope": ["variable.parameter.scala"],
"settings": {
"foreground": "#2EE2FA"
}
},
{
"name": "Scala",
"scope": ["meta.template.expression.scala"],
"settings": {
"foreground": "#72f1b8"
}
}
]
}

View File

@ -15,8 +15,8 @@ use futures::{
TryStreamExt, TryStreamExt,
}; };
use gpui::{ use gpui::{
serde_json, AnyModel, AnyWeakModel, AppContext, AsyncAppContext, Model, SemanticVersion, Task, actions, serde_json, AnyModel, AnyWeakModel, AppContext, AsyncAppContext, Model,
WeakModel, SemanticVersion, Task, WeakModel,
}; };
use lazy_static::lazy_static; use lazy_static::lazy_static;
use parking_lot::RwLock; use parking_lot::RwLock;
@ -70,14 +70,7 @@ pub const ZED_SECRET_CLIENT_TOKEN: &str = "618033988749894";
pub const INITIAL_RECONNECTION_DELAY: Duration = Duration::from_millis(100); pub const INITIAL_RECONNECTION_DELAY: Duration = Duration::from_millis(100);
pub const CONNECTION_TIMEOUT: Duration = Duration::from_secs(5); pub const CONNECTION_TIMEOUT: Duration = Duration::from_secs(5);
#[derive(Clone, Default, PartialEq, Deserialize)] actions!(SignIn, SignOut, Reconnect);
pub struct SignIn;
#[derive(Clone, Default, PartialEq, Deserialize)]
pub struct SignOut;
#[derive(Clone, Default, PartialEq, Deserialize)]
pub struct Reconnect;
pub fn init_settings(cx: &mut AppContext) { pub fn init_settings(cx: &mut AppContext) {
TelemetrySettings::register(cx); TelemetrySettings::register(cx);
@ -87,7 +80,6 @@ pub fn init(client: &Arc<Client>, cx: &mut AppContext) {
init_settings(cx); init_settings(cx);
let client = Arc::downgrade(client); let client = Arc::downgrade(client);
cx.register_action_type::<SignIn>();
cx.on_action({ cx.on_action({
let client = client.clone(); let client = client.clone();
move |_: &SignIn, cx| { move |_: &SignIn, cx| {
@ -100,7 +92,6 @@ pub fn init(client: &Arc<Client>, cx: &mut AppContext) {
} }
}); });
cx.register_action_type::<SignOut>();
cx.on_action({ cx.on_action({
let client = client.clone(); let client = client.clone();
move |_: &SignOut, cx| { move |_: &SignOut, cx| {
@ -113,7 +104,6 @@ pub fn init(client: &Arc<Client>, cx: &mut AppContext) {
} }
}); });
cx.register_action_type::<Reconnect>();
cx.on_action({ cx.on_action({
let client = client.clone(); let client = client.clone();
move |_: &Reconnect, cx| { move |_: &Reconnect, cx| {

View File

@ -7,8 +7,8 @@ use async_tar::Archive;
use collections::{HashMap, HashSet}; use collections::{HashMap, HashSet};
use futures::{channel::oneshot, future::Shared, Future, FutureExt, TryFutureExt}; use futures::{channel::oneshot, future::Shared, Future, FutureExt, TryFutureExt};
use gpui::{ use gpui::{
AppContext, AsyncAppContext, Context, Entity, EntityId, EventEmitter, Model, ModelContext, actions, AppContext, AsyncAppContext, Context, Entity, EntityId, EventEmitter, Model,
Task, WeakModel, ModelContext, Task, WeakModel,
}; };
use language::{ use language::{
language_settings::{all_language_settings, language_settings}, language_settings::{all_language_settings, language_settings},
@ -34,19 +34,11 @@ use util::{
// todo!() // todo!()
// const COPILOT_AUTH_NAMESPACE: &'static str = "copilot_auth"; // const COPILOT_AUTH_NAMESPACE: &'static str = "copilot_auth";
// actions!(copilot_auth, [SignIn, SignOut]); actions!(SignIn, SignOut);
// todo!() // todo!()
// const COPILOT_NAMESPACE: &'static str = "copilot"; // const COPILOT_NAMESPACE: &'static str = "copilot";
// actions!( actions!(Suggest, NextSuggestion, PreviousSuggestion, Reinstall);
// copilot,
// [Suggest, NextSuggestion, PreviousSuggestion, Reinstall]
// );
//
pub struct Suggest;
pub struct NextSuggestion;
pub struct PreviousSuggestion;
pub struct Reinstall;
pub fn init( pub fn init(
new_server_id: LanguageServerId, new_server_id: LanguageServerId,

View File

@ -31,7 +31,7 @@ drag_and_drop = { path = "../drag_and_drop" }
collections = { path = "../collections" } collections = { path = "../collections" }
# context_menu = { path = "../context_menu" } # context_menu = { path = "../context_menu" }
fuzzy = { package = "fuzzy2", path = "../fuzzy2" } fuzzy = { package = "fuzzy2", path = "../fuzzy2" }
git = { path = "../git" } git = { package = "git3", path = "../git3" }
gpui = { package = "gpui2", path = "../gpui2" } gpui = { package = "gpui2", path = "../gpui2" }
language = { package = "language2", path = "../language2" } language = { package = "language2", path = "../language2" }
lsp = { package = "lsp2", path = "../lsp2" } lsp = { package = "lsp2", path = "../lsp2" }

View File

@ -4,6 +4,7 @@ mod inlay_map;
mod tab_map; mod tab_map;
mod wrap_map; mod wrap_map;
use crate::EditorStyle;
use crate::{ use crate::{
link_go_to_definition::InlayHighlight, movement::TextLayoutDetails, Anchor, AnchorRangeExt, link_go_to_definition::InlayHighlight, movement::TextLayoutDetails, Anchor, AnchorRangeExt,
InlayId, MultiBuffer, MultiBufferSnapshot, ToOffset, ToPoint, InlayId, MultiBuffer, MultiBufferSnapshot, ToOffset, ToPoint,
@ -11,14 +12,18 @@ use crate::{
pub use block_map::{BlockMap, BlockPoint}; pub use block_map::{BlockMap, BlockPoint};
use collections::{BTreeMap, HashMap, HashSet}; use collections::{BTreeMap, HashMap, HashSet};
use fold_map::FoldMap; use fold_map::FoldMap;
use gpui::{Font, FontId, HighlightStyle, Hsla, Line, Model, ModelContext, Pixels}; use gpui::{
Font, FontId, HighlightStyle, Hsla, Line, Model, ModelContext, Pixels, TextRun, UnderlineStyle,
};
use inlay_map::InlayMap; use inlay_map::InlayMap;
use language::{ use language::{
language_settings::language_settings, OffsetUtf16, Point, Subscription as BufferSubscription, language_settings::language_settings, OffsetUtf16, Point, Subscription as BufferSubscription,
}; };
use lsp::DiagnosticSeverity;
use std::{any::TypeId, borrow::Cow, fmt::Debug, num::NonZeroU32, ops::Range, sync::Arc}; use std::{any::TypeId, borrow::Cow, fmt::Debug, num::NonZeroU32, ops::Range, sync::Arc};
use sum_tree::{Bias, TreeMap}; use sum_tree::{Bias, TreeMap};
use tab_map::TabMap; use tab_map::TabMap;
use theme::{SyntaxTheme, Theme};
use wrap_map::WrapMap; use wrap_map::WrapMap;
pub use block_map::{ pub use block_map::{
@ -35,6 +40,8 @@ pub enum FoldStatus {
Foldable, Foldable,
} }
const UNNECESSARY_CODE_FADE: f32 = 0.3;
pub trait ToDisplayPoint { pub trait ToDisplayPoint {
fn to_display_point(&self, map: &DisplaySnapshot) -> DisplayPoint; fn to_display_point(&self, map: &DisplaySnapshot) -> DisplayPoint;
} }
@ -496,63 +503,63 @@ impl DisplaySnapshot {
) )
} }
// pub fn highlighted_chunks<'a>( pub fn highlighted_chunks<'a>(
// &'a self, &'a self,
// display_rows: Range<u32>, display_rows: Range<u32>,
// language_aware: bool, language_aware: bool,
// style: &'a EditorStyle, editor_style: &'a EditorStyle,
// ) -> impl Iterator<Item = HighlightedChunk<'a>> { ) -> impl Iterator<Item = HighlightedChunk<'a>> {
// self.chunks( self.chunks(
// display_rows, display_rows,
// language_aware, language_aware,
// Some(style.theme.hint), Some(editor_style.syntax.inlay_style),
// Some(style.theme.suggestion), Some(editor_style.syntax.suggestion_style),
// ) )
// .map(|chunk| { .map(|chunk| {
// let mut highlight_style = chunk let mut highlight_style = chunk
// .syntax_highlight_id .syntax_highlight_id
// .and_then(|id| id.style(&style.syntax)); .and_then(|id| id.style(&editor_style.syntax));
// if let Some(chunk_highlight) = chunk.highlight_style { if let Some(chunk_highlight) = chunk.highlight_style {
// if let Some(highlight_style) = highlight_style.as_mut() { if let Some(highlight_style) = highlight_style.as_mut() {
// highlight_style.highlight(chunk_highlight); highlight_style.highlight(chunk_highlight);
// } else { } else {
// highlight_style = Some(chunk_highlight); highlight_style = Some(chunk_highlight);
// } }
// } }
// let mut diagnostic_highlight = HighlightStyle::default(); let mut diagnostic_highlight = HighlightStyle::default();
// if chunk.is_unnecessary { if chunk.is_unnecessary {
// diagnostic_highlight.fade_out = Some(style.unnecessary_code_fade); diagnostic_highlight.fade_out = Some(UNNECESSARY_CODE_FADE);
// } }
// if let Some(severity) = chunk.diagnostic_severity { if let Some(severity) = chunk.diagnostic_severity {
// // Omit underlines for HINT/INFO diagnostics on 'unnecessary' code. // Omit underlines for HINT/INFO diagnostics on 'unnecessary' code.
// if severity <= DiagnosticSeverity::WARNING || !chunk.is_unnecessary { if severity <= DiagnosticSeverity::WARNING || !chunk.is_unnecessary {
// todo!() let diagnostic_color =
// // let diagnostic_style = super::diagnostic_style(severity, true, style); super::diagnostic_style(severity, true, &editor_style.diagnostic_style);
// // diagnostic_highlight.underline = Some(UnderlineStyle { diagnostic_highlight.underline = Some(UnderlineStyle {
// // color: Some(diagnostic_style.message.text.color), color: Some(diagnostic_color),
// // thickness: 1.0.into(), thickness: 1.0.into(),
// // wavy: true, wavy: true,
// // }); });
// } }
// } }
// if let Some(highlight_style) = highlight_style.as_mut() { if let Some(highlight_style) = highlight_style.as_mut() {
// highlight_style.highlight(diagnostic_highlight); highlight_style.highlight(diagnostic_highlight);
// } else { } else {
// highlight_style = Some(diagnostic_highlight); highlight_style = Some(diagnostic_highlight);
// } }
// HighlightedChunk { HighlightedChunk {
// chunk: chunk.text, chunk: chunk.text,
// style: highlight_style, style: highlight_style,
// is_tab: chunk.is_tab, is_tab: chunk.is_tab,
// } }
// }) })
// } }
pub fn lay_out_line_for_row( pub fn lay_out_line_for_row(
&self, &self,
@ -560,53 +567,46 @@ impl DisplaySnapshot {
TextLayoutDetails { TextLayoutDetails {
text_system, text_system,
editor_style, editor_style,
rem_size,
}: &TextLayoutDetails, }: &TextLayoutDetails,
) -> Line { ) -> Line {
todo!() let mut runs = Vec::new();
// let mut styles = Vec::new(); let mut line = String::new();
// let mut line = String::new(); let mut ended_in_newline = false;
// let mut ended_in_newline = false;
// let range = display_row..display_row + 1; let range = display_row..display_row + 1;
// for chunk in self.highlighted_chunks(range, false, editor_style) { for chunk in self.highlighted_chunks(range, false, &editor_style) {
// line.push_str(chunk.chunk); line.push_str(chunk.chunk);
// let text_style = if let Some(style) = chunk.style { let text_style = if let Some(style) = chunk.style {
// editor_style editor_style
// .text .text
// .clone() .clone()
// .highlight(style, text_system) .highlight(style)
// .map(Cow::Owned) .map(Cow::Owned)
// .unwrap_or_else(|_| Cow::Borrowed(&editor_style.text)) .unwrap_or_else(|_| Cow::Borrowed(&editor_style.text))
// } else { } else {
// Cow::Borrowed(&editor_style.text) Cow::Borrowed(&editor_style.text)
// }; };
// ended_in_newline = chunk.chunk.ends_with("\n"); ended_in_newline = chunk.chunk.ends_with("\n");
// styles.push( runs.push(text_style.to_run(chunk.chunk.len()))
// todo!(), // len: chunk.chunk.len(), }
// // font_id: text_style.font_id,
// // color: text_style.color,
// // underline: text_style.underline,
// );
// }
// // our pixel positioning logic assumes each line ends in \n, // our pixel positioning logic assumes each line ends in \n,
// // this is almost always true except for the last line which // this is almost always true except for the last line which
// // may have no trailing newline. // may have no trailing newline.
// if !ended_in_newline && display_row == self.max_point().row() { if !ended_in_newline && display_row == self.max_point().row() {
// line.push_str("\n"); line.push_str("\n");
runs.push(editor_style.text.to_run("\n".len()));
}
// todo!(); let font_size = editor_style.text.font_size.to_pixels(*rem_size);
// // styles.push(RunStyle { text_system
// // len: "\n".len(), .layout_text(&line, font_size, &runs, None)
// // font_id: editor_style.text.font_id, .unwrap()
// // color: editor_style.text_color, .pop()
// // underline: editor_style.text.underline, .unwrap()
// // });
// }
// text_system.layout_text(&line, editor_style.text.font_size, &styles, None)
} }
pub fn x_for_point( pub fn x_for_point(

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -24,7 +24,7 @@ pub fn refresh_matching_bracket_highlights(editor: &mut Editor, cx: &mut ViewCon
opening_range.to_anchors(&snapshot.buffer_snapshot), opening_range.to_anchors(&snapshot.buffer_snapshot),
closing_range.to_anchors(&snapshot.buffer_snapshot), closing_range.to_anchors(&snapshot.buffer_snapshot),
], ],
|theme| todo!("theme.editor.document_highlight_read_background"), |theme| theme.editor_document_highlight_read_background,
cx, cx,
) )
} }

View File

@ -144,8 +144,7 @@ pub fn hide_hover(editor: &mut Editor, cx: &mut ViewContext<Editor>) -> bool {
editor.hover_state.info_task = None; editor.hover_state.info_task = None;
editor.hover_state.triggered_from = None; editor.hover_state.triggered_from = None;
// todo!() editor.clear_background_highlights::<HoverState>(cx);
// editor.clear_background_highlights::<HoverState>(cx);
if did_hide { if did_hide {
cx.notify(); cx.notify();
@ -325,23 +324,22 @@ fn show_hover(
}; };
this.update(&mut cx, |this, cx| { this.update(&mut cx, |this, cx| {
todo!(); if let Some(symbol_range) = hover_popover
// if let Some(symbol_range) = hover_popover .as_ref()
// .as_ref() .and_then(|hover_popover| hover_popover.symbol_range.as_text_range())
// .and_then(|hover_popover| hover_popover.symbol_range.as_text_range()) {
// { // Highlight the selected symbol using a background highlight
// // Highlight the selected symbol using a background highlight this.highlight_background::<HoverState>(
// this.highlight_background::<HoverState>( vec![symbol_range],
// vec![symbol_range], |theme| theme.element_hover, // todo! update theme
// |theme| theme.editor.hover_popover.highlight, cx,
// cx, );
// ); } else {
// } else { this.clear_background_highlights::<HoverState>(cx);
// this.clear_background_highlights::<HoverState>(cx); }
// }
// this.hover_state.info_popover = hover_popover;
// this.hover_state.info_popover = hover_popover; cx.notify();
// cx.notify();
})?; })?;
Ok::<_, anyhow::Error>(()) Ok::<_, anyhow::Error>(())

View File

@ -27,7 +27,7 @@ use std::{
sync::Arc, sync::Arc,
}; };
use text::Selection; use text::Selection;
use theme::{ActiveTheme, ThemeVariant}; use theme::{ActiveTheme, Theme};
use util::{paths::PathExt, ResultExt, TryFutureExt}; use util::{paths::PathExt, ResultExt, TryFutureExt};
use workspace::item::{BreadcrumbText, FollowableItemHandle}; use workspace::item::{BreadcrumbText, FollowableItemHandle};
use workspace::{ use workspace::{
@ -159,16 +159,14 @@ impl FollowableItem for Editor {
self.buffer.update(cx, |buffer, cx| { self.buffer.update(cx, |buffer, cx| {
buffer.remove_active_selections(cx); buffer.remove_active_selections(cx);
}); });
} else { } else if self.focus_handle.is_focused(cx) {
self.buffer.update(cx, |buffer, cx| { self.buffer.update(cx, |buffer, cx| {
if self.focused { buffer.set_active_selections(
buffer.set_active_selections( &self.selections.disjoint_anchors(),
&self.selections.disjoint_anchors(), self.selections.line_mode,
self.selections.line_mode, self.cursor_shape,
self.cursor_shape, cx,
cx, );
);
}
}); });
} }
cx.notify(); cx.notify();
@ -779,7 +777,7 @@ impl Item for Editor {
ToolbarItemLocation::PrimaryLeft { flex: None } ToolbarItemLocation::PrimaryLeft { flex: None }
} }
fn breadcrumbs(&self, variant: &ThemeVariant, cx: &AppContext) -> Option<Vec<BreadcrumbText>> { fn breadcrumbs(&self, variant: &Theme, cx: &AppContext) -> Option<Vec<BreadcrumbText>> {
todo!(); todo!();
// let cursor = self.selections.newest_anchor().head(); // let cursor = self.selections.newest_anchor().head();
// let multibuffer = &self.buffer().read(cx); // let multibuffer = &self.buffer().read(cx);

View File

@ -171,173 +171,170 @@ pub fn update_inlay_link_and_hover_points(
shift_held: bool, shift_held: bool,
cx: &mut ViewContext<'_, Editor>, cx: &mut ViewContext<'_, Editor>,
) { ) {
todo!("old implementation below") let hovered_offset = if point_for_position.column_overshoot_after_line_end == 0 {
} Some(snapshot.display_point_to_inlay_offset(point_for_position.exact_unclipped, Bias::Left))
// ) { } else {
// let hovered_offset = if point_for_position.column_overshoot_after_line_end == 0 { None
// Some(snapshot.display_point_to_inlay_offset(point_for_position.exact_unclipped, Bias::Left)) };
// } else { let mut go_to_definition_updated = false;
// None let mut hover_updated = false;
// }; if let Some(hovered_offset) = hovered_offset {
// let mut go_to_definition_updated = false; let buffer_snapshot = editor.buffer().read(cx).snapshot(cx);
// let mut hover_updated = false; let previous_valid_anchor = buffer_snapshot.anchor_at(
// if let Some(hovered_offset) = hovered_offset { point_for_position.previous_valid.to_point(snapshot),
// let buffer_snapshot = editor.buffer().read(cx).snapshot(cx); Bias::Left,
// let previous_valid_anchor = buffer_snapshot.anchor_at( );
// point_for_position.previous_valid.to_point(snapshot), let next_valid_anchor = buffer_snapshot.anchor_at(
// Bias::Left, point_for_position.next_valid.to_point(snapshot),
// ); Bias::Right,
// let next_valid_anchor = buffer_snapshot.anchor_at( );
// point_for_position.next_valid.to_point(snapshot), if let Some(hovered_hint) = editor
// Bias::Right, .visible_inlay_hints(cx)
// ); .into_iter()
// if let Some(hovered_hint) = editor .skip_while(|hint| {
// .visible_inlay_hints(cx) hint.position
// .into_iter() .cmp(&previous_valid_anchor, &buffer_snapshot)
// .skip_while(|hint| { .is_lt()
// hint.position })
// .cmp(&previous_valid_anchor, &buffer_snapshot) .take_while(|hint| {
// .is_lt() hint.position
// }) .cmp(&next_valid_anchor, &buffer_snapshot)
// .take_while(|hint| { .is_le()
// hint.position })
// .cmp(&next_valid_anchor, &buffer_snapshot) .max_by_key(|hint| hint.id)
// .is_le() {
// }) let inlay_hint_cache = editor.inlay_hint_cache();
// .max_by_key(|hint| hint.id) let excerpt_id = previous_valid_anchor.excerpt_id;
// { if let Some(cached_hint) = inlay_hint_cache.hint_by_id(excerpt_id, hovered_hint.id) {
// let inlay_hint_cache = editor.inlay_hint_cache(); match cached_hint.resolve_state {
// let excerpt_id = previous_valid_anchor.excerpt_id; ResolveState::CanResolve(_, _) => {
// if let Some(cached_hint) = inlay_hint_cache.hint_by_id(excerpt_id, hovered_hint.id) { if let Some(buffer_id) = previous_valid_anchor.buffer_id {
// match cached_hint.resolve_state { inlay_hint_cache.spawn_hint_resolve(
// ResolveState::CanResolve(_, _) => { buffer_id,
// if let Some(buffer_id) = previous_valid_anchor.buffer_id { excerpt_id,
// inlay_hint_cache.spawn_hint_resolve( hovered_hint.id,
// buffer_id, cx,
// excerpt_id, );
// hovered_hint.id, }
// cx, }
// ); ResolveState::Resolved => {
// } let mut extra_shift_left = 0;
// } let mut extra_shift_right = 0;
// ResolveState::Resolved => { if cached_hint.padding_left {
// let mut extra_shift_left = 0; extra_shift_left += 1;
// let mut extra_shift_right = 0; extra_shift_right += 1;
// if cached_hint.padding_left { }
// extra_shift_left += 1; if cached_hint.padding_right {
// extra_shift_right += 1; extra_shift_right += 1;
// } }
// if cached_hint.padding_right { match cached_hint.label {
// extra_shift_right += 1; project::InlayHintLabel::String(_) => {
// } if let Some(tooltip) = cached_hint.tooltip {
// match cached_hint.label { hover_popover::hover_at_inlay(
// project::InlayHintLabel::String(_) => { editor,
// if let Some(tooltip) = cached_hint.tooltip { InlayHover {
// hover_popover::hover_at_inlay( excerpt: excerpt_id,
// editor, tooltip: match tooltip {
// InlayHover { InlayHintTooltip::String(text) => HoverBlock {
// excerpt: excerpt_id, text,
// tooltip: match tooltip { kind: HoverBlockKind::PlainText,
// InlayHintTooltip::String(text) => HoverBlock { },
// text, InlayHintTooltip::MarkupContent(content) => {
// kind: HoverBlockKind::PlainText, HoverBlock {
// }, text: content.value,
// InlayHintTooltip::MarkupContent(content) => { kind: content.kind,
// HoverBlock { }
// text: content.value, }
// kind: content.kind, },
// } range: InlayHighlight {
// } inlay: hovered_hint.id,
// }, inlay_position: hovered_hint.position,
// range: InlayHighlight { range: extra_shift_left
// inlay: hovered_hint.id, ..hovered_hint.text.len() + extra_shift_right,
// inlay_position: hovered_hint.position, },
// range: extra_shift_left },
// ..hovered_hint.text.len() + extra_shift_right, cx,
// }, );
// }, hover_updated = true;
// cx, }
// ); }
// hover_updated = true; project::InlayHintLabel::LabelParts(label_parts) => {
// } let hint_start =
// } snapshot.anchor_to_inlay_offset(hovered_hint.position);
// project::InlayHintLabel::LabelParts(label_parts) => { if let Some((hovered_hint_part, part_range)) =
// let hint_start = hover_popover::find_hovered_hint_part(
// snapshot.anchor_to_inlay_offset(hovered_hint.position); label_parts,
// if let Some((hovered_hint_part, part_range)) = hint_start,
// hover_popover::find_hovered_hint_part( hovered_offset,
// label_parts, )
// hint_start, {
// hovered_offset, let highlight_start =
// ) (part_range.start - hint_start).0 + extra_shift_left;
// { let highlight_end =
// let highlight_start = (part_range.end - hint_start).0 + extra_shift_right;
// (part_range.start - hint_start).0 + extra_shift_left; let highlight = InlayHighlight {
// let highlight_end = inlay: hovered_hint.id,
// (part_range.end - hint_start).0 + extra_shift_right; inlay_position: hovered_hint.position,
// let highlight = InlayHighlight { range: highlight_start..highlight_end,
// inlay: hovered_hint.id, };
// inlay_position: hovered_hint.position, if let Some(tooltip) = hovered_hint_part.tooltip {
// range: highlight_start..highlight_end, hover_popover::hover_at_inlay(
// }; editor,
// if let Some(tooltip) = hovered_hint_part.tooltip { InlayHover {
// hover_popover::hover_at_inlay( excerpt: excerpt_id,
// editor, tooltip: match tooltip {
// InlayHover { InlayHintLabelPartTooltip::String(text) => {
// excerpt: excerpt_id, HoverBlock {
// tooltip: match tooltip { text,
// InlayHintLabelPartTooltip::String(text) => { kind: HoverBlockKind::PlainText,
// HoverBlock { }
// text, }
// kind: HoverBlockKind::PlainText, InlayHintLabelPartTooltip::MarkupContent(
// } content,
// } ) => HoverBlock {
// InlayHintLabelPartTooltip::MarkupContent( text: content.value,
// content, kind: content.kind,
// ) => HoverBlock { },
// text: content.value, },
// kind: content.kind, range: highlight.clone(),
// }, },
// }, cx,
// range: highlight.clone(), );
// }, hover_updated = true;
// cx, }
// ); if let Some((language_server_id, location)) =
// hover_updated = true; hovered_hint_part.location
// } {
// if let Some((language_server_id, location)) = go_to_definition_updated = true;
// hovered_hint_part.location update_go_to_definition_link(
// { editor,
// go_to_definition_updated = true; Some(GoToDefinitionTrigger::InlayHint(
// update_go_to_definition_link( highlight,
// editor, location,
// Some(GoToDefinitionTrigger::InlayHint( language_server_id,
// highlight, )),
// location, cmd_held,
// language_server_id, shift_held,
// )), cx,
// cmd_held, );
// shift_held, }
// cx, }
// ); }
// } };
// } }
// } ResolveState::Resolving => {}
// }; }
// } }
// ResolveState::Resolving => {} }
// } }
// }
// }
// }
// if !go_to_definition_updated { if !go_to_definition_updated {
// update_go_to_definition_link(editor, None, cmd_held, shift_held, cx); update_go_to_definition_link(editor, None, cmd_held, shift_held, cx);
// } }
// if !hover_updated { if !hover_updated {
// hover_popover::hover_at(editor, None, cx); hover_popover::hover_at(editor, None, cx);
// } }
// } }
#[derive(Debug, Clone, Copy, PartialEq)] #[derive(Debug, Clone, Copy, PartialEq)]
pub enum LinkDefinitionKind { pub enum LinkDefinitionKind {
@ -581,7 +578,7 @@ fn go_to_fetched_definition_of_kind(
let is_correct_kind = cached_definitions_kind == Some(kind); let is_correct_kind = cached_definitions_kind == Some(kind);
if !cached_definitions.is_empty() && is_correct_kind { if !cached_definitions.is_empty() && is_correct_kind {
if !editor.focused { if !editor.focus_handle.is_focused(cx) {
cx.focus(&editor.focus_handle); cx.focus(&editor.focus_handle);
} }

View File

@ -1,9 +1,9 @@
use super::{Bias, DisplayPoint, DisplaySnapshot, SelectionGoal, ToDisplayPoint}; use super::{Bias, DisplayPoint, DisplaySnapshot, SelectionGoal, ToDisplayPoint};
use crate::{char_kind, CharKind, EditorStyle, ToOffset, ToPoint}; use crate::{char_kind, CharKind, EditorStyle, ToOffset, ToPoint};
use gpui::{px, TextSystem}; use gpui::{px, Pixels, TextSystem};
use language::Point; use language::Point;
use serde::de::IntoDeserializer; use serde::de::IntoDeserializer;
use std::ops::Range; use std::{ops::Range, sync::Arc};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub enum FindRange { pub enum FindRange {
@ -14,8 +14,9 @@ pub enum FindRange {
/// TextLayoutDetails encompasses everything we need to move vertically /// TextLayoutDetails encompasses everything we need to move vertically
/// taking into account variable width characters. /// taking into account variable width characters.
pub struct TextLayoutDetails { pub struct TextLayoutDetails {
pub text_system: TextSystem, pub text_system: Arc<TextSystem>,
pub editor_style: EditorStyle, pub editor_style: EditorStyle,
pub rem_size: Pixels,
} }
pub fn left(map: &DisplaySnapshot, mut point: DisplayPoint) -> DisplayPoint { pub fn left(map: &DisplaySnapshot, mut point: DisplayPoint) -> DisplayPoint {

View File

@ -288,16 +288,15 @@ impl ScrollManager {
} }
} }
// todo!()
impl Editor { impl Editor {
// pub fn vertical_scroll_margin(&mut self) -> usize { pub fn vertical_scroll_margin(&mut self) -> usize {
// self.scroll_manager.vertical_scroll_margin as usize self.scroll_manager.vertical_scroll_margin as usize
// } }
// pub fn set_vertical_scroll_margin(&mut self, margin_rows: usize, cx: &mut ViewContext<Self>) { pub fn set_vertical_scroll_margin(&mut self, margin_rows: usize, cx: &mut ViewContext<Self>) {
// self.scroll_manager.vertical_scroll_margin = margin_rows as f32; self.scroll_manager.vertical_scroll_margin = margin_rows as f32;
// cx.notify(); cx.notify();
// } }
pub fn visible_line_count(&self) -> Option<f32> { pub fn visible_line_count(&self) -> Option<f32> {
self.scroll_manager.visible_line_count self.scroll_manager.visible_line_count
@ -349,10 +348,10 @@ impl Editor {
self.refresh_inlay_hints(InlayHintRefreshReason::NewLinesShown, cx); self.refresh_inlay_hints(InlayHintRefreshReason::NewLinesShown, cx);
} }
// pub fn scroll_position(&self, cx: &mut ViewContext<Self>) -> gpui::Point<Pixels> { pub fn scroll_position(&self, cx: &mut ViewContext<Self>) -> gpui::Point<f32> {
// let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
// self.scroll_manager.anchor.scroll_position(&display_map) self.scroll_manager.anchor.scroll_position(&display_map)
// } }
pub fn set_scroll_anchor(&mut self, scroll_anchor: ScrollAnchor, cx: &mut ViewContext<Self>) { pub fn set_scroll_anchor(&mut self, scroll_anchor: ScrollAnchor, cx: &mut ViewContext<Self>) {
hide_hover(self, cx); hide_hover(self, cx);
@ -380,50 +379,50 @@ impl Editor {
.set_anchor(scroll_anchor, top_row, false, false, workspace_id, cx); .set_anchor(scroll_anchor, top_row, false, false, workspace_id, cx);
} }
// pub fn scroll_screen(&mut self, amount: &ScrollAmount, cx: &mut ViewContext<Self>) { pub fn scroll_screen(&mut self, amount: &ScrollAmount, cx: &mut ViewContext<Self>) {
// if matches!(self.mode, EditorMode::SingleLine) { if matches!(self.mode, EditorMode::SingleLine) {
// cx.propagate_action(); cx.propagate();
// return; return;
// } }
// if self.take_rename(true, cx).is_some() { if self.take_rename(true, cx).is_some() {
// return; return;
// } }
// let cur_position = self.scroll_position(cx); let cur_position = self.scroll_position(cx);
// let new_pos = cur_position + point(0., amount.lines(self)); let new_pos = cur_position + point(0., amount.lines(self));
// self.set_scroll_position(new_pos, cx); self.set_scroll_position(new_pos, cx);
// } }
// /// Returns an ordering. The newest selection is: /// Returns an ordering. The newest selection is:
// /// Ordering::Equal => on screen /// Ordering::Equal => on screen
// /// Ordering::Less => above the screen /// Ordering::Less => above the screen
// /// Ordering::Greater => below the screen /// Ordering::Greater => below the screen
// pub fn newest_selection_on_screen(&self, cx: &mut AppContext) -> Ordering { pub fn newest_selection_on_screen(&self, cx: &mut AppContext) -> Ordering {
// let snapshot = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let snapshot = self.display_map.update(cx, |map, cx| map.snapshot(cx));
// let newest_head = self let newest_head = self
// .selections .selections
// .newest_anchor() .newest_anchor()
// .head() .head()
// .to_display_point(&snapshot); .to_display_point(&snapshot);
// let screen_top = self let screen_top = self
// .scroll_manager .scroll_manager
// .anchor .anchor
// .anchor .anchor
// .to_display_point(&snapshot); .to_display_point(&snapshot);
// if screen_top > newest_head { if screen_top > newest_head {
// return Ordering::Less; return Ordering::Less;
// } }
// if let Some(visible_lines) = self.visible_line_count() { if let Some(visible_lines) = self.visible_line_count() {
// if newest_head.row() < screen_top.row() + visible_lines as u32 { if newest_head.row() < screen_top.row() + visible_lines as u32 {
// return Ordering::Equal; return Ordering::Equal;
// } }
// } }
// Ordering::Greater Ordering::Greater
// } }
pub fn read_scroll_position_from_db( pub fn read_scroll_position_from_db(
&mut self, &mut self,

View File

@ -1,148 +1,103 @@
use gpui::AppContext; use super::Axis;
use crate::{
Autoscroll, Bias, Editor, EditorMode, NextScreen, ScrollAnchor, ScrollCursorBottom,
ScrollCursorCenter, ScrollCursorTop,
};
use gpui::{actions, AppContext, Point, ViewContext};
// actions!( impl Editor {
// editor, pub fn next_screen(&mut self, _: &NextScreen, cx: &mut ViewContext<Editor>) {
// [ if self.take_rename(true, cx).is_some() {
// LineDown, return;
// LineUp, }
// HalfPageDown,
// HalfPageUp,
// PageDown,
// PageUp,
// NextScreen,
// ScrollCursorTop,
// ScrollCursorCenter,
// ScrollCursorBottom,
// ]
// );
pub fn init(cx: &mut AppContext) { // todo!()
// todo!() // if self.mouse_context_menu.read(cx).visible() {
// cx.add_action(Editor::next_screen); // return None;
// cx.add_action(Editor::scroll_cursor_top); // }
// cx.add_action(Editor::scroll_cursor_center);
// cx.add_action(Editor::scroll_cursor_bottom); if matches!(self.mode, EditorMode::SingleLine) {
// cx.add_action(|this: &mut Editor, _: &LineDown, cx| { cx.propagate();
// this.scroll_screen(&ScrollAmount::Line(1.), cx) return;
// }); }
// cx.add_action(|this: &mut Editor, _: &LineUp, cx| { self.request_autoscroll(Autoscroll::Next, cx);
// this.scroll_screen(&ScrollAmount::Line(-1.), cx) }
// });
// cx.add_action(|this: &mut Editor, _: &HalfPageDown, cx| { pub fn scroll(
// this.scroll_screen(&ScrollAmount::Page(0.5), cx) &mut self,
// }); scroll_position: Point<f32>,
// cx.add_action(|this: &mut Editor, _: &HalfPageUp, cx| { axis: Option<Axis>,
// this.scroll_screen(&ScrollAmount::Page(-0.5), cx) cx: &mut ViewContext<Self>,
// }); ) {
// cx.add_action(|this: &mut Editor, _: &PageDown, cx| { self.scroll_manager.update_ongoing_scroll(axis);
// this.scroll_screen(&ScrollAmount::Page(1.), cx) self.set_scroll_position(scroll_position, cx);
// }); }
// cx.add_action(|this: &mut Editor, _: &PageUp, cx| {
// this.scroll_screen(&ScrollAmount::Page(-1.), cx) pub fn scroll_cursor_top(&mut self, _: &ScrollCursorTop, cx: &mut ViewContext<Editor>) {
// }); let snapshot = self.snapshot(cx).display_snapshot;
let scroll_margin_rows = self.vertical_scroll_margin() as u32;
let mut new_screen_top = self.selections.newest_display(cx).head();
*new_screen_top.row_mut() = new_screen_top.row().saturating_sub(scroll_margin_rows);
*new_screen_top.column_mut() = 0;
let new_screen_top = new_screen_top.to_offset(&snapshot, Bias::Left);
let new_anchor = snapshot.buffer_snapshot.anchor_before(new_screen_top);
self.set_scroll_anchor(
ScrollAnchor {
anchor: new_anchor,
offset: Default::default(),
},
cx,
)
}
pub fn scroll_cursor_center(&mut self, _: &ScrollCursorCenter, cx: &mut ViewContext<Editor>) {
let snapshot = self.snapshot(cx).display_snapshot;
let visible_rows = if let Some(visible_rows) = self.visible_line_count() {
visible_rows as u32
} else {
return;
};
let mut new_screen_top = self.selections.newest_display(cx).head();
*new_screen_top.row_mut() = new_screen_top.row().saturating_sub(visible_rows / 2);
*new_screen_top.column_mut() = 0;
let new_screen_top = new_screen_top.to_offset(&snapshot, Bias::Left);
let new_anchor = snapshot.buffer_snapshot.anchor_before(new_screen_top);
self.set_scroll_anchor(
ScrollAnchor {
anchor: new_anchor,
offset: Default::default(),
},
cx,
)
}
pub fn scroll_cursor_bottom(&mut self, _: &ScrollCursorBottom, cx: &mut ViewContext<Editor>) {
let snapshot = self.snapshot(cx).display_snapshot;
let scroll_margin_rows = self.vertical_scroll_margin() as u32;
let visible_rows = if let Some(visible_rows) = self.visible_line_count() {
visible_rows as u32
} else {
return;
};
let mut new_screen_top = self.selections.newest_display(cx).head();
*new_screen_top.row_mut() = new_screen_top
.row()
.saturating_sub(visible_rows.saturating_sub(scroll_margin_rows));
*new_screen_top.column_mut() = 0;
let new_screen_top = new_screen_top.to_offset(&snapshot, Bias::Left);
let new_anchor = snapshot.buffer_snapshot.anchor_before(new_screen_top);
self.set_scroll_anchor(
ScrollAnchor {
anchor: new_anchor,
offset: Default::default(),
},
cx,
)
}
} }
// impl Editor {
// pub fn next_screen(&mut self, _: &NextScreen, cx: &mut ViewContext<Editor>) -> Option<()> {
// if self.take_rename(true, cx).is_some() {
// return None;
// }
// if self.mouse_context_menu.read(cx).visible() {
// return None;
// }
// if matches!(self.mode, EditorMode::SingleLine) {
// cx.propagate_action();
// return None;
// }
// self.request_autoscroll(Autoscroll::Next, cx);
// Some(())
// }
// pub fn scroll(
// &mut self,
// scroll_position: Vector2F,
// axis: Option<Axis>,
// cx: &mut ViewContext<Self>,
// ) {
// self.scroll_manager.update_ongoing_scroll(axis);
// self.set_scroll_position(scroll_position, cx);
// }
// fn scroll_cursor_top(editor: &mut Editor, _: &ScrollCursorTop, cx: &mut ViewContext<Editor>) {
// let snapshot = editor.snapshot(cx).display_snapshot;
// let scroll_margin_rows = editor.vertical_scroll_margin() as u32;
// let mut new_screen_top = editor.selections.newest_display(cx).head();
// *new_screen_top.row_mut() = new_screen_top.row().saturating_sub(scroll_margin_rows);
// *new_screen_top.column_mut() = 0;
// let new_screen_top = new_screen_top.to_offset(&snapshot, Bias::Left);
// let new_anchor = snapshot.buffer_snapshot.anchor_before(new_screen_top);
// editor.set_scroll_anchor(
// ScrollAnchor {
// anchor: new_anchor,
// offset: Default::default(),
// },
// cx,
// )
// }
// fn scroll_cursor_center(
// editor: &mut Editor,
// _: &ScrollCursorCenter,
// cx: &mut ViewContext<Editor>,
// ) {
// let snapshot = editor.snapshot(cx).display_snapshot;
// let visible_rows = if let Some(visible_rows) = editor.visible_line_count() {
// visible_rows as u32
// } else {
// return;
// };
// let mut new_screen_top = editor.selections.newest_display(cx).head();
// *new_screen_top.row_mut() = new_screen_top.row().saturating_sub(visible_rows / 2);
// *new_screen_top.column_mut() = 0;
// let new_screen_top = new_screen_top.to_offset(&snapshot, Bias::Left);
// let new_anchor = snapshot.buffer_snapshot.anchor_before(new_screen_top);
// editor.set_scroll_anchor(
// ScrollAnchor {
// anchor: new_anchor,
// offset: Default::default(),
// },
// cx,
// )
// }
// fn scroll_cursor_bottom(
// editor: &mut Editor,
// _: &ScrollCursorBottom,
// cx: &mut ViewContext<Editor>,
// ) {
// let snapshot = editor.snapshot(cx).display_snapshot;
// let scroll_margin_rows = editor.vertical_scroll_margin() as u32;
// let visible_rows = if let Some(visible_rows) = editor.visible_line_count() {
// visible_rows as u32
// } else {
// return;
// };
// let mut new_screen_top = editor.selections.newest_display(cx).head();
// *new_screen_top.row_mut() = new_screen_top
// .row()
// .saturating_sub(visible_rows.saturating_sub(scroll_margin_rows));
// *new_screen_top.column_mut() = 0;
// let new_screen_top = new_screen_top.to_offset(&snapshot, Bias::Left);
// let new_anchor = snapshot.buffer_snapshot.anchor_before(new_screen_top);
// editor.set_scroll_anchor(
// ScrollAnchor {
// anchor: new_anchor,
// offset: Default::default(),
// },
// cx,
// )
// }
// }

View File

@ -302,39 +302,39 @@ impl SelectionsCollection {
.collect() .collect()
} }
// pub fn build_columnar_selection( pub fn build_columnar_selection(
// &mut self, &mut self,
// display_map: &DisplaySnapshot, display_map: &DisplaySnapshot,
// row: u32, row: u32,
// positions: &Range<Pixels>, positions: &Range<Pixels>,
// reversed: bool, reversed: bool,
// text_layout_details: &TextLayoutDetails, text_layout_details: &TextLayoutDetails,
// ) -> Option<Selection<Point>> { ) -> Option<Selection<Point>> {
// let is_empty = positions.start == positions.end; let is_empty = positions.start == positions.end;
// let line_len = display_map.line_len(row); let line_len = display_map.line_len(row);
// let layed_out_line = display_map.lay_out_line_for_row(row, &text_layout_details); let layed_out_line = display_map.lay_out_line_for_row(row, &text_layout_details);
// let start_col = layed_out_line.closest_index_for_x(positions.start) as u32; let start_col = layed_out_line.closest_index_for_x(positions.start) as u32;
// if start_col < line_len || (is_empty && positions.start == layed_out_line.width()) { if start_col < line_len || (is_empty && positions.start == layed_out_line.width) {
// let start = DisplayPoint::new(row, start_col); let start = DisplayPoint::new(row, start_col);
// let end_col = layed_out_line.closest_index_for_x(positions.end) as u32; let end_col = layed_out_line.closest_index_for_x(positions.end) as u32;
// let end = DisplayPoint::new(row, end_col); let end = DisplayPoint::new(row, end_col);
// Some(Selection { Some(Selection {
// id: post_inc(&mut self.next_selection_id), id: post_inc(&mut self.next_selection_id),
// start: start.to_point(display_map), start: start.to_point(display_map),
// end: end.to_point(display_map), end: end.to_point(display_map),
// reversed, reversed,
// goal: SelectionGoal::HorizontalRange { goal: SelectionGoal::HorizontalRange {
// start: positions.start, start: positions.start.into(),
// end: positions.end, end: positions.end.into(),
// }, },
// }) })
// } else { } else {
// None None
// } }
// } }
pub(crate) fn change_with<R>( pub(crate) fn change_with<R>(
&mut self, &mut self,

View File

@ -0,0 +1,25 @@
[package]
name = "go_to_line2"
version = "0.1.0"
edition = "2021"
publish = false
[lib]
path = "src/go_to_line.rs"
doctest = false
[dependencies]
editor = { package = "editor2", path = "../editor2" }
gpui = { package = "gpui2", path = "../gpui2" }
menu = { package = "menu2", path = "../menu2" }
serde.workspace = true
settings = { package = "settings2", path = "../settings2" }
text = { package = "text2", path = "../text2" }
workspace = { package = "workspace2", path = "../workspace2" }
postage.workspace = true
theme = { package = "theme2", path = "../theme2" }
ui = { package = "ui2", path = "../ui2" }
util = { path = "../util" }
[dev-dependencies]
editor = { package = "editor2", path = "../editor2", features = ["test-support"] }

View File

@ -0,0 +1,221 @@
use gpui::{actions, div, px, red, AppContext, Div, Render, Styled, ViewContext, VisualContext};
use workspace::ModalRegistry;
actions!(Toggle);
pub fn init(cx: &mut AppContext) {
cx.global_mut::<ModalRegistry>()
.register_modal(Toggle, |_, cx| {
// if let Some(editor) = workspace
// .active_item(cx)
// .and_then(|active_item| active_item.downcast::<Editor>())
// {
// cx.build_view(|cx| GoToLine::new(editor, cx))
// }
let view = cx.build_view(|_| GoToLine);
view
});
// cx.add_action(GoToLine::toggle);
// cx.add_action(GoToLine::confirm);
// cx.add_action(GoToLine::cancel);
}
pub struct GoToLine;
impl Render for GoToLine {
type Element = Div<Self>;
fn render(&mut self, _cx: &mut ViewContext<Self>) -> Self::Element {
dbg!("rendering GoToLine");
div().bg(red()).w(px(100.0)).h(px(100.0))
}
}
// pub struct GoToLine {
// //line_editor: View<Editor>,
// active_editor: View<Editor>,
// prev_scroll_position: Option<gpui::Point<Pixels>>,
// cursor_point: Point,
// max_point: Point,
// has_focus: bool,
// }
// pub enum Event {
// Dismissed,
// }
// impl GoToLine {
// pub fn new(active_editor: View<Editor>, cx: &mut ViewContext<Self>) -> Self {
// // let line_editor = cx.build_view(|cx| {
// // Editor::single_line(
// // Some(Arc::new(|theme| theme.picker.input_editor.clone())),
// // cx,
// // )
// // });
// // cx.subscribe(&line_editor, Self::on_line_editor_event)
// // .detach();
// let (scroll_position, cursor_point, max_point) = active_editor.update(cx, |editor, cx| {
// let scroll_position = editor.scroll_position(cx);
// let buffer = editor.buffer().read(cx).snapshot(cx);
// (
// Some(scroll_position),
// editor.selections.newest(cx).head(),
// buffer.max_point(),
// )
// });
// cx.on_release(|_, on_release| {}).detach();
// Self {
// //line_editor,
// active_editor,
// prev_scroll_position: scroll_position,
// cursor_point,
// max_point,
// has_focus: false,
// }
// }
// fn cancel(&mut self, _: &Cancel, cx: &mut ViewContext<Self>) {
// cx.emit(Event::Dismissed);
// }
// fn confirm(&mut self, _: &Confirm, cx: &mut ViewContext<Self>) {
// self.prev_scroll_position.take();
// if let Some(point) = self.point_from_query(cx) {
// self.active_editor.update(cx, |active_editor, cx| {
// let snapshot = active_editor.snapshot(cx).display_snapshot;
// let point = snapshot.buffer_snapshot.clip_point(point, Bias::Left);
// active_editor.change_selections(Some(Autoscroll::center()), cx, |s| {
// s.select_ranges([point..point])
// });
// });
// }
// cx.emit(Event::Dismissed);
// }
// fn on_line_editor_event(
// &mut self,
// _: View<Editor>,
// event: &editor::Event,
// cx: &mut ViewContext<Self>,
// ) {
// match event {
// editor::Event::Blurred => cx.emit(Event::Dismissed),
// editor::Event::BufferEdited { .. } => {
// if let Some(point) = self.point_from_query(cx) {
// // todo!()
// // self.active_editor.update(cx, |active_editor, cx| {
// // let snapshot = active_editor.snapshot(cx).display_snapshot;
// // let point = snapshot.buffer_snapshot.clip_point(point, Bias::Left);
// // let display_point = point.to_display_point(&snapshot);
// // let row = display_point.row();
// // active_editor.highlight_rows(Some(row..row + 1));
// // active_editor.request_autoscroll(Autoscroll::center(), cx);
// // });
// cx.notify();
// }
// }
// _ => {}
// }
// }
// fn point_from_query(&self, cx: &ViewContext<Self>) -> Option<Point> {
// return None;
// // todo!()
// // let line_editor = self.line_editor.read(cx).text(cx);
// // let mut components = line_editor
// // .splitn(2, FILE_ROW_COLUMN_DELIMITER)
// // .map(str::trim)
// // .fuse();
// // let row = components.next().and_then(|row| row.parse::<u32>().ok())?;
// // let column = components.next().and_then(|col| col.parse::<u32>().ok());
// // Some(Point::new(
// // row.saturating_sub(1),
// // column.unwrap_or(0).saturating_sub(1),
// // ))
// }
// }
// impl EventEmitter for GoToLine {
// type Event = Event;
// }
// impl Entity for GoToLine {
// fn release(&mut self, cx: &mut AppContext) {
// let scroll_position = self.prev_scroll_position.take();
// self.active_editor.window().update(cx, |cx| {
// self.active_editor.update(cx, |editor, cx| {
// editor.highlight_rows(None);
// if let Some(scroll_position) = scroll_position {
// editor.set_scroll_position(scroll_position, cx);
// }
// })
// });
// }
// }
// impl Render for GoToLine {
// type Element = Div<Self>;
// fn render(&mut self, cx: &mut ViewContext<Self>) -> Self::Element {
// // todo!()
// div()
// }
// }
// impl View for GoToLine {
// fn ui_name() -> &'static str {
// "GoToLine"
// }
// fn render(&mut self, cx: &mut ViewContext<Self>) -> AnyElement<Self> {
// let theme = &theme::current(cx).picker;
// let label = format!(
// "{}{FILE_ROW_COLUMN_DELIMITER}{} of {} lines",
// self.cursor_point.row + 1,
// self.cursor_point.column + 1,
// self.max_point.row + 1
// );
// Flex::new(Axis::Vertical)
// .with_child(
// ChildView::new(&self.line_editor, cx)
// .contained()
// .with_style(theme.input_editor.container),
// )
// .with_child(
// Label::new(label, theme.no_matches.label.clone())
// .contained()
// .with_style(theme.no_matches.container),
// )
// .contained()
// .with_style(theme.container)
// .constrained()
// .with_max_width(500.0)
// .into_any_named("go to line")
// }
// fn focus_in(&mut self, _: AnyView, cx: &mut ViewContext<Self>) {
// self.has_focus = true;
// cx.focus(&self.line_editor);
// }
// fn focus_out(&mut self, _: AnyView, _: &mut ViewContext<Self>) {
// self.has_focus = false;
// }
// }
// impl Modal for GoToLine {
// fn has_focus(&self) -> bool {
// self.has_focus
// }
// fn dismiss_on_event(event: &Self::Event) -> bool {
// matches!(event, Event::Dismissed)
// }
// }

View File

@ -1,10 +1,55 @@
use crate::SharedString; use crate::SharedString;
use anyhow::{anyhow, Context, Result}; use anyhow::{anyhow, Context, Result};
use collections::{HashMap, HashSet}; use collections::{HashMap, HashSet};
use lazy_static::lazy_static;
use parking_lot::{MappedRwLockReadGuard, RwLock, RwLockReadGuard};
use serde::Deserialize; use serde::Deserialize;
use std::any::{type_name, Any}; use std::any::{type_name, Any};
pub trait Action: 'static { /// Actions are used to implement keyboard-driven UI.
/// When you declare an action, you can bind keys to the action in the keymap and
/// listeners for that action in the element tree.
///
/// To declare a list of simple actions, you can use the actions! macro, which defines a simple unit struct
/// action for each listed action name.
/// ```rust
/// actions!(MoveUp, MoveDown, MoveLeft, MoveRight, Newline);
/// ```
/// More complex data types can also be actions. If you annotate your type with the `#[action]` proc macro,
/// it will automatically
/// ```
/// #[action]
/// pub struct SelectNext {
/// pub replace_newest: bool,
/// }
///
/// Any type A that satisfies the following bounds is automatically an action:
///
/// ```
/// A: for<'a> Deserialize<'a> + PartialEq + Clone + Default + std::fmt::Debug + 'static,
/// ```
///
/// The `#[action]` annotation will derive these implementations for your struct automatically. If you
/// want to control them manually, you can use the lower-level `#[register_action]` macro, which only
/// generates the code needed to register your action before `main`. Then you'll need to implement all
/// the traits manually.
///
/// ```
/// #[gpui::register_action]
/// #[derive(gpui::serde::Deserialize, std::cmp::PartialEq, std::clone::Clone, std::fmt::Debug)]
/// pub struct Paste {
/// pub content: SharedString,
/// }
///
/// impl std::default::Default for Paste {
/// fn default() -> Self {
/// Self {
/// content: SharedString::from("🍝"),
/// }
/// }
/// }
/// ```
pub trait Action: std::fmt::Debug + 'static {
fn qualified_name() -> SharedString fn qualified_name() -> SharedString
where where
Self: Sized; Self: Sized;
@ -17,12 +62,14 @@ pub trait Action: 'static {
fn as_any(&self) -> &dyn Any; fn as_any(&self) -> &dyn Any;
} }
// Types become actions by satisfying a list of trait bounds.
impl<A> Action for A impl<A> Action for A
where where
A: for<'a> Deserialize<'a> + PartialEq + Clone + Default + 'static, A: for<'a> Deserialize<'a> + PartialEq + Clone + Default + std::fmt::Debug + 'static,
{ {
fn qualified_name() -> SharedString { fn qualified_name() -> SharedString {
type_name::<A>().into() // todo!() remove the 2 replacement when migration is done
type_name::<A>().replace("2::", "::").into()
} }
fn build(params: Option<serde_json::Value>) -> Result<Box<dyn Action>> fn build(params: Option<serde_json::Value>) -> Result<Box<dyn Action>>
@ -53,6 +100,61 @@ where
} }
} }
type ActionBuilder = fn(json: Option<serde_json::Value>) -> anyhow::Result<Box<dyn Action>>;
lazy_static! {
static ref ACTION_REGISTRY: RwLock<ActionRegistry> = RwLock::default();
}
#[derive(Default)]
struct ActionRegistry {
builders_by_name: HashMap<SharedString, ActionBuilder>,
all_names: Vec<SharedString>, // So we can return a static slice.
}
/// Register an action type to allow it to be referenced in keymaps.
pub fn register_action<A: Action>() {
let name = A::qualified_name();
let mut lock = ACTION_REGISTRY.write();
lock.builders_by_name.insert(name.clone(), A::build);
lock.all_names.push(name);
}
/// Construct an action based on its name and optional JSON parameters sourced from the keymap.
pub fn build_action(name: &str, params: Option<serde_json::Value>) -> Result<Box<dyn Action>> {
let lock = ACTION_REGISTRY.read();
let build_action = lock
.builders_by_name
.get(name)
.ok_or_else(|| anyhow!("no action type registered for {}", name))?;
(build_action)(params)
}
pub fn all_action_names() -> MappedRwLockReadGuard<'static, [SharedString]> {
let lock = ACTION_REGISTRY.read();
RwLockReadGuard::map(lock, |registry: &ActionRegistry| {
registry.all_names.as_slice()
})
}
/// Defines unit structs that can be used as actions.
/// To use more complex data types as actions, annotate your type with the #[action] macro.
#[macro_export]
macro_rules! actions {
() => {};
( $name:ident ) => {
#[gpui::register_action]
#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug, ::std::cmp::PartialEq, $crate::serde::Deserialize)]
pub struct $name;
};
( $name:ident, $($rest:tt)* ) => {
actions!($name);
actions!($($rest)*);
};
}
#[derive(Clone, Debug, Default, Eq, PartialEq)] #[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct DispatchContext { pub struct DispatchContext {
set: HashSet<SharedString>, set: HashSet<SharedString>,
@ -290,8 +392,28 @@ fn skip_whitespace(source: &str) -> &str {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate as gpui;
use DispatchContextPredicate::*; use DispatchContextPredicate::*;
#[test]
fn test_actions_definition() {
{
actions!(A, B, C, D, E, F, G);
}
{
actions!(
A,
B,
C,
D,
E,
F,
G, // Don't wrap, test the trailing comma
);
}
}
#[test] #[test]
fn test_parse_context() { fn test_parse_context() {
let mut expected = DispatchContext::default(); let mut expected = DispatchContext::default();

View File

@ -17,9 +17,9 @@ use crate::{
current_platform, image_cache::ImageCache, Action, AnyBox, AnyView, AnyWindowHandle, current_platform, image_cache::ImageCache, Action, AnyBox, AnyView, AnyWindowHandle,
AppMetadata, AssetSource, BackgroundExecutor, ClipboardItem, Context, DispatchPhase, DisplayId, AppMetadata, AssetSource, BackgroundExecutor, ClipboardItem, Context, DispatchPhase, DisplayId,
Entity, EventEmitter, FocusEvent, FocusHandle, FocusId, ForegroundExecutor, KeyBinding, Keymap, Entity, EventEmitter, FocusEvent, FocusHandle, FocusId, ForegroundExecutor, KeyBinding, Keymap,
LayoutId, PathPromptOptions, Pixels, Platform, PlatformDisplay, Point, Render, SharedString, LayoutId, PathPromptOptions, Pixels, Platform, PlatformDisplay, Point, Render, SubscriberSet,
SubscriberSet, Subscription, SvgRenderer, Task, TextStyle, TextStyleRefinement, TextSystem, Subscription, SvgRenderer, Task, TextStyle, TextStyleRefinement, TextSystem, View, Window,
View, Window, WindowContext, WindowHandle, WindowId, WindowContext, WindowHandle, WindowId,
}; };
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use collections::{HashMap, HashSet, VecDeque}; use collections::{HashMap, HashSet, VecDeque};
@ -144,7 +144,6 @@ impl App {
} }
} }
type ActionBuilder = fn(json: Option<serde_json::Value>) -> anyhow::Result<Box<dyn Action>>;
pub(crate) type FrameCallback = Box<dyn FnOnce(&mut AppContext)>; pub(crate) type FrameCallback = Box<dyn FnOnce(&mut AppContext)>;
type Handler = Box<dyn FnMut(&mut AppContext) -> bool + 'static>; type Handler = Box<dyn FnMut(&mut AppContext) -> bool + 'static>;
type Listener = Box<dyn FnMut(&dyn Any, &mut AppContext) -> bool + 'static>; type Listener = Box<dyn FnMut(&dyn Any, &mut AppContext) -> bool + 'static>;
@ -158,7 +157,7 @@ type ReleaseListener = Box<dyn FnOnce(&mut dyn Any, &mut AppContext) + 'static>;
// } // }
pub struct AppContext { pub struct AppContext {
this: Weak<AppCell>, pub(crate) this: Weak<AppCell>,
pub(crate) platform: Rc<dyn Platform>, pub(crate) platform: Rc<dyn Platform>,
app_metadata: AppMetadata, app_metadata: AppMetadata,
text_system: Arc<TextSystem>, text_system: Arc<TextSystem>,
@ -180,7 +179,6 @@ pub struct AppContext {
pub(crate) keymap: Arc<Mutex<Keymap>>, pub(crate) keymap: Arc<Mutex<Keymap>>,
pub(crate) global_action_listeners: pub(crate) global_action_listeners:
HashMap<TypeId, Vec<Box<dyn Fn(&dyn Action, DispatchPhase, &mut Self)>>>, HashMap<TypeId, Vec<Box<dyn Fn(&dyn Action, DispatchPhase, &mut Self)>>>,
action_builders: HashMap<SharedString, ActionBuilder>,
pending_effects: VecDeque<Effect>, pending_effects: VecDeque<Effect>,
pub(crate) pending_notifications: HashSet<EntityId>, pub(crate) pending_notifications: HashSet<EntityId>,
pub(crate) pending_global_notifications: HashSet<TypeId>, pub(crate) pending_global_notifications: HashSet<TypeId>,
@ -238,7 +236,6 @@ impl AppContext {
windows: SlotMap::with_key(), windows: SlotMap::with_key(),
keymap: Arc::new(Mutex::new(Keymap::default())), keymap: Arc::new(Mutex::new(Keymap::default())),
global_action_listeners: HashMap::default(), global_action_listeners: HashMap::default(),
action_builders: HashMap::default(),
pending_effects: VecDeque::new(), pending_effects: VecDeque::new(),
pending_notifications: HashSet::default(), pending_notifications: HashSet::default(),
pending_global_notifications: HashSet::default(), pending_global_notifications: HashSet::default(),
@ -755,13 +752,17 @@ impl AppContext {
self.globals_by_type.insert(global_type, Box::new(global)); self.globals_by_type.insert(global_type, Box::new(global));
} }
#[track_caller]
pub fn clear_globals(&mut self) { pub fn clear_globals(&mut self) {
dbg!(core::panic::Location::caller());
//todo!(notify globals?) //todo!(notify globals?)
self.globals_by_type.drain(); self.globals_by_type.drain();
} }
/// Set the value of the global of the given type. /// Set the value of the global of the given type.
#[track_caller]
pub fn remove_global<G: Any>(&mut self) -> G { pub fn remove_global<G: Any>(&mut self) -> G {
dbg!(core::panic::Location::caller());
let global_type = TypeId::of::<G>(); let global_type = TypeId::of::<G>();
//todo!(notify globals?) //todo!(notify globals?)
*self *self
@ -795,10 +796,6 @@ impl AppContext {
) )
} }
pub fn all_action_names<'a>(&'a self) -> impl Iterator<Item = SharedString> + 'a {
self.action_builders.keys().cloned()
}
/// Move the global of the given type to the stack. /// Move the global of the given type to the stack.
pub(crate) fn lease_global<G: 'static>(&mut self) -> GlobalLease<G> { pub(crate) fn lease_global<G: 'static>(&mut self) -> GlobalLease<G> {
GlobalLease::new( GlobalLease::new(
@ -861,29 +858,21 @@ impl AppContext {
})); }));
} }
/// Register an action type to allow it to be referenced in keymaps. /// Event handlers propagate events by default. Call this method to stop dispatching to
pub fn register_action_type<A: Action>(&mut self) { /// event handlers with a lower z-index (mouse) or higher in the tree (keyboard). This is
self.action_builders.insert(A::qualified_name(), A::build); /// the opposite of [propagate]. It's also possible to cancel a call to [propagate] by
} /// calling this method before effects are flushed.
/// Construct an action based on its name and parameters.
pub fn build_action(
&mut self,
name: &str,
params: Option<serde_json::Value>,
) -> Result<Box<dyn Action>> {
let build = self
.action_builders
.get(name)
.ok_or_else(|| anyhow!("no action type registered for {}", name))?;
(build)(params)
}
/// Halt propagation of a mouse event, keyboard event, or action. This prevents listeners
/// that have not yet been invoked from receiving the event.
pub fn stop_propagation(&mut self) { pub fn stop_propagation(&mut self) {
self.propagate_event = false; self.propagate_event = false;
} }
/// Action handlers stop propagation by default during the bubble phase of action dispatch
/// dispatching to action handlers higher in the element tree. This is the opposite of
/// [stop_propagation]. It's also possible to cancel a call to [stop_propagate] by calling
/// this method before effects are flushed.
pub fn propagate(&mut self) {
self.propagate_event = true;
}
} }
impl Context for AppContext { impl Context for AppContext {

View File

@ -13,6 +13,7 @@ use std::{
atomic::{AtomicUsize, Ordering::SeqCst}, atomic::{AtomicUsize, Ordering::SeqCst},
Arc, Weak, Arc, Weak,
}, },
thread::panicking,
}; };
slotmap::new_key_type! { pub struct EntityId; } slotmap::new_key_type! { pub struct EntityId; }
@ -140,9 +141,8 @@ impl<'a, T: 'static> core::ops::DerefMut for Lease<'a, T> {
impl<'a, T> Drop for Lease<'a, T> { impl<'a, T> Drop for Lease<'a, T> {
fn drop(&mut self) { fn drop(&mut self) {
if self.entity.is_some() { if self.entity.is_some() && !panicking() {
// We don't panic here, because other panics can cause us to drop the lease without ending it cleanly. panic!("Leases must be ended with EntityMap::end_lease")
log::error!("Leases must be ended with EntityMap::end_lease")
} }
} }
} }

View File

@ -1,7 +1,8 @@
use crate::{ use crate::{
AnyView, AnyWindowHandle, AppCell, AppContext, AsyncAppContext, BackgroundExecutor, Context, AnyView, AnyWindowHandle, AppCell, AppContext, AsyncAppContext, BackgroundExecutor, Context,
EventEmitter, ForegroundExecutor, Model, ModelContext, Render, Result, Task, TestDispatcher, EventEmitter, ForegroundExecutor, InputEvent, KeyDownEvent, Keystroke, Model, ModelContext,
TestPlatform, ViewContext, VisualContext, WindowContext, WindowHandle, WindowOptions, Render, Result, Task, TestDispatcher, TestPlatform, ViewContext, VisualContext, WindowContext,
WindowHandle, WindowOptions,
}; };
use anyhow::{anyhow, bail}; use anyhow::{anyhow, bail};
use futures::{Stream, StreamExt}; use futures::{Stream, StreamExt};
@ -161,6 +162,23 @@ impl TestAppContext {
} }
} }
pub fn dispatch_keystroke(
&mut self,
window: AnyWindowHandle,
keystroke: Keystroke,
is_held: bool,
) {
let handled = window
.update(self, |_, cx| {
cx.dispatch_event(InputEvent::KeyDown(KeyDownEvent { keystroke, is_held }))
})
.is_ok_and(|handled| handled);
if !handled {
// todo!() simluate input here
}
}
pub fn notifications<T: 'static>(&mut self, entity: &Model<T>) -> impl Stream<Item = ()> { pub fn notifications<T: 'static>(&mut self, entity: &Model<T>) -> impl Stream<Item = ()> {
let (tx, rx) = futures::channel::mpsc::unbounded(); let (tx, rx) = futures::channel::mpsc::unbounded();

View File

@ -176,6 +176,15 @@ pub fn black() -> Hsla {
} }
} }
pub fn transparent_black() -> Hsla {
Hsla {
h: 0.,
s: 0.,
l: 0.,
a: 0.,
}
}
pub fn white() -> Hsla { pub fn white() -> Hsla {
Hsla { Hsla {
h: 0., h: 0.,
@ -194,6 +203,15 @@ pub fn red() -> Hsla {
} }
} }
pub fn blue() -> Hsla {
Hsla {
h: 0.6,
s: 1.,
l: 0.5,
a: 1.,
}
}
impl Hsla { impl Hsla {
/// Returns true if the HSLA color is fully transparent, false otherwise. /// Returns true if the HSLA color is fully transparent, false otherwise.
pub fn is_transparent(&self) -> bool { pub fn is_transparent(&self) -> bool {

View File

@ -134,7 +134,10 @@ where
.layout(state, frame_state.as_mut().unwrap(), cx); .layout(state, frame_state.as_mut().unwrap(), cx);
} }
} }
_ => panic!("must call initialize before layout"), ElementRenderPhase::Start => panic!("must call initialize before layout"),
ElementRenderPhase::LayoutRequested { .. } | ElementRenderPhase::Painted => {
panic!("element rendered twice")
}
}; };
self.phase = ElementRenderPhase::LayoutRequested { self.phase = ElementRenderPhase::LayoutRequested {

View File

@ -2,8 +2,10 @@ mod div;
mod img; mod img;
mod svg; mod svg;
mod text; mod text;
mod uniform_list;
pub use div::*; pub use div::*;
pub use img::*; pub use img::*;
pub use svg::*; pub use svg::*;
pub use text::*; pub use text::*;
pub use uniform_list::*;

View File

@ -1,28 +1,28 @@
use crate::{ use crate::{
point, AnyElement, BorrowWindow, Bounds, Component, Element, ElementFocus, ElementId, point, AnyElement, BorrowWindow, Bounds, Component, Element, ElementFocus, ElementId,
ElementInteraction, FocusDisabled, FocusEnabled, FocusHandle, FocusListeners, Focusable, ElementInteractivity, FocusDisabled, FocusEnabled, FocusHandle, FocusListeners, Focusable,
GlobalElementId, GroupBounds, InteractiveElementState, LayoutId, Overflow, ParentElement, GlobalElementId, GroupBounds, InteractiveElementState, LayoutId, Overflow, ParentElement,
Pixels, Point, SharedString, StatefulInteraction, StatefulInteractive, StatelessInteraction, Pixels, Point, SharedString, StatefulInteractive, StatefulInteractivity, StatelessInteractive,
StatelessInteractive, Style, StyleRefinement, Styled, ViewContext, Visibility, StatelessInteractivity, Style, StyleRefinement, Styled, ViewContext, Visibility,
}; };
use refineable::Refineable; use refineable::Refineable;
use smallvec::SmallVec; use smallvec::SmallVec;
pub struct Div< pub struct Div<
V: 'static, V: 'static,
I: ElementInteraction<V> = StatelessInteraction<V>, I: ElementInteractivity<V> = StatelessInteractivity<V>,
F: ElementFocus<V> = FocusDisabled, F: ElementFocus<V> = FocusDisabled,
> { > {
interaction: I, interactivity: I,
focus: F, focus: F,
children: SmallVec<[AnyElement<V>; 2]>, children: SmallVec<[AnyElement<V>; 2]>,
group: Option<SharedString>, group: Option<SharedString>,
base_style: StyleRefinement, base_style: StyleRefinement,
} }
pub fn div<V: 'static>() -> Div<V, StatelessInteraction<V>, FocusDisabled> { pub fn div<V: 'static>() -> Div<V, StatelessInteractivity<V>, FocusDisabled> {
Div { Div {
interaction: StatelessInteraction::default(), interactivity: StatelessInteractivity::default(),
focus: FocusDisabled, focus: FocusDisabled,
children: SmallVec::new(), children: SmallVec::new(),
group: None, group: None,
@ -30,14 +30,14 @@ pub fn div<V: 'static>() -> Div<V, StatelessInteraction<V>, FocusDisabled> {
} }
} }
impl<V, F> Div<V, StatelessInteraction<V>, F> impl<V, F> Div<V, StatelessInteractivity<V>, F>
where where
V: 'static, V: 'static,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
pub fn id(self, id: impl Into<ElementId>) -> Div<V, StatefulInteraction<V>, F> { pub fn id(self, id: impl Into<ElementId>) -> Div<V, StatefulInteractivity<V>, F> {
Div { Div {
interaction: id.into().into(), interactivity: id.into().into(),
focus: self.focus, focus: self.focus,
children: self.children, children: self.children,
group: self.group, group: self.group,
@ -48,7 +48,7 @@ where
impl<V, I, F> Div<V, I, F> impl<V, I, F> Div<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
pub fn group(mut self, group: impl Into<SharedString>) -> Self { pub fn group(mut self, group: impl Into<SharedString>) -> Self {
@ -98,16 +98,20 @@ where
let mut computed_style = Style::default(); let mut computed_style = Style::default();
computed_style.refine(&self.base_style); computed_style.refine(&self.base_style);
self.focus.refine_style(&mut computed_style, cx); self.focus.refine_style(&mut computed_style, cx);
self.interaction self.interactivity.refine_style(
.refine_style(&mut computed_style, bounds, &element_state.interactive, cx); &mut computed_style,
bounds,
&element_state.interactive,
cx,
);
computed_style computed_style
} }
} }
impl<V: 'static> Div<V, StatefulInteraction<V>, FocusDisabled> { impl<V: 'static> Div<V, StatefulInteractivity<V>, FocusDisabled> {
pub fn focusable(self) -> Div<V, StatefulInteraction<V>, FocusEnabled<V>> { pub fn focusable(self) -> Div<V, StatefulInteractivity<V>, FocusEnabled<V>> {
Div { Div {
interaction: self.interaction, interactivity: self.interactivity,
focus: FocusEnabled::new(), focus: FocusEnabled::new(),
children: self.children, children: self.children,
group: self.group, group: self.group,
@ -118,9 +122,9 @@ impl<V: 'static> Div<V, StatefulInteraction<V>, FocusDisabled> {
pub fn track_focus( pub fn track_focus(
self, self,
handle: &FocusHandle, handle: &FocusHandle,
) -> Div<V, StatefulInteraction<V>, FocusEnabled<V>> { ) -> Div<V, StatefulInteractivity<V>, FocusEnabled<V>> {
Div { Div {
interaction: self.interaction, interactivity: self.interactivity,
focus: FocusEnabled::tracked(handle), focus: FocusEnabled::tracked(handle),
children: self.children, children: self.children,
group: self.group, group: self.group,
@ -145,13 +149,13 @@ impl<V: 'static> Div<V, StatefulInteraction<V>, FocusDisabled> {
} }
} }
impl<V: 'static> Div<V, StatelessInteraction<V>, FocusDisabled> { impl<V: 'static> Div<V, StatelessInteractivity<V>, FocusDisabled> {
pub fn track_focus( pub fn track_focus(
self, self,
handle: &FocusHandle, handle: &FocusHandle,
) -> Div<V, StatefulInteraction<V>, FocusEnabled<V>> { ) -> Div<V, StatefulInteractivity<V>, FocusEnabled<V>> {
Div { Div {
interaction: self.interaction.into_stateful(handle), interactivity: self.interactivity.into_stateful(handle),
focus: handle.clone().into(), focus: handle.clone().into(),
children: self.children, children: self.children,
group: self.group, group: self.group,
@ -163,7 +167,7 @@ impl<V: 'static> Div<V, StatelessInteraction<V>, FocusDisabled> {
impl<V, I> Focusable<V> for Div<V, I, FocusEnabled<V>> impl<V, I> Focusable<V> for Div<V, I, FocusEnabled<V>>
where where
V: 'static, V: 'static,
I: ElementInteraction<V>, I: ElementInteractivity<V>,
{ {
fn focus_listeners(&mut self) -> &mut FocusListeners<V> { fn focus_listeners(&mut self) -> &mut FocusListeners<V> {
&mut self.focus.focus_listeners &mut self.focus.focus_listeners
@ -191,13 +195,13 @@ pub struct DivState {
impl<V, I, F> Element<V> for Div<V, I, F> impl<V, I, F> Element<V> for Div<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
type ElementState = DivState; type ElementState = DivState;
fn id(&self) -> Option<ElementId> { fn id(&self) -> Option<ElementId> {
self.interaction self.interactivity
.as_stateful() .as_stateful()
.map(|identified| identified.id.clone()) .map(|identified| identified.id.clone())
} }
@ -209,15 +213,15 @@ where
cx: &mut ViewContext<V>, cx: &mut ViewContext<V>,
) -> Self::ElementState { ) -> Self::ElementState {
let mut element_state = element_state.unwrap_or_default(); let mut element_state = element_state.unwrap_or_default();
self.focus self.interactivity.initialize(cx, |cx| {
.initialize(element_state.focus_handle.take(), cx, |focus_handle, cx| { self.focus
element_state.focus_handle = focus_handle; .initialize(element_state.focus_handle.take(), cx, |focus_handle, cx| {
self.interaction.initialize(cx, |cx| { element_state.focus_handle = focus_handle;
for child in &mut self.children { for child in &mut self.children {
child.initialize(view_state, cx); child.initialize(view_state, cx);
} }
}) })
}); });
element_state element_state
} }
@ -281,11 +285,11 @@ where
(child_max - child_min).into() (child_max - child_min).into()
}; };
cx.stack(z_index, |cx| { cx.with_z_index(z_index, |cx| {
cx.stack(0, |cx| { cx.with_z_index(0, |cx| {
style.paint(bounds, cx); style.paint(bounds, cx);
this.focus.paint(bounds, cx); this.focus.paint(bounds, cx);
this.interaction.paint( this.interactivity.paint(
bounds, bounds,
content_size, content_size,
style.overflow, style.overflow,
@ -293,7 +297,7 @@ where
cx, cx,
); );
}); });
cx.stack(1, |cx| { cx.with_z_index(1, |cx| {
style.apply_text_style(cx, |cx| { style.apply_text_style(cx, |cx| {
style.apply_overflow(bounds, cx, |cx| { style.apply_overflow(bounds, cx, |cx| {
let scroll_offset = element_state.interactive.scroll_offset(); let scroll_offset = element_state.interactive.scroll_offset();
@ -316,7 +320,7 @@ where
impl<V, I, F> Component<V> for Div<V, I, F> impl<V, I, F> Component<V> for Div<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn render(self) -> AnyElement<V> { fn render(self) -> AnyElement<V> {
@ -326,7 +330,7 @@ where
impl<V, I, F> ParentElement<V> for Div<V, I, F> impl<V, I, F> ParentElement<V> for Div<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn children_mut(&mut self) -> &mut SmallVec<[AnyElement<V>; 2]> { fn children_mut(&mut self) -> &mut SmallVec<[AnyElement<V>; 2]> {
@ -336,7 +340,7 @@ where
impl<V, I, F> Styled for Div<V, I, F> impl<V, I, F> Styled for Div<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn style(&mut self) -> &mut StyleRefinement { fn style(&mut self) -> &mut StyleRefinement {
@ -346,19 +350,19 @@ where
impl<V, I, F> StatelessInteractive<V> for Div<V, I, F> impl<V, I, F> StatelessInteractive<V> for Div<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn stateless_interaction(&mut self) -> &mut StatelessInteraction<V> { fn stateless_interactivity(&mut self) -> &mut StatelessInteractivity<V> {
self.interaction.as_stateless_mut() self.interactivity.as_stateless_mut()
} }
} }
impl<V, F> StatefulInteractive<V> for Div<V, StatefulInteraction<V>, F> impl<V, F> StatefulInteractive<V> for Div<V, StatefulInteractivity<V>, F>
where where
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn stateful_interaction(&mut self) -> &mut StatefulInteraction<V> { fn stateful_interactivity(&mut self) -> &mut StatefulInteractivity<V> {
&mut self.interaction &mut self.interactivity
} }
} }

View File

@ -1,15 +1,15 @@
use crate::{ use crate::{
div, AnyElement, BorrowWindow, Bounds, Component, Div, DivState, Element, ElementFocus, div, AnyElement, BorrowWindow, Bounds, Component, Div, DivState, Element, ElementFocus,
ElementId, ElementInteraction, FocusDisabled, FocusEnabled, FocusListeners, Focusable, ElementId, ElementInteractivity, FocusDisabled, FocusEnabled, FocusListeners, Focusable,
LayoutId, Pixels, SharedString, StatefulInteraction, StatefulInteractive, StatelessInteraction, LayoutId, Pixels, SharedString, StatefulInteractive, StatefulInteractivity,
StatelessInteractive, StyleRefinement, Styled, ViewContext, StatelessInteractive, StatelessInteractivity, StyleRefinement, Styled, ViewContext,
}; };
use futures::FutureExt; use futures::FutureExt;
use util::ResultExt; use util::ResultExt;
pub struct Img< pub struct Img<
V: 'static, V: 'static,
I: ElementInteraction<V> = StatelessInteraction<V>, I: ElementInteractivity<V> = StatelessInteractivity<V>,
F: ElementFocus<V> = FocusDisabled, F: ElementFocus<V> = FocusDisabled,
> { > {
base: Div<V, I, F>, base: Div<V, I, F>,
@ -17,7 +17,7 @@ pub struct Img<
grayscale: bool, grayscale: bool,
} }
pub fn img<V: 'static>() -> Img<V, StatelessInteraction<V>, FocusDisabled> { pub fn img<V: 'static>() -> Img<V, StatelessInteractivity<V>, FocusDisabled> {
Img { Img {
base: div(), base: div(),
uri: None, uri: None,
@ -28,7 +28,7 @@ pub fn img<V: 'static>() -> Img<V, StatelessInteraction<V>, FocusDisabled> {
impl<V, I, F> Img<V, I, F> impl<V, I, F> Img<V, I, F>
where where
V: 'static, V: 'static,
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
pub fn uri(mut self, uri: impl Into<SharedString>) -> Self { pub fn uri(mut self, uri: impl Into<SharedString>) -> Self {
@ -42,11 +42,11 @@ where
} }
} }
impl<V, F> Img<V, StatelessInteraction<V>, F> impl<V, F> Img<V, StatelessInteractivity<V>, F>
where where
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
pub fn id(self, id: impl Into<ElementId>) -> Img<V, StatefulInteraction<V>, F> { pub fn id(self, id: impl Into<ElementId>) -> Img<V, StatefulInteractivity<V>, F> {
Img { Img {
base: self.base.id(id), base: self.base.id(id),
uri: self.uri, uri: self.uri,
@ -57,7 +57,7 @@ where
impl<V, I, F> Component<V> for Img<V, I, F> impl<V, I, F> Component<V> for Img<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn render(self) -> AnyElement<V> { fn render(self) -> AnyElement<V> {
@ -67,7 +67,7 @@ where
impl<V, I, F> Element<V> for Img<V, I, F> impl<V, I, F> Element<V> for Img<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
type ElementState = DivState; type ElementState = DivState;
@ -101,7 +101,7 @@ where
element_state: &mut Self::ElementState, element_state: &mut Self::ElementState,
cx: &mut ViewContext<V>, cx: &mut ViewContext<V>,
) { ) {
cx.stack(0, |cx| { cx.with_z_index(0, |cx| {
self.base.paint(bounds, view, element_state, cx); self.base.paint(bounds, view, element_state, cx);
}); });
@ -118,7 +118,7 @@ where
.and_then(ResultExt::log_err) .and_then(ResultExt::log_err)
{ {
let corner_radii = corner_radii.to_pixels(bounds.size, cx.rem_size()); let corner_radii = corner_radii.to_pixels(bounds.size, cx.rem_size());
cx.stack(1, |cx| { cx.with_z_index(1, |cx| {
cx.paint_image(bounds, corner_radii, data, self.grayscale) cx.paint_image(bounds, corner_radii, data, self.grayscale)
.log_err() .log_err()
}); });
@ -136,7 +136,7 @@ where
impl<V, I, F> Styled for Img<V, I, F> impl<V, I, F> Styled for Img<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn style(&mut self) -> &mut StyleRefinement { fn style(&mut self) -> &mut StyleRefinement {
@ -146,27 +146,27 @@ where
impl<V, I, F> StatelessInteractive<V> for Img<V, I, F> impl<V, I, F> StatelessInteractive<V> for Img<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn stateless_interaction(&mut self) -> &mut StatelessInteraction<V> { fn stateless_interactivity(&mut self) -> &mut StatelessInteractivity<V> {
self.base.stateless_interaction() self.base.stateless_interactivity()
} }
} }
impl<V, F> StatefulInteractive<V> for Img<V, StatefulInteraction<V>, F> impl<V, F> StatefulInteractive<V> for Img<V, StatefulInteractivity<V>, F>
where where
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn stateful_interaction(&mut self) -> &mut StatefulInteraction<V> { fn stateful_interactivity(&mut self) -> &mut StatefulInteractivity<V> {
self.base.stateful_interaction() self.base.stateful_interactivity()
} }
} }
impl<V, I> Focusable<V> for Img<V, I, FocusEnabled<V>> impl<V, I> Focusable<V> for Img<V, I, FocusEnabled<V>>
where where
V: 'static, V: 'static,
I: ElementInteraction<V>, I: ElementInteractivity<V>,
{ {
fn focus_listeners(&mut self) -> &mut FocusListeners<V> { fn focus_listeners(&mut self) -> &mut FocusListeners<V> {
self.base.focus_listeners() self.base.focus_listeners()

View File

@ -1,21 +1,21 @@
use crate::{ use crate::{
div, AnyElement, Bounds, Component, Div, DivState, Element, ElementFocus, ElementId, div, AnyElement, Bounds, Component, Div, DivState, Element, ElementFocus, ElementId,
ElementInteraction, FocusDisabled, FocusEnabled, FocusListeners, Focusable, LayoutId, Pixels, ElementInteractivity, FocusDisabled, FocusEnabled, FocusListeners, Focusable, LayoutId, Pixels,
SharedString, StatefulInteraction, StatefulInteractive, StatelessInteraction, SharedString, StatefulInteractive, StatefulInteractivity, StatelessInteractive,
StatelessInteractive, StyleRefinement, Styled, ViewContext, StatelessInteractivity, StyleRefinement, Styled, ViewContext,
}; };
use util::ResultExt; use util::ResultExt;
pub struct Svg< pub struct Svg<
V: 'static, V: 'static,
I: ElementInteraction<V> = StatelessInteraction<V>, I: ElementInteractivity<V> = StatelessInteractivity<V>,
F: ElementFocus<V> = FocusDisabled, F: ElementFocus<V> = FocusDisabled,
> { > {
base: Div<V, I, F>, base: Div<V, I, F>,
path: Option<SharedString>, path: Option<SharedString>,
} }
pub fn svg<V: 'static>() -> Svg<V, StatelessInteraction<V>, FocusDisabled> { pub fn svg<V: 'static>() -> Svg<V, StatelessInteractivity<V>, FocusDisabled> {
Svg { Svg {
base: div(), base: div(),
path: None, path: None,
@ -24,7 +24,7 @@ pub fn svg<V: 'static>() -> Svg<V, StatelessInteraction<V>, FocusDisabled> {
impl<V, I, F> Svg<V, I, F> impl<V, I, F> Svg<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
pub fn path(mut self, path: impl Into<SharedString>) -> Self { pub fn path(mut self, path: impl Into<SharedString>) -> Self {
@ -33,11 +33,11 @@ where
} }
} }
impl<V, F> Svg<V, StatelessInteraction<V>, F> impl<V, F> Svg<V, StatelessInteractivity<V>, F>
where where
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
pub fn id(self, id: impl Into<ElementId>) -> Svg<V, StatefulInteraction<V>, F> { pub fn id(self, id: impl Into<ElementId>) -> Svg<V, StatefulInteractivity<V>, F> {
Svg { Svg {
base: self.base.id(id), base: self.base.id(id),
path: self.path, path: self.path,
@ -47,7 +47,7 @@ where
impl<V, I, F> Component<V> for Svg<V, I, F> impl<V, I, F> Component<V> for Svg<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn render(self) -> AnyElement<V> { fn render(self) -> AnyElement<V> {
@ -57,7 +57,7 @@ where
impl<V, I, F> Element<V> for Svg<V, I, F> impl<V, I, F> Element<V> for Svg<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
type ElementState = DivState; type ElementState = DivState;
@ -107,7 +107,7 @@ where
impl<V, I, F> Styled for Svg<V, I, F> impl<V, I, F> Styled for Svg<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn style(&mut self) -> &mut StyleRefinement { fn style(&mut self) -> &mut StyleRefinement {
@ -117,27 +117,27 @@ where
impl<V, I, F> StatelessInteractive<V> for Svg<V, I, F> impl<V, I, F> StatelessInteractive<V> for Svg<V, I, F>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn stateless_interaction(&mut self) -> &mut StatelessInteraction<V> { fn stateless_interactivity(&mut self) -> &mut StatelessInteractivity<V> {
self.base.stateless_interaction() self.base.stateless_interactivity()
} }
} }
impl<V, F> StatefulInteractive<V> for Svg<V, StatefulInteraction<V>, F> impl<V, F> StatefulInteractive<V> for Svg<V, StatefulInteractivity<V>, F>
where where
V: 'static, V: 'static,
F: ElementFocus<V>, F: ElementFocus<V>,
{ {
fn stateful_interaction(&mut self) -> &mut StatefulInteraction<V> { fn stateful_interactivity(&mut self) -> &mut StatefulInteractivity<V> {
self.base.stateful_interaction() self.base.stateful_interactivity()
} }
} }
impl<V: 'static, I> Focusable<V> for Svg<V, I, FocusEnabled<V>> impl<V: 'static, I> Focusable<V> for Svg<V, I, FocusEnabled<V>>
where where
I: ElementInteraction<V>, I: ElementInteractivity<V>,
{ {
fn focus_listeners(&mut self) -> &mut FocusListeners<V> { fn focus_listeners(&mut self) -> &mut FocusListeners<V> {
self.base.focus_listeners() self.base.focus_listeners()

View File

@ -74,7 +74,7 @@ impl<V: 'static> Element<V> for Text<V> {
) -> LayoutId { ) -> LayoutId {
let text_system = cx.text_system().clone(); let text_system = cx.text_system().clone();
let text_style = cx.text_style(); let text_style = cx.text_style();
let font_size = text_style.font_size * cx.rem_size(); let font_size = text_style.font_size.to_pixels(cx.rem_size());
let line_height = text_style let line_height = text_style
.line_height .line_height
.to_pixels(font_size.into(), cx.rem_size()); .to_pixels(font_size.into(), cx.rem_size());
@ -127,6 +127,7 @@ impl<V: 'static> Element<V> for Text<V> {
let element_state = element_state let element_state = element_state
.as_ref() .as_ref()
.expect("measurement has not been performed"); .expect("measurement has not been performed");
let line_height = element_state.line_height; let line_height = element_state.line_height;
let mut line_origin = bounds.origin; let mut line_origin = bounds.origin;
for line in &element_state.lines { for line in &element_state.lines {

View File

@ -0,0 +1,244 @@
use crate::{
point, px, AnyElement, AvailableSpace, BorrowWindow, Bounds, Component, Element, ElementId,
ElementInteractivity, InteractiveElementState, LayoutId, Pixels, Point, Size,
StatefulInteractive, StatefulInteractivity, StatelessInteractive, StatelessInteractivity,
StyleRefinement, Styled, ViewContext,
};
use parking_lot::Mutex;
use smallvec::SmallVec;
use std::{cmp, ops::Range, sync::Arc};
use taffy::style::Overflow;
pub fn uniform_list<Id, V, C>(
id: Id,
item_count: usize,
f: impl 'static + Fn(&mut V, Range<usize>, &mut ViewContext<V>) -> SmallVec<[C; 64]>,
) -> UniformList<V>
where
Id: Into<ElementId>,
V: 'static,
C: Component<V>,
{
let id = id.into();
UniformList {
id: id.clone(),
style: Default::default(),
item_count,
render_items: Box::new(move |view, visible_range, cx| {
f(view, visible_range, cx)
.into_iter()
.map(|component| component.render())
.collect()
}),
interactivity: id.into(),
scroll_handle: None,
}
}
pub struct UniformList<V: 'static> {
id: ElementId,
style: StyleRefinement,
item_count: usize,
render_items: Box<
dyn for<'a> Fn(
&'a mut V,
Range<usize>,
&'a mut ViewContext<V>,
) -> SmallVec<[AnyElement<V>; 64]>,
>,
interactivity: StatefulInteractivity<V>,
scroll_handle: Option<UniformListScrollHandle>,
}
#[derive(Clone)]
pub struct UniformListScrollHandle(Arc<Mutex<Option<ScrollHandleState>>>);
#[derive(Clone, Debug)]
struct ScrollHandleState {
item_height: Pixels,
list_height: Pixels,
scroll_offset: Arc<Mutex<Point<Pixels>>>,
}
impl UniformListScrollHandle {
pub fn new() -> Self {
Self(Arc::new(Mutex::new(None)))
}
pub fn scroll_to_item(&self, ix: usize) {
if let Some(state) = &*self.0.lock() {
let mut scroll_offset = state.scroll_offset.lock();
let item_top = state.item_height * ix;
let item_bottom = item_top + state.item_height;
let scroll_top = -scroll_offset.y;
if item_top < scroll_top {
scroll_offset.y = -item_top;
} else if item_bottom > scroll_top + state.list_height {
scroll_offset.y = -(item_bottom - state.list_height);
}
}
}
}
impl<V: 'static> Styled for UniformList<V> {
fn style(&mut self) -> &mut StyleRefinement {
&mut self.style
}
}
impl<V: 'static> Element<V> for UniformList<V> {
type ElementState = InteractiveElementState;
fn id(&self) -> Option<crate::ElementId> {
Some(self.id.clone())
}
fn initialize(
&mut self,
_: &mut V,
element_state: Option<Self::ElementState>,
_: &mut ViewContext<V>,
) -> Self::ElementState {
element_state.unwrap_or_default()
}
fn layout(
&mut self,
_view_state: &mut V,
_element_state: &mut Self::ElementState,
cx: &mut ViewContext<V>,
) -> LayoutId {
cx.request_layout(&self.computed_style(), None)
}
fn paint(
&mut self,
bounds: crate::Bounds<crate::Pixels>,
view_state: &mut V,
element_state: &mut Self::ElementState,
cx: &mut ViewContext<V>,
) {
let style = self.computed_style();
style.paint(bounds, cx);
let border = style.border_widths.to_pixels(cx.rem_size());
let padding = style.padding.to_pixels(bounds.size.into(), cx.rem_size());
let padded_bounds = Bounds::from_corners(
bounds.origin + point(border.left + padding.left, border.top + padding.top),
bounds.lower_right()
- point(border.right + padding.right, border.bottom + padding.bottom),
);
cx.with_z_index(style.z_index.unwrap_or(0), |cx| {
let content_size;
if self.item_count > 0 {
let item_height = self.measure_item_height(view_state, padded_bounds, cx);
if let Some(scroll_handle) = self.scroll_handle.clone() {
scroll_handle.0.lock().replace(ScrollHandleState {
item_height,
list_height: padded_bounds.size.height,
scroll_offset: element_state.track_scroll_offset(),
});
}
let visible_item_count = if item_height > px(0.) {
(padded_bounds.size.height / item_height).ceil() as usize + 1
} else {
0
};
let scroll_offset = element_state
.scroll_offset()
.map_or((0.0).into(), |offset| offset.y);
let first_visible_element_ix = (-scroll_offset / item_height).floor() as usize;
let visible_range = first_visible_element_ix
..cmp::min(
first_visible_element_ix + visible_item_count,
self.item_count,
);
let mut items = (self.render_items)(view_state, visible_range.clone(), cx);
content_size = Size {
width: padded_bounds.size.width,
height: item_height * self.item_count,
};
cx.with_z_index(1, |cx| {
for (item, ix) in items.iter_mut().zip(visible_range) {
item.initialize(view_state, cx);
let layout_id = item.layout(view_state, cx);
cx.compute_layout(
layout_id,
Size {
width: AvailableSpace::Definite(bounds.size.width),
height: AvailableSpace::Definite(item_height),
},
);
let offset =
padded_bounds.origin + point(px(0.), item_height * ix + scroll_offset);
cx.with_element_offset(Some(offset), |cx| item.paint(view_state, cx))
}
});
} else {
content_size = Size {
width: bounds.size.width,
height: px(0.),
};
}
let overflow = point(style.overflow.x, Overflow::Scroll);
cx.with_z_index(0, |cx| {
self.interactivity
.paint(bounds, content_size, overflow, element_state, cx);
});
})
}
}
impl<V> UniformList<V> {
fn measure_item_height(
&self,
view_state: &mut V,
list_bounds: Bounds<Pixels>,
cx: &mut ViewContext<V>,
) -> Pixels {
let mut items = (self.render_items)(view_state, 0..1, cx);
debug_assert!(items.len() == 1);
let mut item_to_measure = items.pop().unwrap();
item_to_measure.initialize(view_state, cx);
let layout_id = item_to_measure.layout(view_state, cx);
cx.compute_layout(
layout_id,
Size {
width: AvailableSpace::Definite(list_bounds.size.width),
height: AvailableSpace::MinContent,
},
);
cx.layout_bounds(layout_id).size.height
}
pub fn track_scroll(mut self, handle: UniformListScrollHandle) -> Self {
self.scroll_handle = Some(handle);
self
}
}
impl<V: 'static> StatelessInteractive<V> for UniformList<V> {
fn stateless_interactivity(&mut self) -> &mut StatelessInteractivity<V> {
self.interactivity.as_stateless_mut()
}
}
impl<V: 'static> StatefulInteractive<V> for UniformList<V> {
fn stateful_interactivity(&mut self) -> &mut StatefulInteractivity<V> {
&mut self.interactivity
}
}
impl<V: 'static> Component<V> for UniformList<V> {
fn render(self) -> AnyElement<V> {
AnyElement::new(self)
}
}

View File

@ -71,7 +71,8 @@ impl<T> Future for Task<T> {
} }
} }
} }
type AnyLocalFuture<R> = Pin<Box<dyn 'static + Future<Output = R>>>;
type AnyFuture<R> = Pin<Box<dyn 'static + Send + Future<Output = R>>>;
impl BackgroundExecutor { impl BackgroundExecutor {
pub fn new(dispatcher: Arc<dyn PlatformDispatcher>) -> Self { pub fn new(dispatcher: Arc<dyn PlatformDispatcher>) -> Self {
Self { dispatcher } Self { dispatcher }
@ -84,10 +85,16 @@ impl BackgroundExecutor {
R: Send + 'static, R: Send + 'static,
{ {
let dispatcher = self.dispatcher.clone(); let dispatcher = self.dispatcher.clone();
let (runnable, task) = fn inner<R: Send + 'static>(
async_task::spawn(future, move |runnable| dispatcher.dispatch(runnable)); dispatcher: Arc<dyn PlatformDispatcher>,
runnable.schedule(); future: AnyFuture<R>,
Task::Spawned(task) ) -> Task<R> {
let (runnable, task) =
async_task::spawn(future, move |runnable| dispatcher.dispatch(runnable));
runnable.schedule();
Task::Spawned(task)
}
inner::<R>(dispatcher, Box::pin(future))
} }
#[cfg(any(test, feature = "test-support"))] #[cfg(any(test, feature = "test-support"))]
@ -251,11 +258,17 @@ impl ForegroundExecutor {
R: 'static, R: 'static,
{ {
let dispatcher = self.dispatcher.clone(); let dispatcher = self.dispatcher.clone();
let (runnable, task) = async_task::spawn_local(future, move |runnable| { fn inner<R: 'static>(
dispatcher.dispatch_on_main_thread(runnable) dispatcher: Arc<dyn PlatformDispatcher>,
}); future: AnyLocalFuture<R>,
runnable.schedule(); ) -> Task<R> {
Task::Spawned(task) let (runnable, task) = async_task::spawn_local(future, move |runnable| {
dispatcher.dispatch_on_main_thread(runnable)
});
runnable.schedule();
Task::Spawned(task)
}
inner::<R>(dispatcher, Box::pin(future))
} }
} }

View File

@ -25,6 +25,10 @@ impl<T: Clone + Debug + Default> Point<T> {
Self { x, y } Self { x, y }
} }
pub fn zero() -> Self {
Self::new(T::default(), T::default())
}
pub fn map<U: Clone + Default + Debug>(&self, f: impl Fn(T) -> U) -> Point<U> { pub fn map<U: Clone + Default + Debug>(&self, f: impl Fn(T) -> U) -> Point<U> {
Point { Point {
x: f(self.x.clone()), x: f(self.x.clone()),
@ -120,6 +124,10 @@ where
}, },
} }
} }
pub fn clamp(&self, min: &Self, max: &Self) -> Self {
self.max(min).min(max)
}
} }
impl<T: Clone + Default + Debug> Clone for Point<T> { impl<T: Clone + Default + Debug> Clone for Point<T> {
@ -259,6 +267,24 @@ impl From<Size<Pixels>> for Size<GlobalPixels> {
} }
} }
impl From<Size<Pixels>> for Size<DefiniteLength> {
fn from(size: Size<Pixels>) -> Self {
Size {
width: size.width.into(),
height: size.height.into(),
}
}
}
impl From<Size<Pixels>> for Size<AbsoluteLength> {
fn from(size: Size<Pixels>) -> Self {
Size {
width: size.width.into(),
height: size.height.into(),
}
}
}
impl Size<Length> { impl Size<Length> {
pub fn full() -> Self { pub fn full() -> Self {
Self { Self {
@ -492,6 +518,15 @@ where
impl<T: Clone + Default + Debug + Copy> Copy for Edges<T> {} impl<T: Clone + Default + Debug + Copy> Copy for Edges<T> {}
impl<T: Clone + Default + Debug> Edges<T> { impl<T: Clone + Default + Debug> Edges<T> {
pub fn all(value: T) -> Self {
Self {
top: value.clone(),
right: value.clone(),
bottom: value.clone(),
left: value,
}
}
pub fn map<U>(&self, f: impl Fn(&T) -> U) -> Edges<U> pub fn map<U>(&self, f: impl Fn(&T) -> U) -> Edges<U>
where where
U: Clone + Default + Debug, U: Clone + Default + Debug,
@ -541,6 +576,15 @@ impl Edges<DefiniteLength> {
left: px(0.).into(), left: px(0.).into(),
} }
} }
pub fn to_pixels(&self, parent_size: Size<AbsoluteLength>, rem_size: Pixels) -> Edges<Pixels> {
Edges {
top: self.top.to_pixels(parent_size.height, rem_size),
right: self.right.to_pixels(parent_size.width, rem_size),
bottom: self.bottom.to_pixels(parent_size.height, rem_size),
left: self.left.to_pixels(parent_size.width, rem_size),
}
}
} }
impl Edges<AbsoluteLength> { impl Edges<AbsoluteLength> {
@ -672,16 +716,16 @@ impl<T> Copy for Corners<T> where T: Copy + Clone + Default + Debug {}
pub struct Pixels(pub(crate) f32); pub struct Pixels(pub(crate) f32);
impl std::ops::Div for Pixels { impl std::ops::Div for Pixels {
type Output = Self; type Output = f32;
fn div(self, rhs: Self) -> Self::Output { fn div(self, rhs: Self) -> Self::Output {
Self(self.0 / rhs.0) self.0 / rhs.0
} }
} }
impl std::ops::DivAssign for Pixels { impl std::ops::DivAssign for Pixels {
fn div_assign(&mut self, rhs: Self) { fn div_assign(&mut self, rhs: Self) {
self.0 /= rhs.0; *self = Self(self.0 / rhs.0);
} }
} }
@ -730,16 +774,9 @@ impl MulAssign<f32> for Pixels {
} }
impl Pixels { impl Pixels {
pub const ZERO: Pixels = Pixels(0.0);
pub const MAX: Pixels = Pixels(f32::MAX); pub const MAX: Pixels = Pixels(f32::MAX);
pub fn as_usize(&self) -> usize {
self.0 as usize
}
pub fn as_isize(&self) -> isize {
self.0 as isize
}
pub fn floor(&self) -> Self { pub fn floor(&self) -> Self {
Self(self.0.floor()) Self(self.0.floor())
} }

View File

@ -1,3 +1,4 @@
#[macro_use]
mod action; mod action;
mod app; mod app;
mod assets; mod assets;
@ -23,6 +24,7 @@ mod text_system;
mod util; mod util;
mod view; mod view;
mod window; mod window;
mod window_input_handler;
mod private { mod private {
/// A mechanism for restricting implementations of a trait to only those in GPUI. /// A mechanism for restricting implementations of a trait to only those in GPUI.
@ -35,6 +37,7 @@ pub use anyhow::Result;
pub use app::*; pub use app::*;
pub use assets::*; pub use assets::*;
pub use color::*; pub use color::*;
pub use ctor::ctor;
pub use element::*; pub use element::*;
pub use elements::*; pub use elements::*;
pub use executor::*; pub use executor::*;
@ -63,6 +66,7 @@ pub use text_system::*;
pub use util::arc_cow::ArcCow; pub use util::arc_cow::ArcCow;
pub use view::*; pub use view::*;
pub use window::*; pub use window::*;
pub use window_input_handler::*;
use derive_more::{Deref, DerefMut}; use derive_more::{Deref, DerefMut};
use std::{ use std::{

View File

@ -25,13 +25,13 @@ const TOOLTIP_DELAY: Duration = Duration::from_millis(500);
const TOOLTIP_OFFSET: Point<Pixels> = Point::new(px(10.0), px(8.0)); const TOOLTIP_OFFSET: Point<Pixels> = Point::new(px(10.0), px(8.0));
pub trait StatelessInteractive<V: 'static>: Element<V> { pub trait StatelessInteractive<V: 'static>: Element<V> {
fn stateless_interaction(&mut self) -> &mut StatelessInteraction<V>; fn stateless_interactivity(&mut self) -> &mut StatelessInteractivity<V>;
fn hover(mut self, f: impl FnOnce(StyleRefinement) -> StyleRefinement) -> Self fn hover(mut self, f: impl FnOnce(StyleRefinement) -> StyleRefinement) -> Self
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction().hover_style = f(StyleRefinement::default()); self.stateless_interactivity().hover_style = f(StyleRefinement::default());
self self
} }
@ -43,7 +43,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction().group_hover_style = Some(GroupStyle { self.stateless_interactivity().group_hover_style = Some(GroupStyle {
group: group_name.into(), group: group_name.into(),
style: f(StyleRefinement::default()), style: f(StyleRefinement::default()),
}); });
@ -58,7 +58,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction() self.stateless_interactivity()
.mouse_down_listeners .mouse_down_listeners
.push(Box::new(move |view, event, bounds, phase, cx| { .push(Box::new(move |view, event, bounds, phase, cx| {
if phase == DispatchPhase::Bubble if phase == DispatchPhase::Bubble
@ -79,7 +79,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction() self.stateless_interactivity()
.mouse_up_listeners .mouse_up_listeners
.push(Box::new(move |view, event, bounds, phase, cx| { .push(Box::new(move |view, event, bounds, phase, cx| {
if phase == DispatchPhase::Bubble if phase == DispatchPhase::Bubble
@ -100,7 +100,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction() self.stateless_interactivity()
.mouse_down_listeners .mouse_down_listeners
.push(Box::new(move |view, event, bounds, phase, cx| { .push(Box::new(move |view, event, bounds, phase, cx| {
if phase == DispatchPhase::Capture if phase == DispatchPhase::Capture
@ -121,7 +121,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction() self.stateless_interactivity()
.mouse_up_listeners .mouse_up_listeners
.push(Box::new(move |view, event, bounds, phase, cx| { .push(Box::new(move |view, event, bounds, phase, cx| {
if phase == DispatchPhase::Capture if phase == DispatchPhase::Capture
@ -141,7 +141,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction() self.stateless_interactivity()
.mouse_move_listeners .mouse_move_listeners
.push(Box::new(move |view, event, bounds, phase, cx| { .push(Box::new(move |view, event, bounds, phase, cx| {
if phase == DispatchPhase::Bubble && bounds.contains_point(&event.position) { if phase == DispatchPhase::Bubble && bounds.contains_point(&event.position) {
@ -158,7 +158,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction() self.stateless_interactivity()
.scroll_wheel_listeners .scroll_wheel_listeners
.push(Box::new(move |view, event, bounds, phase, cx| { .push(Box::new(move |view, event, bounds, phase, cx| {
if phase == DispatchPhase::Bubble && bounds.contains_point(&event.position) { if phase == DispatchPhase::Bubble && bounds.contains_point(&event.position) {
@ -174,23 +174,48 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
C: TryInto<DispatchContext>, C: TryInto<DispatchContext>,
C::Error: Debug, C::Error: Debug,
{ {
self.stateless_interaction().dispatch_context = self.stateless_interactivity().dispatch_context =
context.try_into().expect("invalid dispatch context"); context.try_into().expect("invalid dispatch context");
self self
} }
fn on_action<A: 'static>( /// Capture the given action, fires during the capture phase
fn capture_action<A: 'static>(
mut self, mut self,
listener: impl Fn(&mut V, &A, DispatchPhase, &mut ViewContext<V>) + 'static, listener: impl Fn(&mut V, &A, &mut ViewContext<V>) + 'static,
) -> Self ) -> Self
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction().key_listeners.push(( self.stateless_interactivity().key_listeners.push((
TypeId::of::<A>(), TypeId::of::<A>(),
Box::new(move |view, event, _, phase, cx| { Box::new(move |view, event, _, phase, cx| {
let event = event.downcast_ref().unwrap(); let event = event.downcast_ref().unwrap();
listener(view, event, phase, cx); if phase == DispatchPhase::Capture {
listener(view, event, cx)
}
None
}),
));
self
}
/// Add a listener for the given action, fires during the bubble event phase
fn on_action<A: 'static>(
mut self,
listener: impl Fn(&mut V, &A, &mut ViewContext<V>) + 'static,
) -> Self
where
Self: Sized,
{
self.stateless_interactivity().key_listeners.push((
TypeId::of::<A>(),
Box::new(move |view, event, _, phase, cx| {
let event = event.downcast_ref().unwrap();
if phase == DispatchPhase::Bubble {
listener(view, event, cx)
}
None None
}), }),
)); ));
@ -204,7 +229,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction().key_listeners.push(( self.stateless_interactivity().key_listeners.push((
TypeId::of::<KeyDownEvent>(), TypeId::of::<KeyDownEvent>(),
Box::new(move |view, event, _, phase, cx| { Box::new(move |view, event, _, phase, cx| {
let event = event.downcast_ref().unwrap(); let event = event.downcast_ref().unwrap();
@ -222,7 +247,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction().key_listeners.push(( self.stateless_interactivity().key_listeners.push((
TypeId::of::<KeyUpEvent>(), TypeId::of::<KeyUpEvent>(),
Box::new(move |view, event, _, phase, cx| { Box::new(move |view, event, _, phase, cx| {
let event = event.downcast_ref().unwrap(); let event = event.downcast_ref().unwrap();
@ -237,7 +262,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction() self.stateless_interactivity()
.drag_over_styles .drag_over_styles
.push((TypeId::of::<S>(), f(StyleRefinement::default()))); .push((TypeId::of::<S>(), f(StyleRefinement::default())));
self self
@ -251,7 +276,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction().group_drag_over_styles.push(( self.stateless_interactivity().group_drag_over_styles.push((
TypeId::of::<S>(), TypeId::of::<S>(),
GroupStyle { GroupStyle {
group: group_name.into(), group: group_name.into(),
@ -268,7 +293,7 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateless_interaction().drop_listeners.push(( self.stateless_interactivity().drop_listeners.push((
TypeId::of::<W>(), TypeId::of::<W>(),
Box::new(move |view, dragged_view, cx| { Box::new(move |view, dragged_view, cx| {
listener(view, dragged_view.downcast().unwrap(), cx); listener(view, dragged_view.downcast().unwrap(), cx);
@ -279,13 +304,13 @@ pub trait StatelessInteractive<V: 'static>: Element<V> {
} }
pub trait StatefulInteractive<V: 'static>: StatelessInteractive<V> { pub trait StatefulInteractive<V: 'static>: StatelessInteractive<V> {
fn stateful_interaction(&mut self) -> &mut StatefulInteraction<V>; fn stateful_interactivity(&mut self) -> &mut StatefulInteractivity<V>;
fn active(mut self, f: impl FnOnce(StyleRefinement) -> StyleRefinement) -> Self fn active(mut self, f: impl FnOnce(StyleRefinement) -> StyleRefinement) -> Self
where where
Self: Sized, Self: Sized,
{ {
self.stateful_interaction().active_style = f(StyleRefinement::default()); self.stateful_interactivity().active_style = f(StyleRefinement::default());
self self
} }
@ -297,7 +322,7 @@ pub trait StatefulInteractive<V: 'static>: StatelessInteractive<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateful_interaction().group_active_style = Some(GroupStyle { self.stateful_interactivity().group_active_style = Some(GroupStyle {
group: group_name.into(), group: group_name.into(),
style: f(StyleRefinement::default()), style: f(StyleRefinement::default()),
}); });
@ -311,7 +336,7 @@ pub trait StatefulInteractive<V: 'static>: StatelessInteractive<V> {
where where
Self: Sized, Self: Sized,
{ {
self.stateful_interaction() self.stateful_interactivity()
.click_listeners .click_listeners
.push(Box::new(move |view, event, cx| listener(view, event, cx))); .push(Box::new(move |view, event, cx| listener(view, event, cx)));
self self
@ -326,10 +351,10 @@ pub trait StatefulInteractive<V: 'static>: StatelessInteractive<V> {
W: 'static + Render, W: 'static + Render,
{ {
debug_assert!( debug_assert!(
self.stateful_interaction().drag_listener.is_none(), self.stateful_interactivity().drag_listener.is_none(),
"calling on_drag more than once on the same element is not supported" "calling on_drag more than once on the same element is not supported"
); );
self.stateful_interaction().drag_listener = self.stateful_interactivity().drag_listener =
Some(Box::new(move |view_state, cursor_offset, cx| AnyDrag { Some(Box::new(move |view_state, cursor_offset, cx| AnyDrag {
view: listener(view_state, cx).into(), view: listener(view_state, cx).into(),
cursor_offset, cursor_offset,
@ -342,10 +367,10 @@ pub trait StatefulInteractive<V: 'static>: StatelessInteractive<V> {
Self: Sized, Self: Sized,
{ {
debug_assert!( debug_assert!(
self.stateful_interaction().hover_listener.is_none(), self.stateful_interactivity().hover_listener.is_none(),
"calling on_hover more than once on the same element is not supported" "calling on_hover more than once on the same element is not supported"
); );
self.stateful_interaction().hover_listener = Some(Box::new(listener)); self.stateful_interactivity().hover_listener = Some(Box::new(listener));
self self
} }
@ -358,10 +383,10 @@ pub trait StatefulInteractive<V: 'static>: StatelessInteractive<V> {
W: 'static + Render, W: 'static + Render,
{ {
debug_assert!( debug_assert!(
self.stateful_interaction().tooltip_builder.is_none(), self.stateful_interactivity().tooltip_builder.is_none(),
"calling tooltip more than once on the same element is not supported" "calling tooltip more than once on the same element is not supported"
); );
self.stateful_interaction().tooltip_builder = Some(Arc::new(move |view_state, cx| { self.stateful_interactivity().tooltip_builder = Some(Arc::new(move |view_state, cx| {
build_tooltip(view_state, cx).into() build_tooltip(view_state, cx).into()
})); }));
@ -369,11 +394,11 @@ pub trait StatefulInteractive<V: 'static>: StatelessInteractive<V> {
} }
} }
pub trait ElementInteraction<V: 'static>: 'static { pub trait ElementInteractivity<V: 'static>: 'static {
fn as_stateless(&self) -> &StatelessInteraction<V>; fn as_stateless(&self) -> &StatelessInteractivity<V>;
fn as_stateless_mut(&mut self) -> &mut StatelessInteraction<V>; fn as_stateless_mut(&mut self) -> &mut StatelessInteractivity<V>;
fn as_stateful(&self) -> Option<&StatefulInteraction<V>>; fn as_stateful(&self) -> Option<&StatefulInteractivity<V>>;
fn as_stateful_mut(&mut self) -> Option<&mut StatefulInteraction<V>>; fn as_stateful_mut(&mut self) -> Option<&mut StatefulInteractivity<V>>;
fn initialize<R>( fn initialize<R>(
&mut self, &mut self,
@ -397,9 +422,10 @@ pub trait ElementInteraction<V: 'static>: 'static {
None None
}), }),
)); ));
let result = stateful.stateless.initialize(cx, f);
stateful.key_listeners.pop(); cx.with_key_dispatch_context(stateful.dispatch_context.clone(), |cx| {
result cx.with_key_listeners(mem::take(&mut stateful.key_listeners), f)
})
}) })
} else { } else {
let stateless = self.as_stateless_mut(); let stateless = self.as_stateless_mut();
@ -735,11 +761,11 @@ pub trait ElementInteraction<V: 'static>: 'static {
} }
#[derive(Deref, DerefMut)] #[derive(Deref, DerefMut)]
pub struct StatefulInteraction<V> { pub struct StatefulInteractivity<V> {
pub id: ElementId, pub id: ElementId,
#[deref] #[deref]
#[deref_mut] #[deref_mut]
stateless: StatelessInteraction<V>, stateless: StatelessInteractivity<V>,
click_listeners: SmallVec<[ClickListener<V>; 2]>, click_listeners: SmallVec<[ClickListener<V>; 2]>,
active_style: StyleRefinement, active_style: StyleRefinement,
group_active_style: Option<GroupStyle>, group_active_style: Option<GroupStyle>,
@ -748,29 +774,29 @@ pub struct StatefulInteraction<V> {
tooltip_builder: Option<TooltipBuilder<V>>, tooltip_builder: Option<TooltipBuilder<V>>,
} }
impl<V: 'static> ElementInteraction<V> for StatefulInteraction<V> { impl<V: 'static> ElementInteractivity<V> for StatefulInteractivity<V> {
fn as_stateful(&self) -> Option<&StatefulInteraction<V>> { fn as_stateful(&self) -> Option<&StatefulInteractivity<V>> {
Some(self) Some(self)
} }
fn as_stateful_mut(&mut self) -> Option<&mut StatefulInteraction<V>> { fn as_stateful_mut(&mut self) -> Option<&mut StatefulInteractivity<V>> {
Some(self) Some(self)
} }
fn as_stateless(&self) -> &StatelessInteraction<V> { fn as_stateless(&self) -> &StatelessInteractivity<V> {
&self.stateless &self.stateless
} }
fn as_stateless_mut(&mut self) -> &mut StatelessInteraction<V> { fn as_stateless_mut(&mut self) -> &mut StatelessInteractivity<V> {
&mut self.stateless &mut self.stateless
} }
} }
impl<V> From<ElementId> for StatefulInteraction<V> { impl<V> From<ElementId> for StatefulInteractivity<V> {
fn from(id: ElementId) -> Self { fn from(id: ElementId) -> Self {
Self { Self {
id, id,
stateless: StatelessInteraction::default(), stateless: StatelessInteractivity::default(),
click_listeners: SmallVec::new(), click_listeners: SmallVec::new(),
drag_listener: None, drag_listener: None,
hover_listener: None, hover_listener: None,
@ -783,7 +809,7 @@ impl<V> From<ElementId> for StatefulInteraction<V> {
type DropListener<V> = dyn Fn(&mut V, AnyView, &mut ViewContext<V>) + 'static; type DropListener<V> = dyn Fn(&mut V, AnyView, &mut ViewContext<V>) + 'static;
pub struct StatelessInteraction<V> { pub struct StatelessInteractivity<V> {
pub dispatch_context: DispatchContext, pub dispatch_context: DispatchContext,
pub mouse_down_listeners: SmallVec<[MouseDownListener<V>; 2]>, pub mouse_down_listeners: SmallVec<[MouseDownListener<V>; 2]>,
pub mouse_up_listeners: SmallVec<[MouseUpListener<V>; 2]>, pub mouse_up_listeners: SmallVec<[MouseUpListener<V>; 2]>,
@ -797,9 +823,9 @@ pub struct StatelessInteraction<V> {
drop_listeners: SmallVec<[(TypeId, Box<DropListener<V>>); 2]>, drop_listeners: SmallVec<[(TypeId, Box<DropListener<V>>); 2]>,
} }
impl<V> StatelessInteraction<V> { impl<V> StatelessInteractivity<V> {
pub fn into_stateful(self, id: impl Into<ElementId>) -> StatefulInteraction<V> { pub fn into_stateful(self, id: impl Into<ElementId>) -> StatefulInteractivity<V> {
StatefulInteraction { StatefulInteractivity {
id: id.into(), id: id.into(),
stateless: self, stateless: self,
click_listeners: SmallVec::new(), click_listeners: SmallVec::new(),
@ -875,9 +901,15 @@ impl InteractiveElementState {
.as_ref() .as_ref()
.map(|offset| offset.lock().clone()) .map(|offset| offset.lock().clone())
} }
pub fn track_scroll_offset(&mut self) -> Arc<Mutex<Point<Pixels>>> {
self.scroll_offset
.get_or_insert_with(|| Arc::new(Mutex::new(Default::default())))
.clone()
}
} }
impl<V> Default for StatelessInteraction<V> { impl<V> Default for StatelessInteractivity<V> {
fn default() -> Self { fn default() -> Self {
Self { Self {
dispatch_context: DispatchContext::default(), dispatch_context: DispatchContext::default(),
@ -895,20 +927,20 @@ impl<V> Default for StatelessInteraction<V> {
} }
} }
impl<V: 'static> ElementInteraction<V> for StatelessInteraction<V> { impl<V: 'static> ElementInteractivity<V> for StatelessInteractivity<V> {
fn as_stateful(&self) -> Option<&StatefulInteraction<V>> { fn as_stateful(&self) -> Option<&StatefulInteractivity<V>> {
None None
} }
fn as_stateful_mut(&mut self) -> Option<&mut StatefulInteraction<V>> { fn as_stateful_mut(&mut self) -> Option<&mut StatefulInteractivity<V>> {
None None
} }
fn as_stateless(&self) -> &StatelessInteraction<V> { fn as_stateless(&self) -> &StatelessInteractivity<V> {
self self
} }
fn as_stateless_mut(&mut self) -> &mut StatelessInteraction<V> { fn as_stateless_mut(&mut self) -> &mut StatelessInteractivity<V> {
self self
} }
} }
@ -1230,3 +1262,70 @@ pub type KeyListener<V> = Box<
) -> Option<Box<dyn Action>> ) -> Option<Box<dyn Action>>
+ 'static, + 'static,
>; >;
#[cfg(test)]
mod test {
use crate::{
self as gpui, div, Div, FocusHandle, KeyBinding, Keystroke, ParentElement, Render,
StatefulInteractivity, StatelessInteractive, TestAppContext, VisualContext,
};
struct TestView {
saw_key_down: bool,
saw_action: bool,
focus_handle: FocusHandle,
}
actions!(TestAction);
impl Render for TestView {
type Element = Div<Self, StatefulInteractivity<Self>>;
fn render(&mut self, _: &mut gpui::ViewContext<Self>) -> Self::Element {
div().id("testview").child(
div()
.on_key_down(|this: &mut TestView, _, _, _| {
dbg!("ola!");
this.saw_key_down = true
})
.on_action(|this: &mut TestView, _: &TestAction, _| {
dbg!("ola!");
this.saw_action = true
})
.track_focus(&self.focus_handle),
)
}
}
#[gpui::test]
fn test_on_events(cx: &mut TestAppContext) {
let window = cx.update(|cx| {
cx.open_window(Default::default(), |cx| {
cx.build_view(|cx| TestView {
saw_key_down: false,
saw_action: false,
focus_handle: cx.focus_handle(),
})
})
});
cx.update(|cx| {
cx.bind_keys(vec![KeyBinding::new("ctrl-g", TestAction, None)]);
});
window
.update(cx, |test_view, cx| cx.focus(&test_view.focus_handle))
.unwrap();
cx.dispatch_keystroke(*window, Keystroke::parse("space").unwrap(), false);
cx.dispatch_keystroke(*window, Keystroke::parse("ctrl-g").unwrap(), false);
window
.update(cx, |test_view, _| {
assert!(test_view.saw_key_down || test_view.saw_action);
assert!(test_view.saw_key_down);
assert!(test_view.saw_action);
})
.unwrap();
}
}

View File

@ -87,7 +87,7 @@ impl MetalRenderer {
MTLResourceOptions::StorageModeManaged, MTLResourceOptions::StorageModeManaged,
); );
let paths_rasterization_pipeline_state = build_pipeline_state( let paths_rasterization_pipeline_state = build_path_rasterization_pipeline_state(
&device, &device,
&library, &library,
"paths_rasterization", "paths_rasterization",
@ -823,7 +823,40 @@ fn build_pipeline_state(
color_attachment.set_source_alpha_blend_factor(metal::MTLBlendFactor::One); color_attachment.set_source_alpha_blend_factor(metal::MTLBlendFactor::One);
color_attachment.set_destination_rgb_blend_factor(metal::MTLBlendFactor::OneMinusSourceAlpha); color_attachment.set_destination_rgb_blend_factor(metal::MTLBlendFactor::OneMinusSourceAlpha);
color_attachment.set_destination_alpha_blend_factor(metal::MTLBlendFactor::One); color_attachment.set_destination_alpha_blend_factor(metal::MTLBlendFactor::One);
descriptor.set_depth_attachment_pixel_format(MTLPixelFormat::Invalid);
device
.new_render_pipeline_state(&descriptor)
.expect("could not create render pipeline state")
}
fn build_path_rasterization_pipeline_state(
device: &metal::DeviceRef,
library: &metal::LibraryRef,
label: &str,
vertex_fn_name: &str,
fragment_fn_name: &str,
pixel_format: metal::MTLPixelFormat,
) -> metal::RenderPipelineState {
let vertex_fn = library
.get_function(vertex_fn_name, None)
.expect("error locating vertex function");
let fragment_fn = library
.get_function(fragment_fn_name, None)
.expect("error locating fragment function");
let descriptor = metal::RenderPipelineDescriptor::new();
descriptor.set_label(label);
descriptor.set_vertex_function(Some(vertex_fn.as_ref()));
descriptor.set_fragment_function(Some(fragment_fn.as_ref()));
let color_attachment = descriptor.color_attachments().object_at(0).unwrap();
color_attachment.set_pixel_format(pixel_format);
color_attachment.set_blending_enabled(true);
color_attachment.set_rgb_blend_operation(metal::MTLBlendOperation::Add);
color_attachment.set_alpha_blend_operation(metal::MTLBlendOperation::Add);
color_attachment.set_source_rgb_blend_factor(metal::MTLBlendFactor::One);
color_attachment.set_source_alpha_blend_factor(metal::MTLBlendFactor::One);
color_attachment.set_destination_rgb_blend_factor(metal::MTLBlendFactor::One);
color_attachment.set_destination_alpha_blend_factor(metal::MTLBlendFactor::One);
device device
.new_render_pipeline_state(&descriptor) .new_render_pipeline_state(&descriptor)

View File

@ -5,10 +5,11 @@ using namespace metal;
float4 hsla_to_rgba(Hsla hsla); float4 hsla_to_rgba(Hsla hsla);
float4 to_device_position(float2 unit_vertex, Bounds_ScaledPixels bounds, float4 to_device_position(float2 unit_vertex, Bounds_ScaledPixels bounds,
Bounds_ScaledPixels clip_bounds,
constant Size_DevicePixels *viewport_size); constant Size_DevicePixels *viewport_size);
float2 to_tile_position(float2 unit_vertex, AtlasTile tile, float2 to_tile_position(float2 unit_vertex, AtlasTile tile,
constant Size_DevicePixels *atlas_size); constant Size_DevicePixels *atlas_size);
float4 distance_from_clip_rect(float2 unit_vertex, Bounds_ScaledPixels bounds,
Bounds_ScaledPixels clip_bounds);
float quad_sdf(float2 point, Bounds_ScaledPixels bounds, float quad_sdf(float2 point, Bounds_ScaledPixels bounds,
Corners_ScaledPixels corner_radii); Corners_ScaledPixels corner_radii);
float gaussian(float x, float sigma); float gaussian(float x, float sigma);
@ -21,6 +22,14 @@ struct QuadVertexOutput {
float4 background_color [[flat]]; float4 background_color [[flat]];
float4 border_color [[flat]]; float4 border_color [[flat]];
uint quad_id [[flat]]; uint quad_id [[flat]];
float clip_distance [[clip_distance]][4];
};
struct QuadFragmentInput {
float4 position [[position]];
float4 background_color [[flat]];
float4 border_color [[flat]];
uint quad_id [[flat]];
}; };
vertex QuadVertexOutput quad_vertex(uint unit_vertex_id [[vertex_id]], vertex QuadVertexOutput quad_vertex(uint unit_vertex_id [[vertex_id]],
@ -33,15 +42,21 @@ vertex QuadVertexOutput quad_vertex(uint unit_vertex_id [[vertex_id]],
[[buffer(QuadInputIndex_ViewportSize)]]) { [[buffer(QuadInputIndex_ViewportSize)]]) {
float2 unit_vertex = unit_vertices[unit_vertex_id]; float2 unit_vertex = unit_vertices[unit_vertex_id];
Quad quad = quads[quad_id]; Quad quad = quads[quad_id];
float4 device_position = to_device_position( float4 device_position =
unit_vertex, quad.bounds, quad.content_mask.bounds, viewport_size); to_device_position(unit_vertex, quad.bounds, viewport_size);
float4 clip_distance = distance_from_clip_rect(unit_vertex, quad.bounds,
quad.content_mask.bounds);
float4 background_color = hsla_to_rgba(quad.background); float4 background_color = hsla_to_rgba(quad.background);
float4 border_color = hsla_to_rgba(quad.border_color); float4 border_color = hsla_to_rgba(quad.border_color);
return QuadVertexOutput{device_position, background_color, border_color, return QuadVertexOutput{
quad_id}; device_position,
background_color,
border_color,
quad_id,
{clip_distance.x, clip_distance.y, clip_distance.z, clip_distance.w}};
} }
fragment float4 quad_fragment(QuadVertexOutput input [[stage_in]], fragment float4 quad_fragment(QuadFragmentInput input [[stage_in]],
constant Quad *quads constant Quad *quads
[[buffer(QuadInputIndex_Quads)]]) { [[buffer(QuadInputIndex_Quads)]]) {
Quad quad = quads[input.quad_id]; Quad quad = quads[input.quad_id];
@ -117,6 +132,13 @@ struct ShadowVertexOutput {
float4 position [[position]]; float4 position [[position]];
float4 color [[flat]]; float4 color [[flat]];
uint shadow_id [[flat]]; uint shadow_id [[flat]];
float clip_distance [[clip_distance]][4];
};
struct ShadowFragmentInput {
float4 position [[position]];
float4 color [[flat]];
uint shadow_id [[flat]];
}; };
vertex ShadowVertexOutput shadow_vertex( vertex ShadowVertexOutput shadow_vertex(
@ -137,18 +159,20 @@ vertex ShadowVertexOutput shadow_vertex(
bounds.size.width += 2. * margin; bounds.size.width += 2. * margin;
bounds.size.height += 2. * margin; bounds.size.height += 2. * margin;
float4 device_position = to_device_position( float4 device_position =
unit_vertex, bounds, shadow.content_mask.bounds, viewport_size); to_device_position(unit_vertex, bounds, viewport_size);
float4 clip_distance =
distance_from_clip_rect(unit_vertex, bounds, shadow.content_mask.bounds);
float4 color = hsla_to_rgba(shadow.color); float4 color = hsla_to_rgba(shadow.color);
return ShadowVertexOutput{ return ShadowVertexOutput{
device_position, device_position,
color, color,
shadow_id, shadow_id,
}; {clip_distance.x, clip_distance.y, clip_distance.z, clip_distance.w}};
} }
fragment float4 shadow_fragment(ShadowVertexOutput input [[stage_in]], fragment float4 shadow_fragment(ShadowFragmentInput input [[stage_in]],
constant Shadow *shadows constant Shadow *shadows
[[buffer(ShadowInputIndex_Shadows)]]) { [[buffer(ShadowInputIndex_Shadows)]]) {
Shadow shadow = shadows[input.shadow_id]; Shadow shadow = shadows[input.shadow_id];
@ -197,6 +221,13 @@ struct UnderlineVertexOutput {
float4 position [[position]]; float4 position [[position]];
float4 color [[flat]]; float4 color [[flat]];
uint underline_id [[flat]]; uint underline_id [[flat]];
float clip_distance [[clip_distance]][4];
};
struct UnderlineFragmentInput {
float4 position [[position]];
float4 color [[flat]];
uint underline_id [[flat]];
}; };
vertex UnderlineVertexOutput underline_vertex( vertex UnderlineVertexOutput underline_vertex(
@ -208,13 +239,18 @@ vertex UnderlineVertexOutput underline_vertex(
float2 unit_vertex = unit_vertices[unit_vertex_id]; float2 unit_vertex = unit_vertices[unit_vertex_id];
Underline underline = underlines[underline_id]; Underline underline = underlines[underline_id];
float4 device_position = float4 device_position =
to_device_position(unit_vertex, underline.bounds, to_device_position(unit_vertex, underline.bounds, viewport_size);
underline.content_mask.bounds, viewport_size); float4 clip_distance = distance_from_clip_rect(unit_vertex, underline.bounds,
underline.content_mask.bounds);
float4 color = hsla_to_rgba(underline.color); float4 color = hsla_to_rgba(underline.color);
return UnderlineVertexOutput{device_position, color, underline_id}; return UnderlineVertexOutput{
device_position,
color,
underline_id,
{clip_distance.x, clip_distance.y, clip_distance.z, clip_distance.w}};
} }
fragment float4 underline_fragment(UnderlineVertexOutput input [[stage_in]], fragment float4 underline_fragment(UnderlineFragmentInput input [[stage_in]],
constant Underline *underlines constant Underline *underlines
[[buffer(UnderlineInputIndex_Underlines)]]) { [[buffer(UnderlineInputIndex_Underlines)]]) {
Underline underline = underlines[input.underline_id]; Underline underline = underlines[input.underline_id];
@ -244,7 +280,13 @@ struct MonochromeSpriteVertexOutput {
float4 position [[position]]; float4 position [[position]];
float2 tile_position; float2 tile_position;
float4 color [[flat]]; float4 color [[flat]];
uint sprite_id [[flat]]; float clip_distance [[clip_distance]][4];
};
struct MonochromeSpriteFragmentInput {
float4 position [[position]];
float2 tile_position;
float4 color [[flat]];
}; };
vertex MonochromeSpriteVertexOutput monochrome_sprite_vertex( vertex MonochromeSpriteVertexOutput monochrome_sprite_vertex(
@ -255,32 +297,31 @@ vertex MonochromeSpriteVertexOutput monochrome_sprite_vertex(
[[buffer(SpriteInputIndex_ViewportSize)]], [[buffer(SpriteInputIndex_ViewportSize)]],
constant Size_DevicePixels *atlas_size constant Size_DevicePixels *atlas_size
[[buffer(SpriteInputIndex_AtlasTextureSize)]]) { [[buffer(SpriteInputIndex_AtlasTextureSize)]]) {
float2 unit_vertex = unit_vertices[unit_vertex_id]; float2 unit_vertex = unit_vertices[unit_vertex_id];
MonochromeSprite sprite = sprites[sprite_id]; MonochromeSprite sprite = sprites[sprite_id];
// Don't apply content mask at the vertex level because we don't have time float4 device_position =
// to make sampling from the texture match the mask. to_device_position(unit_vertex, sprite.bounds, viewport_size);
float4 device_position = to_device_position(unit_vertex, sprite.bounds, float4 clip_distance = distance_from_clip_rect(unit_vertex, sprite.bounds,
sprite.bounds, viewport_size); sprite.content_mask.bounds);
float2 tile_position = to_tile_position(unit_vertex, sprite.tile, atlas_size); float2 tile_position = to_tile_position(unit_vertex, sprite.tile, atlas_size);
float4 color = hsla_to_rgba(sprite.color); float4 color = hsla_to_rgba(sprite.color);
return MonochromeSpriteVertexOutput{device_position, tile_position, color, return MonochromeSpriteVertexOutput{
sprite_id}; device_position,
tile_position,
color,
{clip_distance.x, clip_distance.y, clip_distance.z, clip_distance.w}};
} }
fragment float4 monochrome_sprite_fragment( fragment float4 monochrome_sprite_fragment(
MonochromeSpriteVertexOutput input [[stage_in]], MonochromeSpriteFragmentInput input [[stage_in]],
constant MonochromeSprite *sprites [[buffer(SpriteInputIndex_Sprites)]], constant MonochromeSprite *sprites [[buffer(SpriteInputIndex_Sprites)]],
texture2d<float> atlas_texture [[texture(SpriteInputIndex_AtlasTexture)]]) { texture2d<float> atlas_texture [[texture(SpriteInputIndex_AtlasTexture)]]) {
MonochromeSprite sprite = sprites[input.sprite_id];
constexpr sampler atlas_texture_sampler(mag_filter::linear, constexpr sampler atlas_texture_sampler(mag_filter::linear,
min_filter::linear); min_filter::linear);
float4 sample = float4 sample =
atlas_texture.sample(atlas_texture_sampler, input.tile_position); atlas_texture.sample(atlas_texture_sampler, input.tile_position);
float clip_distance = quad_sdf(input.position.xy, sprite.content_mask.bounds,
Corners_ScaledPixels{0., 0., 0., 0.});
float4 color = input.color; float4 color = input.color;
color.a *= sample.a * saturate(0.5 - clip_distance); color.a *= sample.a;
return color; return color;
} }
@ -288,6 +329,13 @@ struct PolychromeSpriteVertexOutput {
float4 position [[position]]; float4 position [[position]];
float2 tile_position; float2 tile_position;
uint sprite_id [[flat]]; uint sprite_id [[flat]];
float clip_distance [[clip_distance]][4];
};
struct PolychromeSpriteFragmentInput {
float4 position [[position]];
float2 tile_position;
uint sprite_id [[flat]];
}; };
vertex PolychromeSpriteVertexOutput polychrome_sprite_vertex( vertex PolychromeSpriteVertexOutput polychrome_sprite_vertex(
@ -301,17 +349,20 @@ vertex PolychromeSpriteVertexOutput polychrome_sprite_vertex(
float2 unit_vertex = unit_vertices[unit_vertex_id]; float2 unit_vertex = unit_vertices[unit_vertex_id];
PolychromeSprite sprite = sprites[sprite_id]; PolychromeSprite sprite = sprites[sprite_id];
// Don't apply content mask at the vertex level because we don't have time float4 device_position =
// to make sampling from the texture match the mask. to_device_position(unit_vertex, sprite.bounds, viewport_size);
float4 device_position = to_device_position(unit_vertex, sprite.bounds, float4 clip_distance = distance_from_clip_rect(unit_vertex, sprite.bounds,
sprite.bounds, viewport_size); sprite.content_mask.bounds);
float2 tile_position = to_tile_position(unit_vertex, sprite.tile, atlas_size); float2 tile_position = to_tile_position(unit_vertex, sprite.tile, atlas_size);
return PolychromeSpriteVertexOutput{device_position, tile_position, return PolychromeSpriteVertexOutput{
sprite_id}; device_position,
tile_position,
sprite_id,
{clip_distance.x, clip_distance.y, clip_distance.z, clip_distance.w}};
} }
fragment float4 polychrome_sprite_fragment( fragment float4 polychrome_sprite_fragment(
PolychromeSpriteVertexOutput input [[stage_in]], PolychromeSpriteFragmentInput input [[stage_in]],
constant PolychromeSprite *sprites [[buffer(SpriteInputIndex_Sprites)]], constant PolychromeSprite *sprites [[buffer(SpriteInputIndex_Sprites)]],
texture2d<float> atlas_texture [[texture(SpriteInputIndex_AtlasTexture)]]) { texture2d<float> atlas_texture [[texture(SpriteInputIndex_AtlasTexture)]]) {
PolychromeSprite sprite = sprites[input.sprite_id]; PolychromeSprite sprite = sprites[input.sprite_id];
@ -319,11 +370,8 @@ fragment float4 polychrome_sprite_fragment(
min_filter::linear); min_filter::linear);
float4 sample = float4 sample =
atlas_texture.sample(atlas_texture_sampler, input.tile_position); atlas_texture.sample(atlas_texture_sampler, input.tile_position);
float quad_distance = float distance =
quad_sdf(input.position.xy, sprite.bounds, sprite.corner_radii); quad_sdf(input.position.xy, sprite.bounds, sprite.corner_radii);
float clip_distance = quad_sdf(input.position.xy, sprite.content_mask.bounds,
Corners_ScaledPixels{0., 0., 0., 0.});
float distance = max(quad_distance, clip_distance);
float4 color = sample; float4 color = sample;
if (sprite.grayscale) { if (sprite.grayscale) {
@ -385,7 +433,6 @@ struct PathSpriteVertexOutput {
float4 position [[position]]; float4 position [[position]];
float2 tile_position; float2 tile_position;
float4 color [[flat]]; float4 color [[flat]];
uint sprite_id [[flat]];
}; };
vertex PathSpriteVertexOutput path_sprite_vertex( vertex PathSpriteVertexOutput path_sprite_vertex(
@ -401,19 +448,17 @@ vertex PathSpriteVertexOutput path_sprite_vertex(
PathSprite sprite = sprites[sprite_id]; PathSprite sprite = sprites[sprite_id];
// Don't apply content mask because it was already accounted for when // Don't apply content mask because it was already accounted for when
// rasterizing the path. // rasterizing the path.
float4 device_position = to_device_position(unit_vertex, sprite.bounds, float4 device_position =
sprite.bounds, viewport_size); to_device_position(unit_vertex, sprite.bounds, viewport_size);
float2 tile_position = to_tile_position(unit_vertex, sprite.tile, atlas_size); float2 tile_position = to_tile_position(unit_vertex, sprite.tile, atlas_size);
float4 color = hsla_to_rgba(sprite.color); float4 color = hsla_to_rgba(sprite.color);
return PathSpriteVertexOutput{device_position, tile_position, color, return PathSpriteVertexOutput{device_position, tile_position, color};
sprite_id};
} }
fragment float4 path_sprite_fragment( fragment float4 path_sprite_fragment(
PathSpriteVertexOutput input [[stage_in]], PathSpriteVertexOutput input [[stage_in]],
constant PathSprite *sprites [[buffer(SpriteInputIndex_Sprites)]], constant PathSprite *sprites [[buffer(SpriteInputIndex_Sprites)]],
texture2d<float> atlas_texture [[texture(SpriteInputIndex_AtlasTexture)]]) { texture2d<float> atlas_texture [[texture(SpriteInputIndex_AtlasTexture)]]) {
PathSprite sprite = sprites[input.sprite_id];
constexpr sampler atlas_texture_sampler(mag_filter::linear, constexpr sampler atlas_texture_sampler(mag_filter::linear,
min_filter::linear); min_filter::linear);
float4 sample = float4 sample =
@ -473,16 +518,10 @@ float4 hsla_to_rgba(Hsla hsla) {
} }
float4 to_device_position(float2 unit_vertex, Bounds_ScaledPixels bounds, float4 to_device_position(float2 unit_vertex, Bounds_ScaledPixels bounds,
Bounds_ScaledPixels clip_bounds,
constant Size_DevicePixels *input_viewport_size) { constant Size_DevicePixels *input_viewport_size) {
float2 position = float2 position =
unit_vertex * float2(bounds.size.width, bounds.size.height) + unit_vertex * float2(bounds.size.width, bounds.size.height) +
float2(bounds.origin.x, bounds.origin.y); float2(bounds.origin.x, bounds.origin.y);
position.x = max(clip_bounds.origin.x, position.x);
position.x = min(clip_bounds.origin.x + clip_bounds.size.width, position.x);
position.y = max(clip_bounds.origin.y, position.y);
position.y = min(clip_bounds.origin.y + clip_bounds.size.height, position.y);
float2 viewport_size = float2((float)input_viewport_size->width, float2 viewport_size = float2((float)input_viewport_size->width,
(float)input_viewport_size->height); (float)input_viewport_size->height);
float2 device_position = float2 device_position =
@ -551,3 +590,14 @@ float blur_along_x(float x, float y, float sigma, float corner,
0.5 + 0.5 * erf((x + float2(-curved, curved)) * (sqrt(0.5) / sigma)); 0.5 + 0.5 * erf((x + float2(-curved, curved)) * (sqrt(0.5) / sigma));
return integral.y - integral.x; return integral.y - integral.x;
} }
float4 distance_from_clip_rect(float2 unit_vertex, Bounds_ScaledPixels bounds,
Bounds_ScaledPixels clip_bounds) {
float2 position =
unit_vertex * float2(bounds.size.width, bounds.size.height) +
float2(bounds.origin.x, bounds.origin.y);
return float4(position.x - clip_bounds.origin.x,
clip_bounds.origin.x + clip_bounds.size.width - position.x,
position.y - clip_bounds.origin.y,
clip_bounds.origin.y + clip_bounds.size.height - position.y);
}

View File

@ -1,5 +1,9 @@
mod dispatcher; mod dispatcher;
mod display;
mod platform; mod platform;
mod window;
pub use dispatcher::*; pub use dispatcher::*;
pub use display::*;
pub use platform::*; pub use platform::*;
pub use window::*;

View File

@ -0,0 +1,41 @@
use anyhow::{Ok, Result};
use crate::{Bounds, DisplayId, GlobalPixels, PlatformDisplay, Point};
#[derive(Debug)]
pub struct TestDisplay {
id: DisplayId,
uuid: uuid::Uuid,
bounds: Bounds<GlobalPixels>,
}
impl TestDisplay {
pub fn new() -> Self {
TestDisplay {
id: DisplayId(1),
uuid: uuid::Uuid::new_v4(),
bounds: Bounds::from_corners(
Point::zero(),
Point::new(GlobalPixels(1920.), GlobalPixels(1080.)),
),
}
}
}
impl PlatformDisplay for TestDisplay {
fn id(&self) -> crate::DisplayId {
self.id
}
fn uuid(&self) -> Result<uuid::Uuid> {
Ok(self.uuid)
}
fn as_any(&self) -> &dyn std::any::Any {
todo!()
}
fn bounds(&self) -> crate::Bounds<crate::GlobalPixels> {
self.bounds
}
}

View File

@ -1,10 +1,18 @@
use crate::{BackgroundExecutor, DisplayId, ForegroundExecutor, Platform, PlatformTextSystem}; use crate::{
AnyWindowHandle, BackgroundExecutor, CursorStyle, DisplayId, ForegroundExecutor, Platform,
PlatformDisplay, PlatformTextSystem, TestDisplay, TestWindow, WindowOptions,
};
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use std::sync::Arc; use parking_lot::Mutex;
use std::{rc::Rc, sync::Arc};
pub struct TestPlatform { pub struct TestPlatform {
background_executor: BackgroundExecutor, background_executor: BackgroundExecutor,
foreground_executor: ForegroundExecutor, foreground_executor: ForegroundExecutor,
active_window: Arc<Mutex<Option<AnyWindowHandle>>>,
active_display: Rc<dyn PlatformDisplay>,
active_cursor: Mutex<CursorStyle>,
} }
impl TestPlatform { impl TestPlatform {
@ -12,6 +20,10 @@ impl TestPlatform {
TestPlatform { TestPlatform {
background_executor: executor, background_executor: executor,
foreground_executor, foreground_executor,
active_cursor: Default::default(),
active_display: Rc::new(TestDisplay::new()),
active_window: Default::default(),
} }
} }
} }
@ -59,11 +71,11 @@ impl Platform for TestPlatform {
} }
fn displays(&self) -> Vec<std::rc::Rc<dyn crate::PlatformDisplay>> { fn displays(&self) -> Vec<std::rc::Rc<dyn crate::PlatformDisplay>> {
unimplemented!() vec![self.active_display.clone()]
} }
fn display(&self, _id: DisplayId) -> Option<std::rc::Rc<dyn crate::PlatformDisplay>> { fn display(&self, id: DisplayId) -> Option<std::rc::Rc<dyn crate::PlatformDisplay>> {
unimplemented!() self.displays().iter().find(|d| d.id() == id).cloned()
} }
fn main_window(&self) -> Option<crate::AnyWindowHandle> { fn main_window(&self) -> Option<crate::AnyWindowHandle> {
@ -72,10 +84,11 @@ impl Platform for TestPlatform {
fn open_window( fn open_window(
&self, &self,
_handle: crate::AnyWindowHandle, handle: AnyWindowHandle,
_options: crate::WindowOptions, options: WindowOptions,
) -> Box<dyn crate::PlatformWindow> { ) -> Box<dyn crate::PlatformWindow> {
unimplemented!() *self.active_window.lock() = Some(handle);
Box::new(TestWindow::new(options, self.active_display.clone()))
} }
fn set_display_link_output_callback( fn set_display_link_output_callback(
@ -164,8 +177,8 @@ impl Platform for TestPlatform {
unimplemented!() unimplemented!()
} }
fn set_cursor_style(&self, _style: crate::CursorStyle) { fn set_cursor_style(&self, style: crate::CursorStyle) {
unimplemented!() *self.active_cursor.lock() = style;
} }
fn should_auto_hide_scrollbars(&self) -> bool { fn should_auto_hide_scrollbars(&self) -> bool {

View File

@ -0,0 +1,179 @@
use std::{rc::Rc, sync::Arc};
use parking_lot::Mutex;
use crate::{
px, Pixels, PlatformAtlas, PlatformDisplay, PlatformWindow, Point, Scene, Size,
WindowAppearance, WindowBounds, WindowOptions,
};
#[derive(Default)]
struct Handlers {
active_status_change: Vec<Box<dyn FnMut(bool)>>,
input: Vec<Box<dyn FnMut(crate::InputEvent) -> bool>>,
moved: Vec<Box<dyn FnMut()>>,
resize: Vec<Box<dyn FnMut(Size<Pixels>, f32)>>,
}
pub struct TestWindow {
bounds: WindowBounds,
current_scene: Mutex<Option<Scene>>,
display: Rc<dyn PlatformDisplay>,
handlers: Mutex<Handlers>,
sprite_atlas: Arc<dyn PlatformAtlas>,
}
impl TestWindow {
pub fn new(options: WindowOptions, display: Rc<dyn PlatformDisplay>) -> Self {
Self {
bounds: options.bounds,
current_scene: Default::default(),
display,
sprite_atlas: Arc::new(TestAtlas),
handlers: Default::default(),
}
}
}
impl PlatformWindow for TestWindow {
fn bounds(&self) -> WindowBounds {
self.bounds
}
fn content_size(&self) -> Size<Pixels> {
let bounds = match self.bounds {
WindowBounds::Fixed(bounds) => bounds,
WindowBounds::Maximized | WindowBounds::Fullscreen => self.display().bounds(),
};
bounds.size.map(|p| px(p.0))
}
fn scale_factor(&self) -> f32 {
2.0
}
fn titlebar_height(&self) -> Pixels {
todo!()
}
fn appearance(&self) -> WindowAppearance {
todo!()
}
fn display(&self) -> std::rc::Rc<dyn crate::PlatformDisplay> {
self.display.clone()
}
fn mouse_position(&self) -> Point<Pixels> {
Point::zero()
}
fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
todo!()
}
fn set_input_handler(&mut self, _input_handler: Box<dyn crate::PlatformInputHandler>) {
todo!()
}
fn prompt(
&self,
_level: crate::PromptLevel,
_msg: &str,
_answers: &[&str],
) -> futures::channel::oneshot::Receiver<usize> {
todo!()
}
fn activate(&self) {
todo!()
}
fn set_title(&mut self, _title: &str) {
todo!()
}
fn set_edited(&mut self, _edited: bool) {
todo!()
}
fn show_character_palette(&self) {
todo!()
}
fn minimize(&self) {
todo!()
}
fn zoom(&self) {
todo!()
}
fn toggle_full_screen(&self) {
todo!()
}
fn on_input(&self, callback: Box<dyn FnMut(crate::InputEvent) -> bool>) {
self.handlers.lock().input.push(callback)
}
fn on_active_status_change(&self, callback: Box<dyn FnMut(bool)>) {
self.handlers.lock().active_status_change.push(callback)
}
fn on_resize(&self, callback: Box<dyn FnMut(Size<Pixels>, f32)>) {
self.handlers.lock().resize.push(callback)
}
fn on_fullscreen(&self, _callback: Box<dyn FnMut(bool)>) {
todo!()
}
fn on_moved(&self, callback: Box<dyn FnMut()>) {
self.handlers.lock().moved.push(callback)
}
fn on_should_close(&self, _callback: Box<dyn FnMut() -> bool>) {
todo!()
}
fn on_close(&self, _callback: Box<dyn FnOnce()>) {
todo!()
}
fn on_appearance_changed(&self, _callback: Box<dyn FnMut()>) {
todo!()
}
fn is_topmost_for_position(&self, _position: crate::Point<Pixels>) -> bool {
todo!()
}
fn draw(&self, scene: crate::Scene) {
self.current_scene.lock().replace(scene);
}
fn sprite_atlas(&self) -> std::sync::Arc<dyn crate::PlatformAtlas> {
self.sprite_atlas.clone()
}
}
pub struct TestAtlas;
impl PlatformAtlas for TestAtlas {
fn get_or_insert_with<'a>(
&self,
_key: &crate::AtlasKey,
_build: &mut dyn FnMut() -> anyhow::Result<(
Size<crate::DevicePixels>,
std::borrow::Cow<'a, [u8]>,
)>,
) -> anyhow::Result<crate::AtlasTile> {
todo!()
}
fn clear(&self) {
todo!()
}
}

View File

@ -1,8 +1,8 @@
use crate::{ use crate::{
black, phi, point, rems, AbsoluteLength, BorrowAppContext, BorrowWindow, Bounds, ContentMask, black, phi, point, rems, AbsoluteLength, BorrowAppContext, BorrowWindow, Bounds, ContentMask,
Corners, CornersRefinement, CursorStyle, DefiniteLength, Edges, EdgesRefinement, Font, Corners, CornersRefinement, CursorStyle, DefiniteLength, Edges, EdgesRefinement, Font,
FontFeatures, FontStyle, FontWeight, Hsla, Length, Pixels, Point, PointRefinement, Rems, FontFeatures, FontStyle, FontWeight, Hsla, Length, Pixels, Point, PointRefinement, Result,
Result, Rgba, SharedString, Size, SizeRefinement, Styled, TextRun, ViewContext, WindowContext, Rgba, SharedString, Size, SizeRefinement, Styled, TextRun, ViewContext, WindowContext,
}; };
use refineable::{Cascade, Refineable}; use refineable::{Cascade, Refineable};
use smallvec::SmallVec; use smallvec::SmallVec;
@ -134,7 +134,7 @@ pub struct TextStyle {
pub color: Hsla, pub color: Hsla,
pub font_family: SharedString, pub font_family: SharedString,
pub font_features: FontFeatures, pub font_features: FontFeatures,
pub font_size: Rems, pub font_size: AbsoluteLength,
pub line_height: DefiniteLength, pub line_height: DefiniteLength,
pub font_weight: FontWeight, pub font_weight: FontWeight,
pub font_style: FontStyle, pub font_style: FontStyle,
@ -147,7 +147,7 @@ impl Default for TextStyle {
color: black(), color: black(),
font_family: "Helvetica".into(), // todo!("Get a font we know exists on the system") font_family: "Helvetica".into(), // todo!("Get a font we know exists on the system")
font_features: FontFeatures::default(), font_features: FontFeatures::default(),
font_size: rems(1.), font_size: rems(1.).into(),
line_height: phi(), line_height: phi(),
font_weight: FontWeight::default(), font_weight: FontWeight::default(),
font_style: FontStyle::default(), font_style: FontStyle::default(),
@ -189,6 +189,10 @@ impl TextStyle {
} }
} }
pub fn line_height_in_pixels(&self, rem_size: Pixels) -> Pixels {
self.line_height.to_pixels(self.font_size, rem_size)
}
pub fn to_run(&self, len: usize) -> TextRun { pub fn to_run(&self, len: usize) -> TextRun {
TextRun { TextRun {
len, len,
@ -277,7 +281,7 @@ impl Style {
pub fn paint<V: 'static>(&self, bounds: Bounds<Pixels>, cx: &mut ViewContext<V>) { pub fn paint<V: 'static>(&self, bounds: Bounds<Pixels>, cx: &mut ViewContext<V>) {
let rem_size = cx.rem_size(); let rem_size = cx.rem_size();
cx.stack(0, |cx| { cx.with_z_index(0, |cx| {
cx.paint_shadows( cx.paint_shadows(
bounds, bounds,
self.corner_radii.to_pixels(bounds.size, rem_size), self.corner_radii.to_pixels(bounds.size, rem_size),
@ -287,7 +291,7 @@ impl Style {
let background_color = self.background.as_ref().and_then(Fill::color); let background_color = self.background.as_ref().and_then(Fill::color);
if background_color.is_some() || self.is_border_visible() { if background_color.is_some() || self.is_border_visible() {
cx.stack(1, |cx| { cx.with_z_index(1, |cx| {
cx.paint_quad( cx.paint_quad(
bounds, bounds,
self.corner_radii.to_pixels(bounds.size, rem_size), self.corner_radii.to_pixels(bounds.size, rem_size),

View File

@ -1,14 +1,19 @@
use crate::{ use crate::{
self as gpui, hsla, point, px, relative, rems, AlignItems, CursorStyle, DefiniteLength, self as gpui, hsla, point, px, relative, rems, AbsoluteLength, AlignItems, CursorStyle,
Display, Fill, FlexDirection, Hsla, JustifyContent, Length, Position, Rems, SharedString, DefiniteLength, Display, Fill, FlexDirection, Hsla, JustifyContent, Length, Position,
StyleRefinement, Visibility, SharedString, Style, StyleRefinement, Visibility,
}; };
use crate::{BoxShadow, TextStyleRefinement}; use crate::{BoxShadow, TextStyleRefinement};
use refineable::Refineable;
use smallvec::smallvec; use smallvec::smallvec;
pub trait Styled { pub trait Styled {
fn style(&mut self) -> &mut StyleRefinement; fn style(&mut self) -> &mut StyleRefinement;
fn computed_style(&mut self) -> Style {
Style::default().refined(self.style().clone())
}
gpui2_macros::style_helpers!(); gpui2_macros::style_helpers!();
/// Sets the size of the element to the full width and height. /// Sets the size of the element to the full width and height.
@ -433,7 +438,7 @@ pub trait Styled {
self self
} }
fn text_size(mut self, size: impl Into<Rems>) -> Self fn text_size(mut self, size: impl Into<AbsoluteLength>) -> Self
where where
Self: Sized, Self: Sized,
{ {
@ -449,7 +454,7 @@ pub trait Styled {
{ {
self.text_style() self.text_style()
.get_or_insert_with(Default::default) .get_or_insert_with(Default::default)
.font_size = Some(rems(0.75)); .font_size = Some(rems(0.75).into());
self self
} }
@ -459,7 +464,7 @@ pub trait Styled {
{ {
self.text_style() self.text_style()
.get_or_insert_with(Default::default) .get_or_insert_with(Default::default)
.font_size = Some(rems(0.875)); .font_size = Some(rems(0.875).into());
self self
} }
@ -469,7 +474,7 @@ pub trait Styled {
{ {
self.text_style() self.text_style()
.get_or_insert_with(Default::default) .get_or_insert_with(Default::default)
.font_size = Some(rems(1.0)); .font_size = Some(rems(1.0).into());
self self
} }
@ -479,7 +484,7 @@ pub trait Styled {
{ {
self.text_style() self.text_style()
.get_or_insert_with(Default::default) .get_or_insert_with(Default::default)
.font_size = Some(rems(1.125)); .font_size = Some(rems(1.125).into());
self self
} }
@ -489,7 +494,7 @@ pub trait Styled {
{ {
self.text_style() self.text_style()
.get_or_insert_with(Default::default) .get_or_insert_with(Default::default)
.font_size = Some(rems(1.25)); .font_size = Some(rems(1.25).into());
self self
} }
@ -499,7 +504,7 @@ pub trait Styled {
{ {
self.text_style() self.text_style()
.get_or_insert_with(Default::default) .get_or_insert_with(Default::default)
.font_size = Some(rems(1.5)); .font_size = Some(rems(1.5).into());
self self
} }
@ -509,7 +514,7 @@ pub trait Styled {
{ {
self.text_style() self.text_style()
.get_or_insert_with(Default::default) .get_or_insert_with(Default::default)
.font_size = Some(rems(1.875)); .font_size = Some(rems(1.875).into());
self self
} }

View File

@ -29,10 +29,6 @@ impl Line {
) )
} }
pub fn width(&self) -> Pixels {
self.layout.width
}
pub fn wrap_count(&self) -> usize { pub fn wrap_count(&self) -> usize {
self.layout.wrap_boundaries.len() self.layout.wrap_boundaries.len()
} }
@ -78,7 +74,6 @@ impl Line {
glyph_origin.y += line_height; glyph_origin.y += line_height;
} }
prev_glyph_position = glyph.position; prev_glyph_position = glyph.position;
let glyph_origin = glyph_origin + baseline_offset;
let mut finished_underline: Option<(Point<Pixels>, UnderlineStyle)> = None; let mut finished_underline: Option<(Point<Pixels>, UnderlineStyle)> = None;
if glyph.index >= run_end { if glyph.index >= run_end {
@ -129,14 +124,14 @@ impl Line {
if max_glyph_bounds.intersects(&content_mask.bounds) { if max_glyph_bounds.intersects(&content_mask.bounds) {
if glyph.is_emoji { if glyph.is_emoji {
cx.paint_emoji( cx.paint_emoji(
glyph_origin, glyph_origin + baseline_offset,
run.font_id, run.font_id,
glyph.id, glyph.id,
self.layout.layout.font_size, self.layout.layout.font_size,
)?; )?;
} else { } else {
cx.paint_glyph( cx.paint_glyph(
glyph_origin, glyph_origin + baseline_offset,
run.font_id, run.font_id,
glyph.id, glyph.id,
self.layout.layout.font_size, self.layout.layout.font_size,

Some files were not shown because too many files have changed in this diff Show More