feat: light theme for new editor
This commit is contained in:
1 parent
1861b5fa53
commit
29402055ab
13 files changed
+740
-47
No files matched your search
@@ -4,11 +4,10 @@
|
|||||||
"colors": {
|
"colors": {
|
||||||
"editor.background": "#1E1E1E",
|
"editor.background": "#1E1E1E",
|
||||||
"editor.foreground": "#D4D4D4",
|
"editor.foreground": "#D4D4D4",
|
||||||
"editor.inactiveSelectionBackground": "#3A3D41",
|
"lineNumber.foreground": "#404040",
|
||||||
"editorIndentGuide.background": "#404040",
|
|
||||||
"editor.selectionHighlightBackground": "#ADD6FF26",
|
|
||||||
"imeBar.background": "#dd1e1e1e",
|
"imeBar.background": "#dd1e1e1e",
|
||||||
"imeBar.foreground": "#f1f1f1"
|
"imeBar.foreground": "#f1f1f1",
|
||||||
|
"editor.selectionHighlightBackground": "#ADD6FF26"
|
||||||
},
|
},
|
||||||
"tokenColors": [
|
"tokenColors": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,537 @@
|
|||||||
|
{
|
||||||
|
"name": "Quiet Light",
|
||||||
|
"tokenColors": [
|
||||||
|
{
|
||||||
|
"settings": {
|
||||||
|
"background": "#F5F5F5",
|
||||||
|
"foreground": "#333333"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scope": [
|
||||||
|
"meta.embedded",
|
||||||
|
"source.groovy.embedded"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"background": "#F5F5F5",
|
||||||
|
"foreground": "#333333"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comments",
|
||||||
|
"scope": [
|
||||||
|
"comment",
|
||||||
|
"punctuation.definition.comment"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "italic",
|
||||||
|
"foreground": "#AAAAAA"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comments: Preprocessor",
|
||||||
|
"scope": "comment.block.preprocessor",
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "",
|
||||||
|
"foreground": "#AAAAAA"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comments: Documentation",
|
||||||
|
"scope": [
|
||||||
|
"comment.documentation",
|
||||||
|
"comment.block.documentation"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#448C27"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Invalid - Deprecated",
|
||||||
|
"scope": "invalid.deprecated",
|
||||||
|
"settings": {
|
||||||
|
"background": "#96000014"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Invalid - Illegal",
|
||||||
|
"scope": "invalid.illegal",
|
||||||
|
"settings": {
|
||||||
|
"background": "#96000014",
|
||||||
|
"foreground": "#660000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Operators",
|
||||||
|
"scope": "keyword.operator",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#777777"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Keywords",
|
||||||
|
"scope": [
|
||||||
|
"keyword",
|
||||||
|
"storage"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#4B83CD"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Types",
|
||||||
|
"scope": [
|
||||||
|
"storage.type",
|
||||||
|
"support.type"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#7A3E9D"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Language Constants",
|
||||||
|
"scope": [
|
||||||
|
"constant.language",
|
||||||
|
"support.constant",
|
||||||
|
"variable.language"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#AB6526"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Variables",
|
||||||
|
"scope": [
|
||||||
|
"variable",
|
||||||
|
"support.variable"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#7A3E9D"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Functions",
|
||||||
|
"scope": [
|
||||||
|
"entity.name.function",
|
||||||
|
"support.function"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "bold",
|
||||||
|
"foreground": "#AA3731"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Classes",
|
||||||
|
"scope": [
|
||||||
|
"entity.name.type",
|
||||||
|
"entity.other.inherited-class",
|
||||||
|
"support.class"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "bold",
|
||||||
|
"foreground": "#7A3E9D"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Exceptions",
|
||||||
|
"scope": "entity.name.exception",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#660000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Sections",
|
||||||
|
"scope": "entity.name.section",
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "bold"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Numbers, Characters",
|
||||||
|
"scope": [
|
||||||
|
"constant.numeric",
|
||||||
|
"constant.character",
|
||||||
|
"constant"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#AB6526"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Strings",
|
||||||
|
"scope": "string",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#448C27"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Strings: Escape Sequences",
|
||||||
|
"scope": "constant.character.escape",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#777777"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Strings: Regular Expressions",
|
||||||
|
"scope": "string.regexp",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#4B83CD"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Strings: Symbols",
|
||||||
|
"scope": "constant.other.symbol",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#AB6526"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Punctuation",
|
||||||
|
"scope": "punctuation",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#777777"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Embedded Source",
|
||||||
|
"scope": [
|
||||||
|
"string source",
|
||||||
|
"text source"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"background": "#EAEBE6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "-----------------------------------",
|
||||||
|
"settings": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HTML: Doctype Declaration",
|
||||||
|
"scope": [
|
||||||
|
"meta.tag.sgml.doctype",
|
||||||
|
"meta.tag.sgml.doctype string",
|
||||||
|
"meta.tag.sgml.doctype entity.name.tag",
|
||||||
|
"meta.tag.sgml punctuation.definition.tag.html"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#AAAAAA"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HTML: Tags",
|
||||||
|
"scope": [
|
||||||
|
"meta.tag",
|
||||||
|
"punctuation.definition.tag.html",
|
||||||
|
"punctuation.definition.tag.begin.html",
|
||||||
|
"punctuation.definition.tag.end.html"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#91B3E0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HTML: Tag Names",
|
||||||
|
"scope": "entity.name.tag",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#4B83CD"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HTML: Attribute Names",
|
||||||
|
"scope": [
|
||||||
|
"meta.tag entity.other.attribute-name",
|
||||||
|
"entity.other.attribute-name.html"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "italic",
|
||||||
|
"foreground": "#8190A0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HTML: Entities",
|
||||||
|
"scope": [
|
||||||
|
"constant.character.entity",
|
||||||
|
"punctuation.definition.entity"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#AB6526"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "-----------------------------------",
|
||||||
|
"settings": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CSS: Selectors",
|
||||||
|
"scope": [
|
||||||
|
"meta.selector",
|
||||||
|
"meta.selector entity",
|
||||||
|
"meta.selector entity punctuation",
|
||||||
|
"entity.name.tag.css"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#7A3E9D"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CSS: Property Names",
|
||||||
|
"scope": [
|
||||||
|
"meta.property-name",
|
||||||
|
"support.type.property-name"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#AB6526"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CSS: Property Values",
|
||||||
|
"scope": [
|
||||||
|
"meta.property-value",
|
||||||
|
"meta.property-value constant.other",
|
||||||
|
"support.constant.property-value"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#448C27"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CSS: Important Keyword",
|
||||||
|
"scope": "keyword.other.important",
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "bold"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "-----------------------------------",
|
||||||
|
"settings": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Changed",
|
||||||
|
"scope": "markup.changed",
|
||||||
|
"settings": {
|
||||||
|
"background": "#FFFFDD",
|
||||||
|
"foreground": "#000000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Deletion",
|
||||||
|
"scope": "markup.deleted",
|
||||||
|
"settings": {
|
||||||
|
"background": "#FFDDDD",
|
||||||
|
"foreground": "#000000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Emphasis",
|
||||||
|
"scope": "markup.italic",
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "italic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Error",
|
||||||
|
"scope": "markup.error",
|
||||||
|
"settings": {
|
||||||
|
"background": "#96000014",
|
||||||
|
"foreground": "#660000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Insertion",
|
||||||
|
"scope": "markup.inserted",
|
||||||
|
"settings": {
|
||||||
|
"background": "#DDFFDD",
|
||||||
|
"foreground": "#000000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Link",
|
||||||
|
"scope": "meta.link",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#4B83CD"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Output",
|
||||||
|
"scope": [
|
||||||
|
"markup.output",
|
||||||
|
"markup.raw"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#777777"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Prompt",
|
||||||
|
"scope": "markup.prompt",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#777777"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Heading",
|
||||||
|
"scope": "markup.heading",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#AA3731"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Strong",
|
||||||
|
"scope": "markup.bold",
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "bold"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Traceback",
|
||||||
|
"scope": "markup.traceback",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#660000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup: Underline",
|
||||||
|
"scope": "markup.underline",
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "underline"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Quote",
|
||||||
|
"scope": "markup.quote",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#7A3E9D"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Lists",
|
||||||
|
"scope": "markup.list",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#4B83CD"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Styling",
|
||||||
|
"scope": [
|
||||||
|
"markup.bold",
|
||||||
|
"markup.italic"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#448C27"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Markup Inline",
|
||||||
|
"scope": "markup.inline.raw",
|
||||||
|
"settings": {
|
||||||
|
"fontStyle": "",
|
||||||
|
"foreground": "#AB6526"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "-----------------------------------",
|
||||||
|
"settings": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Extra: Diff Range",
|
||||||
|
"scope": [
|
||||||
|
"meta.diff.range",
|
||||||
|
"meta.diff.index",
|
||||||
|
"meta.separator"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"background": "#DDDDFF",
|
||||||
|
"foreground": "#434343"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Extra: Diff From",
|
||||||
|
"scope": "meta.diff.header.from-file",
|
||||||
|
"settings": {
|
||||||
|
"background": "#FFDDDD",
|
||||||
|
"foreground": "#434343"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Extra: Diff To",
|
||||||
|
"scope": "meta.diff.header.to-file",
|
||||||
|
"settings": {
|
||||||
|
"background": "#DDFFDD",
|
||||||
|
"foreground": "#434343"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "JSX: Tags",
|
||||||
|
"scope": [
|
||||||
|
"punctuation.definition.tag.js",
|
||||||
|
"punctuation.definition.tag.begin.js",
|
||||||
|
"punctuation.definition.tag.end.js"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#91B3E0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "JSX: InnerText",
|
||||||
|
"scope": "meta.jsx.children.js",
|
||||||
|
"settings": {
|
||||||
|
"foreground": "#333333ff"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"colors": {
|
||||||
|
"imeBar.background": "#ddf0f1f2",
|
||||||
|
"imeBar.foreground": "#222327",
|
||||||
|
"lineNumber.foreground": "#9DA39A",
|
||||||
|
"editor.background": "#F5F5F5",
|
||||||
|
"editor.foreground": "#000000",
|
||||||
|
"focusBorder": "#A6B39B",
|
||||||
|
"pickerGroup.foreground": "#A6B39B",
|
||||||
|
"pickerGroup.border": "#749351",
|
||||||
|
"list.activeSelectionForeground": "#6c6c6c",
|
||||||
|
"list.focusBackground": "#CADEB9",
|
||||||
|
"list.hoverBackground": "#e0e0e0",
|
||||||
|
"list.activeSelectionBackground": "#c4d9b1",
|
||||||
|
"list.inactiveSelectionBackground": "#d3dbcd",
|
||||||
|
"list.highlightForeground": "#9769dc",
|
||||||
|
"selection.background": "#C9D0D9",
|
||||||
|
"editorWhitespace.foreground": "#AAAAAA",
|
||||||
|
"editor.lineHighlightBackground": "#E4F6D4",
|
||||||
|
"editor.selectionBackground": "#C9D0D9",
|
||||||
|
"panel.background": "#F5F5F5",
|
||||||
|
"sideBar.background": "#F2F2F2",
|
||||||
|
"sideBarSectionHeader.background": "#ede8ef",
|
||||||
|
"editorLineNumber.foreground": "#9DA39A",
|
||||||
|
"editorCursor.foreground": "#54494B",
|
||||||
|
"inputOption.activeBorder": "#adafb7",
|
||||||
|
"dropdown.background": "#F5F5F5",
|
||||||
|
"editor.findMatchBackground": "#BF9CAC",
|
||||||
|
"editor.findMatchHighlightBackground": "#edc9d8",
|
||||||
|
"peekViewEditor.matchHighlightBackground": "#C2DFE3",
|
||||||
|
"peekViewTitle.background": "#F2F8FC",
|
||||||
|
"peekViewEditor.background": "#F2F8FC",
|
||||||
|
"peekViewResult.background": "#F2F8FC",
|
||||||
|
"peekView.border": "#705697",
|
||||||
|
"peekViewResult.matchHighlightBackground": "#93C6D6",
|
||||||
|
"statusBar.background": "#705697",
|
||||||
|
"statusBar.noFolderBackground": "#705697",
|
||||||
|
"statusBar.debuggingBackground": "#705697",
|
||||||
|
"activityBar.background": "#EDEDF5",
|
||||||
|
"activityBar.foreground": "#705697",
|
||||||
|
"activityBarBadge.background": "#705697",
|
||||||
|
"titleBar.activeBackground": "#c4b7d7",
|
||||||
|
"button.background": "#705697",
|
||||||
|
"notification.background": "#442e66",
|
||||||
|
"editorGroup.dropBackground": "#C9D0D988",
|
||||||
|
"inputValidation.infoBorder": "#4ec1e5",
|
||||||
|
"inputValidation.infoBackground": "#f2fcff",
|
||||||
|
"inputValidation.warningBackground": "#fffee2",
|
||||||
|
"inputValidation.warningBorder": "#ffe055",
|
||||||
|
"inputValidation.errorBackground": "#ffeaea",
|
||||||
|
"inputValidation.errorBorder": "#f1897f",
|
||||||
|
"errorForeground": "#f1897f",
|
||||||
|
"badge.background": "#705697AA",
|
||||||
|
"progressBar.background": "#705697"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,6 +19,8 @@ public class Pref {
|
|||||||
private static final String KEY_FIRST_SHOW_AD = "En, Today is 17.7.7, but, I'm still love you so....";
|
private static final String KEY_FIRST_SHOW_AD = "En, Today is 17.7.7, but, I'm still love you so....";
|
||||||
private static final String KEY_LAST_SHOW_AD_MILLIS = "But... it seems that...you will not come back any more...";
|
private static final String KEY_LAST_SHOW_AD_MILLIS = "But... it seems that...you will not come back any more...";
|
||||||
private static final String KEY_FLOATING_MENU_SHOWN = "17.10.28 I have idea of what you think...maybe...I'm overthinking...";
|
private static final String KEY_FLOATING_MENU_SHOWN = "17.10.28 I have idea of what you think...maybe...I'm overthinking...";
|
||||||
|
private static final String KEY_EDITOR_THEME = "editor.theme";
|
||||||
|
|
||||||
private static SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
|
private static SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
@@ -147,4 +149,12 @@ public class Pref {
|
|||||||
public static void setFloatingMenuShown(boolean checked) {
|
public static void setFloatingMenuShown(boolean checked) {
|
||||||
def().edit().putBoolean(KEY_FLOATING_MENU_SHOWN, checked).apply();
|
def().edit().putBoolean(KEY_FLOATING_MENU_SHOWN, checked).apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getCurrentTheme() {
|
||||||
|
return def().getString(KEY_EDITOR_THEME, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setCurrentTheme(String theme) {
|
||||||
|
def().edit().putString(KEY_EDITOR_THEME, theme).apply();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -12,8 +12,8 @@ public class EditorColors {
|
|||||||
private String mEditorForeground;
|
private String mEditorForeground;
|
||||||
@SerializedName("editor.inactiveSelectionBackground")
|
@SerializedName("editor.inactiveSelectionBackground")
|
||||||
private String mEditorInactiveSelectionBackground;
|
private String mEditorInactiveSelectionBackground;
|
||||||
@SerializedName("editorIndentGuide.background")
|
@SerializedName("lineNumber.foreground")
|
||||||
private String mEditorIndentGuideBackground;
|
private String mLineNumberForeground;
|
||||||
@SerializedName("editor.selectionHighlightBackground")
|
@SerializedName("editor.selectionHighlightBackground")
|
||||||
private String mEditorSelectionHighlightBackground;
|
private String mEditorSelectionHighlightBackground;
|
||||||
@SerializedName("imeBar.background")
|
@SerializedName("imeBar.background")
|
||||||
@@ -45,12 +45,12 @@ public class EditorColors {
|
|||||||
mEditorInactiveSelectionBackground = editorInactiveSelectionBackground;
|
mEditorInactiveSelectionBackground = editorInactiveSelectionBackground;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getEditorIndentGuideBackground() {
|
public String getLineNumberForeground() {
|
||||||
return mEditorIndentGuideBackground;
|
return mLineNumberForeground;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEditorIndentGuideBackground(String editorIndentGuideBackground) {
|
public void setLineNumberForeground(String lineNumberForeground) {
|
||||||
mEditorIndentGuideBackground = editorIndentGuideBackground;
|
mLineNumberForeground = lineNumberForeground;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getEditorSelectionHighlightBackground() {
|
public String getEditorSelectionHighlightBackground() {
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
package com.stardust.scriptdroid.model.editor;
|
package com.stardust.scriptdroid.model.editor;
|
||||||
|
|
||||||
import android.graphics.Color;
|
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.annotations.SerializedName;
|
import com.google.gson.annotations.SerializedName;
|
||||||
@@ -11,8 +9,6 @@ import java.io.Reader;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.mozilla.javascript.Token.*;
|
|
||||||
|
|
||||||
public class EditorTheme {
|
public class EditorTheme {
|
||||||
|
|
||||||
private static Gson sGson;
|
private static Gson sGson;
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import android.widget.FrameLayout;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.afollestad.materialdialogs.MaterialDialog;
|
||||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||||
import com.stardust.autojs.execution.ScriptExecution;
|
import com.stardust.autojs.execution.ScriptExecution;
|
||||||
import com.stardust.pio.PFiles;
|
import com.stardust.pio.PFiles;
|
||||||
@@ -34,6 +35,7 @@ import com.stardust.scriptdroid.ui.edit.editor.CodeEditor;
|
|||||||
import com.stardust.scriptdroid.ui.edit.keyboard.FunctionsKeyboardHelper;
|
import com.stardust.scriptdroid.ui.edit.keyboard.FunctionsKeyboardHelper;
|
||||||
import com.stardust.scriptdroid.ui.edit.keyboard.FunctionsKeyboardView;
|
import com.stardust.scriptdroid.ui.edit.keyboard.FunctionsKeyboardView;
|
||||||
import com.stardust.scriptdroid.ui.edit.theme.Theme;
|
import com.stardust.scriptdroid.ui.edit.theme.Theme;
|
||||||
|
import com.stardust.scriptdroid.ui.edit.theme.Themes;
|
||||||
import com.stardust.scriptdroid.ui.log.LogActivity_;
|
import com.stardust.scriptdroid.ui.log.LogActivity_;
|
||||||
import com.stardust.scriptdroid.ui.widget.EWebView;
|
import com.stardust.scriptdroid.ui.widget.EWebView;
|
||||||
import com.stardust.scriptdroid.ui.widget.ToolbarMenuItem;
|
import com.stardust.scriptdroid.ui.widget.ToolbarMenuItem;
|
||||||
@@ -46,6 +48,7 @@ import org.androidannotations.annotations.EViewGroup;
|
|||||||
import org.androidannotations.annotations.ViewById;
|
import org.androidannotations.annotations.ViewById;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import io.reactivex.Observable;
|
import io.reactivex.Observable;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
@@ -224,7 +227,9 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
|||||||
setMenuItemStatus(R.id.save, false);
|
setMenuItemStatus(R.id.save, false);
|
||||||
mDocsWebView.getWebView().getSettings().setDisplayZoomControls(true);
|
mDocsWebView.getWebView().getSettings().setDisplayZoomControls(true);
|
||||||
mDocsWebView.getWebView().loadUrl(Pref.getDocumentationUrl() + "index.html");
|
mDocsWebView.getWebView().loadUrl(Pref.getDocumentationUrl() + "index.html");
|
||||||
|
Themes.getCurrent(getContext()).
|
||||||
|
observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(this::setTheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpFunctionsKeyboard() {
|
private void setUpFunctionsKeyboard() {
|
||||||
@@ -267,6 +272,7 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
|||||||
mCodeCompletionBar.setTextColor(textColor);
|
mCodeCompletionBar.setTextColor(textColor);
|
||||||
mSymbolBar.setTextColor(textColor);
|
mSymbolBar.setTextColor(textColor);
|
||||||
mShowFunctionsButton.setColorFilter(textColor);
|
mShowFunctionsButton.setColorFilter(textColor);
|
||||||
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onBackPressed() {
|
public boolean onBackPressed() {
|
||||||
@@ -371,7 +377,30 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void selectEditorTheme() {
|
public void selectEditorTheme() {
|
||||||
|
mEditor.setProgress(true);
|
||||||
|
Themes.getAllThemes(getContext())
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(themes -> {
|
||||||
|
mEditor.setProgress(false);
|
||||||
|
selectEditorTheme(themes);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void selectEditorTheme(List<Theme> themes) {
|
||||||
|
int i = themes.indexOf(mEditorTheme);
|
||||||
|
if (i < 0) {
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
new MaterialDialog.Builder(getContext())
|
||||||
|
.title(R.string.text_editor_theme)
|
||||||
|
.items(themes)
|
||||||
|
.itemsCallbackSingleChoice(i, (dialog, itemView, which, text) -> {
|
||||||
|
setTheme(themes.get(which));
|
||||||
|
Themes.setCurrent(themes.get(which).getName());
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public CodeEditor getEditor() {
|
public CodeEditor getEditor() {
|
||||||
|
|||||||
@@ -79,12 +79,11 @@ public class CodeEditText extends AppCompatEditText {
|
|||||||
if (mScrollView == null) {
|
if (mScrollView == null) {
|
||||||
mScrollView = (HVScrollView) getParent();
|
mScrollView = (HVScrollView) getParent();
|
||||||
}
|
}
|
||||||
// 根据行号计算左边距padding
|
// 根据行号计算左边距padding 留出绘制行号的空间
|
||||||
String max = Integer.toString(getLineCount());
|
String max = Integer.toString(getLineCount());
|
||||||
float lineNumberSize = getPaint().measureText(max) + 20;
|
float gutterWidth = getPaint().measureText(max) + 20;
|
||||||
if (getPaddingLeft() != lineNumberSize) {
|
if (getPaddingLeft() != gutterWidth) {
|
||||||
setPadding((int) lineNumberSize, 0, 0, 0);
|
setPadding((int) gutterWidth, 0, 0, 0);
|
||||||
invalidate();
|
|
||||||
}
|
}
|
||||||
super.onDraw(canvas);
|
super.onDraw(canvas);
|
||||||
// 画文字
|
// 画文字
|
||||||
@@ -92,7 +91,6 @@ public class CodeEditText extends AppCompatEditText {
|
|||||||
canvas.translate(0, getExtendedPaddingTop());
|
canvas.translate(0, getExtendedPaddingTop());
|
||||||
drawText(canvas);
|
drawText(canvas);
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绘制文本着色
|
// 绘制文本着色
|
||||||
|
|||||||
@@ -138,9 +138,11 @@ public class CodeEditor extends HVScrollView {
|
|||||||
|
|
||||||
public void setTheme(Theme theme) {
|
public void setTheme(Theme theme) {
|
||||||
mTheme = theme;
|
mTheme = theme;
|
||||||
mJavaScriptHighlighter.setTheme(theme);
|
|
||||||
setBackgroundColor(mTheme.getBackgroundColor());
|
setBackgroundColor(mTheme.getBackgroundColor());
|
||||||
|
mJavaScriptHighlighter.setTheme(theme);
|
||||||
|
mJavaScriptHighlighter.updateTokens(mCodeEditText.getText().toString());
|
||||||
|
mCodeEditText.setTheme(mTheme);
|
||||||
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -81,7 +81,7 @@ public class JavaScriptHighlighter implements SimpleTextWatcher.AfterTextChanged
|
|||||||
mTheme = theme;
|
mTheme = theme;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateTokens(String sourceString) {
|
public void updateTokens(String sourceString) {
|
||||||
final int id = mRunningHighlighterId.incrementAndGet();
|
final int id = mRunningHighlighterId.incrementAndGet();
|
||||||
mExecutorService.execute(() -> {
|
mExecutorService.execute(() -> {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,22 +1,14 @@
|
|||||||
package com.stardust.scriptdroid.ui.edit.theme;
|
package com.stardust.scriptdroid.ui.edit.theme;
|
||||||
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.util.SparseArray;
|
|
||||||
import android.util.SparseIntArray;
|
import android.util.SparseIntArray;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.stardust.scriptdroid.model.editor.EditorTheme;
|
import com.stardust.scriptdroid.model.editor.EditorTheme;
|
||||||
import com.stardust.scriptdroid.model.editor.TokenColor;
|
import com.stardust.scriptdroid.model.editor.TokenColor;
|
||||||
|
|
||||||
import org.mozilla.javascript.Context;
|
|
||||||
import org.mozilla.javascript.Token;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static org.mozilla.javascript.Token.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Stardust on 2018/2/16.
|
* Created by Stardust on 2018/2/16.
|
||||||
@@ -25,19 +17,21 @@ import static org.mozilla.javascript.Token.*;
|
|||||||
public class Theme {
|
public class Theme {
|
||||||
|
|
||||||
|
|
||||||
private int mBackgroundColor;
|
private int mBackgroundColor = Color.WHITE;
|
||||||
private int mForegroundColor;
|
private int mForegroundColor = Color.BLACK;
|
||||||
private int mLineNumberColor;
|
private int mLineNumberColor = Color.GRAY;
|
||||||
private SparseIntArray mTokenColors = new SparseIntArray();
|
private SparseIntArray mTokenColors = new SparseIntArray();
|
||||||
private int mImeBarBackgroundColor;
|
private int mImeBarBackgroundColor = 0xDDFFFFFF;
|
||||||
private int mImeBarForegroundColor;
|
private int mImeBarForegroundColor = Color.WHITE;
|
||||||
|
private EditorTheme mEditorTheme;
|
||||||
|
|
||||||
public Theme(EditorTheme theme) {
|
public Theme(EditorTheme theme) {
|
||||||
mBackgroundColor = Color.parseColor(theme.getEditorColors().getEditorBackground());
|
mEditorTheme = theme;
|
||||||
mForegroundColor = Color.parseColor(theme.getEditorColors().getEditorForeground());
|
mBackgroundColor = parseColor(theme.getEditorColors().getEditorBackground(), mBackgroundColor);
|
||||||
mLineNumberColor = Color.parseColor(theme.getEditorColors().getEditorIndentGuideBackground());
|
mForegroundColor = parseColor(theme.getEditorColors().getEditorForeground(), mForegroundColor);
|
||||||
mImeBarBackgroundColor = Color.parseColor(theme.getEditorColors().getImeBackgroundColor());
|
mLineNumberColor = parseColor(theme.getEditorColors().getLineNumberForeground(), mLineNumberColor);
|
||||||
mImeBarForegroundColor = Color.parseColor(theme.getEditorColors().getImeForegroundColor());
|
mImeBarBackgroundColor = parseColor(theme.getEditorColors().getImeBackgroundColor(), mImeBarBackgroundColor);
|
||||||
|
mImeBarForegroundColor = parseColor(theme.getEditorColors().getImeForegroundColor(), mImeBarForegroundColor);
|
||||||
|
|
||||||
for (TokenColor tokenColor : theme.getTokenColors()) {
|
for (TokenColor tokenColor : theme.getTokenColors()) {
|
||||||
String foregroundStr = tokenColor.getSettings().getForeground();
|
String foregroundStr = tokenColor.getSettings().getForeground();
|
||||||
@@ -50,6 +44,20 @@ public class Theme {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int parseColor(String color, int defaultValue) {
|
||||||
|
if (color == null)
|
||||||
|
return defaultValue;
|
||||||
|
try {
|
||||||
|
return Color.parseColor(color);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return mEditorTheme.getName();
|
||||||
|
}
|
||||||
|
|
||||||
private void setTokenColor(String scope, int foreground) {
|
private void setTokenColor(String scope, int foreground) {
|
||||||
for (int token : TokenMapping.getTokensForScope(scope)) {
|
for (int token : TokenMapping.getTokensForScope(scope)) {
|
||||||
mTokenColors.put(token, foreground);
|
mTokenColors.put(token, foreground);
|
||||||
@@ -111,4 +119,19 @@ public class Theme {
|
|||||||
public void setImeBarForegroundColor(int imeBarForegroundColor) {
|
public void setImeBarForegroundColor(int imeBarForegroundColor) {
|
||||||
mImeBarForegroundColor = imeBarForegroundColor;
|
mImeBarForegroundColor = imeBarForegroundColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
Theme theme = (Theme) o;
|
||||||
|
|
||||||
|
return mEditorTheme.getName() != null ? mEditorTheme.getName().equals(theme.mEditorTheme.getName()) : theme.mEditorTheme.getName() == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return getName();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
package com.stardust.scriptdroid.ui.edit.theme;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.stardust.pio.UncheckedIOException;
|
||||||
|
import com.stardust.scriptdroid.Pref;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import io.reactivex.Observable;
|
||||||
|
import io.reactivex.Single;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
import io.reactivex.subjects.PublishSubject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Stardust on 2018/2/22.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class Themes {
|
||||||
|
|
||||||
|
|
||||||
|
private static final String ASSETS_THEMES_PATH = "editor/theme";
|
||||||
|
private static final String DEFAULT_THEME = "Quiet Light";
|
||||||
|
|
||||||
|
private static List<Theme> sThemes;
|
||||||
|
private static Theme sDefaultTheme;
|
||||||
|
|
||||||
|
public static Observable<List<Theme>> getAllThemes(Context context) {
|
||||||
|
if (sThemes != null) {
|
||||||
|
return Observable.just(sThemes);
|
||||||
|
}
|
||||||
|
PublishSubject<List<Theme>> subject = PublishSubject.create();
|
||||||
|
getAllThemesInner(context)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.subscribe(themes -> {
|
||||||
|
setThemes(themes);
|
||||||
|
subject.onNext(sThemes);
|
||||||
|
subject.onComplete();
|
||||||
|
}, Throwable::printStackTrace);
|
||||||
|
return subject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Observable<Theme> getDefault(Context context) {
|
||||||
|
if (sDefaultTheme != null)
|
||||||
|
return Observable.just(sDefaultTheme);
|
||||||
|
return getAllThemes(context)
|
||||||
|
.map(themes -> sDefaultTheme);
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized static void setThemes(List<Theme> themes) {
|
||||||
|
if (sThemes != null)
|
||||||
|
return;
|
||||||
|
sThemes = Collections.unmodifiableList(themes);
|
||||||
|
for (Theme theme : sThemes) {
|
||||||
|
if (DEFAULT_THEME.equals(theme.getName())) {
|
||||||
|
sDefaultTheme = theme;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sDefaultTheme = sThemes.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Observable<List<Theme>> getAllThemesInner(Context context) {
|
||||||
|
if (sThemes != null) {
|
||||||
|
return Observable.just(sThemes);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return Observable.fromArray(context.getAssets().list(ASSETS_THEMES_PATH))
|
||||||
|
.map(file -> context.getAssets().open(ASSETS_THEMES_PATH + "/" + file))
|
||||||
|
.map(stream -> Theme.fromJson(new InputStreamReader(stream)))
|
||||||
|
.collectInto((List<Theme>) new ArrayList<Theme>(), List::add)
|
||||||
|
.toObservable();
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new UncheckedIOException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Observable<Theme> getCurrent(Context context) {
|
||||||
|
String currentTheme = Pref.getCurrentTheme();
|
||||||
|
if (currentTheme == null)
|
||||||
|
return getDefault(context);
|
||||||
|
return getAllThemes(context)
|
||||||
|
.map(themes -> {
|
||||||
|
for (Theme theme : themes) {
|
||||||
|
if (currentTheme.equals(theme.getName()))
|
||||||
|
return theme;
|
||||||
|
}
|
||||||
|
return themes.get(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setCurrent(String name) {
|
||||||
|
Pref.setCurrentTheme(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
|
|
||||||
<solid android:color="#ffffff"/>
|
<solid android:color="#1e88e5"/>
|
||||||
|
|
||||||
<size android:width="1dp"/>
|
<size android:width="1dp"/>
|
||||||
|
|
||||||
|
|||||||
@@ -86,13 +86,13 @@
|
|||||||
|
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_log"
|
android:id="@+id/action_build_apk"
|
||||||
android:title="@string/text_log"
|
android:title="@string/text_build_apk"
|
||||||
app:showAsAction="never"/>
|
app:showAsAction="never"/>
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_build_apk"
|
android:id="@+id/action_log"
|
||||||
android:title="@string/text_build_apk"
|
android:title="@string/text_log"
|
||||||
app:showAsAction="never"/>
|
app:showAsAction="never"/>
|
||||||
|
|
||||||
<item android:title="@string/text_more">
|
<item android:title="@string/text_more">
|
||||||
|
|||||||
Reference in new issue
Block a user