import * as React from 'react';
import { FunctionComponent, useMemo, useContext, CSSProperties } from 'react';
import { CursorPositionContext } from '../../contexts/CursorPositionContext';
import { EditorViewContext } from '../../contexts/EditorViewContext';
import { FontInfoContext } from '../../contexts/FontInfoContext';
import { MouseMonitorContext } from '../../contexts/MouseMonitorContext';
import { from } from '../../utilities';
import { Position } from '../../vs/editor/common/core/position';
import { Range } from '../../vs/editor/common/core/range';
import { ViewLineRenderingData } from '../../vs/editor/common/viewModel/viewModel';
import { WritingMode } from '../editor';
import { IndentGuides } from '../indentGuides';
import { LineDecorations } from '../lineDecorations';
import { ViewSelection } from '../viewSelection';
import './Selections.css';
type P = {};
const Selection: FunctionComponent
= () => {
return <>>;
};
type Props = {};
export const Selections: FunctionComponent = (props) => {
const {
editor,
renderingContext: ctx,
selection,
selectionStart,
setSelectionStart,
} = useContext(EditorViewContext);
const { fontInfo } = useContext(FontInfoContext);
const lineHeight = useMemo(() => {
return fontInfo.lineHeight;
}, [fontInfo]);
const viewSelection = useMemo(() => {
// for (const cursor of cursors) {
if (!selection) {
return <>>;
}
if (selection.isEmpty()) {
return <>>;
}
if (!ctx) {
return <>>;
}
const startPosition = selection.getStartPosition();
const endPosition = selection.getEndPosition();
const p1 = ctx.viewportData.convertModelPositionToViewPosition(
startPosition.lineNumber,
startPosition.column
);
const p2 = ctx.viewportData.convertModelPositionToViewPosition(
endPosition.lineNumber,
endPosition.column
);
if (!p1) {
return <>>;
}
if (!p2) {
return <>>;
}
const { viewportData } = ctx;
const [viewStartPosition, viewEndPosition] = [p1, p2].sort(
Position.compare
);
const {
startLineNumber: viewportStartLineNumber,
endLineNumber: viewportEndLineNumber,
relativeVerticalOffset,
} = viewportData;
const startLineNumber = Math.max(
viewStartPosition.lineNumber,
viewportStartLineNumber
);
const startColumn = viewStartPosition.column;
const endLineNumber = Math.min(
viewEndPosition.lineNumber,
viewportEndLineNumber
);
const endColumn = viewEndPosition.column;
const result = [];
for (
let lineNumber = startLineNumber;
lineNumber <= endLineNumber;
++lineNumber
) {
const lineIndex = lineNumber - viewportStartLineNumber;
const viewLineRenderingData =
viewportData.getViewLineRenderingData(lineNumber);
if (lineNumber === startLineNumber && lineNumber === endLineNumber) {
const content = viewLineRenderingData.content.replace(/\s/g, '\xa0');
return (
);
}
if (lineNumber === startLineNumber) {
const content = viewLineRenderingData.content.replace(/\s/g, '\xa0');
// return (
//
// );
result.push(
);
}
if (startLineNumber < lineNumber && lineNumber < endLineNumber) {
const content = viewLineRenderingData.content.replace(/\s/g, '\xa0');
// return (
//
// );
result.push(
);
}
if (lineNumber === endLineNumber) {
const content = viewLineRenderingData.content.replace(/\s/g, '\xa0');
// return (
//
// );
result.push(
);
}
}
return result;
return <>>;
}, [selection, ctx, lineHeight]);
if (!ctx) {
return <>>;
}
const height = Math.min(ctx.scrollHeight, 1000000);
const width = ctx.scrollWidth;
const style: CSSProperties = {
height: `${height}px`,
width: `${width}px`,
position: 'absolute',
};
return {viewSelection}
;
};