diff --git a/src/daemon.rs b/src/daemon.rs index de61b2c..c05baeb 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -456,11 +456,35 @@ async fn run_daemon_async() -> Result<(), Box Result<(), Box Result<(), Box { + let was_effective = replay_effective; + replay_effective = effective_replay_active(&config); + replay_state_clone.store(replay_effective, Ordering::SeqCst); + if !replay_effective && (was_effective || !on_ac) { + while ring.try_pop().is_some() {} + eprintln!("Power lost: replay buffer paused and drained."); + if config.autostart_power_only && config.show_replay_notifications { + spawn_power_toast("POWER", "power lost, replay paused", "error"); + } + } else if replay_effective && !was_effective { + encoder.force_keyframe(); + has_new_frame = true; + println!("Power restored: replay buffer resumed."); + if config.show_replay_notifications { + spawn_power_toast("POWER", "power restored, replay resumed", "replay"); + } + } + }, Command::SaveReplay => { if replay_effective { let now = std::time::Instant::now(); @@ -1028,18 +1070,6 @@ async fn run_daemon_async() -> Result<(), Box accent, }; - // 1. Deep window drop shadow - draw_window_shadow(painter, rect, 0.75 * anim_alpha); - - // 2. Obsidian panel fill (#111111, zero roundness, no outline) + // 1. Obsidian panel fill (#111111, zero roundness, no outline, no shadow bloom) painter.rect_filled( rect, CornerRadius::ZERO, @@ -3656,7 +3653,7 @@ fn render_scythe_notification_card( Color32::from_rgba_unmultiplied(active_color.r(), active_color.g(), active_color.b(), (255.0 * anim_alpha) as u8), ); - // 5. Square icon cell (28x28 recessed #0e0e0e, hairline #222222) + // 5. Square icon cell (28x28 recessed #0e0e0e, no outline) let badge_size = 28.0_f32; let badge_rect = egui::Rect::from_min_size( egui::pos2(rect.left() + 26.0, rect.top() + 14.0), @@ -3667,12 +3664,6 @@ fn render_scythe_notification_card( CornerRadius::ZERO, Color32::from_rgba_unmultiplied(14, 14, 14, (255.0 * anim_alpha) as u8), ); - painter.rect_stroke( - badge_rect, - CornerRadius::ZERO, - Stroke::new(1.0_f32, Color32::from_rgba_unmultiplied(34, 34, 34, (220.0 * anim_alpha) as u8)), - egui::StrokeKind::Inside, - ); // 6. Icon render inside badge let icon_center = badge_rect.center();