| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import { createFastDomNode } from '../../../../base/browser/fastDomNode.js';
- import { OverviewZoneManager } from '../../../common/viewModel/overviewZoneManager.js';
- import { ViewEventHandler } from '../../../common/viewEventHandler.js';
- export class OverviewRuler extends ViewEventHandler {
- constructor(context, cssClassName) {
- super();
- this._context = context;
- const options = this._context.configuration.options;
- this._domNode = createFastDomNode(document.createElement('canvas'));
- this._domNode.setClassName(cssClassName);
- this._domNode.setPosition('absolute');
- this._domNode.setLayerHinting(true);
- this._domNode.setContain('strict');
- this._zoneManager = new OverviewZoneManager((lineNumber) => this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber));
- this._zoneManager.setDOMWidth(0);
- this._zoneManager.setDOMHeight(0);
- this._zoneManager.setOuterHeight(this._context.viewLayout.getScrollHeight());
- this._zoneManager.setLineHeight(options.get(61 /* EditorOption.lineHeight */));
- this._zoneManager.setPixelRatio(options.get(131 /* EditorOption.pixelRatio */));
- this._context.addEventHandler(this);
- }
- dispose() {
- this._context.removeEventHandler(this);
- super.dispose();
- }
- // ---- begin view event handlers
- onConfigurationChanged(e) {
- const options = this._context.configuration.options;
- if (e.hasChanged(61 /* EditorOption.lineHeight */)) {
- this._zoneManager.setLineHeight(options.get(61 /* EditorOption.lineHeight */));
- this._render();
- }
- if (e.hasChanged(131 /* EditorOption.pixelRatio */)) {
- this._zoneManager.setPixelRatio(options.get(131 /* EditorOption.pixelRatio */));
- this._domNode.setWidth(this._zoneManager.getDOMWidth());
- this._domNode.setHeight(this._zoneManager.getDOMHeight());
- this._domNode.domNode.width = this._zoneManager.getCanvasWidth();
- this._domNode.domNode.height = this._zoneManager.getCanvasHeight();
- this._render();
- }
- return true;
- }
- onFlushed(e) {
- this._render();
- return true;
- }
- onScrollChanged(e) {
- if (e.scrollHeightChanged) {
- this._zoneManager.setOuterHeight(e.scrollHeight);
- this._render();
- }
- return true;
- }
- onZonesChanged(e) {
- this._render();
- return true;
- }
- // ---- end view event handlers
- getDomNode() {
- return this._domNode.domNode;
- }
- setLayout(position) {
- this._domNode.setTop(position.top);
- this._domNode.setRight(position.right);
- let hasChanged = false;
- hasChanged = this._zoneManager.setDOMWidth(position.width) || hasChanged;
- hasChanged = this._zoneManager.setDOMHeight(position.height) || hasChanged;
- if (hasChanged) {
- this._domNode.setWidth(this._zoneManager.getDOMWidth());
- this._domNode.setHeight(this._zoneManager.getDOMHeight());
- this._domNode.domNode.width = this._zoneManager.getCanvasWidth();
- this._domNode.domNode.height = this._zoneManager.getCanvasHeight();
- this._render();
- }
- }
- setZones(zones) {
- this._zoneManager.setZones(zones);
- this._render();
- }
- _render() {
- if (this._zoneManager.getOuterHeight() === 0) {
- return false;
- }
- const width = this._zoneManager.getCanvasWidth();
- const height = this._zoneManager.getCanvasHeight();
- const colorZones = this._zoneManager.resolveColorZones();
- const id2Color = this._zoneManager.getId2Color();
- const ctx = this._domNode.domNode.getContext('2d');
- ctx.clearRect(0, 0, width, height);
- if (colorZones.length > 0) {
- this._renderOneLane(ctx, colorZones, id2Color, width);
- }
- return true;
- }
- _renderOneLane(ctx, colorZones, id2Color, width) {
- let currentColorId = 0;
- let currentFrom = 0;
- let currentTo = 0;
- for (const zone of colorZones) {
- const zoneColorId = zone.colorId;
- const zoneFrom = zone.from;
- const zoneTo = zone.to;
- if (zoneColorId !== currentColorId) {
- ctx.fillRect(0, currentFrom, width, currentTo - currentFrom);
- currentColorId = zoneColorId;
- ctx.fillStyle = id2Color[currentColorId];
- currentFrom = zoneFrom;
- currentTo = zoneTo;
- }
- else {
- if (currentTo >= zoneFrom) {
- currentTo = Math.max(currentTo, zoneTo);
- }
- else {
- ctx.fillRect(0, currentFrom, width, currentTo - currentFrom);
- currentFrom = zoneFrom;
- currentTo = zoneTo;
- }
- }
- }
- ctx.fillRect(0, currentFrom, width, currentTo - currentFrom);
- }
- }
|