UNPKG

wave-roll

Version:

JavaScript Library for Comparative MIDI Piano-Roll Visualization

53 lines 2.26 kB
/** * Rendering optimization utilities for viewport culling and performance */ import type { Rectangle } from './drawing-primitives'; /** * Render optimization helper class */ export declare class RenderOptimizer { /** * Check if an element should be rendered based on viewport bounds */ static shouldRenderElement(elementBounds: Rectangle, viewportBounds: Rectangle, margin?: number): boolean; /** * Check if a point is within viewport */ static isPointInViewport(x: number, y: number, viewportBounds: Rectangle, margin?: number): boolean; /** * Iterate over items with viewport culling */ static culledForEach<T>(items: T[], viewportBounds: Rectangle, getBounds: (item: T) => Rectangle, callback: (item: T, index: number) => void, margin?: number): void; /** * Filter items based on viewport visibility */ static filterVisible<T>(items: T[], viewportBounds: Rectangle, getBounds: (item: T) => Rectangle, margin?: number): T[]; /** * Get indices of visible items */ static getVisibleIndices<T>(items: T[], viewportBounds: Rectangle, getBounds: (item: T) => Rectangle, margin?: number): number[]; /** * Binary search for first visible item (assumes items are sorted by position) */ static findFirstVisible<T>(items: T[], viewportStart: number, getPosition: (item: T) => number, margin?: number): number; /** * Binary search for last visible item (assumes items are sorted by position) */ static findLastVisible<T>(items: T[], viewportEnd: number, getPosition: (item: T) => number, margin?: number): number; /** * Get visible range using binary search (for sorted items) */ static getVisibleRange<T>(items: T[], viewportStart: number, viewportEnd: number, getPosition: (item: T) => number, margin?: number): { start: number; end: number; }; /** * Check if rendering should be skipped based on zoom level */ static shouldSkipDetailAtZoom(zoomLevel: number, minZoomForDetail?: number): boolean; /** * Calculate level of detail based on zoom */ static getLevelOfDetail(zoomLevel: number): 'low' | 'medium' | 'high'; } //# sourceMappingURL=render-optimizer.d.ts.map