UNPKG

kinetic-slider

Version:

A WebGL-powered kinetic slider component using PIXI.js

91 lines (87 loc) 2.88 kB
'use strict'; var pixiFilters = require('pixi-filters'); var ShaderResourceManager = require('../managers/ShaderResourceManager.cjs'); function createBulgePinchFilter(config) { const shaderManager = ShaderResourceManager.ShaderResourceManager.getInstance(); const options = { radius: config.radius ?? 100, strength: config.strength ?? 1 }; if (config.center) { options.center = config.center; } else { options.center = { x: 0.5, y: 0.5 }; } const centerX = options.center.x.toFixed(2); const centerY = options.center.y.toFixed(2); const shaderKey = `bulge-pinch-filter-r${options.radius}-s${options.strength}-c${centerX},${centerY}`; const filter = new pixiFilters.BulgePinchFilter(options); try { shaderManager.registerFilter(filter, shaderKey); } catch (error) { console.warn("Error registering bulge pinch filter with shader manager:", error); } const updateIntensity = (intensity) => { const normalizedIntensity = Math.max(0, Math.min(10, intensity)); if (config.primaryProperty) { switch (config.primaryProperty) { case "strength": if (config.allowPinch) { filter.strength = (normalizedIntensity - 5) / 5; } else { filter.strength = normalizedIntensity / 10; } break; case "radius": filter.radius = 10 + normalizedIntensity * 19; break; case "centerX": filter.center.x = normalizedIntensity / 10; break; case "centerY": filter.center.y = normalizedIntensity / 10; break; default: if (config.allowPinch) { filter.strength = (normalizedIntensity - 5) / 5; } else { filter.strength = normalizedIntensity / 10; } } } else { if (config.allowPinch) { filter.strength = (normalizedIntensity - 5) / 5; } else { filter.strength = normalizedIntensity / 10; } } }; updateIntensity(config.intensity); const reset = () => { if (config.center !== void 0) { filter.center = config.center; } else { filter.center = { x: 0.5, y: 0.5 }; } filter.radius = config.radius !== void 0 ? config.radius : 100; if (config.strength !== void 0) { filter.strength = config.strength; } else if (config.intensity === void 0) { filter.strength = 0; } if (config.intensity !== void 0) { updateIntensity(config.intensity); } }; const dispose = () => { try { shaderManager.releaseFilter(filter, shaderKey); } catch (error) { console.warn("Error releasing bulge pinch filter shader:", error); } filter.destroy(); }; return { filter, updateIntensity, reset, dispose }; } exports.createBulgePinchFilter = createBulgePinchFilter; //# sourceMappingURL=bulgePinchFilter.cjs.map