wave-roll
Version:
JavaScript Library for Comparative MIDI Piano-Roll Visualization
53 lines • 2.26 kB
TypeScript
/**
* 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