diff --git a/widgets/customrevealer.py b/widgets/customrevealer.py index bf47e52..d6de04b 100644 --- a/widgets/customrevealer.py +++ b/widgets/customrevealer.py @@ -25,7 +25,6 @@ class AnimationManager: # Use 120 FPS for ultra-smooth animations like macOS self._timer_id = GLib.timeout_add(8, self._animate_all) # 120 FPS - def remove_widget(self, widget): self._animating_widgets.discard(widget) if not self._animating_widgets and self._timer_id: @@ -40,7 +39,7 @@ class AnimationManager: self._containers_to_redraw.clear() widgets_to_remove = [] - + # Process all animations in a single frame for widget in list(self._animating_widgets): if not widget._calculate_position(): @@ -72,7 +71,6 @@ class AnimationManager: """Keep consistent 120 FPS for macOS-like smoothness""" return 8 # 120 FPS - def _start_timer(self): interval = self._get_optimal_interval() self._timer_id = GLib.timeout_add(interval, self._animate_all) @@ -84,35 +82,35 @@ class AnimationManager: class MacOSEasing: """macOS-style easing functions for natural motion""" - + @staticmethod def ease_out_expo(t): """Exponential ease out - fast start, slow end""" return 1 - math.pow(2, -10 * t) if t != 1 else 1 - + @staticmethod def ease_in_out_quart(t): """Quartic ease in-out for smooth acceleration/deceleration""" return 8 * t * t * t * t if t < 0.5 else 1 - math.pow(-2 * t + 2, 4) / 2 - + @staticmethod def ease_out_back(t): """Back ease out for slight overshoot effect""" c1 = 1.70158 c3 = c1 + 1 return 1 + c3 * math.pow(t - 1, 3) + c1 * math.pow(t - 1, 2) - + @staticmethod def ease_out_cubic_bezier(t): """Custom cubic bezier similar to macOS default (0.25, 0.1, 0.25, 1.0)""" # Approximation of cubic-bezier(0.25, 0.1, 0.25, 1.0) return t * t * t * (t * (6 * t - 15) + 10) - + @staticmethod def ease_in_cubic(t): """Cubic ease in for smooth acceleration""" return t * t * t - + @staticmethod def ease_out_quint(t): """Quintic ease out for very smooth deceleration""" @@ -177,6 +175,7 @@ class SlideRevealer(Gtk.Overlay): def on_realize(*_): self._start_animation(show=True) self.disconnect_by_func(on_realize) + self.connect("realize", on_realize) def hide(self): @@ -317,4 +316,4 @@ class SlideRevealer(Gtk.Overlay): def destroy(self): self.stop_animation() - super().destroy() \ No newline at end of file + super().destroy()