From 79aa51a21ca8e2b292a07c872885996a8fa359af Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Tue, 16 Sep 2025 15:07:00 +0200 Subject: [PATCH] Refactor display dimension calculations in VideoEditor This commit simplifies the calculation of display dimensions by utilizing the transformed display frame directly, eliminating redundant width and height calculations based on rotation and crop. It enhances the overall efficiency of the display handling process, ensuring accurate scaling and improved performance during video editing. --- croppa/main.py | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/croppa/main.py b/croppa/main.py index 90784f3..a01f4bb 100644 --- a/croppa/main.py +++ b/croppa/main.py @@ -2252,6 +2252,12 @@ class VideoEditor: if self.current_display_frame is None: return None + # Use the same approach as screen_to_video_coords but in reverse + # First, apply the same transformations as the frame + display_frame = self.apply_crop_zoom_and_rotation(self.current_display_frame.copy()) + if display_frame is None: + return None + # Get the original frame dimensions original_height, original_width = self.current_display_frame.shape[:2] available_height = self.window_height - (0 if self.is_image_mode else self.TIMELINE_HEIGHT) @@ -2294,24 +2300,7 @@ class VideoEditor: display_y *= self.zoom_factor # Step 4: Calculate final display dimensions and scale - if self.rotation_angle in [90, 270]: - # Width and height are swapped after rotation - display_width = int(original_height * self.zoom_factor) - display_height = int(original_width * self.zoom_factor) - else: - display_width = int(original_width * self.zoom_factor) - display_height = int(original_height * self.zoom_factor) - - # Apply crop dimensions if there's a crop - if self.crop_rect: - if self.rotation_angle in [90, 270]: - display_width = int(self.crop_rect[3] * self.zoom_factor) # crop height - display_height = int(self.crop_rect[2] * self.zoom_factor) # crop width - else: - display_width = int(self.crop_rect[2] * self.zoom_factor) # crop width - display_height = int(self.crop_rect[3] * self.zoom_factor) # crop height - - # Calculate scale for the display frame + display_height, display_width = display_frame.shape[:2] scale = min(self.window_width / display_width, available_height / display_height) if scale < 1.0: final_display_width = int(display_width * scale)