summaryrefslogtreecommitdiffstats
path: root/macosx/NSWindow+HBAdditions.m
diff options
context:
space:
mode:
Diffstat (limited to 'macosx/NSWindow+HBAdditions.m')
-rw-r--r--macosx/NSWindow+HBAdditions.m79
1 files changed, 79 insertions, 0 deletions
diff --git a/macosx/NSWindow+HBAdditions.m b/macosx/NSWindow+HBAdditions.m
new file mode 100644
index 000000000..2951d7a1f
--- /dev/null
+++ b/macosx/NSWindow+HBAdditions.m
@@ -0,0 +1,79 @@
+//
+// NSWindow+HBAdditions.m
+// HandBrake
+//
+// Created by Damiano Galassi on 25/04/16.
+//
+//
+
+#import "NSWindow+HBAdditions.h"
+
+@implementation NSWindow (HBAdditions)
+
+- (void)HB_resizeToBestSizeForViewSize:(NSSize)viewSize center:(NSPoint)center animate:(BOOL)animateFlag
+{
+ NSSize currentSize = self.contentView.frame.size;
+ NSRect frame = self.frame;
+
+ // Calculate border around content region of the frame
+ int borderX = (int)(frame.size.width - currentSize.width);
+ int borderY = (int)(frame.size.height - currentSize.height);
+
+ // Make sure the frame is smaller than the screen
+ NSSize maxSize = self.screen.visibleFrame.size;
+
+ // if we are not Scale To Screen, put an 10% of visible screen on the window
+ maxSize.width = maxSize.width * 0.90;
+ maxSize.height = maxSize.height * 0.90;
+
+ // Set the new frame size
+ // Add the border to the new frame size so that the content region
+ // of the frame is large enough to accomodate the preview image
+ frame.size.width = viewSize.width + borderX;
+ frame.size.height = viewSize.height + borderY;
+
+ // compare frame to max size of screen
+ if (frame.size.width > maxSize.width)
+ {
+ frame.size.width = maxSize.width;
+ }
+ if (frame.size.height > maxSize.height)
+ {
+ frame.size.height = maxSize.height;
+ }
+
+ // Since upon launch we can open up the preview window if it was open
+ // the last time we quit (and at the size it was) we want to make
+ // sure that upon resize we do not have the window off the screen
+ // So check the origin against the screen origin and adjust if
+ // necessary.
+ NSSize screenSize = self.screen.visibleFrame.size;
+ NSPoint screenOrigin = self.screen.visibleFrame.origin;
+
+ frame.origin.x = center.x - floor(frame.size.width / 2);
+ frame.origin.y = center.y - floor(frame.size.height / 2);
+
+ // our origin is off the screen to the left
+ if (frame.origin.x < screenOrigin.x)
+ {
+ // so shift our origin to the right
+ frame.origin.x = screenOrigin.x;
+ }
+ else if ((frame.origin.x + frame.size.width) > (screenOrigin.x + screenSize.width))
+ {
+ // the right side of the preview is off the screen, so shift to the left
+ frame.origin.x = (screenOrigin.x + screenSize.width) - frame.size.width;
+ }
+
+ [self setFrame:frame display:YES animate:animateFlag];
+}
+
+- (NSPoint)HB_centerPoint
+{
+ NSPoint center = NSMakePoint(floor(self.frame.origin.x + self.frame.size.width / 2),
+ floor(self.frame.origin.y + self.frame.size.height / 2));
+ return center;
+}
+
+
+@end