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
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit