summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-04-01 16:24:06 +1100
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-04-01 16:24:06 +1100
commit3d4577044ee400fc26b0d36ee90d562cf37e969c (patch)
treecb6bcf13f1cad2933adf75244a57a865b4bde7aa
parentconfig: lazy update arrays (diff)
downloadcaelestia-shell-3d4577044ee400fc26b0d36ee90d562cf37e969c.tar.gz
caelestia-shell-3d4577044ee400fc26b0d36ee90d562cf37e969c.tar.bz2
caelestia-shell-3d4577044ee400fc26b0d36ee90d562cf37e969c.zip
launcher: add round style
-rw-r--r--scss/launcher.scss162
-rw-r--r--src/config/defaults.ts3
-rw-r--r--src/config/types.ts1
-rw-r--r--src/modules/launcher/actions.tsx4
-rw-r--r--src/modules/launcher/index.tsx9
-rw-r--r--src/modules/launcher/modes.tsx2
6 files changed, 147 insertions, 34 deletions
diff --git a/scss/launcher.scss b/scss/launcher.scss
index 139f3b8..5ca8ee0 100644
--- a/scss/launcher.scss
+++ b/scss/launcher.scss
@@ -13,29 +13,53 @@
background-color: color.change($colour, $alpha: 0.7);
}
- .search-bar {
- .mode {
- @include lib.border($colour, $width: 2);
+ .result:focus {
+ color: $colour;
+
+ .sublabel {
+ color: color.mix(scheme.$subtext0, $colour, 60%);
}
+ }
- .entry {
+ &.lines {
+ .search-bar {
+ .mode {
+ @include lib.border($colour, $width: 2);
+ }
+
+ .entry {
+ border-bottom: lib.s(2) solid $colour;
+ }
+ }
+
+ .mode-switcher .mode {
+ &.selected {
+ border-top: lib.s(2) solid $colour;
+ }
+
+ &:hover,
+ &:focus {
+ color: $colour;
+ }
+
+ &:active {
+ color: color.mix($colour, scheme.$base, 80%);
+ }
+ }
+
+ .result:focus {
border-bottom: lib.s(2) solid $colour;
}
}
- .mode-switcher .mode {
- &.selected {
- border-top: lib.s(2) solid $colour;
+ &.round {
+ .search-bar .mode {
+ background-color: $colour;
}
- &:hover,
- &:focus {
+ .mode-switcher .mode.selected {
color: $colour;
}
-
- &:active {
- color: color.mix($colour, scheme.$base, 80%);
- }
}
}
}
@@ -65,14 +89,19 @@
@include lib.rounded(5);
@include lib.element-decel;
- padding: lib.s(5);
+ padding: lib.s(5) lib.s(10);
+
+ @include lib.spacing(3);
+
+ .icon {
+ font-size: lib.s(20);
+ }
}
}
.mode-switcher .mode {
@include lib.element-decel;
- border-top: lib.s(2) solid transparent;
padding-top: lib.s(10);
.icon {
@@ -87,7 +116,6 @@
.result {
@include lib.element-decel;
- border-bottom: lib.s(2) solid transparent;
padding-left: lib.s(10);
.icon {
@@ -99,6 +127,8 @@
}
.sublabel {
+ @include lib.element-decel;
+
color: scheme.$subtext0;
font-size: lib.s(14);
}
@@ -115,17 +145,8 @@
background-color: scheme.$surface0;
}
- &:focus {
- border-bottom: lib.s(2) solid scheme.$red;
- color: scheme.$red;
-
- .sublabel {
- color: color.mix(scheme.$red, scheme.$base, 70%);
- }
- }
-
&:active {
- background-color: scheme.$surface1;
+ background-color: color.mix(scheme.$surface0, scheme.$surface1, 70%);
}
}
@@ -140,6 +161,8 @@
}
.swatches {
+ margin-bottom: lib.s(5);
+
@include lib.spacing(3);
}
@@ -168,8 +191,6 @@
}
.wallpaper {
- margin: lib.s(3) 0;
-
.thumbnail {
background-size: cover;
background-position: center;
@@ -211,4 +232,89 @@
min-height: lib.s(160);
}
}
+
+ &.lines {
+ .mode-switcher .mode {
+ border-top: lib.s(2) solid transparent;
+ }
+
+ .result {
+ border-bottom: lib.s(2) solid transparent;
+ }
+ }
+
+ &.round {
+ .search-bar {
+ .mode {
+ @include lib.rounded(10);
+
+ color: color.change(scheme.$base, $alpha: 1);
+
+ .icon {
+ color: color.change(scheme.$base, $alpha: 1);
+ }
+ }
+
+ .entry {
+ @include lib.rounded(10);
+
+ padding: lib.s(5) lib.s(10);
+ background-color: color.mix(scheme.$base, scheme.$surface0, 30%);
+ }
+ }
+
+ .mode-switcher {
+ padding-top: lib.s(10);
+
+ @include lib.spacing(10);
+
+ .mode {
+ @include lib.rounded(10);
+
+ padding: lib.s(5);
+ background-color: color.mix(scheme.$base, scheme.$surface0, 50%);
+
+ &:not(.selected) .icon {
+ color: scheme.$text;
+ }
+
+ &:hover,
+ &:focus {
+ background-color: scheme.$surface0;
+ }
+
+ &:active {
+ background-color: color.mix(scheme.$surface0, scheme.$surface1, 70%);
+ }
+ }
+ }
+
+ .result {
+ @include lib.rounded(10);
+
+ padding-right: lib.s(10);
+ margin-bottom: lib.s(5);
+ margin-right: lib.s(5);
+
+ &:focus {
+ background-color: scheme.$surface0;
+ }
+ }
+
+ .math .preview .result {
+ @include lib.rounded(20);
+
+ background-color: scheme.$surface0;
+ padding: lib.s(5) lib.s(10);
+ }
+
+ .wallpaper-container {
+ padding-right: 0;
+
+ .wallpaper:not(.compact) {
+ padding-top: lib.s(8);
+ padding-bottom: lib.s(3);
+ }
+ }
+ }
}
diff --git a/src/config/defaults.ts b/src/config/defaults.ts
index 5365d86..e933050 100644
--- a/src/config/defaults.ts
+++ b/src/config/defaults.ts
@@ -8,7 +8,7 @@ export default {
// Modules
bar: {
vertical: true,
- style: "gaps",
+ style: "gaps", // One of "gaps", "panel", "embedded"
modules: {
osIcon: {
enabled: true,
@@ -49,6 +49,7 @@ export default {
},
},
launcher: {
+ style: "lines", // One of "lines", "round"
actionPrefix: ">", // Prefix for launcher actions
apps: {
maxResults: 30, // Actual max results, -1 for infinite
diff --git a/src/config/types.ts b/src/config/types.ts
index d3215c8..7bea7bf 100644
--- a/src/config/types.ts
+++ b/src/config/types.ts
@@ -25,6 +25,7 @@ export default {
"bar.modules.dateTime.detailedFormat": STR,
"bar.modules.power.enabled": BOOL,
// Launcher
+ "launcher.style": ["lines", "round"],
"launcher.actionPrefix": STR,
"launcher.apps.maxResults": NUM,
"launcher.files.maxResults": NUM,
diff --git a/src/modules/launcher/actions.tsx b/src/modules/launcher/actions.tsx
index 11b07d0..e99c720 100644
--- a/src/modules/launcher/actions.tsx
+++ b/src/modules/launcher/actions.tsx
@@ -304,7 +304,7 @@ const Scheme = ({ scheme, name, colours }: { scheme?: string; name: string; colo
const Wallpaper = ({ path, thumbnail }: IWallpaper) => (
<Gtk.FlowBoxChild visible canFocus={false}>
<button
- className="result"
+ className="result wallpaper-container"
cursor="pointer"
onClicked={() => {
execAsync(`caelestia wallpaper -f ${path}`).catch(console.error);
@@ -326,7 +326,7 @@ const Wallpaper = ({ path, thumbnail }: IWallpaper) => (
const Category = ({ path, wallpapers }: ICategory) => (
<Gtk.FlowBoxChild visible canFocus={false}>
<button
- className="result"
+ className="result wallpaper-container"
cursor="pointer"
onClicked={() => {
execAsync(`caelestia wallpaper -d ${path}`).catch(console.error);
diff --git a/src/modules/launcher/index.tsx b/src/modules/launcher/index.tsx
index d355c79..b75ecce 100644
--- a/src/modules/launcher/index.tsx
+++ b/src/modules/launcher/index.tsx
@@ -24,7 +24,10 @@ const isAction = (text: string, action: string = "") => text.startsWith(config.a
const SearchBar = ({ mode, entry }: { mode: Variable<Mode>; entry: Widget.Entry }) => (
<box className="search-bar">
- <label className="mode" label={bind(mode)} />
+ <box className="mode">
+ <label className="icon" label={bind(mode).as(getModeIcon)} />
+ <label label={bind(mode).as(getPrettyMode)} />
+ </box>
{entry}
</box>
);
@@ -61,6 +64,7 @@ export default class Launcher extends PopupWindow {
const mode = Variable<Mode>("apps");
const content = Modes();
const actions = new Actions(mode, entry);
+ const className = Variable.derive([mode, config.style], (m, s) => `launcher ${m} ${s}`);
super({
name: "launcher",
@@ -86,7 +90,8 @@ export default class Launcher extends PopupWindow {
vertical
halign={Gtk.Align.CENTER}
valign={Gtk.Align.CENTER}
- className={bind(mode).as(m => `launcher ${m}`)}
+ className={bind(className)}
+ onDestroy={() => className.drop()}
>
<SearchBar mode={mode} entry={entry} />
<stack
diff --git a/src/modules/launcher/modes.tsx b/src/modules/launcher/modes.tsx
index 0db7cd5..fd9569b 100644
--- a/src/modules/launcher/modes.tsx
+++ b/src/modules/launcher/modes.tsx
@@ -186,7 +186,7 @@ class Math extends Widget.Box implements LauncherContent {
/>
</box>
</box>
- <box className="separator" />
+ <box visible={bind(config.style).as(s => s === "lines")} className="separator" />
</box>
</revealer>
);