Fixes #84565: Mark all editor layers as strictly contained (have the layers always pass the opacity check)

This commit is contained in:
Alexandru Dima 2019-11-12 13:55:15 +01:00
parent 5f32c01db2
commit cd39e8e0a2
No known key found for this signature in database
GPG key ID: 6E58D7B045760DA0
7 changed files with 16 additions and 0 deletions

View file

@ -26,6 +26,7 @@ export class FastDomNode<T extends HTMLElement> {
private _position: string;
private _visibility: string;
private _layerHint: boolean;
private _contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint';
constructor(domNode: T) {
this.domNode = domNode;
@ -47,6 +48,7 @@ export class FastDomNode<T extends HTMLElement> {
this._position = '';
this._visibility = '';
this._layerHint = false;
this._contain = 'none';
}
public setMaxWidth(maxWidth: number): void {
@ -206,6 +208,14 @@ export class FastDomNode<T extends HTMLElement> {
(<any>this.domNode.style).willChange = this._layerHint ? 'transform' : 'auto';
}
public setContain(contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint'): void {
if (this._contain === contain) {
return;
}
this._contain = contain;
(<any>this.domNode.style).contain = this._contain;
}
public setAttribute(name: string, value: string): void {
this.domNode.setAttribute(name, value);
}

View file

@ -99,6 +99,7 @@ export abstract class AbstractScrollbar extends Widget {
this.slider.setHeight(height);
}
this.slider.setLayerHinting(true);
this.slider.setContain('strict');
this.domNode.domNode.appendChild(this.slider.domNode);

View file

@ -544,6 +544,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
// (3) handle scrolling
this._linesContent.setLayerHinting(this._canUseLayerHinting);
this._linesContent.setContain('strict');
const adjustedScrollTop = this._context.viewLayout.getCurrentScrollTop() - viewportData.bigNumbersDelta;
this._linesContent.setTop(-adjustedScrollTop);
this._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft());

View file

@ -78,6 +78,7 @@ export class Margin extends ViewPart {
public render(ctx: RestrictedRenderingContext): void {
this._domNode.setLayerHinting(this._canUseLayerHinting);
this._domNode.setContain('strict');
const adjustedScrollTop = ctx.scrollTop - ctx.bigNumbersDelta;
this._domNode.setTop(-adjustedScrollTop);

View file

@ -503,6 +503,7 @@ export class Minimap extends ViewPart {
this._slider.setPosition('absolute');
this._slider.setClassName('minimap-slider');
this._slider.setLayerHinting(true);
this._slider.setContain('strict');
this._domNode.appendChild(this._slider);
this._sliderHorizontal = createFastDomNode(document.createElement('div'));

View file

@ -215,6 +215,7 @@ export class DecorationsOverviewRuler extends ViewPart {
this._domNode.setClassName('decorationsOverviewRuler');
this._domNode.setPosition('absolute');
this._domNode.setLayerHinting(true);
this._domNode.setContain('strict');
this._domNode.setAttribute('aria-hidden', 'true');
this._updateSettings(false);

View file

@ -26,6 +26,7 @@ export class OverviewRuler extends ViewEventHandler implements IOverviewRuler {
this._domNode.setClassName(cssClassName);
this._domNode.setPosition('absolute');
this._domNode.setLayerHinting(true);
this._domNode.setContain('strict');
this._zoneManager = new OverviewZoneManager((lineNumber: number) => this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber));
this._zoneManager.setDOMWidth(0);