Revision: 2633 http://skim-app.svn.sourceforge.net/skim-app/?rev=2633&view=rev Author: hofman Date: 2007-08-09 08:30:11 -0700 (Thu, 09 Aug 2007)
Log Message: ----------- Automatically fit new snapshot that were created from an explicit selection. Keep autoscales/fits in reverted snapshots. Modified Paths: -------------- trunk/BDSKZoomablePDFView.h trunk/BDSKZoomablePDFView.m trunk/SKMainWindowController.h trunk/SKMainWindowController.m trunk/SKPDFView.m trunk/SKSnapshotWindowController.h trunk/SKSnapshotWindowController.m Modified: trunk/BDSKZoomablePDFView.h =================================================================== --- trunk/BDSKZoomablePDFView.h 2007-08-09 14:36:05 UTC (rev 2632) +++ trunk/BDSKZoomablePDFView.h 2007-08-09 15:30:11 UTC (rev 2633) @@ -58,5 +58,6 @@ - (void)setScrollerSize:(NSControlSize)controlSize; - (void)dragWithEvent:(NSEvent *)theEvent; - (void)handlePDFViewFrameChangedNotification:(NSNotification *)notification; +- (void)resetFitRectIfNeeded; @end Modified: trunk/BDSKZoomablePDFView.m =================================================================== --- trunk/BDSKZoomablePDFView.m 2007-08-09 14:36:05 UTC (rev 2632) +++ trunk/BDSKZoomablePDFView.m 2007-08-09 15:30:11 UTC (rev 2633) @@ -175,6 +175,14 @@ } } +- (void)resetFitRectIfNeeded { + if ([self fits]) { + NSView *clipView = [[[self documentView] enclosingScrollView] contentView]; + page = [self currentPage]; + fitRect = [self convertRect:[self convertRect:[clipView visibleRect] fromView:clipView] toPage:page]; + } +} + - (void)scalePopUpAction:(id)sender { int index = [sender indexOfSelectedItem]; NSNumber *selectedFactorObject = [[sender selectedCell] representedObject]; @@ -198,10 +206,8 @@ if (fits != newFits) { fits = newFits; if (fits) { - NSView *clipView = [[[self documentView] enclosingScrollView] contentView]; - page = [self currentPage]; - fitRect = [self convertRect:[self convertRect:[clipView visibleRect] fromView:clipView] toPage:page]; [self setAutoScales:NO adjustPopup:NO]; + [self resetFitRectIfNeeded]; if (flag) [scalePopUpButton selectItemAtIndex:0]; } else { @@ -259,9 +265,7 @@ - (IBAction)zoomIn:(id)sender{ if([self fits]){ [super zoomIn:sender]; - NSView *clipView = [[[self documentView] enclosingScrollView] contentView]; - page = [self currentPage]; - fitRect = [self convertRect:[self convertRect:[clipView visibleRect] fromView:clipView] toPage:page]; + [self resetFitRectIfNeeded]; }else if([self autoScales]){ [super zoomIn:sender]; }else{ @@ -279,9 +283,7 @@ - (IBAction)zoomOut:(id)sender{ if([self fits]){ [super zoomOut:sender]; - NSView *clipView = [[[self documentView] enclosingScrollView] contentView]; - page = [self currentPage]; - fitRect = [self convertRect:[self convertRect:[clipView visibleRect] fromView:clipView] toPage:page]; + [self resetFitRectIfNeeded]; }else if([self autoScales]){ [super zoomOut:sender]; }else{ @@ -320,6 +322,16 @@ return cnt > 0; } +- (void)goToPage:(PDFPage *)aPage { + [super goToPage:aPage]; + [self resetFitRectIfNeeded]; +} + +- (void)goToDestination:(PDFDestination *)destination { + [super goToDestination:destination]; + [self resetFitRectIfNeeded]; +} + #pragma mark Scrollview - (NSScrollView *)scrollView; Modified: trunk/SKMainWindowController.h =================================================================== --- trunk/SKMainWindowController.h 2007-08-09 14:36:05 UTC (rev 2632) +++ trunk/SKMainWindowController.h 2007-08-09 15:30:11 UTC (rev 2633) @@ -264,7 +264,7 @@ - (IBAction)chooseTransition:(id)sender; - (IBAction)dismissTransitionSheet:(id)sender; -- (void)showSnapshotAtPageNumber:(int)pageNum forRect:(NSRect)rect factor:(int)factor display:(BOOL)display; +- (void)showSnapshotAtPageNumber:(int)pageNum forRect:(NSRect)rect factor:(int)factor fits:(BOOL)fits display:(BOOL)display; - (void)toggleSnapshots:(NSArray *)snapshotArray; - (void)showNote:(PDFAnnotation *)annotation; Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2007-08-09 14:36:05 UTC (rev 2632) +++ trunk/SKMainWindowController.m 2007-08-09 15:30:11 UTC (rev 2633) @@ -368,7 +368,7 @@ NSEnumerator *setupEnum = [[[SKBookmarkController sharedBookmarkController] snapshotsAtPath:[[[self document] fileURL] path]] objectEnumerator]; NSDictionary *setup; if (setup = [setupEnum nextObject]) - [self showSnapshotAtPageNumber:[[setup objectForKey:@"page"] unsignedIntValue] forRect:NSRectFromString([setup objectForKey:@"rect"]) factor:[[setup objectForKey:@"scaleFactor"] floatValue] display:[[setup objectForKey:@"hasWindow"] boolValue]]; + [self showSnapshotAtPageNumber:[[setup objectForKey:@"page"] unsignedIntValue] forRect:NSRectFromString([setup objectForKey:@"rect"]) factor:[[setup objectForKey:@"scaleFactor"] floatValue] fits:[[setup objectForKey:@"fits"] boolValue] display:[[setup objectForKey:@"hasWindow"] boolValue]]; } // This update toolbar item and other states @@ -781,7 +781,7 @@ NSEnumerator *setupEnum = [snapshotDicts objectEnumerator]; NSDictionary *setup; while (setup = [setupEnum nextObject]) - [self showSnapshotAtPageNumber:[[setup objectForKey:@"page"] unsignedIntValue] forRect:NSRectFromString([setup objectForKey:@"rect"]) factor:[[setup objectForKey:@"scaleFactor"] floatValue] display:[[setup objectForKey:@"hasWindow"] boolValue]]; + [self showSnapshotAtPageNumber:[[setup objectForKey:@"page"] unsignedIntValue] forRect:NSRectFromString([setup objectForKey:@"rect"]) factor:[[setup objectForKey:@"scaleFactor"] floatValue] fits:[[setup objectForKey:@"fits"] boolValue] display:[[setup objectForKey:@"hasWindow"] boolValue]]; if (pageIndex != NSNotFound && [document pageCount]) { PDFPage *page = [document pageAtIndex:MIN(pageIndex, [document pageCount] - 1)]; @@ -2485,7 +2485,7 @@ #pragma mark Sub- and note- windows -- (void)showSnapshotAtPageNumber:(int)pageNum forRect:(NSRect)rect factor:(int)factor display:(BOOL)display{ +- (void)showSnapshotAtPageNumber:(int)pageNum forRect:(NSRect)rect factor:(int)factor fits:(BOOL)fits display:(BOOL)display{ SKSnapshotWindowController *swc = [[SKSnapshotWindowController alloc] init]; BOOL snapshotsOnTop = [[NSUserDefaults standardUserDefaults] boolForKey:SKSnapshotsOnTopKey]; @@ -2496,7 +2496,8 @@ [swc setPdfDocument:doc scaleFactor:[pdfView scaleFactor] * factor goToPageNumber:pageNum - rect:rect]; + rect:rect + fits:fits]; [swc setForceOnTop:[self isFullScreen] || [self isPresentation]]; [[swc window] setHidesOnDeactivate:snapshotsOnTop]; @@ -3368,7 +3369,7 @@ rect.origin.y = NSMidY(rect) - 100.0; rect.size.height = 200.0; - [self showSnapshotAtPageNumber:row forRect:rect factor:1 display:YES]; + [self showSnapshotAtPageNumber:row forRect:rect factor:1 fits:NO display:YES]; return YES; } return NO; Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2007-08-09 14:36:05 UTC (rev 2632) +++ trunk/SKPDFView.m 2007-08-09 15:30:11 UTC (rev 2633) @@ -1968,10 +1968,12 @@ NSPoint point; PDFPage *page = nil; NSRect rect = NSZeroRect; + BOOL fits = NO; if (toolMode == SKSelectToolMode && NSIsEmptyRect(selectionRect) == NO) { rect = NSIntersectionRect(selectionRect, [[self currentPage] boundsForBox:kPDFDisplayBoxCropBox]); page = [self currentPage]; + fits = YES; } if (NSIsEmptyRect(rect)) { if ([sender respondsToSelector:@selector(representedObject)] && [[sender representedObject] respondsToSelector:@selector(pointValue)]) { @@ -2000,7 +2002,7 @@ SKMainWindowController *controller = [[self window] windowController]; - [controller showSnapshotAtPageNumber:[[self document] indexForPage:page] forRect:rect factor:1 display:YES]; + [controller showSnapshotAtPageNumber:[[self document] indexForPage:page] forRect:rect factor:1 fits:fits display:YES]; } #pragma mark Notification handling @@ -3269,6 +3271,7 @@ PDFPage *page = [self pageForPoint:point nearest:YES]; NSRect rect = [self convertRect:selRect fromView:[self documentView]]; int factor = 1; + BOOL fits = NO; if (dragged) { @@ -3287,13 +3290,15 @@ rect.origin.x = NSMaxX(bounds) - NSWidth(rect); } if (factor * NSHeight(rect) < 60.0) { - rect = NSInsetRect(rect, 0.5 * (NSHeight(rect) - 60.0 / factor), 0.0); + rect = NSInsetRect(rect, 0.0, 0.5 * (NSHeight(rect) - 60.0 / factor)); if (NSMinY(rect) < NSMinY(bounds)) rect.origin.y = NSMinY(bounds); if (NSMaxX(rect) > NSMaxY(bounds)) rect.origin.y = NSMaxY(bounds) - NSHeight(rect); } + fits = YES; + } else { BOOL isLink = NO; @@ -3313,7 +3318,7 @@ SKMainWindowController *controller = [[self window] windowController]; - [controller showSnapshotAtPageNumber:[[self document] indexForPage:page] forRect:[self convertRect:rect toPage:page] factor:factor display:YES]; + [controller showSnapshotAtPageNumber:[[self document] indexForPage:page] forRect:[self convertRect:rect toPage:page] factor:factor fits:fits display:YES]; } - (void)magnifyWithEvent:(NSEvent *)theEvent { Modified: trunk/SKSnapshotWindowController.h =================================================================== --- trunk/SKSnapshotWindowController.h 2007-08-09 14:36:05 UTC (rev 2632) +++ trunk/SKSnapshotWindowController.h 2007-08-09 15:30:11 UTC (rev 2633) @@ -49,7 +49,7 @@ BOOL forceOnTop; } -- (void)setPdfDocument:(PDFDocument *)pdfDocument scaleFactor:(float)factor goToPageNumber:(int)pageNum rect:(NSRect)rect; +- (void)setPdfDocument:(PDFDocument *)pdfDocument scaleFactor:(float)factor goToPageNumber:(int)pageNum rect:(NSRect)rect fits:(BOOL)fits; - (BOOL)isPageVisible:(PDFPage *)page; Modified: trunk/SKSnapshotWindowController.m =================================================================== --- trunk/SKSnapshotWindowController.m 2007-08-09 14:36:05 UTC (rev 2632) +++ trunk/SKSnapshotWindowController.m 2007-08-09 15:30:11 UTC (rev 2633) @@ -41,6 +41,7 @@ #import "SKDocument.h" #import "SKMiniaturizeWindow.h" #import <Quartz/Quartz.h> +#import "BDSKZoomablePDFView.h" #import "SKPDFAnnotationNote.h" #import "SKPDFView.h" #import "NSWindowController_SKExtensions.h" @@ -185,7 +186,7 @@ [[self delegate] performSelector:@selector(snapshotControllerDidFinishSetup:) withObject:self afterDelay:0.1]; } -- (void)setPdfDocument:(PDFDocument *)pdfDocument scaleFactor:(float)factor goToPageNumber:(int)pageNum rect:(NSRect)rect{ +- (void)setPdfDocument:(PDFDocument *)pdfDocument scaleFactor:(float)factor goToPageNumber:(int)pageNum rect:(NSRect)rect fits:(BOOL)fits { [self window]; [pdfView setDocument:pdfDocument]; @@ -229,6 +230,9 @@ PDFDestination *dest = [[[PDFDestination alloc] initWithPage:page atPoint:point] autorelease]; + if (fits && [pdfView respondsToSelector:@selector(fits)]) + [(BDSKZoomablePDFView *)pdfView setFits:fits]; + // Delayed to allow PDFView to finish its bookkeeping // fixes bug of apparently ignoring the point but getting the page right. [self performSelector:@selector(goToDestination:) withObject:dest afterDelay:0.1]; @@ -297,7 +301,9 @@ - (NSDictionary *)currentSetup { NSView *clipView = [[[pdfView documentView] enclosingScrollView] contentView]; NSRect rect = [pdfView convertRect:[pdfView convertRect:[clipView bounds] fromView:clipView] toPage:[pdfView currentPage]]; - return [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:[self pageIndex]], @"page", NSStringFromRect(rect), @"rect", [NSNumber numberWithFloat:[pdfView scaleFactor]], @"scaleFactor", [NSNumber numberWithBool:[[self window] isVisible]], @"hasWindow", nil]; + float factor = [pdfView autoScales] ? 0.0 : [pdfView scaleFactor]; + BOOL fits = [pdfView respondsToSelector:@selector(fits)] && [(BDSKZoomablePDFView *)pdfView fits]; + return [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:[self pageIndex]], @"page", NSStringFromRect(rect), @"rect", [NSNumber numberWithFloat:factor], @"scaleFactor", [NSNumber numberWithBool:fits], @"fits", [NSNumber numberWithBool:[[self window] isVisible]], @"hasWindow", nil]; } #pragma mark Thumbnails This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit