From b2d4f99845f500dc1ebbdbfdcc7d54e91efd8637 Mon Sep 17 00:00:00 2001 From: yenru0 Date: Tue, 29 Sep 2026 08:08:44 +0900 Subject: [PATCH] gwen: Add Gwen theme family and make it the default Bundle Gwen Dark (Hallowed Night) and Gwen Light in assets/themes/gwen, derived from the champion's canon palette: hallowed mist cyan for accents/functions, Gwen blue for types, violet for keywords, Camavor gold for constants, pink-stitching rose for properties, mist mint for strings over a Black Mist night base. Set Gwen as the default theme pair in settings and the shipped settings templates, surface it as the first tile in the onboarding theme picker and the theme preview gallery, and guard the family with a bundled theme regression test. --- assets/settings/default.json | 4 +- assets/settings/initial_user_settings.json | 4 +- assets/themes/gwen/gwen.json | 861 +++++++++++++++++++++ crates/onboarding/src/basics_page.rs | 11 +- crates/onboarding/src/theme_preview.rs | 4 + crates/settings_content/src/theme.rs | 4 +- crates/workspace/src/workspace.rs | 4 +- crates/zed/src/zed.rs | 47 ++ 8 files changed, 926 insertions(+), 13 deletions(-) create mode 100644 assets/themes/gwen/gwen.json diff --git a/assets/settings/default.json b/assets/settings/default.json index 0fb6601f4f..3fdc5ede4a 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -8,8 +8,8 @@ // - "dark": Use the theme indicated by the "dark" field "theme": { "mode": "system", - "light": "One Light", - "dark": "One Dark", + "light": "Gwen Light", + "dark": "Gwen Dark", }, "icon_theme": "Zed (Default)", // The name of a base set of key bindings to use. diff --git a/assets/settings/initial_user_settings.json b/assets/settings/initial_user_settings.json index 8b57385489..0294ab5824 100644 --- a/assets/settings/initial_user_settings.json +++ b/assets/settings/initial_user_settings.json @@ -11,7 +11,7 @@ "buffer_font_size": 15, "theme": { "mode": "system", - "light": "One Light", - "dark": "One Dark", + "light": "Gwen Light", + "dark": "Gwen Dark", }, } diff --git a/assets/themes/gwen/gwen.json b/assets/themes/gwen/gwen.json new file mode 100644 index 0000000000..d84e22517d --- /dev/null +++ b/assets/themes/gwen/gwen.json @@ -0,0 +1,861 @@ +{ + "$schema": "https://zed.dev/schema/themes/v0.2.0.json", + "name": "Gwen", + "author": "Gwen Editor", + "themes": [ + { + "name": "Gwen Dark", + "appearance": "dark", + "style": { + "border": "#263149ff", + "border.variant": "#1b2434ff", + "border.focused": "#2f8fa6ff", + "border.selected": "#2a7e93ff", + "border.transparent": "#00000000", + "border.disabled": "#202a3cff", + "elevated_surface.background": "#141c2bff", + "surface.background": "#111826ff", + "background": "#131a28ff", + "element.background": "#111826ff", + "element.hover": "#182131ff", + "element.active": "#1f2a3dff", + "element.selected": "#1f2a3dff", + "element.disabled": "#111826ff", + "drop_target.background": "#62d9e840", + "ghost_element.background": "#00000000", + "ghost_element.hover": "#182131ff", + "ghost_element.active": "#1f2a3dff", + "ghost_element.selected": "#1f2a3dff", + "ghost_element.disabled": "#111826ff", + "text": "#d7e0eeff", + "text.muted": "#9daabfff", + "text.placeholder": "#77849cff", + "text.disabled": "#77849cff", + "text.accent": "#62d9e8ff", + "icon": "#d7e0eeff", + "icon.muted": "#9daabfff", + "icon.disabled": "#67758dff", + "icon.placeholder": "#9daabfff", + "icon.accent": "#62d9e8ff", + "status_bar.background": "#131a28ff", + "title_bar.background": "#131a28ff", + "title_bar.inactive_background": "#10161fff", + "toolbar.background": "#0d121bff", + "tab_bar.background": "#111826ff", + "tab.inactive_background": "#111826ff", + "tab.active_background": "#0d121bff", + "search.match_background": "#62d9e833", + "search.active_match_background": "#d6b87866", + "panel.background": "#111826ff", + "panel.focused_border": null, + "pane.focused_border": null, + "scrollbar.thumb.background": "#93a6c440", + "scrollbar.thumb.hover_background": "#1f2a3dff", + "scrollbar.thumb.border": "#1b2434ff", + "scrollbar.track.background": "#00000000", + "scrollbar.track.border": "#10161fff", + "editor.foreground": "#bac7dbff", + "editor.background": "#0d121bff", + "editor.gutter.background": "#0d121bff", + "editor.subheader.background": "#111826ff", + "editor.active_line.background": "#152030b3", + "editor.highlighted_line.background": "#141d2cff", + "editor.line_number": "#667690", + "editor.active_line_number": "#8fd9e6", + "editor.hover_line_number": "#a9b6ca", + "editor.invisible": "#46536b", + "editor.wrap_guide": "#93a6c40d", + "editor.active_wrap_guide": "#93a6c41a", + "editor.document_highlight.read_background": "#62d9e81a", + "editor.document_highlight.write_background": "#44506a66", + "terminal.background": "#0b1018ff", + "terminal.foreground": "#bac7dbff", + "terminal.bright_foreground": "#d7e0eeff", + "terminal.dim_foreground": "#61708aff", + "terminal.ansi.black": "#141b28ff", + "terminal.ansi.bright_black": "#6e7d97ff", + "terminal.ansi.dim_black": "#0e141eff", + "terminal.ansi.red": "#e0708aff", + "terminal.ansi.bright_red": "#ec93a6ff", + "terminal.ansi.dim_red": "#9c4e60ff", + "terminal.ansi.green": "#7fe3cdff", + "terminal.ansi.bright_green": "#a0edddff", + "terminal.ansi.dim_green": "#589e8fff", + "terminal.ansi.yellow": "#d9b36aff", + "terminal.ansi.bright_yellow": "#e6c98fff", + "terminal.ansi.dim_yellow": "#977c4aff", + "terminal.ansi.blue": "#6fa8f0ff", + "terminal.ansi.bright_blue": "#93bff5ff", + "terminal.ansi.dim_blue": "#4d75a8ff", + "terminal.ansi.magenta": "#b79cf2ff", + "terminal.ansi.bright_magenta": "#cbb7f6ff", + "terminal.ansi.dim_magenta": "#806da9ff", + "terminal.ansi.cyan": "#62d9e8ff", + "terminal.ansi.bright_cyan": "#8ae4efff", + "terminal.ansi.dim_cyan": "#4497a2ff", + "terminal.ansi.white": "#c3cfe0ff", + "terminal.ansi.bright_white": "#f2f6fbff", + "terminal.ansi.dim_white": "#8894a8ff", + "link_text.hover": "#62d9e8ff", + "version_control.added": "#57d3b4ff", + "version_control.modified": "#d9b36aff", + "version_control.word_added": "#57d3b459", + "version_control.word_deleted": "#e0708a66", + "version_control.deleted": "#e0708aff", + "version_control.conflict_marker.ours": "#7fe3cd1a", + "version_control.conflict_marker.theirs": "#62d9e81a", + "conflict": "#d9b36aff", + "conflict.background": "#d9b36a1a", + "conflict.border": "#5c4a26ff", + "created": "#57d3b4ff", + "created.background": "#57d3b41a", + "created.border": "#23584aff", + "deleted": "#e0708aff", + "deleted.background": "#e0708a1a", + "deleted.border": "#5c2b39ff", + "error": "#e0708aff", + "error.background": "#e0708a1a", + "error.border": "#5c2b39ff", + "hidden": "#77849cff", + "hidden.background": "#67758d1a", + "hidden.border": "#202a3cff", + "hint": "#7e93b4ff", + "hint.background": "#7e93b41a", + "hint.border": "#2a7e93ff", + "ignored": "#77849cff", + "ignored.background": "#67758d1a", + "ignored.border": "#263149ff", + "info": "#62d9e8ff", + "info.background": "#62d9e81a", + "info.border": "#2a7e93ff", + "modified": "#d9b36aff", + "modified.background": "#d9b36a1a", + "modified.border": "#5c4a26ff", + "predictive": "#55688aff", + "predictive.background": "#55688a1a", + "predictive.border": "#23584aff", + "renamed": "#62d9e8ff", + "renamed.background": "#62d9e81a", + "renamed.border": "#2a7e93ff", + "success": "#57d3b4ff", + "success.background": "#57d3b41a", + "success.border": "#23584aff", + "unreachable": "#9daabfff", + "unreachable.background": "#93a6c41a", + "unreachable.border": "#263149ff", + "warning": "#d9b36aff", + "warning.background": "#d9b36a1a", + "warning.border": "#5c4a26ff", + "players": [ + { + "cursor": "#62d9e8ff", + "background": "#62d9e8ff", + "selection": "#62d9e83d" + }, + { + "cursor": "#e89babff", + "background": "#e89babff", + "selection": "#e89bab3d" + }, + { + "cursor": "#d6b878ff", + "background": "#d6b878ff", + "selection": "#d6b8783d" + }, + { + "cursor": "#b79cf2ff", + "background": "#b79cf2ff", + "selection": "#b79cf23d" + }, + { + "cursor": "#6fa8f0ff", + "background": "#6fa8f0ff", + "selection": "#6fa8f03d" + }, + { + "cursor": "#7fe3cdff", + "background": "#7fe3cdff", + "selection": "#7fe3cd3d" + }, + { + "cursor": "#9aa4e8ff", + "background": "#9aa4e8ff", + "selection": "#9aa4e83d" + }, + { + "cursor": "#93a6c4ff", + "background": "#93a6c4ff", + "selection": "#93a6c43d" + } + ], + "accents": [ + "#62d9e8ff", + "#6fa8f0ff", + "#b79cf2ff", + "#e89babff", + "#d6b878ff", + "#7fe3cdff" + ], + "syntax": { + "attribute": { + "color": "#62d9e8ff", + "font_style": null, + "font_weight": null + }, + "boolean": { + "color": "#d6b878ff", + "font_style": null, + "font_weight": null + }, + "comment": { + "color": "#6e7d97ff", + "font_style": null, + "font_weight": null + }, + "comment.doc": { + "color": "#7e8ca3ff", + "font_style": null, + "font_weight": null + }, + "constant": { + "color": "#d6b878ff", + "font_style": null, + "font_weight": null + }, + "constructor": { + "color": "#62d9e8ff", + "font_style": null, + "font_weight": null + }, + "embedded": { + "color": "#d7e0eeff", + "font_style": null, + "font_weight": null + }, + "emphasis": { + "color": "#62d9e8ff", + "font_style": null, + "font_weight": null + }, + "emphasis.strong": { + "color": "#d6b878ff", + "font_style": null, + "font_weight": 700 + }, + "enum": { + "color": "#6fa8f0ff", + "font_style": null, + "font_weight": null + }, + "function": { + "color": "#62d9e8ff", + "font_style": null, + "font_weight": null + }, + "hint": { + "color": "#7e93b4ff", + "font_style": null, + "font_weight": null + }, + "keyword": { + "color": "#b79cf2ff", + "font_style": null, + "font_weight": null + }, + "label": { + "color": "#62d9e8ff", + "font_style": null, + "font_weight": null + }, + "link_text": { + "color": "#62d9e8ff", + "font_style": "italic", + "font_weight": null + }, + "link_uri": { + "color": "#6fa8f0ff", + "font_style": null, + "font_weight": null + }, + "namespace": { + "color": "#d7e0eeff", + "font_style": null, + "font_weight": null + }, + "number": { + "color": "#d6b878ff", + "font_style": null, + "font_weight": null + }, + "operator": { + "color": "#6fa8f0ff", + "font_style": null, + "font_weight": null + }, + "predictive": { + "color": "#64789cff", + "font_style": "italic", + "font_weight": null + }, + "preproc": { + "color": "#b79cf2ff", + "font_style": null, + "font_weight": null + }, + "primary": { + "color": "#bac7dbff", + "font_style": null, + "font_weight": null + }, + "property": { + "color": "#e89babff", + "font_style": null, + "font_weight": null + }, + "punctuation": { + "color": "#bac7dbff", + "font_style": null, + "font_weight": null + }, + "punctuation.bracket": { + "color": "#c6d2e2ff", + "font_style": null, + "font_weight": null + }, + "punctuation.delimiter": { + "color": "#c6d2e2ff", + "font_style": null, + "font_weight": null + }, + "punctuation.list_marker": { + "color": "#e89babff", + "font_style": null, + "font_weight": null + }, + "punctuation.markup": { + "color": "#e89babff", + "font_style": null, + "font_weight": null + }, + "punctuation.special": { + "color": "#c97f92ff", + "font_style": null, + "font_weight": null + }, + "selector": { + "color": "#d6b878ff", + "font_style": null, + "font_weight": null + }, + "selector.pseudo": { + "color": "#62d9e8ff", + "font_style": null, + "font_weight": null + }, + "string": { + "color": "#7fe3cdff", + "font_style": null, + "font_weight": null + }, + "string.escape": { + "color": "#7e8ca3ff", + "font_style": null, + "font_weight": null + }, + "string.regex": { + "color": "#d6b878ff", + "font_style": null, + "font_weight": null + }, + "string.special": { + "color": "#d6b878ff", + "font_style": null, + "font_weight": null + }, + "string.special.symbol": { + "color": "#d6b878ff", + "font_style": null, + "font_weight": null + }, + "tag": { + "color": "#62d9e8ff", + "font_style": null, + "font_weight": null + }, + "text.literal": { + "color": "#7fe3cdff", + "font_style": null, + "font_weight": null + }, + "title": { + "color": "#e89babff", + "font_style": null, + "font_weight": 400 + }, + "type": { + "color": "#6fa8f0ff", + "font_style": null, + "font_weight": null + }, + "variable": { + "color": "#bac7dbff", + "font_style": null, + "font_weight": null + }, + "variable.parameter": { + "color": "#e89babff", + "font_style": null, + "font_weight": null + }, + "variable.special": { + "color": "#d6b878ff", + "font_style": null, + "font_weight": null + }, + "variant": { + "color": "#62d9e8ff", + "font_style": null, + "font_weight": null + }, + "diff.plus": { + "color": "#7fe3cdff", + "font_style": null, + "font_weight": null + }, + "diff.minus": { + "color": "#e0708aff", + "font_style": null, + "font_weight": null + } + } + } + }, + { + "name": "Gwen Light", + "appearance": "light", + "style": { + "border": "#c3cfe0ff", + "border.variant": "#d9e2eeff", + "border.focused": "#12809bff", + "border.selected": "#0e6e86ff", + "border.transparent": "#00000000", + "border.disabled": "#cbd6e5ff", + "elevated_surface.background": "#f3f6fbff", + "surface.background": "#eff3f9ff", + "background": "#e9eef6ff", + "element.background": "#eff3f9ff", + "element.hover": "#e3eaf4ff", + "element.active": "#d5dfeeff", + "element.selected": "#d5dfeeff", + "element.disabled": "#eff3f9ff", + "drop_target.background": "#0e7e9c33", + "ghost_element.background": "#00000000", + "ghost_element.hover": "#e3eaf4ff", + "ghost_element.active": "#d5dfeeff", + "ghost_element.selected": "#d5dfeeff", + "ghost_element.disabled": "#eff3f9ff", + "text": "#1b2534ff", + "text.muted": "#46536bff", + "text.placeholder": "#5e6c84ff", + "text.disabled": "#5e6c84ff", + "text.accent": "#0b7490ff", + "icon": "#1b2534ff", + "icon.muted": "#46536bff", + "icon.disabled": "#7a879cff", + "icon.placeholder": "#7a879cff", + "icon.accent": "#0b7490ff", + "status_bar.background": "#e9eef6ff", + "title_bar.background": "#e9eef6ff", + "title_bar.inactive_background": "#edf1f8ff", + "toolbar.background": "#f8fafdff", + "tab_bar.background": "#eff3f9ff", + "tab.inactive_background": "#eff3f9ff", + "tab.active_background": "#f8fafdff", + "search.match_background": "#0e7e9c2e", + "search.active_match_background": "#8a6a1f40", + "panel.background": "#eff3f9ff", + "panel.focused_border": null, + "pane.focused_border": null, + "scrollbar.thumb.background": "#46536b33", + "scrollbar.thumb.hover_background": "#d5dfeeff", + "scrollbar.thumb.border": "#d9e2eeff", + "scrollbar.track.background": "#00000000", + "scrollbar.track.border": "#edf1f8ff", + "editor.foreground": "#2b3850ff", + "editor.background": "#f8fafdff", + "editor.gutter.background": "#f8fafdff", + "editor.subheader.background": "#eff3f9ff", + "editor.active_line.background": "#e7eef7b3", + "editor.highlighted_line.background": "#eaf0f8ff", + "editor.line_number": "#6d7a92", + "editor.active_line_number": "#0b7490", + "editor.hover_line_number": "#5a6880", + "editor.invisible": "#9aa7bb", + "editor.wrap_guide": "#46536b0d", + "editor.active_wrap_guide": "#46536b1a", + "editor.document_highlight.read_background": "#0e7e9c14", + "editor.document_highlight.write_background": "#46536b33", + "terminal.background": "#f8fafdff", + "terminal.foreground": "#2b3850ff", + "terminal.bright_foreground": "#101826ff", + "terminal.dim_foreground": "#6c7a90ff", + "terminal.ansi.black": "#1b2534ff", + "terminal.ansi.bright_black": "#5a6880ff", + "terminal.ansi.dim_black": "#33405aff", + "terminal.ansi.red": "#b03a5bff", + "terminal.ansi.bright_red": "#8e2e49ff", + "terminal.ansi.dim_red": "#c97f92ff", + "terminal.ansi.green": "#177a5eff", + "terminal.ansi.bright_green": "#105a45ff", + "terminal.ansi.dim_green": "#6faf9cff", + "terminal.ansi.yellow": "#8a6a1fff", + "terminal.ansi.bright_yellow": "#6b5218ff", + "terminal.ansi.dim_yellow": "#b99c5fff", + "terminal.ansi.blue": "#1d5fbfff", + "terminal.ansi.bright_blue": "#174b97ff", + "terminal.ansi.dim_blue": "#7ba0d6ff", + "terminal.ansi.magenta": "#6b46c8ff", + "terminal.ansi.bright_magenta": "#5537a0ff", + "terminal.ansi.dim_magenta": "#a78fddff", + "terminal.ansi.cyan": "#0a6e81ff", + "terminal.ansi.bright_cyan": "#085a6aff", + "terminal.ansi.dim_cyan": "#5fa3b0ff", + "terminal.ansi.white": "#e9eef6ff", + "terminal.ansi.bright_white": "#ffffffff", + "terminal.ansi.dim_white": "#c3cfe0ff", + "link_text.hover": "#0b7490ff", + "version_control.added": "#177a5eff", + "version_control.modified": "#8a6a1fff", + "version_control.word_added": "#177a5e40", + "version_control.word_deleted": "#b03a5b4d", + "version_control.deleted": "#b03a5bff", + "version_control.conflict_marker.ours": "#177a5e1a", + "version_control.conflict_marker.theirs": "#0e7e9c1a", + "conflict": "#7a5c15ff", + "conflict.background": "#8a6a1f1a", + "conflict.border": "#b99c5fff", + "created": "#177a5eff", + "created.background": "#177a5e1a", + "created.border": "#6faf9cff", + "deleted": "#b03a5bff", + "deleted.background": "#b03a5b1a", + "deleted.border": "#c97f92ff", + "error": "#b03a5bff", + "error.background": "#b03a5b1a", + "error.border": "#c97f92ff", + "hidden": "#5e6c84ff", + "hidden.background": "#7a879c1a", + "hidden.border": "#c3cfe0ff", + "hint": "#526583ff", + "hint.background": "#5a6e8c1a", + "hint.border": "#6fb3bfff", + "ignored": "#5e6c84ff", + "ignored.background": "#7a879c1a", + "ignored.border": "#c3cfe0ff", + "info": "#0b7490ff", + "info.background": "#0b74901a", + "info.border": "#6fb3bfff", + "modified": "#7a5c15ff", + "modified.background": "#8a6a1f1a", + "modified.border": "#b99c5fff", + "predictive": "#8494acff", + "predictive.background": "#8494ac1a", + "predictive.border": "#6faf9cff", + "renamed": "#0b7490ff", + "renamed.background": "#0b74901a", + "renamed.border": "#6fb3bfff", + "success": "#177a5eff", + "success.background": "#177a5e1a", + "success.border": "#6faf9cff", + "unreachable": "#46536bff", + "unreachable.background": "#46536b1a", + "unreachable.border": "#c3cfe0ff", + "warning": "#7a5c15ff", + "warning.background": "#8a6a1f1a", + "warning.border": "#b99c5fff", + "players": [ + { + "cursor": "#0b7f95ff", + "background": "#0b7f95ff", + "selection": "#0b7f953d" + }, + { + "cursor": "#b03a5bff", + "background": "#b03a5bff", + "selection": "#b03a5b3d" + }, + { + "cursor": "#8a6a1fff", + "background": "#8a6a1fff", + "selection": "#8a6a1f3d" + }, + { + "cursor": "#6b46c8ff", + "background": "#6b46c8ff", + "selection": "#6b46c83d" + }, + { + "cursor": "#1d5fbfff", + "background": "#1d5fbfff", + "selection": "#1d5fbf3d" + }, + { + "cursor": "#177a5eff", + "background": "#177a5eff", + "selection": "#177a5e3d" + }, + { + "cursor": "#5a5fc8ff", + "background": "#5a5fc8ff", + "selection": "#5a5fc83d" + }, + { + "cursor": "#5a6880ff", + "background": "#5a6880ff", + "selection": "#5a68803d" + } + ], + "accents": [ + "#0b7f95ff", + "#1d5fbfff", + "#6b46c8ff", + "#b03a5bff", + "#8a6a1fff", + "#177a5eff" + ], + "syntax": { + "attribute": { + "color": "#0a6e81ff", + "font_style": null, + "font_weight": null + }, + "boolean": { + "color": "#8a6a1fff", + "font_style": null, + "font_weight": null + }, + "comment": { + "color": "#5d6b84ff", + "font_style": null, + "font_weight": null + }, + "comment.doc": { + "color": "#55637aff", + "font_style": null, + "font_weight": null + }, + "constant": { + "color": "#8a6a1fff", + "font_style": null, + "font_weight": null + }, + "constructor": { + "color": "#0a6e81ff", + "font_style": null, + "font_weight": null + }, + "embedded": { + "color": "#1b2534ff", + "font_style": null, + "font_weight": null + }, + "emphasis": { + "color": "#0a6e81ff", + "font_style": null, + "font_weight": null + }, + "emphasis.strong": { + "color": "#8a6a1fff", + "font_style": null, + "font_weight": 700 + }, + "enum": { + "color": "#1d5fbfff", + "font_style": null, + "font_weight": null + }, + "function": { + "color": "#0a6e81ff", + "font_style": null, + "font_weight": null + }, + "hint": { + "color": "#5a6e8cff", + "font_style": null, + "font_weight": null + }, + "keyword": { + "color": "#6b46c8ff", + "font_style": null, + "font_weight": null + }, + "label": { + "color": "#0b7490ff", + "font_style": null, + "font_weight": null + }, + "link_text": { + "color": "#0a6e81ff", + "font_style": "italic", + "font_weight": null + }, + "link_uri": { + "color": "#1d5fbfff", + "font_style": null, + "font_weight": null + }, + "namespace": { + "color": "#1b2534ff", + "font_style": null, + "font_weight": null + }, + "number": { + "color": "#8a6a1fff", + "font_style": null, + "font_weight": null + }, + "operator": { + "color": "#1d5fbfff", + "font_style": null, + "font_weight": null + }, + "predictive": { + "color": "#8494acff", + "font_style": "italic", + "font_weight": null + }, + "preproc": { + "color": "#6b46c8ff", + "font_style": null, + "font_weight": null + }, + "primary": { + "color": "#2b3850ff", + "font_style": null, + "font_weight": null + }, + "property": { + "color": "#b03a5bff", + "font_style": null, + "font_weight": null + }, + "punctuation": { + "color": "#2b3850ff", + "font_style": null, + "font_weight": null + }, + "punctuation.bracket": { + "color": "#1f2b42ff", + "font_style": null, + "font_weight": null + }, + "punctuation.delimiter": { + "color": "#1f2b42ff", + "font_style": null, + "font_weight": null + }, + "punctuation.list_marker": { + "color": "#b03a5bff", + "font_style": null, + "font_weight": null + }, + "punctuation.markup": { + "color": "#b03a5bff", + "font_style": null, + "font_weight": null + }, + "punctuation.special": { + "color": "#8e2e49ff", + "font_style": null, + "font_weight": null + }, + "selector": { + "color": "#8a6a1fff", + "font_style": null, + "font_weight": null + }, + "selector.pseudo": { + "color": "#0a6e81ff", + "font_style": null, + "font_weight": null + }, + "string": { + "color": "#177a5eff", + "font_style": null, + "font_weight": null + }, + "string.escape": { + "color": "#55637aff", + "font_style": null, + "font_weight": null + }, + "string.regex": { + "color": "#8a6a1fff", + "font_style": null, + "font_weight": null + }, + "string.special": { + "color": "#8a6a1fff", + "font_style": null, + "font_weight": null + }, + "string.special.symbol": { + "color": "#8a6a1fff", + "font_style": null, + "font_weight": null + }, + "tag": { + "color": "#0a6e81ff", + "font_style": null, + "font_weight": null + }, + "text.literal": { + "color": "#177a5eff", + "font_style": null, + "font_weight": null + }, + "title": { + "color": "#b03a5bff", + "font_style": null, + "font_weight": 400 + }, + "type": { + "color": "#1d5fbfff", + "font_style": null, + "font_weight": null + }, + "variable": { + "color": "#2b3850ff", + "font_style": null, + "font_weight": null + }, + "variable.parameter": { + "color": "#b03a5bff", + "font_style": null, + "font_weight": null + }, + "variable.special": { + "color": "#8a6a1fff", + "font_style": null, + "font_weight": null + }, + "variant": { + "color": "#0a6e81ff", + "font_style": null, + "font_weight": null + }, + "diff.plus": { + "color": "#177a5eff", + "font_style": null, + "font_weight": null + }, + "diff.minus": { + "color": "#b03a5bff", + "font_style": null, + "font_weight": null + } + } + } + } + ] +} diff --git a/crates/onboarding/src/basics_page.rs b/crates/onboarding/src/basics_page.rs index 840d930681..11a20dfd77 100644 --- a/crates/onboarding/src/basics_page.rs +++ b/crates/onboarding/src/basics_page.rs @@ -26,9 +26,10 @@ use crate::{ theme_preview::{ThemePreviewStyle, ThemePreviewTile}, }; -const LIGHT_THEMES: [&str; 3] = ["One Light", "Ayu Light", "Gruvbox Light"]; -const DARK_THEMES: [&str; 3] = ["One Dark", "Ayu Dark", "Gruvbox Dark"]; -const FAMILY_NAMES: [SharedString; 3] = [ +const LIGHT_THEMES: [&str; 4] = ["Gwen Light", "One Light", "Ayu Light", "Gruvbox Light"]; +const DARK_THEMES: [&str; 4] = ["Gwen Dark", "One Dark", "Ayu Dark", "Gruvbox Dark"]; +const FAMILY_NAMES: [SharedString; 4] = [ + SharedString::new_static("Gwen"), SharedString::new_static("One"), SharedString::new_static("Ayu"), SharedString::new_static("Gruvbox"), @@ -103,7 +104,7 @@ fn render_theme_section(tab_index: &mut isize, cx: &mut App) -> impl IntoElement tab_index: &mut isize, theme_selection: &ThemeSelection, cx: &mut App, - ) -> [impl IntoElement; 3] { + ) -> [impl IntoElement; 4] { let system_appearance = SystemAppearance::global(cx); let theme_registry = ThemeRegistry::global(cx); @@ -128,7 +129,7 @@ fn render_theme_section(tab_index: &mut isize, cx: &mut App) -> impl IntoElement let themes = theme_names.map(|theme| theme_registry.get(theme).unwrap()); - [0, 1, 2].map(|index| { + [0, 1, 2, 3].map(|index| { let theme = &themes[index]; let is_selected = theme.name == current_theme_name; let name = theme.name.clone(); diff --git a/crates/onboarding/src/theme_preview.rs b/crates/onboarding/src/theme_preview.rs index 534272ecda..df2a2a04ab 100644 --- a/crates/onboarding/src/theme_preview.rs +++ b/crates/onboarding/src/theme_preview.rs @@ -322,12 +322,16 @@ impl Component for ThemePreviewTile { fn preview(_window: &mut Window, cx: &mut App) -> AnyElement { let theme_registry = ThemeRegistry::global(cx); + let gwen_dark = theme_registry.get("Gwen Dark"); + let gwen_light = theme_registry.get("Gwen Light"); let one_dark = theme_registry.get("One Dark"); let one_light = theme_registry.get("One Light"); let gruvbox_dark = theme_registry.get("Gruvbox Dark"); let gruvbox_light = theme_registry.get("Gruvbox Light"); let themes_to_preview = vec![ + gwen_dark.ok(), + gwen_light.ok(), one_dark.clone().ok(), one_light.ok(), gruvbox_dark.ok(), diff --git a/crates/settings_content/src/theme.rs b/crates/settings_content/src/theme.rs index 157d138455..7bd31449a8 100644 --- a/crates/settings_content/src/theme.rs +++ b/crates/settings_content/src/theme.rs @@ -338,8 +338,8 @@ pub enum ThemeSelection { }, } -pub const DEFAULT_LIGHT_THEME: &'static str = "One Light"; -pub const DEFAULT_DARK_THEME: &'static str = "One Dark"; +pub const DEFAULT_LIGHT_THEME: &'static str = "Gwen Light"; +pub const DEFAULT_DARK_THEME: &'static str = "Gwen Dark"; impl Default for ThemeSelection { fn default() -> Self { diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index d6d80f254a..02fff7e32f 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -19165,8 +19165,8 @@ mod tests { parsed["theme"], serde_json::json!({ "mode": "system", - "light": "One Light", - "dark": "One Dark" + "light": "Gwen Light", + "dark": "Gwen Dark" }) ); diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 5a35980a41..6b3c070368 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -6030,6 +6030,53 @@ mod tests { assert!(has_default_theme); } + #[gpui::test] + fn test_bundled_gwen_theme(cx: &mut App) { + cx.text_system() + .add_fonts(vec![ + Assets + .load("fonts/lilex/Lilex-Regular.ttf") + .unwrap() + .unwrap(), + Assets + .load("fonts/ibm-plex-sans/IBMPlexSans-Regular.ttf") + .unwrap() + .unwrap(), + ]) + .unwrap(); + settings::init(cx); + theme_settings::init(theme::LoadThemes::All(Box::new(Assets)), cx); + + let themes = ThemeRegistry::global(cx); + let dark = themes + .get("Gwen Dark") + .expect("Gwen Dark should ship as a bundled theme"); + let light = themes + .get("Gwen Light") + .expect("Gwen Light should ship as a bundled theme"); + assert_eq!(dark.appearance, theme::Appearance::Dark); + assert_eq!(light.appearance, theme::Appearance::Light); + assert_eq!( + dark.styles.colors.editor_background, + theme::try_parse_color("#0d121bff").unwrap() + ); + assert_eq!( + light.styles.colors.editor_background, + theme::try_parse_color("#f8fafdff").unwrap() + ); + + // With no user settings written, the fork's official theme is selected. + let theme_selection = &ThemeSettings::get_global(cx).theme; + assert_eq!( + theme_selection.name(theme::Appearance::Dark).0.as_ref(), + "Gwen Dark" + ); + assert_eq!( + theme_selection.name(theme::Appearance::Light).0.as_ref(), + "Gwen Light" + ); + } + #[gpui::test] async fn test_bundled_files_editor(cx: &mut TestAppContext) { let app_state = init_test(cx);