Apply all UI settings to the wave effects and return button states
| 263 | |
| 264 | // Apply all UI settings to the wave effects and return button states |
| 265 | ui_state ui() { |
| 266 | // Set the easing function based on the checkbox |
| 267 | // Easing controls how wave heights are calculated: |
| 268 | // - LINEAR: Simple linear mapping (sharper waves) |
| 269 | // - SQRT: Square root mapping (more natural, rounded waves) |
| 270 | fl::U8EasingFunction easeMode = easeModeSqrt |
| 271 | ? fl::U8EasingFunction::WAVE_U8_MODE_SQRT |
| 272 | : fl::U8EasingFunction::WAVE_U8_MODE_LINEAR; |
| 273 | |
| 274 | // Apply all settings from UI controls to the lower wave layer |
| 275 | waveFxLower.setSpeed(speedLower); // Wave propagation speed |
| 276 | waveFxLower.setDampening(dampeningLower); // How quickly waves lose energy |
| 277 | waveFxLower.setHalfDuplex(halfDuplexLower); // Whether waves can go negative |
| 278 | waveFxLower.setSuperSample(getSuperSample()); // Anti-aliasing quality |
| 279 | // Apply after setSuperSample() so the user's choice survives the |
| 280 | // wrapper's multiplier-based auto-select for the stencil. |
| 281 | waveFxLower.setStencil(isotropicStencilLower |
| 282 | ? fl::LaplacianStencil::NinePointIsotropic |
| 283 | : fl::LaplacianStencil::FivePoint); |
| 284 | waveFxLower.setEasingMode(easeMode); // Wave height calculation method |
| 285 | waveFxLower.setUseChangeGrid(useChangeGrid); // Performance optimization vs visual quality |
| 286 | |
| 287 | // Apply all settings from UI controls to the upper wave layer |
| 288 | waveFxUpper.setSpeed(speedUpper); // Wave propagation speed |
| 289 | waveFxUpper.setDampening(dampeningUpper); // How quickly waves lose energy |
| 290 | waveFxUpper.setHalfDuplex(halfDuplexUpper); // Whether waves can go negative |
| 291 | waveFxUpper.setSuperSample(getSuperSample()); // Anti-aliasing quality |
| 292 | waveFxUpper.setStencil(isotropicStencilUpper |
| 293 | ? fl::LaplacianStencil::NinePointIsotropic |
| 294 | : fl::LaplacianStencil::FivePoint); |
| 295 | waveFxUpper.setEasingMode(easeMode); // Wave height calculation method |
| 296 | waveFxUpper.setUseChangeGrid(useChangeGrid); // Performance optimization vs visual quality |
| 297 | |
| 298 | // Apply global blur settings to the blender |
| 299 | fxBlend.setGlobalBlurAmount(blurAmount); // Overall blur strength |
| 300 | fxBlend.setGlobalBlurPasses(blurPasses); // Number of blur passes |
| 301 | |
| 302 | // Create parameter structures for each wave layer's blur settings |
| 303 | fl::Blend2dParams lower_params; |
| 304 | lower_params.blur_amount = blurAmountLower; // Blur amount for lower layer |
| 305 | lower_params.blur_passes = blurPassesLower; // Blur passes for lower layer |
| 306 | |
| 307 | fl::Blend2dParams upper_params; |
| 308 | upper_params.blur_amount = blurAmountUpper; // Blur amount for upper layer |
| 309 | upper_params.blur_passes = blurPassesUpper; // Blur passes for upper layer |
| 310 | |
| 311 | // Apply the layer-specific blur parameters |
| 312 | fxBlend.setParams(waveFxLower, lower_params); |
| 313 | fxBlend.setParams(waveFxUpper, upper_params); |
| 314 | |
| 315 | // Return the current state of the UI buttons |
| 316 | ui_state state; |
| 317 | state.button = button; // Regular ripple button |
| 318 | state.bigButton = buttonFancy; // Fancy effect button |
| 319 | return state; |
| 320 | } |
| 321 | |
| 322 | // Handle automatic triggering of ripples at random intervals |
no test coverage detected