From 7ed923d08c57ee4501cb0ab0c1ba565fb3685410 Mon Sep 17 00:00:00 2001 From: Nikolas Mayr Date: Tue, 22 Nov 2022 22:07:21 +0100 Subject: [PATCH 1/7] Added zoom factors --- Uberlayer/Classes/ULAppDelegate.m | 38 ++++++++++++++--------- Uberlayer/Uberlayer-Info.plist | 4 +-- Uberlayer/en.lproj/MainMenu.xib | 51 +++++++++++++++++++++++-------- 3 files changed, 64 insertions(+), 29 deletions(-) diff --git a/Uberlayer/Classes/ULAppDelegate.m b/Uberlayer/Classes/ULAppDelegate.m index 2e242ef..01d36a3 100644 --- a/Uberlayer/Classes/ULAppDelegate.m +++ b/Uberlayer/Classes/ULAppDelegate.m @@ -423,20 +423,28 @@ - (IBAction)didSetTransparent:(id)sender [self setAlphaWindows:0]; } -- (IBAction)didClickHalfSize:(id)sender -{ - - [self setImageSize:NSMakeSize(loadedImageSize.width / 2, loadedImageSize.height / 2)]; -} - -- (IBAction)didClickActualSize:(id)sender -{ - [self setImageSize:NSMakeSize(loadedImageSize.width, loadedImageSize.height)]; -} - -- (IBAction)didClickDoubleSize:(id)sender -{ - [self setImageSize:NSMakeSize(loadedImageSize.width * 2, loadedImageSize.height * 2)]; +// necessary screen resolutions +// throw into haskell interpreter like ghc's ghci +// let pointAccurate imageScale = 1/imageScale +// let pixelAccurate imageScale screenScale simScale = (simScale/screenScale)/imageScale +// let necessaryResolutions = nub . sort . concat $ [ [pointAccurate imageScale, pixelAccurate imageScale screenScale simScale] | imageScale <- [1,2,3], screenScale <- [1,2], simScale <- [2,3]] +// necessaryResolutions +// [0.3333333333333333,0.5,0.6666666666666666,0.75,1.0,1.5,2.0,3.0] + +- (IBAction)didClickZoomLevel:(NSMenuItem *)sender +{ + NSDictionary *dictionary = @{ + @1: @(1./3.), + @2: @0.5, + @3: @(2./3.), + @4: @0.75, + @5: @1, + @6: @1.5, + @7: @2, + @8: @3 + }; + CGFloat scale = [dictionary objectForKey:@(sender.tag)].doubleValue; + [self setImageSize:NSMakeSize(loadedImageSize.width * scale, loadedImageSize.height * scale)]; } - (void)setImageSize:(NSSize)size @@ -526,4 +534,4 @@ - (void)moveWindowX:(float)x windowY:(float)y welcomeFrame.origin.x += x; [self.welcomeWindowController.window setFrame:welcomeFrame display:YES animate:YES]; } -@end \ No newline at end of file +@end diff --git a/Uberlayer/Uberlayer-Info.plist b/Uberlayer/Uberlayer-Info.plist index c0df061..a0dbcf7 100644 --- a/Uberlayer/Uberlayer-Info.plist +++ b/Uberlayer/Uberlayer-Info.plist @@ -40,11 +40,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.1 + 1.5.0 CFBundleSignature ???? CFBundleVersion - 99 + 100 DMAppId 4f5dfd4aa14ad732e0000000 LSApplicationCategoryType diff --git a/Uberlayer/en.lproj/MainMenu.xib b/Uberlayer/en.lproj/MainMenu.xib index 66cb81a..20b6608 100644 --- a/Uberlayer/en.lproj/MainMenu.xib +++ b/Uberlayer/en.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - - + + - - + + @@ -12,7 +12,7 @@ - + @@ -82,19 +82,44 @@ - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -218,6 +243,7 @@ + @@ -386,6 +412,7 @@ + - \ No newline at end of file + From fc0b43ca91db486a198a8342bbe804cbd8308fb9 Mon Sep 17 00:00:00 2001 From: Nikolas Mayr Date: Wed, 23 Nov 2022 20:34:06 +0100 Subject: [PATCH 2/7] opening image in logical resolution --- Uberlayer/Classes/ULAppDelegate.m | 2 +- .../NSImageQuickLook/NSImage+QuickLook.h | 2 +- .../NSImageQuickLook/NSImage+QuickLook.m | 17 ++++++++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/Uberlayer/Classes/ULAppDelegate.m b/Uberlayer/Classes/ULAppDelegate.m index 01d36a3..2fdc166 100644 --- a/Uberlayer/Classes/ULAppDelegate.m +++ b/Uberlayer/Classes/ULAppDelegate.m @@ -140,7 +140,7 @@ - (void)loadImage:(NSURL *)url NSError *error; - CGSize calculatedSize = [NSImage sizeOfImageAtURL:url error:&error]; + CGSize calculatedSize = [NSImage ptSizeOfImageAtURL:url error:&error]; NSString *currentFileExtension = [[url pathExtension] lowercaseString]; NSArray *regularImageExtensions = [NSArray arrayWithObjects:@"jpg", @"jpeg", @"png", nil]; diff --git a/Uberlayer/External/MattGemmell/NSImageQuickLook/NSImage+QuickLook.h b/Uberlayer/External/MattGemmell/NSImageQuickLook/NSImage+QuickLook.h index 6c43bf2..e287740 100644 --- a/Uberlayer/External/MattGemmell/NSImageQuickLook/NSImage+QuickLook.h +++ b/Uberlayer/External/MattGemmell/NSImageQuickLook/NSImage+QuickLook.h @@ -12,6 +12,6 @@ + (NSImage *)imageWithPreviewOfFileAtPath:(NSString *)path ofSize:(NSSize)size asIcon:(BOOL)icon; -+ (CGSize)sizeOfImageAtURL:(NSURL *)fileURL error:(NSError **)error; ++ (CGSize)ptSizeOfImageAtURL:(NSURL *)fileURL error:(NSError **)error; @end diff --git a/Uberlayer/External/MattGemmell/NSImageQuickLook/NSImage+QuickLook.m b/Uberlayer/External/MattGemmell/NSImageQuickLook/NSImage+QuickLook.m index 3a12aab..4b186e7 100644 --- a/Uberlayer/External/MattGemmell/NSImageQuickLook/NSImage+QuickLook.m +++ b/Uberlayer/External/MattGemmell/NSImageQuickLook/NSImage+QuickLook.m @@ -54,7 +54,7 @@ + (NSImage *)imageWithPreviewOfFileAtPath:(NSString *)path ofSize:(NSSize)size a return nil; } -+ (CGSize)sizeOfImageAtURL:(NSURL *)fileURL error:(NSError **)error ++ (CGSize)ptSizeOfImageAtURL:(NSURL *)fileURL error:(NSError **)error { NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:(__bridge NSString *) kCGImageSourceShouldCache]; @@ -69,8 +69,19 @@ + (CGSize)sizeOfImageAtURL:(NSURL *)fileURL error:(NSError **)error if (imageProperties) { - CGFloat width = [(__bridge NSNumber *) CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth) floatValue]; - CGFloat height = [(__bridge NSNumber *) CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight) floatValue]; + CGFloat width = [(__bridge NSNumber *) CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth) doubleValue]; + CGFloat height = [(__bridge NSNumber *) CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight) doubleValue]; + if (@available(macOS 10.13, *)) + { + CGFloat dpiWidth = [(__bridge NSNumber *) CFDictionaryGetValue(imageProperties, kCGImagePropertyDPIHeight) doubleValue]; + CGFloat dpiHeight = [(__bridge NSNumber *) CFDictionaryGetValue(imageProperties, kCGImagePropertyDPIWidth) doubleValue]; + + if (dpiWidth >= 1. && dpiHeight >= 1.) + { + width = width * 72. / dpiWidth; + height = height * 72. / dpiHeight; + } + } int rotation = [(__bridge NSNumber *) CFDictionaryGetValue(imageProperties, kCGImagePropertyOrientation) intValue]; From acdd93306f0a3ba97b39a0bd60922380c1278c1d Mon Sep 17 00:00:00 2001 From: Nikolas Mayr Date: Wed, 23 Nov 2022 23:02:31 +0100 Subject: [PATCH 3/7] fixed not closing window when opening another image via open dialog --- Uberlayer/Classes/ULAppDelegate.m | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Uberlayer/Classes/ULAppDelegate.m b/Uberlayer/Classes/ULAppDelegate.m index 2fdc166..dd5e088 100644 --- a/Uberlayer/Classes/ULAppDelegate.m +++ b/Uberlayer/Classes/ULAppDelegate.m @@ -49,14 +49,11 @@ @implementation ULAppDelegate - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - [self startApplication]; } - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename { - [self.imageWindowController.window close]; - NSURL *imageURL = [NSURL fileURLWithPath:filename]; [self loadImage:imageURL]; @@ -167,7 +164,6 @@ - (void)loadImage:(NSURL *)url - (void)showImage:(NSImage *)image { - [self.welcomeWindowController close]; NSRect oldRect = self.imageWindowController.window.frame; @@ -177,11 +173,16 @@ - (void)showImage:(NSImage *)image ULMouseDownCanMoveWindowImageView *imageView = [[ULMouseDownCanMoveWindowImageView alloc] initWithFrame:imageFrame]; imageView.image = image; + [self.imageWindowController.window close]; self.imageWindowController = [[ULImageWindowController alloc] initWithWindowNibName:@"ULImageWindowController"]; [self.imageWindowController.window.contentView addSubview:imageView]; - NSRect newFrame = NSMakeRect(oldRect.origin.x, oldRect.origin.y + (oldRect.size.height - imageFrame.size.height), imageFrame.size.width, imageFrame.size.height); + NSRect newFrame = NSMakeRect(oldRect.origin.x, + oldRect.origin.y + (oldRect.size.height - imageFrame.size.height), + imageFrame.size.width, + imageFrame.size.height + ); loadedImageSize = newFrame.size; From c4b5b4fc09a70efa2c6c0e5df8c3bc0b71e25bf5 Mon Sep 17 00:00:00 2001 From: Nikolas Mayr Date: Wed, 23 Nov 2022 23:33:51 +0100 Subject: [PATCH 4/7] removed unnecessary variables --- Uberlayer/Classes/ULAppDelegate.m | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Uberlayer/Classes/ULAppDelegate.m b/Uberlayer/Classes/ULAppDelegate.m index dd5e088..feca79e 100644 --- a/Uberlayer/Classes/ULAppDelegate.m +++ b/Uberlayer/Classes/ULAppDelegate.m @@ -167,10 +167,9 @@ - (void)showImage:(NSImage *)image [self.welcomeWindowController close]; NSRect oldRect = self.imageWindowController.window.frame; - NSSize imageSize = [image size]; - NSRect imageFrame = NSMakeRect(0, 0, imageSize.width, imageSize.height); + loadedImageSize = [image size]; - ULMouseDownCanMoveWindowImageView *imageView = [[ULMouseDownCanMoveWindowImageView alloc] initWithFrame:imageFrame]; + ULMouseDownCanMoveWindowImageView *imageView = [[ULMouseDownCanMoveWindowImageView alloc] initWithFrame:NSMakeRect(0, 0, loadedImageSize.width, loadedImageSize.height)]; imageView.image = image; [self.imageWindowController.window close]; @@ -179,9 +178,9 @@ - (void)showImage:(NSImage *)image [self.imageWindowController.window.contentView addSubview:imageView]; NSRect newFrame = NSMakeRect(oldRect.origin.x, - oldRect.origin.y + (oldRect.size.height - imageFrame.size.height), - imageFrame.size.width, - imageFrame.size.height + oldRect.origin.y + (oldRect.size.height - loadedImageSize.height), + loadedImageSize.width, + loadedImageSize.height ); loadedImageSize = newFrame.size; From 9567af287f6ed17b0506ba3812111103a841c88a Mon Sep 17 00:00:00 2001 From: Nikolas Mayr Date: Wed, 23 Nov 2022 23:34:02 +0100 Subject: [PATCH 5/7] fixed checking if a window is new --- Uberlayer/Classes/ULAppDelegate.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Uberlayer/Classes/ULAppDelegate.m b/Uberlayer/Classes/ULAppDelegate.m index feca79e..17d376d 100644 --- a/Uberlayer/Classes/ULAppDelegate.m +++ b/Uberlayer/Classes/ULAppDelegate.m @@ -195,7 +195,7 @@ - (void)showImage:(NSImage *)image // if this is the first window, put it in the center - if ((oldRect.origin.x == 0.0 && oldRect.origin.y == 0)) + if (oldRect.origin.x == 0.0 && oldRect.origin.y == 0 && oldRect.size.width == 0 && oldRect.size.height == 0) { [self.imageWindowController.window center]; } From cb7a6fcb2b029ffc732697000679c04c5efa709c Mon Sep 17 00:00:00 2001 From: Nikolas Mayr Date: Wed, 23 Nov 2022 23:34:20 +0100 Subject: [PATCH 6/7] forgot this = --- Uberlayer/Classes/ULAppDelegate.m | 2 -- 1 file changed, 2 deletions(-) diff --git a/Uberlayer/Classes/ULAppDelegate.m b/Uberlayer/Classes/ULAppDelegate.m index 17d376d..394b335 100644 --- a/Uberlayer/Classes/ULAppDelegate.m +++ b/Uberlayer/Classes/ULAppDelegate.m @@ -183,8 +183,6 @@ - (void)showImage:(NSImage *)image loadedImageSize.height ); - loadedImageSize = newFrame.size; - // if a window less than 0 on the x scale, put in back on the screen if (!NSPointInRect(newFrame.origin, self.imageWindowController.window.screen.frame)) { From ef2d089bc6d1fa2ef028c94a35cb210376062d36 Mon Sep 17 00:00:00 2001 From: Nikolas Mayr Date: Wed, 23 Nov 2022 23:35:20 +0100 Subject: [PATCH 7/7] fixed resetting window positions for windows that are initially offscreen because of smaller image size of newly loaded image --- Uberlayer/Classes/ULAppDelegate.m | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Uberlayer/Classes/ULAppDelegate.m b/Uberlayer/Classes/ULAppDelegate.m index 394b335..0a596c6 100644 --- a/Uberlayer/Classes/ULAppDelegate.m +++ b/Uberlayer/Classes/ULAppDelegate.m @@ -183,10 +183,12 @@ - (void)showImage:(NSImage *)image loadedImageSize.height ); - // if a window less than 0 on the x scale, put in back on the screen - if (!NSPointInRect(newFrame.origin, self.imageWindowController.window.screen.frame)) + // if a window is outside visible range, put in back on the screen + // this happens if the top left corner of the previous window is moved off screen + // and the new window is smaller than the old window + if (newFrame.origin.x + newFrame.size.width < 10) { - newFrame.origin.x = 1; + newFrame.origin.x = 0; } [self.imageWindowController.window setFrame:newFrame display:YES];