kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
91 lines (87 loc) • 2.88 kB
JavaScript
;
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