Revision: 3623
http://skim-app.svn.sourceforge.net/skim-app/?rev=3623&view=rev
Author: hofman
Date: 2008-04-04 13:30:32 -0700 (Fri, 04 Apr 2008)
Log Message:
-----------
Event loop for custom text selection, for click-through of transparent
annotations. Can remove some ivars.
Modified Paths:
--------------
trunk/SKPDFView.h
trunk/SKPDFView.m
Modified: trunk/SKPDFView.h
===================================================================
--- trunk/SKPDFView.h 2008-04-04 19:18:48 UTC (rev 3622)
+++ trunk/SKPDFView.h 2008-04-04 20:30:32 UTC (rev 3623)
@@ -96,7 +96,6 @@
PDFAnnotation *activeAnnotation;
PDFAnnotation *highlightAnnotation;
NSTextField *editField;
- PDFSelection *wasSelection;
NSRect wasBounds;
NSPoint wasStartPoint;
NSPoint wasEndPoint;
@@ -106,8 +105,6 @@
float magnification;
BOOL didDrag;
BOOL mouseDownInAnnotation;
- BOOL extendSelection;
- BOOL rectSelection;
int dragMask;
int trackingRect;
Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m 2008-04-04 19:18:48 UTC (rev 3622)
+++ trunk/SKPDFView.m 2008-04-04 20:30:32 UTC (rev 3623)
@@ -207,7 +207,6 @@
readingBar = nil;
activeAnnotation = nil;
- wasSelection = nil;
wasBounds = NSZeroRect;
wasStartPoint = NSZeroPoint;
wasEndPoint = NSZeroPoint;
@@ -217,8 +216,6 @@
magnification = 0.0;
didDrag = NO;
mouseDownInAnnotation = NO;
- extendSelection = NO;
- rectSelection = NO;
trackingRect = 0;
hoverRects = CFArrayCreateMutable(NULL, 0, NULL);
@@ -1021,6 +1018,7 @@
[self dragWithEvent:theEvent];
} else if (nil == activeAnnotation &&
mouseDownInAnnotation) {
[self selectTextWithEvent:theEvent];
+ mouseDownInAnnotation = NO;
} else {
[super mouseDown:theEvent];
if (floor(NSAppKitVersionNumber) >
NSAppKitVersionNumber10_4 && toolMode == SKNoteToolMode && hideNotes == NO &&
[self currentSelection] && (annotationMode == SKHighlightNote || annotationMode
== SKUnderlineNote || annotationMode == SKStrikeOutNote)) {
@@ -1070,8 +1068,6 @@
[self setActiveAnnotation:nil];
}
mouseDownInAnnotation = NO;
- [wasSelection release];
- wasSelection = nil;
dragMask = 0;
}
if (toolMode == SKNoteToolMode && hideNotes == NO && [self
currentSelection] && (annotationMode == SKHighlightNote || annotationMode ==
SKUnderlineNote || annotationMode == SKStrikeOutNote)) {
@@ -1101,13 +1097,9 @@
switch (toolMode) {
case SKTextToolMode:
case SKNoteToolMode:
- if (nil == activeAnnotation) {
- if (mouseDownInAnnotation)
- // reimplement text selection behavior so we can select
text inside markup annotation bounds rectangles (and have a highlight and
strikeout on the same line, for instance), but don't select inside an existing
markup annotation
- [self selectTextWithEvent:theEvent];
- else
- [super mouseDragged:theEvent];
- }
+ // is this check still necessary?
+ if (nil == activeAnnotation)
+ [super mouseDragged:theEvent];
break;
case SKMoveToolMode:
[super mouseDragged:theEvent];
@@ -3216,44 +3208,44 @@
}
- (void)selectTextWithEvent:(NSEvent *)theEvent {
- if ([theEvent type] == NSLeftMouseDown) {
+ // reimplement text selection behavior so we can select text inside markup
annotation bounds rectangles (and have a highlight and strikeout on the same
line, for instance), but don't select inside an existing markup annotation
+ PDFSelection *wasSelection = nil;
+ unsigned int modifiers = [theEvent modifierFlags] &
NSDeviceIndependentModifierFlagsMask;
+ BOOL rectSelection = (modifiers & NSAlternateKeyMask) != 0;
+ BOOL extendSelection = NO;
+
+ if (rectSelection) {
+ [self setCurrentSelection:nil];
+ } else if ([theEvent clickCount] > 1) {
+ extendSelection = YES;
+ NSPoint p = [self convertPoint:[theEvent locationInWindow]
fromView:nil];
+ PDFPage *page = [self pageForPoint:p nearest:YES];
+ p = [self convertPoint:p toPage:page];
+ if ([theEvent clickCount] == 2)
+ wasSelection = [[page selectionForWordAtPoint:p] retain];
+ else if ([theEvent clickCount] == 3)
+ wasSelection = [[page selectionForLineAtPoint:p] retain];
+ else
+ wasSelection = nil;
+ [self setCurrentSelection:wasSelection];
+ } else if (modifiers & NSShiftKeyMask) {
+ extendSelection = YES;
+ wasSelection = [[self currentSelection] retain];
+ NSPoint p = [self convertPoint:[theEvent locationInWindow]
fromView:nil];
+ PDFPage *page = [self pageForPoint:p nearest:YES];
+ p = [self convertPoint:p toPage:page];
+ [self setCurrentSelection:[[self document]
selectionByExtendingSelection:wasSelection toPage:page atPoint:p]];
+ } else {
+ [self setCurrentSelection:nil];
+ }
+
+ while (YES) {
+
+ theEvent = [[self window] nextEventMatchingMask: NSLeftMouseUpMask |
NSLeftMouseDraggedMask];
+ if ([theEvent type] == NSLeftMouseUp)
+ break;
- unsigned int modifiers = [theEvent modifierFlags] &
NSDeviceIndependentModifierFlagsMask;
-
- if (modifiers & NSAlternateKeyMask) {
- rectSelection = YES;
- extendSelection = NO;
- [self setCurrentSelection:nil];
- } else if ([theEvent clickCount] > 1) {
- rectSelection = NO;
- extendSelection = YES;
- NSPoint p = [self convertPoint:[theEvent locationInWindow]
fromView:nil];
- PDFPage *page = [self pageForPoint:p nearest:YES];
- p = [self convertPoint:p toPage:page];
- if ([theEvent clickCount] == 2)
- wasSelection = [[page selectionForWordAtPoint:p] retain];
- else if ([theEvent clickCount] == 3)
- wasSelection = [[page selectionForLineAtPoint:p] retain];
- else
- wasSelection = nil;
- [self setCurrentSelection:wasSelection];
- } else if (modifiers & NSShiftKeyMask) {
- rectSelection = NO;
- extendSelection = YES;
- wasSelection = [[self currentSelection] retain];
- NSPoint p = [self convertPoint:[theEvent locationInWindow]
fromView:nil];
- PDFPage *page = [self pageForPoint:p nearest:YES];
- p = [self convertPoint:p toPage:page];
- [self setCurrentSelection:[[self document]
selectionByExtendingSelection:wasSelection toPage:page atPoint:p]];
- } else {
- rectSelection = NO;
- extendSelection = NO;
- [self setCurrentSelection:nil];
- }
-
- } else if ([theEvent type] == NSLeftMouseDragged) {
- // reimplement text selection behavior so we can select text inside
markup annotation bounds rectangles (and have a highlight and strikeout on the
same line, for instance), but don't select inside an existing markup annotation
-
+ // dragging
// if we autoscroll, the mouseDownLoc is no longer correct as a
starting point
NSPoint mouseDownLocInDoc = [[self documentView]
convertPoint:mouseDownLoc fromView:nil];
if ([[self documentView] autoscroll:theEvent])
@@ -3287,6 +3279,11 @@
[self setCurrentSelection:sel];
}
+
+ if (toolMode == SKNoteToolMode && hideNotes == NO && [self
currentSelection] && (annotationMode == SKHighlightNote || annotationMode ==
SKUnderlineNote || annotationMode == SKStrikeOutNote)) {
+ [self addAnnotationWithType:annotationMode];
+ [self setCurrentSelection:nil];
+ }
}
- (void)dragReadingBarWithEvent:(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