Skip to content

Commit 29f37cc

Browse files
committed
adding code in order to make the picked color representation disappear when resizing if it overlaps with the icon
1 parent f254ad1 commit 29f37cc

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,22 @@ import { IThemeService } from 'vs/platform/theme/common/themeService';
2222

2323
const $ = dom.$;
2424

25+
function elementsOverlap(el1: HTMLElement, el2: HTMLElement) {
26+
const domRect1 = el1.getBoundingClientRect();
27+
const domRect2 = el2.getBoundingClientRect();
28+
return !(
29+
domRect1.top > domRect2.bottom ||
30+
domRect1.right < domRect2.left ||
31+
domRect1.bottom < domRect2.top ||
32+
domRect1.left > domRect2.right
33+
);
34+
}
35+
2536
export class ColorPickerHeader extends Disposable {
2637

2738
private readonly _domNode: HTMLElement;
2839
private readonly _pickedColorNode: HTMLElement;
40+
private readonly _pickedColorRepresentation: HTMLElement;
2941
private readonly _originalColorNode: HTMLElement;
3042
private readonly _closeButton: CloseButton | null = null;
3143
private backgroundColor: Color;
@@ -37,6 +49,8 @@ export class ColorPickerHeader extends Disposable {
3749
dom.append(container, this._domNode);
3850

3951
this._pickedColorNode = dom.append(this._domNode, $('.picked-color'));
52+
this._pickedColorRepresentation = dom.append(this._pickedColorNode, document.createElement('div'));
53+
const icon = dom.append(this._pickedColorNode, $('.codicon.codicon-color-mode'));
4054

4155
const tooltip = localize('clickToToggleColorOptions', "Click to toggle color options (rgb/hsl/hex)");
4256
this._pickedColorNode.setAttribute('title', tooltip);
@@ -66,6 +80,16 @@ export class ColorPickerHeader extends Disposable {
6680
this._domNode.classList.add('standalone-colorpicker');
6781
this._closeButton = this._register(new CloseButton(this._domNode));
6882
}
83+
84+
const resizeObserver = new ResizeObserver(() => {
85+
this._pickedColorRepresentation.style.display = 'block';
86+
if (elementsOverlap(this._pickedColorRepresentation, icon)) {
87+
this._pickedColorRepresentation.style.display = 'none';
88+
} else {
89+
this._pickedColorRepresentation.style.display = 'block';
90+
}
91+
});
92+
resizeObserver.observe(this._domNode);
6993
}
7094

7195
public get domNode(): HTMLElement {
@@ -91,8 +115,7 @@ export class ColorPickerHeader extends Disposable {
91115
}
92116

93117
private onDidChangePresentation(): void {
94-
this._pickedColorNode.textContent = this.model.presentation ? this.model.presentation.label : '';
95-
this._pickedColorNode.prepend($('.codicon.codicon-color-mode'));
118+
this._pickedColorRepresentation.textContent = this.model.presentation ? this.model.presentation.label : '';
96119
}
97120
}
98121

0 commit comments

Comments
 (0)