mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-07 17:23:56 -05:00
Merge VS Code 1.23.1 (#1520)
This commit is contained in:
@@ -19,10 +19,11 @@ import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/brows
|
||||
import { ModesContentHoverWidget } from './modesContentHover';
|
||||
import { ModesGlyphHoverWidget } from './modesGlyphHover';
|
||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import { registerThemingParticipant } from 'vs/platform/theme/common/themeService';
|
||||
import { registerThemingParticipant, IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import { editorHoverHighlight, editorHoverBackground, editorHoverBorder, textLinkForeground, textCodeBlockBackground } from 'vs/platform/theme/common/colorRegistry';
|
||||
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
|
||||
import { MarkdownRenderer } from 'vs/editor/contrib/markdown/markdownRenderer';
|
||||
import { IEmptyContentData } from 'vs/editor/browser/controller/mouseTarget';
|
||||
|
||||
export class ModesHoverController implements editorCommon.IEditorContribution {
|
||||
|
||||
@@ -57,7 +58,8 @@ export class ModesHoverController implements editorCommon.IEditorContribution {
|
||||
|
||||
constructor(editor: ICodeEditor,
|
||||
@IOpenerService private readonly _openerService: IOpenerService,
|
||||
@IModeService private readonly _modeService: IModeService
|
||||
@IModeService private readonly _modeService: IModeService,
|
||||
@IThemeService private readonly _themeService: IThemeService
|
||||
) {
|
||||
this._editor = editor;
|
||||
|
||||
@@ -113,8 +115,8 @@ export class ModesHoverController implements editorCommon.IEditorContribution {
|
||||
}
|
||||
|
||||
private _onEditorMouseMove(mouseEvent: IEditorMouseEvent): void {
|
||||
var targetType = mouseEvent.target.type;
|
||||
var stopKey = platform.isMacintosh ? 'metaKey' : 'ctrlKey';
|
||||
let targetType = mouseEvent.target.type;
|
||||
let stopKey = platform.isMacintosh ? 'metaKey' : 'ctrlKey';
|
||||
|
||||
if (this._isMouseDown && this._hoverClicked && this.contentWidget.isColorPickerVisible()) {
|
||||
return;
|
||||
@@ -130,6 +132,15 @@ export class ModesHoverController implements editorCommon.IEditorContribution {
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetType === MouseTargetType.CONTENT_EMPTY) {
|
||||
const epsilon = this._editor.getConfiguration().fontInfo.typicalHalfwidthCharacterWidth / 2;
|
||||
const data = <IEmptyContentData>mouseEvent.target.detail;
|
||||
if (data && !data.isAfterLines && typeof data.horizontalDistanceToText === 'number' && data.horizontalDistanceToText < epsilon) {
|
||||
// Let hover kick in even when the mouse is technically in the empty area after a line, given the distance is small enough
|
||||
targetType = MouseTargetType.CONTENT_TEXT;
|
||||
}
|
||||
}
|
||||
|
||||
if (this._editor.getConfiguration().contribInfo.hover && targetType === MouseTargetType.CONTENT_TEXT) {
|
||||
this.glyphWidget.hide();
|
||||
this.contentWidget.startShowingAt(mouseEvent.target.range, false);
|
||||
@@ -159,7 +170,7 @@ export class ModesHoverController implements editorCommon.IEditorContribution {
|
||||
|
||||
private _createHoverWidget() {
|
||||
const renderer = new MarkdownRenderer(this._editor, this._modeService, this._openerService);
|
||||
this._contentWidget = new ModesContentHoverWidget(this._editor, renderer);
|
||||
this._contentWidget = new ModesContentHoverWidget(this._editor, renderer, this._themeService);
|
||||
this._glyphWidget = new ModesGlyphHoverWidget(this._editor, renderer);
|
||||
}
|
||||
|
||||
@@ -189,11 +200,17 @@ class ShowHoverAction extends EditorAction {
|
||||
constructor() {
|
||||
super({
|
||||
id: 'editor.action.showHover',
|
||||
label: nls.localize('showHover', "Show Hover"),
|
||||
label: nls.localize({
|
||||
key: 'showHover',
|
||||
comment: [
|
||||
'Label for action that will trigger the showing of a hover in the editor.',
|
||||
'This allows for users to show the hover without using the mouse.'
|
||||
]
|
||||
}, "Show Hover"),
|
||||
alias: 'Show Hover',
|
||||
precondition: null,
|
||||
kbOpts: {
|
||||
kbExpr: EditorContextKeys.textFocus,
|
||||
kbExpr: EditorContextKeys.editorTextFocus,
|
||||
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_I)
|
||||
}
|
||||
});
|
||||
|
||||
@@ -23,6 +23,7 @@ import { ColorDetector } from 'vs/editor/contrib/colorPicker/colorDetector';
|
||||
import { Color, RGBA } from 'vs/base/common/color';
|
||||
import { IDisposable, empty as EmptyDisposable, dispose, combinedDisposable } from 'vs/base/common/lifecycle';
|
||||
import { getColorPresentations } from 'vs/editor/contrib/colorPicker/color';
|
||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
const $ = dom.$;
|
||||
|
||||
class ColorHover {
|
||||
@@ -169,7 +170,11 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
private renderDisposable: IDisposable = EmptyDisposable;
|
||||
private toDispose: IDisposable[] = [];
|
||||
|
||||
constructor(editor: ICodeEditor, markdownRenderner: MarkdownRenderer) {
|
||||
constructor(
|
||||
editor: ICodeEditor,
|
||||
markdownRenderner: MarkdownRenderer,
|
||||
private readonly _themeService: IThemeService
|
||||
) {
|
||||
super(ModesContentHoverWidget.ID, editor);
|
||||
|
||||
this._computer = new ModesContentComputer(this._editor);
|
||||
@@ -300,6 +305,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
isEmptyHoverContent = true;
|
||||
|
||||
let containColorPicker = false;
|
||||
let markdownDisposeable: IDisposable;
|
||||
messages.forEach((msg) => {
|
||||
if (!msg.range) {
|
||||
return;
|
||||
@@ -313,7 +319,8 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
.filter(contents => !isEmptyMarkdownString(contents))
|
||||
.forEach(contents => {
|
||||
const renderedContents = this._markdownRenderer.render(contents);
|
||||
fragment.appendChild($('div.hover-row', null, renderedContents));
|
||||
markdownDisposeable = renderedContents;
|
||||
fragment.appendChild($('div.hover-row', null, renderedContents.element));
|
||||
isEmptyHoverContent = false;
|
||||
});
|
||||
} else {
|
||||
@@ -329,7 +336,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
|
||||
// create blank olor picker model and widget first to ensure it's positioned correctly.
|
||||
const model = new ColorPickerModel(color, [], 0);
|
||||
const widget = new ColorPickerWidget(fragment, model, this._editor.getConfiguration().pixelRatio);
|
||||
const widget = new ColorPickerWidget(fragment, model, this._editor.getConfiguration().pixelRatio, this._themeService);
|
||||
|
||||
getColorPresentations(editorModel, colorInfo, msg.provider).then(colorPresentations => {
|
||||
model.colorPresentations = colorPresentations;
|
||||
@@ -388,7 +395,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
this.updateContents(fragment);
|
||||
this._colorPicker.layout();
|
||||
|
||||
this.renderDisposable = combinedDisposable([colorListener, colorChangeListener, widget]);
|
||||
this.renderDisposable = combinedDisposable([colorListener, colorChangeListener, widget, markdownDisposeable]);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -10,6 +10,7 @@ import { GlyphHoverWidget } from './hoverWidgets';
|
||||
import { $ } from 'vs/base/browser/dom';
|
||||
import { MarkdownRenderer } from 'vs/editor/contrib/markdown/markdownRenderer';
|
||||
import { IMarkdownString, isEmptyMarkdownString } from 'vs/base/common/htmlContent';
|
||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
|
||||
export interface IHoverMessage {
|
||||
value: IMarkdownString;
|
||||
@@ -91,6 +92,7 @@ export class ModesGlyphHoverWidget extends GlyphHoverWidget {
|
||||
private _markdownRenderer: MarkdownRenderer;
|
||||
private _computer: MarginComputer;
|
||||
private _hoverOperation: HoverOperation<IHoverMessage[]>;
|
||||
private _renderDisposeables: IDisposable[];
|
||||
|
||||
constructor(editor: ICodeEditor, markdownRenderer: MarkdownRenderer) {
|
||||
super(ModesGlyphHoverWidget.ID, editor);
|
||||
@@ -110,6 +112,7 @@ export class ModesGlyphHoverWidget extends GlyphHoverWidget {
|
||||
}
|
||||
|
||||
public dispose(): void {
|
||||
this._renderDisposeables = dispose(this._renderDisposeables);
|
||||
this._hoverOperation.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
@@ -156,12 +159,15 @@ export class ModesGlyphHoverWidget extends GlyphHoverWidget {
|
||||
}
|
||||
|
||||
private _renderMessages(lineNumber: number, messages: IHoverMessage[]): void {
|
||||
dispose(this._renderDisposeables);
|
||||
this._renderDisposeables = [];
|
||||
|
||||
const fragment = document.createDocumentFragment();
|
||||
|
||||
messages.forEach((msg) => {
|
||||
const renderedContents = this._markdownRenderer.render(msg.value);
|
||||
fragment.appendChild($('div.hover-row', null, renderedContents));
|
||||
this._renderDisposeables.push(renderedContents);
|
||||
fragment.appendChild($('div.hover-row', null, renderedContents.element));
|
||||
});
|
||||
|
||||
this.updateContents(fragment);
|
||||
|
||||
Reference in New Issue
Block a user