Revision: 3625
http://skim-app.svn.sourceforge.net/skim-app/?rev=3625&view=rev
Author: hofman
Date: 2008-04-04 14:39:38 -0700 (Fri, 04 Apr 2008)
Log Message:
-----------
Reorganize some code.
Modified Paths:
--------------
trunk/SKPDFView.m
Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m 2008-04-04 20:38:31 UTC (rev 3624)
+++ trunk/SKPDFView.m 2008-04-04 21:39:38 UTC (rev 3625)
@@ -2774,35 +2774,27 @@
if (activeAnnotation != newActiveAnnotation)
[self setActiveAnnotation:newActiveAnnotation];
- if (newActiveAnnotation == nil) {
- //[super mouseDown:theEvent];
- } else if ([theEvent clickCount] == 2 && [[activeAnnotation type]
isEqualToString:SKFreeTextString]) {
- [self editActiveAnnotation:self];
- // probably we should use the note window for Text annotations
+ if (newActiveAnnotation) {
- } else if ([theEvent clickCount] == 2 && [[activeAnnotation type]
isEqualToString:SKNoteString]) {
-
- [[NSNotificationCenter defaultCenter]
postNotificationName:SKPDFViewAnnotationDoubleClickedNotification object:self
- userInfo:[NSDictionary
dictionaryWithObjectsAndKeys:activeAnnotation, @"annotation", nil]];
-
- } else {
- // Old (current) annotation location.
- wasBounds = [activeAnnotation bounds];
-
- if ([[activeAnnotation type] isEqualToString:SKLineString]) {
- wasStartPoint = [(SKPDFAnnotationLine *)activeAnnotation
startPoint];
- wasEndPoint = [(SKPDFAnnotationLine *)activeAnnotation endPoint];
- }
-
- // Hit-test for resize box.
- dragMask = 0;
- if ([[activeAnnotation type] isEqualToString:SKLineString]) {
- if (NSPointInRect(pagePoint,
SKRectFromCenterAndSize(SKAddPoints(wasBounds.origin, [(SKPDFAnnotationLine
*)activeAnnotation endPoint]), SKMakeSquareSize(8.0))))
- dragMask = BDSKMaxXEdgeMask;
- else if (NSPointInRect(pagePoint,
SKRectFromCenterAndSize(SKAddPoints(wasBounds.origin, [(SKPDFAnnotationLine
*)activeAnnotation startPoint]), SKMakeSquareSize(8.0))))
- dragMask = BDSKMinXEdgeMask;
- } else {
- if ([activeAnnotation isResizable]) {
+ if ([theEvent clickCount] == 2 && ([[activeAnnotation type]
isEqualToString:SKFreeTextString] || [[activeAnnotation type]
isEqualToString:SKNoteString])) {
+ [self editActiveAnnotation:self];
+ } else {
+ // Old (current) annotation location.
+ wasBounds = [activeAnnotation bounds];
+
+ if ([[activeAnnotation type] isEqualToString:SKLineString]) {
+ wasStartPoint = [(SKPDFAnnotationLine *)activeAnnotation
startPoint];
+ wasEndPoint = [(SKPDFAnnotationLine *)activeAnnotation
endPoint];
+ }
+
+ // Hit-test for resize box.
+ dragMask = 0;
+ if ([[activeAnnotation type] isEqualToString:SKLineString]) {
+ if (NSPointInRect(pagePoint,
SKRectFromCenterAndSize(SKAddPoints(wasBounds.origin, [(SKPDFAnnotationLine
*)activeAnnotation endPoint]), SKMakeSquareSize(8.0))))
+ dragMask = BDSKMaxXEdgeMask;
+ else if (NSPointInRect(pagePoint,
SKRectFromCenterAndSize(SKAddPoints(wasBounds.origin, [(SKPDFAnnotationLine
*)activeAnnotation startPoint]), SKMakeSquareSize(8.0))))
+ dragMask = BDSKMinXEdgeMask;
+ } else if ([activeAnnotation isResizable]) {
if (NSWidth(wasBounds) < 2.0) {
dragMask |= BDSKMinXEdgeMask | BDSKMaxXEdgeMask;
} else if ([page rotation] < 180) {
@@ -2830,34 +2822,38 @@
dragMask |= BDSKMaxYEdgeMask;
}
}
- }
- if (dragMask)
- [self setNeedsDisplayForAnnotation:activeAnnotation];
-
- if ([activeAnnotation isMovable]) {
- BOOL draggedAnnotation = NO;
- while (YES) {
- theEvent = [[self window] nextEventMatchingMask:
NSLeftMouseUpMask | NSLeftMouseDraggedMask];
- if ([theEvent type] == NSLeftMouseUp)
- break;
- [self dragAnnotationWithEvent:theEvent];
- draggedAnnotation = YES;
+ if (dragMask)
+ [self setNeedsDisplayForAnnotation:activeAnnotation];
+
+ if ([activeAnnotation isMovable]) {
+ // we move or resize the annotation in an event loop, which
ensures it's enclosed in a single undo group
+ BOOL draggedAnnotation = NO;
+ while (YES) {
+ theEvent = [[self window] nextEventMatchingMask:
NSLeftMouseUpMask | NSLeftMouseDraggedMask];
+ if ([theEvent type] == NSLeftMouseUp)
+ break;
+ [self dragAnnotationWithEvent:theEvent];
+ draggedAnnotation = YES;
+ }
+ if (toolMode == SKNoteToolMode && NSEqualSizes(wasBounds.size,
NSZeroSize) && [[activeAnnotation type] isEqualToString:SKFreeTextString])
+ [self editActiveAnnotation:self];
+ if (draggedAnnotation &&
+ [[NSUserDefaults standardUserDefaults]
boolForKey:SKDisableUpdateContentsFromEnclosedTextKey] == NO &&
+ ([[activeAnnotation type] isEqualToString:SKCircleString]
|| [[activeAnnotation type] isEqualToString:SKSquareString])) {
+ NSString *selString = [[[[activeAnnotation page]
selectionForRect:[activeAnnotation bounds]] string]
stringByCollapsingWhitespaceAndNewlinesAndRemovingSurroundingWhitespaceAndNewlines];
+ [activeAnnotation setString:selString];
+ }
+ [self setNeedsDisplayForAnnotation:activeAnnotation];
+ mouseDownInAnnotation = NO;
+ dragMask = 0;
}
- if (toolMode == SKNoteToolMode && NSEqualSizes(wasBounds.size,
NSZeroSize) && [[activeAnnotation type] isEqualToString:SKFreeTextString])
- [self editActiveAnnotation:self];
- if (draggedAnnotation &&
- [[NSUserDefaults standardUserDefaults]
boolForKey:SKDisableUpdateContentsFromEnclosedTextKey] == NO &&
- ([[activeAnnotation type] isEqualToString:SKCircleString] ||
[[activeAnnotation type] isEqualToString:SKSquareString])) {
- NSString *selString = [[[[activeAnnotation page]
selectionForRect:[activeAnnotation bounds]] string]
stringByCollapsingWhitespaceAndNewlinesAndRemovingSurroundingWhitespaceAndNewlines];
- [activeAnnotation setString:selString];
- }
- [self setNeedsDisplayForAnnotation:activeAnnotation];
- mouseDownInAnnotation = NO;
- dragMask = 0;
}
+
+ return YES;
+ } else {
+ // no new active annotation
+ return NO;
}
-
- return newActiveAnnotation != nil;
}
- (void)dragAnnotationWithEvent:(NSEvent *)theEvent {
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit