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

Reply via email to