mirror of
https://github.com/zen-browser/desktop.git
synced 2025-10-14 05:46:26 +00:00
feat: Improve accessibility contrast checks and add mroe padding to HSL color detection, b=no-bug, c=common, workspaces
This commit is contained in:
@@ -5,4 +5,8 @@
|
|||||||
# Mica
|
# Mica
|
||||||
pref("widget.windows.mica", true);
|
pref("widget.windows.mica", true);
|
||||||
pref("widget.windows.mica.popups", true);
|
pref("widget.windows.mica.popups", true);
|
||||||
|
|
||||||
|
# 1. DWMSBT_MAINWINDOW
|
||||||
|
# 2. DWMSBT_TRANSIENTWINDOW (default, also used for popups)
|
||||||
|
# 3(default). DWMSBT_TABBEDWINDOW
|
||||||
pref("widget.windows.mica.toplevel-backdrop", 2);
|
pref("widget.windows.mica.toplevel-backdrop", 2);
|
||||||
|
@@ -100,7 +100,13 @@
|
|||||||
</defs>
|
</defs>
|
||||||
</svg>
|
</svg>
|
||||||
</box>
|
</box>
|
||||||
<html:input type="range" min="0.3" max="0.9" value="0.4" step="0.001" id="PanelUI-zen-gradient-generator-opacity" />
|
<html:input type="range" max="0.9" value="0.4" step="0.001" id="PanelUI-zen-gradient-generator-opacity"
|
||||||
|
#ifdef XP_MACOSX
|
||||||
|
min="0.3"
|
||||||
|
#else
|
||||||
|
min="0.25"
|
||||||
|
#endif
|
||||||
|
/>
|
||||||
</vbox>
|
</vbox>
|
||||||
<vbox id="PanelUI-zen-gradient-generator-texture-wrapper">
|
<vbox id="PanelUI-zen-gradient-generator-texture-wrapper">
|
||||||
</vbox>
|
</vbox>
|
||||||
|
@@ -121,6 +121,11 @@
|
|||||||
color-mix(in oklch, var(--toolbox-textcolor) 15%, transparent)
|
color-mix(in oklch, var(--toolbox-textcolor) 15%, transparent)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
--zen-toolbar-element-bg-hover: light-dark(
|
||||||
|
color-mix(in srgb, var(--zen-toolbar-element-bg) 75%, transparent),
|
||||||
|
color-mix(in srgb, var(--zen-toolbar-element-bg) 60%, transparent)
|
||||||
|
);
|
||||||
|
|
||||||
/* Toolbar */
|
/* Toolbar */
|
||||||
--tab-selected-color-scheme: inherit;
|
--tab-selected-color-scheme: inherit;
|
||||||
|
|
||||||
@@ -130,7 +135,7 @@
|
|||||||
|
|
||||||
--toolbarbutton-inner-padding: 5px !important;
|
--toolbarbutton-inner-padding: 5px !important;
|
||||||
|
|
||||||
--toolbarbutton-hover-background: var(--zen-toolbar-element-bg) !important;
|
--toolbarbutton-hover-background: var(--zen-toolbar-element-bg-hover) !important;
|
||||||
|
|
||||||
--toolbarbutton-active-background: color-mix(
|
--toolbarbutton-active-background: color-mix(
|
||||||
in srgb,
|
in srgb,
|
||||||
@@ -172,11 +177,7 @@
|
|||||||
--toolbar-field-color: var(--toolbox-textcolor) !important;
|
--toolbar-field-color: var(--toolbox-textcolor) !important;
|
||||||
|
|
||||||
&[zen-private-window='true'] {
|
&[zen-private-window='true'] {
|
||||||
--zen-main-browser-background: linear-gradient(
|
--zen-main-browser-background: linear-gradient(130deg, rgb(10, 6, 11) 0%, rgb(19, 7, 22) 100%);
|
||||||
130deg,
|
|
||||||
light-dark(rgb(247, 217, 255), rgb(10, 6, 11)) 0%,
|
|
||||||
light-dark(rgb(242, 198, 255), rgb(19, 7, 22)) 100%
|
|
||||||
);
|
|
||||||
--zen-main-browser-background-toolbar: var(--zen-main-browser-background);
|
--zen-main-browser-background-toolbar: var(--zen-main-browser-background);
|
||||||
--zen-primary-color: light-dark(rgb(93, 42, 107), rgb(110, 48, 125)) !important;
|
--zen-primary-color: light-dark(rgb(93, 42, 107), rgb(110, 48, 125)) !important;
|
||||||
--toolbox-textcolor: currentColor !important;
|
--toolbox-textcolor: currentColor !important;
|
||||||
|
@@ -41,7 +41,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const MAX_OPACITY = 0.9;
|
const MAX_OPACITY = 0.9;
|
||||||
const MIN_OPACITY = 0.3;
|
const MIN_OPACITY = AppConstants.platform === 'macosx' ? 0.3 : 0.25;
|
||||||
|
|
||||||
const EXPLICIT_LIGHTNESS_TYPE = 'explicit-lightness';
|
const EXPLICIT_LIGHTNESS_TYPE = 'explicit-lightness';
|
||||||
|
|
||||||
@@ -425,7 +425,7 @@
|
|||||||
calculateInitialPosition([r, g, b]) {
|
calculateInitialPosition([r, g, b]) {
|
||||||
// This function is called before the picker is even rendered, so we hard code the dimensions
|
// This function is called before the picker is even rendered, so we hard code the dimensions
|
||||||
// important: If any sort of sizing is changed, make sure changes are reflected here
|
// important: If any sort of sizing is changed, make sure changes are reflected here
|
||||||
const padding = 20;
|
const padding = 30;
|
||||||
const rect = {
|
const rect = {
|
||||||
width: 338,
|
width: 338,
|
||||||
height: 338,
|
height: 338,
|
||||||
@@ -445,7 +445,7 @@
|
|||||||
// Return a color as hsl based on the position in the gradient
|
// Return a color as hsl based on the position in the gradient
|
||||||
const gradient = this.panel.querySelector('.zen-theme-picker-gradient');
|
const gradient = this.panel.querySelector('.zen-theme-picker-gradient');
|
||||||
const rect = gradient.getBoundingClientRect();
|
const rect = gradient.getBoundingClientRect();
|
||||||
const padding = 20; // each side
|
const padding = 30; // each side
|
||||||
const dotHalfSize = 36 / 2; // half the size of the dot
|
const dotHalfSize = 36 / 2; // half the size of the dot
|
||||||
x += dotHalfSize;
|
x += dotHalfSize;
|
||||||
y += dotHalfSize;
|
y += dotHalfSize;
|
||||||
@@ -691,7 +691,7 @@
|
|||||||
|
|
||||||
const dotPad = this.panel.querySelector('.zen-theme-picker-gradient');
|
const dotPad = this.panel.querySelector('.zen-theme-picker-gradient');
|
||||||
const rect = dotPad.getBoundingClientRect();
|
const rect = dotPad.getBoundingClientRect();
|
||||||
const padding = 20;
|
const padding = 30;
|
||||||
|
|
||||||
let updatedDots = [...dots];
|
let updatedDots = [...dots];
|
||||||
const centerPosition = { x: rect.width / 2, y: rect.height / 2 };
|
const centerPosition = { x: rect.width / 2, y: rect.height / 2 };
|
||||||
@@ -840,7 +840,7 @@
|
|||||||
|
|
||||||
const gradient = this.panel.querySelector('.zen-theme-picker-gradient');
|
const gradient = this.panel.querySelector('.zen-theme-picker-gradient');
|
||||||
const rect = gradient.getBoundingClientRect();
|
const rect = gradient.getBoundingClientRect();
|
||||||
const padding = 20;
|
const padding = 30;
|
||||||
|
|
||||||
const centerX = rect.left + rect.width / 2;
|
const centerX = rect.left + rect.width / 2;
|
||||||
const centerY = rect.top + rect.height / 2;
|
const centerY = rect.top + rect.height / 2;
|
||||||
@@ -973,7 +973,7 @@
|
|||||||
if (this.dragging) {
|
if (this.dragging) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const rect = this.panel.querySelector('.zen-theme-picker-gradient').getBoundingClientRect();
|
const rect = this.panel.querySelector('.zen-theme-picker-gradient').getBoundingClientRect();
|
||||||
const padding = 20; // each side
|
const padding = 30; // each side
|
||||||
// do NOT let the ball be draged outside of an imaginary circle. You can drag it anywhere inside the circle
|
// do NOT let the ball be draged outside of an imaginary circle. You can drag it anywhere inside the circle
|
||||||
// if the distance between the center of the circle and the dragged ball is bigger than the radius, then the ball
|
// if the distance between the center of the circle and the dragged ball is bigger than the radius, then the ball
|
||||||
// should be placed on the edge of the circle. If it's inside the circle, then the ball just follows the mouse
|
// should be placed on the edge of the circle. If it's inside the circle, then the ball just follows the mouse
|
||||||
@@ -1074,7 +1074,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
luminance([r, g, b]) {
|
luminance([r, g, b]) {
|
||||||
return 0.2126 * (r / 255) + 0.7152 * (g / 255) + 0.0722 * (b / 255);
|
// These magic numbers are extracted from the wikipedia article on relative luminance
|
||||||
|
// https://en.wikipedia.org/wiki/Relative_luminance
|
||||||
|
var a = [r, g, b].map((v) => {
|
||||||
|
v /= 255;
|
||||||
|
return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
|
||||||
|
});
|
||||||
|
return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722;
|
||||||
}
|
}
|
||||||
|
|
||||||
contrastRatio(rgb1, rgb2) {
|
contrastRatio(rgb1, rgb2) {
|
||||||
@@ -1163,7 +1169,9 @@
|
|||||||
let darkText = this.getToolbarColor(true); // e.g. [r, g, b, a]
|
let darkText = this.getToolbarColor(true); // e.g. [r, g, b, a]
|
||||||
let lightText = this.getToolbarColor(false); // e.g. [r, g, b, a]
|
let lightText = this.getToolbarColor(false); // e.g. [r, g, b, a]
|
||||||
|
|
||||||
lightText[3] -= 0.4; // Reduce alpha for light text
|
if (this.canBeTransparent) {
|
||||||
|
lightText[3] -= 0.15; // Reduce alpha for light text
|
||||||
|
}
|
||||||
|
|
||||||
// Composite text color over background
|
// Composite text color over background
|
||||||
darkText = this.blendColors(bg, darkText.slice(0, 3), (1 - darkText[3]) * 100);
|
darkText = this.blendColors(bg, darkText.slice(0, 3), (1 - darkText[3]) * 100);
|
||||||
@@ -1315,7 +1323,7 @@
|
|||||||
let workspaceTheme = theme || workspace.theme;
|
let workspaceTheme = theme || workspace.theme;
|
||||||
|
|
||||||
await this.foreachWindowAsActive(async (browser) => {
|
await this.foreachWindowAsActive(async (browser) => {
|
||||||
if (!browser.gZenThemePicker.promiseInitialized) {
|
if (!browser.gZenThemePicker?.promiseInitialized) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1505,7 +1513,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!skipUpdate) {
|
if (!skipUpdate) {
|
||||||
this.dots = [];
|
browser.gZenThemePicker.dots = [];
|
||||||
browser.gZenThemePicker.recalculateDots(workspaceTheme.gradientColors);
|
browser.gZenThemePicker.recalculateDots(workspaceTheme.gradientColors);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -1599,7 +1607,7 @@
|
|||||||
currentWorkspace = await gZenWorkspaces.getActiveWorkspace();
|
currentWorkspace = await gZenWorkspaces.getActiveWorkspace();
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.onWorkspaceChange(currentWorkspace, true, skipSave ? gradient : null);
|
await this.onWorkspaceChange(currentWorkspace, skipSave, skipSave ? gradient : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
async handlePanelClose() {
|
async handlePanelClose() {
|
||||||
|
@@ -889,6 +889,7 @@ var gZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
|||||||
async initializeWorkspaces() {
|
async initializeWorkspaces() {
|
||||||
let activeWorkspace = await this.getActiveWorkspace();
|
let activeWorkspace = await this.getActiveWorkspace();
|
||||||
this.activeWorkspace = activeWorkspace?.uuid;
|
this.activeWorkspace = activeWorkspace?.uuid;
|
||||||
|
await gZenSessionStore.promiseInitialized;
|
||||||
try {
|
try {
|
||||||
if (activeWorkspace) {
|
if (activeWorkspace) {
|
||||||
window.gZenThemePicker = new nsZenThemePicker();
|
window.gZenThemePicker = new nsZenThemePicker();
|
||||||
@@ -897,7 +898,6 @@ var gZenWorkspaces = new (class extends ZenMultiWindowFeature {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('gZenWorkspaces: Error initializing theme picker', e);
|
console.error('gZenWorkspaces: Error initializing theme picker', e);
|
||||||
}
|
}
|
||||||
await gZenSessionStore.promiseInitialized;
|
|
||||||
await this.workspaceBookmarks();
|
await this.workspaceBookmarks();
|
||||||
await this.initializeTabsStripSections();
|
await this.initializeTabsStripSections();
|
||||||
this._initializeEmptyTab();
|
this._initializeEmptyTab();
|
||||||
|
@@ -69,7 +69,7 @@
|
|||||||
|
|
||||||
&:hover,
|
&:hover,
|
||||||
&[dragged='true']{
|
&[dragged='true']{
|
||||||
background-color: var(--zen-toolbar-element-bg);
|
background-color: var(--toolbarbutton-hover-background);
|
||||||
}
|
}
|
||||||
|
|
||||||
& label {
|
& label {
|
||||||
@@ -215,7 +215,7 @@
|
|||||||
transition: opacity 0.1s;
|
transition: opacity 0.1s;
|
||||||
order: 5;
|
order: 5;
|
||||||
--toolbarbutton-inner-padding: 6px;
|
--toolbarbutton-inner-padding: 6px;
|
||||||
--tab-border-radius: 8px;
|
--tab-border-radius: 6px;
|
||||||
|
|
||||||
:root[zen-renaming-tab='true'] & {
|
:root[zen-renaming-tab='true'] & {
|
||||||
display: none;
|
display: none;
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
"brandShortName": "Zen",
|
"brandShortName": "Zen",
|
||||||
"brandFullName": "Zen Browser",
|
"brandFullName": "Zen Browser",
|
||||||
"release": {
|
"release": {
|
||||||
"displayVersion": "1.14.3b",
|
"displayVersion": "1.14.4b",
|
||||||
"github": {
|
"github": {
|
||||||
"repo": "zen-browser/desktop"
|
"repo": "zen-browser/desktop"
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user