use crate::core::{Color, Rect};
use crate::render::{RenderCommand, RenderContext};
use crate::style::MenuEffects;
#[cfg(test)]
thread_local! {
static TEST_EFFECTS: core::cell::Cell<Option<MenuEffects>> = const { core::cell::Cell::new(None) };
}
#[cfg(test)]
pub(crate) fn with_test_effects<R>(effects: MenuEffects, f: impl FnOnce() -> R) -> R {
let previous = TEST_EFFECTS.with(|cell| cell.replace(Some(effects)));
let result = f();
TEST_EFFECTS.with(|cell| cell.set(previous));
result
}
pub(crate) fn current() -> MenuEffects {
#[cfg(test)]
if let Some(effects) = TEST_EFFECTS.with(|cell| cell.get()) {
return effects;
}
#[cfg(feature = "advanced-widgets")]
{
crate::menu_config::current_effects()
}
#[cfg(not(feature = "advanced-widgets"))]
{
MenuEffects::legacy()
}
}
pub(crate) fn paint_popup_shadow(context: &mut RenderContext, rect: Rect, effects: &MenuEffects) {
let blur_radius = if effects.blur {
12
} else if effects.hardware_acceleration {
6
} else {
0
};
context.execute_command(RenderCommand::BoxShadow {
rect,
color: Color::rgba(0, 0, 0, 120),
offset_x: 0,
offset_y: 3,
blur_radius,
spread: 0,
});
}