Fixed taskbar blur
This commit is contained in:
parent
6db8eb608e
commit
0fdd7ad632
7 changed files with 87 additions and 50 deletions
|
|
@ -65,6 +65,6 @@
|
||||||
opacity: 25%;
|
opacity: 25%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
border-radius: var(--border-radius-0);
|
border-radius: var(--border-radius-0);
|
||||||
background-color: var(--blue-b);
|
background-color: var(--blue-1);
|
||||||
border: 0.25rem solid var(--blue-0);
|
border: 0.25rem solid var(--blue-0);
|
||||||
}
|
}
|
||||||
|
|
@ -7,21 +7,30 @@
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: var(--taskbar-height);
|
height: var(--taskbar-height);
|
||||||
backdrop-filter: var(--taskbar-filter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.Taskbar::after {
|
.Taskbar::after,
|
||||||
opacity: var(--taskbar-opacity);
|
.Taskbar::before {
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Taskbar::after {
|
||||||
|
opacity: var(--taskbar-opacity);
|
||||||
background-color: var(--taskbar-color);
|
background-color: var(--taskbar-color);
|
||||||
z-index: -2;
|
z-index: -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.Taskbar::before {
|
||||||
|
backdrop-filter: var(--taskbar-filter);
|
||||||
|
z-index: -3;
|
||||||
|
}
|
||||||
|
|
||||||
.Taskbar button {
|
.Taskbar button {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
@ -138,4 +147,63 @@
|
||||||
width: 0.5rem;
|
width: 0.5rem;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin-left: 1rem;
|
margin-left: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Menu-outer {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
bottom: 100%;
|
||||||
|
height: auto !important;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Menu-outer:not(.Active) {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Menu-inner {
|
||||||
|
opacity: 1;
|
||||||
|
display: flex;
|
||||||
|
border-top-left-radius: var(--border-radius-1);
|
||||||
|
border-top-right-radius: var(--border-radius-1);
|
||||||
|
border-bottom-left-radius: var(--border-radius-1);
|
||||||
|
transform: none;
|
||||||
|
transition: opacity 200ms ease-in-out, transform 200ms ease-in-out;
|
||||||
|
overflow: hidden;
|
||||||
|
resize: horizontal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Menu-outer:not(.Active) .Menu-inner {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(100px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.Menu-inner::after,
|
||||||
|
.Menu-outer::after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
border-radius: inherit;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Menu-inner::after {
|
||||||
|
opacity: var(--taskbar-menu-opacity);
|
||||||
|
background-color: var(--taskbar-menu-color);
|
||||||
|
z-index: -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Menu-outer::after {
|
||||||
|
opacity: 1;
|
||||||
|
transition: opacity 200ms ease-in-out, top 200ms ease-in-out;
|
||||||
|
backdrop-filter: var(--taskbar-filter);
|
||||||
|
z-index: -3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Menu-outer:not(.Active)::after {
|
||||||
|
opacity: 0;
|
||||||
|
top: 100px;
|
||||||
}
|
}
|
||||||
|
|
@ -1,45 +1,13 @@
|
||||||
.Container-outer {
|
.Container-outer {
|
||||||
position: absolute;
|
right: unset;
|
||||||
left: 0;
|
left: 0;
|
||||||
bottom: 100%;
|
|
||||||
height: auto !important;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.Container-inner {
|
.Container-inner {
|
||||||
opacity: 1;
|
|
||||||
display: flex;
|
|
||||||
min-width: 16rem;
|
min-width: 16rem;
|
||||||
max-width: 32rem;
|
max-width: 32rem;
|
||||||
border-top-left-radius: 0.5rem;
|
border-bottom-left-radius: 0;
|
||||||
border-top-right-radius: 0.5rem;
|
border-bottom-right-radius: var(--border-radius-1);
|
||||||
border-bottom-right-radius: 0.5rem;
|
|
||||||
backdrop-filter: var(--taskbar-filter);
|
|
||||||
transform: none;
|
|
||||||
transition: opacity 200ms ease-in-out, transform 200ms ease-in-out;
|
|
||||||
overflow: hidden;
|
|
||||||
resize: horizontal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Container-inner::after {
|
|
||||||
opacity: var(--taskbar-menu-opacity);
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
background-color: var(--taskbar-menu-color);
|
|
||||||
z-index: -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Container-outer:not(.Active) {
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Container-outer:not(.Active) .Container-inner {
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(100px);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.Buttons {
|
.Buttons {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import styles from "./HomeMenu.module.css";
|
import styles from "./HomeMenu.module.css";
|
||||||
import appStyles from "./AppList.module.css";
|
import appStyles from "./AppList.module.css";
|
||||||
|
import taskbarStyles from "../Taskbar.module.css";
|
||||||
import { faCircleInfo, faFileLines, faGear, faImage, faPowerOff } from "@fortawesome/free-solid-svg-icons";
|
import { faCircleInfo, faFileLines, faGear, faImage, faPowerOff } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { useWindowsManager } from "../../../hooks/windows/windowsManagerContext";
|
import { useWindowsManager } from "../../../hooks/windows/windowsManagerContext";
|
||||||
import AppsManager from "../../../features/apps/appsManager";
|
import AppsManager from "../../../features/apps/appsManager";
|
||||||
|
|
@ -29,9 +30,9 @@ export function HomeMenu({ active, setActive, search }: HomeMenuProps) {
|
||||||
setTabIndex(active ? 0 : -1);
|
setTabIndex(active ? 0 : -1);
|
||||||
}, [active]);
|
}, [active]);
|
||||||
|
|
||||||
const classNames = [styles["Container-outer"]];
|
const classNames = [styles["Container-outer"], taskbarStyles["Menu-outer"]];
|
||||||
if (active)
|
if (active)
|
||||||
classNames.push(styles.Active);
|
classNames.push(taskbarStyles.Active);
|
||||||
|
|
||||||
let onlyAltKey = false;
|
let onlyAltKey = false;
|
||||||
const onKeyDown = (event: KeyboardEvent) => {
|
const onKeyDown = (event: KeyboardEvent) => {
|
||||||
|
|
@ -61,7 +62,7 @@ export function HomeMenu({ active, setActive, search }: HomeMenuProps) {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={classNames.join(" ")}>
|
<div className={classNames.join(" ")}>
|
||||||
<div className={styles["Container-inner"]}>
|
<div className={`${styles["Container-inner"]} ${taskbarStyles["Menu-inner"]}`}>
|
||||||
<div className={styles.Buttons}>
|
<div className={styles.Buttons}>
|
||||||
<button title="Shut Down" tabIndex={tabIndex} onClick={() => { closeViewport(true); }}>
|
<button title="Shut Down" tabIndex={tabIndex} onClick={() => { closeViewport(true); }}>
|
||||||
<FontAwesomeIcon icon={faPowerOff}/>
|
<FontAwesomeIcon icon={faPowerOff}/>
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@
|
||||||
min-width: 13rem;
|
min-width: 13rem;
|
||||||
max-width: 19rem;
|
max-width: 19rem;
|
||||||
padding: 0.5rem;
|
padding: 0.5rem;
|
||||||
border-top-left-radius: 0.5rem;
|
border-top-left-radius: var(--border-radius-1);
|
||||||
border-top-right-radius: 0.5rem;
|
border-top-right-radius: var(--border-radius-1);
|
||||||
border-bottom-right-radius: 0.5rem;
|
border-bottom-right-radius: var(--border-radius-1);
|
||||||
backdrop-filter: var(--taskbar-filter);
|
backdrop-filter: var(--taskbar-filter);
|
||||||
transform: none;
|
transform: none;
|
||||||
transition: opacity 200ms ease-in-out, transform 200ms ease-in-out;
|
transition: opacity 200ms ease-in-out, transform 200ms ease-in-out;
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@
|
||||||
.Container-inner {
|
.Container-inner {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
border-top-left-radius: 0.5rem;
|
border-top-left-radius: var(--border-radius-1);
|
||||||
border-top-right-radius: 0.5rem;
|
border-top-right-radius: var(--border-radius-1);
|
||||||
border-bottom-left-radius: 0.5rem;
|
border-bottom-left-radius: var(--border-radius-1);
|
||||||
backdrop-filter: var(--taskbar-filter);
|
backdrop-filter: var(--taskbar-filter);
|
||||||
transform: none;
|
transform: none;
|
||||||
transition: opacity 200ms ease-in-out, transform 200ms ease-in-out;
|
transition: opacity 200ms ease-in-out, transform 200ms ease-in-out;
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,10 @@ export function ThemeProvider({ children }: ThemeProviderProps): ReactElement {
|
||||||
const themeSettings = settingsManager.get(SettingsManager.VIRTUAL_PATHS.theme);
|
const themeSettings = settingsManager.get(SettingsManager.VIRTUAL_PATHS.theme);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
void themeSettings.get("theme", (value: string) => { setTheme(parseInt(value)); });
|
void themeSettings.get("theme", (value: string) => { setTheme(parseInt(value) || 0); });
|
||||||
}, [themeSettings]);
|
}, [themeSettings]);
|
||||||
|
|
||||||
return <div className={`${THEMES[theme]}-theme`}>
|
return <div className={`${THEMES[theme ?? 0]}-theme`}>
|
||||||
{children}
|
{children}
|
||||||
</div>;
|
</div>;
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue