import { RevPoint, RevSchemaField } from '../../../common'; import { RevLinedHoverCell } from '../../interfaces/lined-hover-cell'; import { RevViewCell } from '../../interfaces/view-cell'; import { RevBehavioredColumnSettings, RevBehavioredGridSettings, RevGridSettings } from '../../settings'; import { RevUiController } from './ui-controller'; /** @internal */ export class RevHoverUiController extends RevUiController { readonly typeName = RevHoverUiController.typeName; override handlePointerMove(event: PointerEvent, hoverCell: RevLinedHoverCell | null | undefined) { const canvasOffsetPoint: RevPoint = { x: event.offsetX, y: event.offsetY, }; if (hoverCell === null) { hoverCell = this.tryGetHoverCellFromMouseEvent(event); } const viewCell = this.getViewCellFromHoverCell(hoverCell); this._mouse.setMouseCanvasOffset(canvasOffsetPoint, viewCell); if (RevGridSettings.isShowScrollerThumbOnMouseMoveModifierKeyDownInEvent(this._gridSettings, event)) { this._horizontalScroller.temporarilyGiveThumbFullVisibility(RevHoverUiController.temporaryThumbFullVisibilityTimePeriod); this._verticalScroller.temporarilyGiveThumbFullVisibility(RevHoverUiController.temporaryThumbFullVisibilityTimePeriod); } return super.handlePointerMove(event, hoverCell); } override handlePointerEnter(event: PointerEvent, hoverCell: RevLinedHoverCell | null | undefined) { const canvasOffsetPoint: RevPoint = { x: event.offsetX, y: event.offsetY, }; if (hoverCell === null) { hoverCell = this.tryGetHoverCellFromMouseEvent(event); } const viewCell = this.getViewCellFromHoverCell(hoverCell); this._mouse.setMouseCanvasOffset(canvasOffsetPoint, viewCell); return super.handlePointerEnter(event, hoverCell); } override handlePointerLeaveOut(event: PointerEvent, cell: RevLinedHoverCell | null | undefined) { this._mouse.setMouseCanvasOffset(undefined, undefined); return super.handlePointerLeaveOut(event, cell); } private getViewCellFromHoverCell(cell: RevLinedHoverCell | undefined): RevViewCell | undefined { if (cell === undefined) { return undefined; } else { if (RevLinedHoverCell.isMouseOverLine(cell)) { return undefined; } else { return cell.viewCell; } } } } /** @internal */ export namespace RevHoverUiController { export const typeName = 'hover'; export const temporaryThumbFullVisibilityTimePeriod = 500; // milliseconds }