diff --git a/l10n b/l10n index e5f3fe73..ead5aeaa 160000 --- a/l10n +++ b/l10n @@ -1 +1 @@ -Subproject commit e5f3fe73365a676fd2fba2cb3788eed819038a7c +Subproject commit ead5aeaac4db7950b3411008a26c575082244bcc diff --git a/src/browser/base/content/zen-popupset.inc.xhtml b/src/browser/base/content/zen-popupset.inc.xhtml index bf2c8bcc..aeabcba9 100644 --- a/src/browser/base/content/zen-popupset.inc.xhtml +++ b/src/browser/base/content/zen-popupset.inc.xhtml @@ -95,6 +95,7 @@ + diff --git a/src/browser/base/content/zen-styles/zen-gradient-generator.css b/src/browser/base/content/zen-styles/zen-gradient-generator.css index d719c158..f397eb22 100644 --- a/src/browser/base/content/zen-styles/zen-gradient-generator.css +++ b/src/browser/base/content/zen-styles/zen-gradient-generator.css @@ -177,7 +177,7 @@ position: absolute; z-index: 2; width: 22px; - height: 22px; + height: 20px; border-radius: 50%; background: var(--zen-theme-picker-dot-color); box-shadow: 0 0 0 2px var(--zen-themed-toolbar-bg); @@ -188,8 +188,8 @@ transform: translate(-50%, -50%); &.primary { - width: 26px; - height: 26px; + width: 28px; + height: 28px; border-width: 3px; } @@ -199,6 +199,20 @@ } } +#PanelUI-zen-gradient-generator-color-click-to-add { + position: absolute; + font-weight: 600; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + white-space: nowrap; + pointer-events: none; + + &[hidden] { + display: none; + } +} + #PanelUI-zen-gradient-generator-color-actions { display: flex; position: absolute; @@ -224,6 +238,11 @@ &:hover { background: light-dark(rgba(0, 0, 0, 0.2), rgba(255, 255, 255, 0.2)); } + + &[disabled] { + opacity: 0.5; + cursor: not-allowed; + } } & .separator { diff --git a/src/browser/base/zen-components/ZenGradientGenerator.mjs b/src/browser/base/zen-components/ZenGradientGenerator.mjs index 909d7502..0a899201 100644 --- a/src/browser/base/zen-components/ZenGradientGenerator.mjs +++ b/src/browser/base/zen-components/ZenGradientGenerator.mjs @@ -200,8 +200,8 @@ this.dots.push({ ID: id, - Element: dot, - Position: { x: null, y: null }, // at some point possition should instead be stored as percentege just so that the size of the color picker does not matter. + element: dot, + position: { x: null, y: null }, // at some point possition should instead be stored as percentege just so that the size of the color picker does not matter. }); } if (!fromWorkspace) { @@ -266,7 +266,7 @@ const existingPrimaryDot = this.dots.find((d) => d.ID === 0); if (existingPrimaryDot) { existingPrimaryDot.ID = this.dots.length; - existingPrimaryDot.Element.classList.remove('primary'); + existingPrimaryDot.element.classList.remove('primary'); } dot.classList.add('primary'); } @@ -276,8 +276,8 @@ this.dots.push({ ID: id, - Element: dot, - Position: { x: relativePosition.x, y: relativePosition.y }, + element: dot, + position: { x: relativePosition.x, y: relativePosition.y }, }); } @@ -290,6 +290,10 @@ { type: 'floating', angles: [] }, ]; + if (dots.length === 0) { + return []; + } + function getColorHarmonyType(numDots, dots) { if (useHarmony !== '') { const selectedHarmony = colorHarmonies.find((harmony) => harmony.type === useHarmony); @@ -352,15 +356,15 @@ if (!primaryDot) return []; if (action === 'add' && this.dots.length) { - updatedDots.push({ ID: this.dots.length, Position: centerPosition }); + updatedDots.push({ ID: this.dots.length, position: centerPosition }); } - const baseAngle = getAngleFromPosition(primaryDot.Position, centerPosition); - let distance = getDistanceFromCenter(primaryDot.Position, centerPosition); + const baseAngle = getAngleFromPosition(primaryDot.position, centerPosition); + let distance = getDistanceFromCenter(primaryDot.position, centerPosition); const radius = (rect.width - padding) / 2; if (distance > radius) distance = radius; if (this.dots.length > 0) { - updatedDots = [{ ID: 0, Position: primaryDot.Position }]; + updatedDots = [{ ID: 0, position: primaryDot.position }]; } harmonyAngles.angles.forEach((angleOffset, index) => { @@ -372,7 +376,7 @@ y: centerPosition.y + distance * Math.sin(radian), }; - updatedDots.push({ ID: index + 1, Position: newPosition }); + updatedDots.push({ ID: index + 1, position: newPosition }); }); return updatedDots; @@ -384,25 +388,25 @@ const dotPad = this.panel.querySelector('.zen-theme-picker-gradient'); const rect = dotPad.getBoundingClientRect(); this.dots.forEach((dot) => { - dot.Element.style.zIndex = 999; + dot.element.style.zIndex = 999; let pixelX, pixelY; const rect = this.panel.querySelector('.zen-theme-picker-gradient').getBoundingClientRect(); - if (dot.Position.x === null) { - const leftPercentage = parseFloat(dot.Element.style.left) / 100; - const topPercentage = parseFloat(dot.Element.style.top) / 100; + if (dot.position.x === null) { + const leftPercentage = parseFloat(dot.element.style.left) / 100; + const topPercentage = parseFloat(dot.element.style.top) / 100; pixelX = leftPercentage * rect.width; pixelY = topPercentage * rect.height; } else { - pixelX = dot.Position.x; - pixelY = dot.Position.y; + pixelX = dot.position.x; + pixelY = dot.position.y; } const colorFromPos = this.getColorFromPosition(pixelX, pixelY); - dot.Element.style.setProperty( + dot.element.style.setProperty( '--zen-theme-picker-dot-color', `rgb(${colorFromPos[0]}, ${colorFromPos[1]}, ${colorFromPos[2]})` ); @@ -413,9 +417,9 @@ const existingPrimaryDot = this.dots.find((d) => d.ID === 0); if (existingPrimaryDot) { - existingPrimaryDot.Element.style.zIndex = 999; - const colorFromPos = this.getColorFromPosition(existingPrimaryDot.Position.x, existingPrimaryDot.Position.y); - existingPrimaryDot.Element.style.setProperty( + existingPrimaryDot.element.style.zIndex = 999; + const colorFromPos = this.getColorFromPosition(existingPrimaryDot.position.x, existingPrimaryDot.position.y); + existingPrimaryDot.element.style.setProperty( '--zen-theme-picker-dot-color', `rgb(${colorFromPos[0]}, ${colorFromPos[1]}, ${colorFromPos[2]})` ); @@ -425,21 +429,21 @@ const existingDot = this.dots.find((dot) => dot.ID === dotPosition.ID); if (existingDot) { - existingDot.Position = dotPosition.Position; - existingDot.Element.style.left = `${dotPosition.Position.x}px`; - existingDot.Element.style.top = `${dotPosition.Position.y}px`; - const colorFromPos = this.getColorFromPosition(dotPosition.Position.x, dotPosition.Position.y); - existingDot.Element.style.setProperty( + existingDot.position = dotPosition.position; + existingDot.element.style.left = `${dotPosition.position.x}px`; + existingDot.element.style.top = `${dotPosition.position.y}px`; + const colorFromPos = this.getColorFromPosition(dotPosition.position.x, dotPosition.position.y); + existingDot.element.style.setProperty( '--zen-theme-picker-dot-color', `rgb(${colorFromPos[0]}, ${colorFromPos[1]}, ${colorFromPos[2]})` ); if (!this.dragging) { gZenUIManager.motion.animate( - existingDot.Element, + existingDot.element, { - left: `${dotPosition.Position.x}px`, - top: `${dotPosition.Position.y}px`, + left: `${dotPosition.position.x}px`, + top: `${dotPosition.position.y}px`, }, { duration: 0.4, @@ -449,7 +453,7 @@ ); } } else { - this.spawnDot(dotPosition.Position); + this.spawnDot(dotPosition.position); } }); } @@ -469,14 +473,14 @@ if (this.dots.length === 0) return; const lastDot = this.dots.pop(); - lastDot.Element.remove(); + lastDot.element.remove(); this.dots.forEach((dot, index) => { dot.ID = index; if (index === 0) { - dot.Element.classList.add('primary'); + dot.element.classList.add('primary'); } else { - dot.Element.classList.remove('primary'); + dot.element.classList.remove('primary'); } }); @@ -524,13 +528,13 @@ let clickedDot = null; const existingPrimaryDot = this.dots.find((d) => d.ID === 0); - clickedDot = this.dots.find((dot) => dot.Element === clickedElement); + clickedDot = this.dots.find((dot) => dot.element === clickedElement); if (clickedDot) { // TODO: this doesnt work and needs to be fixed existingPrimaryDot.ID = clickedDot.ID; clickedDot.ID = 0; - clickedDot.Element.style.zIndex = 999; + clickedDot.element.style.zIndex = 999; let colorPositions = this.calculateCompliments(this.dots, 'update', this.useAlgo); this.handleColorPositions(colorPositions); @@ -556,9 +560,9 @@ this.updateCurrentWorkspace(true); } else if (!clickedDot && existingPrimaryDot) { - existingPrimaryDot.Element.style.left = `${relativeX}px`; - existingPrimaryDot.Element.style.top = `${relativeY}px`; - existingPrimaryDot.Position = { + existingPrimaryDot.element.style.left = `${relativeX}px`; + existingPrimaryDot.element.style.top = `${relativeY}px`; + existingPrimaryDot.position = { x: relativeX, y: relativeY, }; @@ -568,10 +572,10 @@ this.updateCurrentWorkspace(true); gZenUIManager.motion.animate( - existingPrimaryDot.Element, + existingPrimaryDot.element, { - left: `${existingPrimaryDot.Position.x}px`, - top: `${existingPrimaryDot.Position.y}px`, + left: `${existingPrimaryDot.position.x}px`, + top: `${existingPrimaryDot.position.y}px`, }, { duration: 0.4, @@ -586,7 +590,7 @@ if (event.button === 2) { return; } - const draggedDot = this.dots.find((dot) => dot.Element === event.target); + const draggedDot = this.dots.find((dot) => dot.element === event.target); if (draggedDot) { event.preventDefault(); this.dragging = true; @@ -606,7 +610,7 @@ if (!event.target.classList.contains('zen-theme-picker-dot')) { return; } - this.dots = this.dots.filter((dot) => dot.Element !== event.target); + this.dots = this.dots.filter((dot) => dot.element !== event.target); event.target.remove(); this.dots.sort((a, b) => a.ID - b.ID); @@ -615,9 +619,9 @@ this.dots.forEach((dot, index) => { dot.ID = index; if (index === 0) { - dot.Element.classList.add('primary'); + dot.element.classList.add('primary'); } else { - dot.Element.classList.remove('primary'); + dot.element.classList.remove('primary'); } }); @@ -669,10 +673,10 @@ const relativeX = pixelX - rect.left; const relativeY = pixelY - rect.top; - const draggedDot = this.dots.find((dot) => dot.Element === this.draggedDot); - draggedDot.Element.style.left = `${relativeX}px`; - draggedDot.Element.style.top = `${relativeY}px`; - draggedDot.Position = { + const draggedDot = this.dots.find((dot) => dot.element === this.draggedDot); + draggedDot.element.style.left = `${relativeX}px`; + draggedDot.element.style.top = `${relativeY}px`; + draggedDot.position = { x: relativeX, y: relativeY, }; @@ -887,6 +891,18 @@ browser.gZenThemePicker.currentRotation = workspaceTheme.rotation ?? 45; browser.gZenThemePicker.currentTexture = workspaceTheme.texture ?? 0; + for (const button of browser.document.querySelectorAll('#PanelUI-zen-gradient-generator-color-actions button')) { + // disable if there are no buttons + button.disabled = + workspaceTheme.gradientColors.length === 0 || + (button.id === 'PanelUI-zen-gradient-generator-color-add' + ? workspaceTheme.gradientColors.length >= ZenThemePicker.MAX_DOTS + : false); + } + document + .getElementById('PanelUI-zen-gradient-generator-color-click-to-add') + .toggleAttribute('hidden', workspaceTheme.gradientColors.length > 0); + browser.document.getElementById('PanelUI-zen-gradient-generator-opacity').value = browser.gZenThemePicker.currentOpacity; browser.document.getElementById('PanelUI-zen-gradient-generator-texture').value =