From 0c3e5e21bf07fe7550dee669e1ffda95430e0bd7 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Fri, 19 Sep 2025 07:14:41 +0200 Subject: [PATCH] Increase window dimensions in ProjectView and VideoEditor to accommodate 1080p videos. Adjust resizing logic to maintain original video quality by resizing the window instead of downscaling the video. Ensure frames fit within canvas bounds for better display. --- croppa/main.py | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/croppa/main.py b/croppa/main.py index 8a7d86e..ab0718f 100644 --- a/croppa/main.py +++ b/croppa/main.py @@ -109,8 +109,8 @@ class ProjectView: self.selected_index = 0 self.scroll_offset = 0 self.items_per_row = 2 # Default to 2 items per row - self.window_width = 1200 - self.window_height = 800 + self.window_width = 1920 # Increased to accommodate 1080p videos + self.window_height = 1200 self._load_video_files() self._load_progress_data() @@ -511,8 +511,8 @@ class VideoEditor: # Mouse and keyboard interaction self.mouse_dragging = False self.timeline_rect = None - self.window_width = 1200 - self.window_height = 800 + self.window_width = 1920 # Increased to accommodate 1080p videos + self.window_height = 1200 # Auto-repeat seeking state self.auto_repeat_active = False @@ -1872,23 +1872,39 @@ class VideoEditor: height, width = display_frame.shape[:2] available_height = self.window_height - (0 if self.is_image_mode else self.TIMELINE_HEIGHT) + # Don't downscale - keep original video quality + # If video is larger than window, we'll handle it by resizing the window scale = min(self.window_width / width, available_height / height) if scale < 1.0: - new_width = int(width * scale) - new_height = int(height * scale) - display_frame = cv2.resize(display_frame, (new_width, new_height)) + # Resize window to fit video instead of downscaling video + new_window_width = int(width * 1.1) # Add 10% padding + new_window_height = int(height * 1.1) + (0 if self.is_image_mode else self.TIMELINE_HEIGHT) + + # Update window size + self.window_width = new_window_width + self.window_height = new_window_height + + # Resize the OpenCV window + window_title = "Image Editor" if self.is_image_mode else "Video Editor" + cv2.resizeWindow(window_title, self.window_width, self.window_height) # Create canvas with timeline space canvas = np.zeros((self.window_height, self.window_width, 3), dtype=np.uint8) # Center the frame on canvas frame_height, frame_width = display_frame.shape[:2] + available_height = self.window_height - (0 if self.is_image_mode else self.TIMELINE_HEIGHT) start_y = (available_height - frame_height) // 2 start_x = (self.window_width - frame_width) // 2 - canvas[start_y : start_y + frame_height, start_x : start_x + frame_width] = ( - display_frame - ) + # Ensure frame fits within canvas bounds + end_y = min(start_y + frame_height, available_height) + end_x = min(start_x + frame_width, self.window_width) + actual_frame_height = end_y - start_y + actual_frame_width = end_x - start_x + + if actual_frame_height > 0 and actual_frame_width > 0: + canvas[start_y:end_y, start_x:end_x] = display_frame[:actual_frame_height, :actual_frame_width] # Draw crop selection preview during Shift+Click+Drag if self.crop_preview_rect: