From: <ho...@us...> - 2009-03-23 17:43:41
|
Revision: 5262 http://skim-app.svn.sourceforge.net/skim-app/?rev=5262&view=rev Author: hofman Date: 2009-03-23 17:43:38 +0000 (Mon, 23 Mar 2009) Log Message: ----------- fix method name Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2009-03-16 22:18:30 UTC (rev 5261) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2009-03-23 17:43:38 UTC (rev 5262) @@ -111,7 +111,7 @@ static void (*original_dealloc)(id, SEL) = NULL; static void (*original_drawWithBox_inContext)(id, SEL, CGPDFBox, CGContextRef) = NULL; -- (void)replacementDealloc { +- (void)replacement_dealloc { CFDictionaryRemoveValue(lineRectsDict, self); original_dealloc(self, _cmd); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2009-08-11 17:51:56
|
Revision: 5536 http://skim-app.svn.sourceforge.net/skim-app/?rev=5536&view=rev Author: hofman Date: 2009-08-11 17:51:45 +0000 (Tue, 11 Aug 2009) Log Message: ----------- update markup note bounds in fallback code Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2009-08-11 17:23:02 UTC (rev 5535) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2009-08-11 17:51:45 UTC (rev 5536) @@ -247,8 +247,10 @@ PDFSelection *sel; while (sel = [selEnum nextObject]) { lineRect = [sel boundsForPage:page]; - if (NSIsEmptyRect(lineRect) == NO && [[sel string] rangeOfCharacterFromSet:[NSCharacterSet nonWhitespaceAndNewlineCharacterSet]].length) + if (NSIsEmptyRect(lineRect) == NO && [[sel string] rangeOfCharacterFromSet:[NSCharacterSet nonWhitespaceAndNewlineCharacterSet]].length) { CFArrayAppendValue([self lineRects], &lineRect); + newBounds = NSUnionRect(lineRect, newBounds); + } } } if (NSIsEmptyRect(newBounds)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2009-08-12 23:51:54
|
Revision: 5548 http://skim-app.svn.sourceforge.net/skim-app/?rev=5548&view=rev Author: hofman Date: 2009-08-12 23:51:48 +0000 (Wed, 12 Aug 2009) Log Message: ----------- partially revert an earlier commit, use our own code for getting the lines for a markup note, because the version in PDFKit does not strip spaces at the end of the line. Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2009-08-12 18:57:26 UTC (rev 5547) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2009-08-12 23:51:48 UTC (rev 5548) @@ -206,19 +206,9 @@ NSMutableArray *quadPoints = [[NSMutableArray alloc] init]; NSRect newBounds = NSZeroRect; if (selection) { - NSUInteger i, iMax; + NSUInteger i, iMax = [selection safeNumberOfRangesOnPage:page]; NSRect lineRect = NSZeroRect; - if ([selection respondsToSelector:@selector(selectionsByLine)]) { - NSEnumerator *selEnum = [[selection selectionsByLine] objectEnumerator]; - PDFSelection *sel; - while (sel = [selEnum nextObject]) { - lineRect = [sel boundsForPage:page]; - if (NSIsEmptyRect(lineRect) == NO && [[sel string] rangeOfCharacterFromSet:[NSCharacterSet nonWhitespaceAndNewlineCharacterSet]].length) { - CFArrayAppendValue([self lineRects], &lineRect); - newBounds = NSUnionRect(lineRect, newBounds); - } - } - } else if (iMax > 0) { + if (iMax > 0) { NSString *string = [page string]; NSRect charRect = NSZeroRect; NSRect lastCharRect = NSZeroRect; @@ -253,6 +243,16 @@ CFArrayAppendValue([self lineRects], &lineRect); newBounds = NSUnionRect(lineRect, newBounds); } + } else if ([selection respondsToSelector:@selector(selectionsByLine)]) { + NSEnumerator *selEnum = [[selection selectionsByLine] objectEnumerator]; + PDFSelection *sel; + while (sel = [selEnum nextObject]) { + lineRect = [sel boundsForPage:page]; + if (NSIsEmptyRect(lineRect) == NO && [[sel string] rangeOfCharacterFromSet:[NSCharacterSet nonWhitespaceAndNewlineCharacterSet]].length) { + CFArrayAppendValue([self lineRects], &lineRect); + newBounds = NSUnionRect(lineRect, newBounds); + } + } } if (NSIsEmptyRect(newBounds)) { [self release]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2009-08-29 16:04:17
|
Revision: 5598 http://skim-app.svn.sourceforge.net/skim-app/?rev=5598&view=rev Author: hofman Date: 2009-08-29 16:03:55 +0000 (Sat, 29 Aug 2009) Log Message: ----------- use selectionsByLine preferentially to get markup quadpoints Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2009-08-29 13:37:57 UTC (rev 5597) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2009-08-29 16:03:55 UTC (rev 5598) @@ -206,13 +206,22 @@ NSMutableArray *quadPoints = [[NSMutableArray alloc] init]; NSRect newBounds = NSZeroRect; if (selection) { - NSUInteger i, iMax = [selection safeNumberOfRangesOnPage:page]; + NSUInteger i, iMax; NSRect lineRect = NSZeroRect; - if (iMax > 0) { + if ([selection respondsToSelector:@selector(selectionsByLine)]) { + NSEnumerator *selEnum = [[selection selectionsByLine] objectEnumerator]; + PDFSelection *sel; + while (sel = [selEnum nextObject]) { + lineRect = [sel boundsForPage:page]; + if (NSIsEmptyRect(lineRect) == NO && [[sel string] rangeOfCharacterFromSet:[NSCharacterSet nonWhitespaceAndNewlineCharacterSet]].length) { + CFArrayAppendValue([self lineRects], &lineRect); + newBounds = NSUnionRect(lineRect, newBounds); + } + } + } else if (iMax = [selection safeNumberOfRangesOnPage:page]) { NSString *string = [page string]; NSRect charRect = NSZeroRect; NSRect lastCharRect = NSZeroRect; - iMax = [selection safeNumberOfRangesOnPage:page]; for (i = 0; i < iMax; i++) { NSRange range = [selection safeRangeAtIndex:i onPage:page]; NSUInteger j, jMax = NSMaxRange(range); @@ -243,16 +252,6 @@ CFArrayAppendValue([self lineRects], &lineRect); newBounds = NSUnionRect(lineRect, newBounds); } - } else if ([selection respondsToSelector:@selector(selectionsByLine)]) { - NSEnumerator *selEnum = [[selection selectionsByLine] objectEnumerator]; - PDFSelection *sel; - while (sel = [selEnum nextObject]) { - lineRect = [sel boundsForPage:page]; - if (NSIsEmptyRect(lineRect) == NO && [[sel string] rangeOfCharacterFromSet:[NSCharacterSet nonWhitespaceAndNewlineCharacterSet]].length) { - CFArrayAppendValue([self lineRects], &lineRect); - newBounds = NSUnionRect(lineRect, newBounds); - } - } } if (NSIsEmptyRect(newBounds)) { [self release]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2009-09-08 09:46:14
|
Revision: 5709 http://skim-app.svn.sourceforge.net/skim-app/?rev=5709&view=rev Author: hofman Date: 2009-09-08 09:46:01 +0000 (Tue, 08 Sep 2009) Log Message: ----------- quad points may be in a different order, so get the rects from the enclosure of all four points Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2009-09-08 09:25:08 UTC (rev 5708) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2009-09-08 09:46:01 UTC (rev 5709) @@ -259,6 +259,7 @@ NSUInteger j, jMax = [quadPoints count] / 4; CFMutableArrayRef lines = [self lineRects]; + NSPoint origin = [self bounds].origin; CFArrayRemoveAllValues(lines); @@ -269,15 +270,18 @@ NSValue *values[4]; [quadPoints getObjects:values range:range]; - NSPoint points[4]; - NSUInteger i = 0; - for (i = 0; i < 4; i++) - points[i] = [values[i] pointValue]; + NSPoint point; + NSUInteger i; + CGFloat minX = CGFLOAT_MAX, maxX = CGFLOAT_MIN, minY = CGFLOAT_MAX, maxY = CGFLOAT_MIN; + for (i = 0; i < 4; i++) { + point = [values[i] pointValue]; + minX = SKMin(minX, point.x); + maxX = SKMax(maxX, point.x); + minY = SKMin(minY, point.y); + maxY = SKMax(maxY, point.y); + } - NSRect lineRect; - lineRect.size.height = points[1].y - points[2].y; - lineRect.size.width = points[1].x - points[2].x; - lineRect.origin = SKAddPoints(points[2], [self bounds].origin); + NSRect lineRect = NSMakeRect(origin.x + minX, origin.y + minY, maxX - minX, maxY - minY); CFArrayAppendValue(lines, &lineRect); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2009-09-23 16:40:05
|
Revision: 5800 http://skim-app.svn.sourceforge.net/skim-app/?rev=5800&view=rev Author: hofman Date: 2009-09-23 16:39:55 +0000 (Wed, 23 Sep 2009) Log Message: ----------- smart way to get quad points for markup Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2009-09-23 15:05:15 UTC (rev 5799) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2009-09-23 16:39:55 UTC (rev 5800) @@ -91,7 +91,7 @@ /* http://www.cocoabuilder.com/archive/message/cocoa/2007/2/16/178891 - The docs are wrong (as is Adobe's spec). The ordering is: + The docs are wrong (as is Adobe's spec). The ordering at zero rotation is: -------- | 0 1 | | 2 3 | @@ -100,35 +100,13 @@ static NSArray *createQuadPointsWithBounds(const NSRect bounds, const NSPoint origin, NSInteger rotation) { NSRect r = NSOffsetRect(bounds, -origin.x, -origin.y); - NSPoint p0, p1, p2, p3; - switch (rotation) { - case 270: - p0 = SKTopRightPoint(r); - p1 = SKBottomRightPoint(r); - p2 = SKTopLeftPoint(r); - p3 = SKBottomLeftPoint(r); - break; - case 180: - p0 = SKBottomRightPoint(r); - p1 = SKBottomLeftPoint(r); - p2 = SKTopRightPoint(r); - p3 = SKTopLeftPoint(r); - break; - case 90: - p0 = SKBottomLeftPoint(r); - p1 = SKTopLeftPoint(r); - p2 = SKBottomRightPoint(r); - p3 = SKTopRightPoint(r); - break; - case 0: - default: - p0 = SKTopLeftPoint(r); - p1 = SKTopRightPoint(r); - p2 = SKBottomLeftPoint(r); - p3 = SKBottomRightPoint(r); - break; - } - return [[NSArray alloc] initWithObjects:[NSValue valueWithPoint:p0], [NSValue valueWithPoint:p1], [NSValue valueWithPoint:p2], [NSValue valueWithPoint:p3], nil]; + NSInteger offset = rotation / 90; + NSPoint p[4]; + p[offset] = SKTopLeftPoint(r); + p[(++offset)%4] = SKTopRightPoint(r); + p[(++offset)%4] = SKBottomRightPoint(r); + p[(++offset)%4] = SKBottomLeftPoint(r); + return [[NSArray alloc] initWithObjects:[NSValue valueWithPoint:p[0]], [NSValue valueWithPoint:p[1]], [NSValue valueWithPoint:p[3]], [NSValue valueWithPoint:p[2]], nil]; } static NSMapTable *lineRectsTable = nil; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2009-10-29 11:07:48
|
Revision: 5962 http://skim-app.svn.sourceforge.net/skim-app/?rev=5962&view=rev Author: hofman Date: 2009-10-29 11:07:39 +0000 (Thu, 29 Oct 2009) Log Message: ----------- fix starting point for max float value Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2009-10-28 10:46:34 UTC (rev 5961) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2009-10-29 11:07:39 UTC (rev 5962) @@ -246,7 +246,7 @@ NSPoint point; NSUInteger i; - CGFloat minX = CGFLOAT_MAX, maxX = CGFLOAT_MIN, minY = CGFLOAT_MAX, maxY = CGFLOAT_MIN; + CGFloat minX = CGFLOAT_MAX, maxX = -CGFLOAT_MAX, minY = CGFLOAT_MAX, maxY = -CGFLOAT_MAX; for (i = 0; i < 4; i++) { point = [values[i] pointValue]; minX = SKMin(minX, point.x); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2012-12-20 23:04:44
|
Revision: 7867 http://skim-app.svn.sourceforge.net/skim-app/?rev=7867&view=rev Author: hofman Date: 2012-12-20 23:04:37 +0000 (Thu, 20 Dec 2012) Log Message: ----------- remove unused parameter from markup note initializer Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2012-12-20 12:36:45 UTC (rev 7866) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2012-12-20 23:04:37 UTC (rev 7867) @@ -56,20 +56,6 @@ @implementation PDFAnnotationMarkup (SKExtensions) -static NSArray *createPointsFromStrings(NSArray *strings) -{ - if (strings == nil) - return nil; - NSMutableArray *points = [[NSMutableArray alloc] init]; - for (NSString *string in strings) { - NSPoint p = NSPointFromString(string); - NSValue *value = [[NSValue alloc] initWithBytes:&p objCType:@encode(NSPoint)]; - [points addObject:value]; - [value release]; - } - return points; -} - /* http://www.cocoabuilder.com/archive/message/cocoa/2007/2/16/178891 The docs are wrong (as is Adobe's spec). The ordering at zero rotation is: @@ -132,7 +118,7 @@ return nil; } -- (id)initSkimNoteWithBounds:(NSRect)bounds markupType:(NSInteger)type quadrilateralPointsAsStrings:(NSArray *)pointStrings { +- (id)initSkimNoteWithBounds:(NSRect)bounds markupType:(NSInteger)type { self = [super initSkimNoteWithBounds:bounds]; if (self) { [self setMarkupType:type]; @@ -140,16 +126,12 @@ NSColor *color = [[self class] defaultSkimNoteColorForMarkupType:type]; if (color) [self setColor:color]; - - NSArray *quadPoints = pointStrings ? createPointsFromStrings(pointStrings) : createQuadPointsWithBounds(bounds, bounds.origin, 0); - [self setQuadrilateralPoints:quadPoints]; - [quadPoints release]; } return self; } - (id)initSkimNoteWithBounds:(NSRect)bounds { - self = [self initSkimNoteWithBounds:bounds markupType:kPDFMarkupTypeHighlight quadrilateralPointsAsStrings:nil]; + self = [self initSkimNoteWithBounds:bounds markupType:kPDFMarkupTypeHighlight]; return self; } @@ -159,7 +141,7 @@ [[self initWithBounds:NSZeroRect] release]; self = nil; } else { - self = [self initSkimNoteWithBounds:bounds markupType:type quadrilateralPointsAsStrings:nil]; + self = [self initSkimNoteWithBounds:bounds markupType:type]; if (self) { PDFPage *page = [selection safeFirstPage]; NSInteger rotation = [page rotation]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2013-04-30 10:05:13
|
Revision: 8048 http://skim-app.svn.sourceforge.net/skim-app/?rev=8048&view=rev Author: hofman Date: 2013-04-30 10:05:05 +0000 (Tue, 30 Apr 2013) Log Message: ----------- use fill color instead of stroke color Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2013-04-28 14:26:50 UTC (rev 8047) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2013-04-30 10:05:05 UTC (rev 8048) @@ -290,7 +290,7 @@ CGFloat lineWidth = 1.0 / scaleFactor; [NSGraphicsContext saveGraphicsState]; - [(active ? [NSColor selectionHighlightColor] : [NSColor disabledSelectionHighlightColor]) setStroke]; + [(active ? [NSColor selectionHighlightColor] : [NSColor disabledSelectionHighlightColor]) setFill]; for (i = 0; i < iMax; i++) NSFrameRectWithWidth(NSIntegralRect(*(NSRectPointer)[lines pointerAtIndex:i]), lineWidth); [NSGraphicsContext restoreGraphicsState]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2013-11-29 21:57:04
|
Revision: 8288 http://sourceforge.net/p/skim-app/code/8288 Author: hofman Date: 2013-11-29 21:57:01 +0000 (Fri, 29 Nov 2013) Log Message: ----------- Don't outset markup quad rects to get the text selection, as the behavior of selectionForRect: seems to have changed drastically, getting all characters partially in the rect rather than characters contained fully in the rect. Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2013-11-29 12:44:41 UTC (rev 8287) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2013-11-29 21:57:01 UTC (rev 8288) @@ -241,8 +241,7 @@ NSUInteger i, iMax = [lines count]; for (i = 0; i < iMax; i++) { - // slightly outset the rect to avoid rounding errors, as selectionForRect is pretty strict - if ((sel = [[self page] selectionForRect:NSInsetRect(*(NSRectPointer)[lines pointerAtIndex:i], -1.0, -1.0)]) && [sel hasCharacters]) { + if ((sel = [[self page] selectionForRect:*(NSRectPointer)[lines pointerAtIndex:i]]) && [sel hasCharacters]) { if (selection == nil) selection = sel; else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2014-12-03 00:12:55
|
Revision: 8495 http://sourceforge.net/p/skim-app/code/8495 Author: hofman Date: 2014-12-03 00:12:47 +0000 (Wed, 03 Dec 2014) Log Message: ----------- use intrinsic (initial) page rotation for creation of markup notes instead of current rotation Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2014-12-02 22:06:51 UTC (rev 8494) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2014-12-03 00:12:47 UTC (rev 8495) @@ -148,7 +148,7 @@ self = [self initSkimNoteWithBounds:bounds markupType:type]; if (self) { PDFPage *page = [selection safeFirstPage]; - NSInteger rotation = [page rotation]; + NSInteger rotation = [page intrinsicRotation]; NSMutableArray *quadPoints = [[NSMutableArray alloc] init]; NSRect newBounds = NSZeroRect; if (selection) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2014-12-03 23:13:45
|
Revision: 8503 http://sourceforge.net/p/skim-app/code/8503 Author: hofman Date: 2014-12-03 23:13:42 +0000 (Wed, 03 Dec 2014) Log Message: ----------- simplify SPI, generate line rects for markup notes automatically if needed Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2014-12-03 17:23:20 UTC (rev 8502) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2014-12-03 23:13:42 UTC (rev 8503) @@ -95,7 +95,7 @@ lineRectsTable = [[NSMapTable alloc] initWithKeyOptions:NSMapTableZeroingWeakMemory | NSMapTableObjectPointerPersonality valueOptions:NSMapTableStrongMemory | NSMapTableObjectPointerPersonality capacity:0]; } -- (NSPointerArray *)lineRects { +- (NSPointerArray *)lineRectsArray { NSPointerArray *lineRects = [lineRectsTable objectForKey:self]; if (lineRects == NULL) { lineRects = [[NSPointerArray alloc] initForRectPointers]; @@ -157,7 +157,7 @@ for (PDFSelection *sel in [selection selectionsByLine]) { lineRect = [sel boundsForPage:page]; if (NSIsEmptyRect(lineRect) == NO && [[sel string] rangeOfCharacterFromSet:[NSCharacterSet nonWhitespaceAndNewlineCharacterSet]].length) { - [[self lineRects] addPointer:&lineRect]; + [[self lineRectsArray] addPointer:&lineRect]; newBounds = NSUnionRect(lineRect, newBounds); } } @@ -167,7 +167,7 @@ } else { [self setBounds:newBounds]; if ([self hasLineRects]) { - NSPointerArray *lines = [self lineRects]; + NSPointerArray *lines = [self lineRectsArray]; iMax = [lines count]; for (i = 0; i < iMax; i++) { NSArray *quadLine = createQuadPointsWithBounds(*(NSRectPointer)[lines pointerAtIndex:i], [self bounds].origin, rotation); @@ -198,12 +198,15 @@ return fdfString; } -- (void)regenerateLineRects { +- (NSPointerArray *)lineRects { + if ([self hasLineRects]) + return [self lineRectsArray]; + // archived annotations (or annotations we didn't create) won't have these NSArray *quadPoints = [self quadrilateralPoints]; NSAssert([quadPoints count] % 4 == 0, @"inconsistent number of quad points"); - NSPointerArray *lines = [self lineRects]; + NSPointerArray *lines = [self lineRectsArray]; NSUInteger j = [lines count], jMax = [quadPoints count] / 4; NSPoint origin = [self bounds].origin; @@ -231,12 +234,11 @@ NSRect lineRect = NSMakeRect(origin.x + minX, origin.y + minY, maxX - minX, maxY - minY); [lines addPointer:&lineRect]; } + + return lines; } - (PDFSelection *)selection { - if ([self hasLineRects] == NO) - [self regenerateLineRects]; - NSMutableArray *selections = [NSMutableArray array]; NSPointerArray *lines = [self lineRects]; NSUInteger i, iMax = [lines count]; @@ -254,10 +256,6 @@ if ([super hitTest:point] == NO) return NO; - // archived annotations (or annotations we didn't create) won't have these - if ([self hasLineRects] == NO) - [self regenerateLineRects]; - NSPointerArray *lines = [self lineRects]; NSUInteger i = [lines count]; BOOL isContained = NO; @@ -269,8 +267,6 @@ } - (CGFloat)boundsOrder { - if ([self hasLineRects] == NO) - [self regenerateLineRects]; NSPointerArray *lines = [self lineRects]; NSRect bounds = [lines count] > 0 ? *(NSRectPointer)[lines pointerAtIndex:0] : [self bounds]; return [[self page] sortOrderForBounds:bounds]; @@ -289,9 +285,6 @@ - (void)drawSelectionHighlightForView:(PDFView *)pdfView { if (NSIsEmptyRect([self bounds])) return; - // archived annotations (or annotations we didn't create) won't have these - if ([self hasLineRects] == NO) - [self regenerateLineRects]; BOOL active = [[pdfView window] isKeyWindow] && [[[pdfView window] firstResponder] isDescendantOf:pdfView]; NSPointerArray *lines = [self lineRects]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2015-01-20 10:53:19
|
Revision: 8603 http://sourceforge.net/p/skim-app/code/8603 Author: hofman Date: 2015-01-20 10:53:10 +0000 (Tue, 20 Jan 2015) Log Message: ----------- combine two methods into one Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2015-01-19 18:23:49 UTC (rev 8602) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2015-01-20 10:53:10 UTC (rev 8603) @@ -95,8 +95,9 @@ lineRectsTable = [[NSMapTable alloc] initWithKeyOptions:NSMapTableZeroingWeakMemory | NSMapTableObjectPointerPersonality valueOptions:NSMapTableStrongMemory | NSMapTableObjectPointerPersonality capacity:0]; } -- (NSPointerArray *)lineRectsArray { +- (NSPointerArray *)lineRects:(BOOL *)created { NSPointerArray *lineRects = [lineRectsTable objectForKey:self]; + if (created) *created = (lineRects == NULL); if (lineRects == NULL) { lineRects = [[NSPointerArray alloc] initForRectPointers]; [lineRectsTable setObject:lineRects forKey:self]; @@ -105,10 +106,6 @@ return lineRects; } -- (BOOL)hasLineRects { - return [lineRectsTable objectForKey:self] != nil; -} - + (NSColor *)defaultSkimNoteColorForMarkupType:(NSInteger)markupType { switch (markupType) { @@ -157,7 +154,7 @@ for (PDFSelection *sel in [selection selectionsByLine]) { lineRect = [sel boundsForPage:page]; if (NSIsEmptyRect(lineRect) == NO && [[sel string] rangeOfCharacterFromSet:[NSCharacterSet nonWhitespaceAndNewlineCharacterSet]].length) { - [[self lineRectsArray] addPointer:&lineRect]; + [[self lineRects:NULL] addPointer:&lineRect]; newBounds = NSUnionRect(lineRect, newBounds); } } @@ -166,14 +163,12 @@ self = nil; } else { [self setBounds:newBounds]; - if ([self hasLineRects]) { - NSPointerArray *lines = [self lineRectsArray]; - iMax = [lines count]; - for (i = 0; i < iMax; i++) { - NSArray *quadLine = createQuadPointsWithBounds([lines rectAtIndex:i], [self bounds].origin, rotation); - [quadPoints addObjectsFromArray:quadLine]; - [quadLine release]; - } + NSPointerArray *lines = [self lineRects:NULL]; + iMax = [lines count]; + for (i = 0; i < iMax; i++) { + NSArray *quadLine = createQuadPointsWithBounds([lines rectAtIndex:i], [self bounds].origin, rotation); + [quadPoints addObjectsFromArray:quadLine]; + [quadLine release]; } } } @@ -199,42 +194,41 @@ } - (NSPointerArray *)lineRects { - if ([self hasLineRects]) - return [self lineRectsArray]; - - // archived annotations (or annotations we didn't create) won't have these - NSArray *quadPoints = [self quadrilateralPoints]; - NSAssert([quadPoints count] % 4 == 0, @"inconsistent number of quad points"); + BOOL created = NO; + NSPointerArray *lines = [self lineRects:&created]; + if (created) { + // archived annotations (or annotations we didn't create) won't have these + NSArray *quadPoints = [self quadrilateralPoints]; + NSAssert([quadPoints count] % 4 == 0, @"inconsistent number of quad points"); - NSPointerArray *lines = [self lineRectsArray]; - NSUInteger j = [lines count], jMax = [quadPoints count] / 4; - NSPoint origin = [self bounds].origin; - - while ([lines count]) - [lines removePointerAtIndex:0]; - - for (j = 0; j < jMax; j++) { + NSUInteger j = [lines count], jMax = [quadPoints count] / 4; + NSPoint origin = [self bounds].origin; - NSRange range = NSMakeRange(4 * j, 4); + while ([lines count]) + [lines removePointerAtIndex:0]; + + for (j = 0; j < jMax; j++) { + + NSRange range = NSMakeRange(4 * j, 4); - NSValue *values[4]; - [quadPoints getObjects:values range:range]; - - NSPoint point; - NSUInteger i; - CGFloat minX = CGFLOAT_MAX, maxX = -CGFLOAT_MAX, minY = CGFLOAT_MAX, maxY = -CGFLOAT_MAX; - for (i = 0; i < 4; i++) { - point = [values[i] pointValue]; - minX = fmin(minX, point.x); - maxX = fmax(maxX, point.x); - minY = fmin(minY, point.y); - maxY = fmax(maxY, point.y); + NSValue *values[4]; + [quadPoints getObjects:values range:range]; + + NSPoint point; + NSUInteger i; + CGFloat minX = CGFLOAT_MAX, maxX = -CGFLOAT_MAX, minY = CGFLOAT_MAX, maxY = -CGFLOAT_MAX; + for (i = 0; i < 4; i++) { + point = [values[i] pointValue]; + minX = fmin(minX, point.x); + maxX = fmax(maxX, point.x); + minY = fmin(minY, point.y); + maxY = fmax(maxY, point.y); + } + + NSRect lineRect = NSMakeRect(origin.x + minX, origin.y + minY, maxX - minX, maxY - minY); + [lines addPointer:&lineRect]; } - - NSRect lineRect = NSMakeRect(origin.x + minX, origin.y + minY, maxX - minX, maxY - minY); - [lines addPointer:&lineRect]; } - return lines; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2016-02-28 10:12:38
|
Revision: 8987 http://sourceforge.net/p/skim-app/code/8987 Author: hofman Date: 2016-02-28 10:12:36 +0000 (Sun, 28 Feb 2016) Log Message: ----------- Grow display rect for highlights horizontally on rotated pages Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2016-02-26 10:24:42 UTC (rev 8986) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2016-02-28 10:12:36 UTC (rev 8987) @@ -270,9 +270,8 @@ - (NSRect)displayRectForBounds:(NSRect)bounds lineWidth:(CGFloat)lineWidth { bounds = [super displayRectForBounds:bounds lineWidth:lineWidth]; if ([self markupType] == kPDFMarkupTypeHighlight) { - CGFloat delta = 0.03 * NSHeight(bounds); - bounds.origin.y -= delta; - bounds.size.height += delta; + CGFloat delta = -0.03 * NSHeight(bounds); + bounds = ([[self page] intrinsicRotation] % 180) == 0 ? NSInsetRect(bounds, 0.0, delta) : NSInsetRect(bounds, delta, 0.0); } return bounds; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2018-01-16 10:46:02
|
Revision: 9625 http://sourceforge.net/p/skim-app/code/9625 Author: hofman Date: 2018-01-16 10:45:59 +0000 (Tue, 16 Jan 2018) Log Message: ----------- make access to extra ivars table for markup notes thread safe, dealloc can be called on a background thread Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2018-01-15 22:00:23 UTC (rev 9624) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2018-01-16 10:45:59 UTC (rev 9625) @@ -114,13 +114,17 @@ static void (*original_dealloc)(id, SEL) = NULL; - (void)replacement_dealloc { - [extraIvarsTable removeObjectForKey:self]; + @synchronized([self class]) { + [extraIvarsTable removeObjectForKey:self]; + } original_dealloc(self, _cmd); } + (void)load { original_dealloc = (void (*)(id, SEL))SKReplaceInstanceMethodImplementationFromSelector(self, @selector(dealloc), @selector(replacement_dealloc)); - extraIvarsTable = [[NSMapTable alloc] initWithKeyOptions:NSMapTableZeroingWeakMemory | NSMapTableObjectPointerPersonality valueOptions:NSMapTableStrongMemory | NSMapTableObjectPointerPersonality capacity:0]; + @synchronized(self) { + extraIvarsTable = [[NSMapTable alloc] initWithKeyOptions:NSMapTableZeroingWeakMemory | NSMapTableObjectPointerPersonality valueOptions:NSMapTableStrongMemory | NSMapTableObjectPointerPersonality capacity:0]; + } } + (NSColor *)defaultSkimNoteColorForMarkupType:(NSInteger)markupType @@ -137,11 +141,14 @@ } - (SKPDFAnnotationMarkupExtraIvars *)extraIvars { - SKPDFAnnotationMarkupExtraIvars *extraIvars = [extraIvarsTable objectForKey:self]; - if (extraIvars == nil) { - extraIvars = [[SKPDFAnnotationMarkupExtraIvars alloc] init]; - [extraIvarsTable setObject:extraIvars forKey:self]; - [extraIvars release]; + SKPDFAnnotationMarkupExtraIvars *extraIvars = nil; + @synchronized([self class]) { + extraIvars = [extraIvarsTable objectForKey:self]; + if (extraIvars == nil) { + extraIvars = [[SKPDFAnnotationMarkupExtraIvars alloc] init]; + [extraIvarsTable setObject:extraIvars forKey:self]; + [extraIvars release]; + } } return extraIvars; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2018-01-16 10:50:13
|
Revision: 9626 http://sourceforge.net/p/skim-app/code/9626 Author: hofman Date: 2018-01-16 10:50:10 +0000 (Tue, 16 Jan 2018) Log Message: ----------- no need to call synchronized in load Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2018-01-16 10:45:59 UTC (rev 9625) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2018-01-16 10:50:10 UTC (rev 9626) @@ -122,9 +122,7 @@ + (void)load { original_dealloc = (void (*)(id, SEL))SKReplaceInstanceMethodImplementationFromSelector(self, @selector(dealloc), @selector(replacement_dealloc)); - @synchronized(self) { - extraIvarsTable = [[NSMapTable alloc] initWithKeyOptions:NSMapTableZeroingWeakMemory | NSMapTableObjectPointerPersonality valueOptions:NSMapTableStrongMemory | NSMapTableObjectPointerPersonality capacity:0]; - } + extraIvarsTable = [[NSMapTable alloc] initWithKeyOptions:NSMapTableZeroingWeakMemory | NSMapTableObjectPointerPersonality valueOptions:NSMapTableStrongMemory | NSMapTableObjectPointerPersonality capacity:0]; } + (NSColor *)defaultSkimNoteColorForMarkupType:(NSInteger)markupType This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2020-11-17 22:33:19
|
Revision: 12014 http://sourceforge.net/p/skim-app/code/12014 Author: hofman Date: 2020-11-17 22:33:17 +0000 (Tue, 17 Nov 2020) Log Message: ----------- Handle default case in switch to avoid warning Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2020-11-17 22:31:31 UTC (rev 12013) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2020-11-17 22:33:17 UTC (rev 12014) @@ -385,6 +385,7 @@ case kPDFMarkupTypeUnderline: return SKUnderlineNoteColorKey; case kPDFMarkupTypeStrikeOut: return SKStrikeOutNoteColorKey; case kPDFMarkupTypeHighlight: return SKHighlightNoteColorKey; + default: return SKHighlightNoteColorKey; } return nil; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2023-03-01 16:50:33
|
Revision: 13325 http://sourceforge.net/p/skim-app/code/13325 Author: hofman Date: 2023-03-01 16:50:31 +0000 (Wed, 01 Mar 2023) Log Message: ----------- get line rects from selection before initializing new markup note Modified Paths: -------------- trunk/PDFAnnotationMarkup_SKExtensions.m Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2023-03-01 15:35:36 UTC (rev 13324) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2023-03-01 16:50:31 UTC (rev 13325) @@ -171,8 +171,20 @@ - (id)initSkimNoteWithSelection:(PDFSelection *)selection forPage:(PDFPage *)page markupType:(NSInteger)type { if (page == nil) page = [selection safeFirstPage]; - NSRect bounds = [selection hasCharacters] ? [selection boundsForPage:page] : NSZeroRect; - if ([selection hasCharacters] == NO || NSIsEmptyRect(bounds)) { + NSRect bounds = NSZeroRect; + NSPointerArray *lines = nil; + if ([selection hasCharacters]) { + for (PDFSelection *sel in [selection selectionsByLine]) { + NSRect lineRect = [sel boundsForPage:page]; + if (NSIsEmptyRect(lineRect) == NO && [[sel string] rangeOfCharacterFromSet:[NSCharacterSet nonWhitespaceAndNewlineCharacterSet]].length) { + if (lines == nil) + lines = [[NSPointerArray alloc] initForRectPointers]; + [lines addPointer:&lineRect]; + bounds = NSUnionRect(lineRect, bounds); + } + } + } + if (lines == nil) { [[self initWithBounds:NSZeroRect] release]; self = nil; } else { @@ -179,31 +191,14 @@ self = [self initSkimNoteWithBounds:bounds markupType:type]; if (self) { NSInteger lineAngle = [page lineDirectionAngle]; - NSRect newBounds = NSZeroRect; - NSPointerArray *lines = nil; - for (PDFSelection *sel in [selection selectionsByLine]) { - NSRect lineRect = [sel boundsForPage:page]; - if (NSIsEmptyRect(lineRect) == NO && [[sel string] rangeOfCharacterFromSet:[NSCharacterSet nonWhitespaceAndNewlineCharacterSet]].length) { - if (lines == nil) - lines = [[NSPointerArray alloc] initForRectPointers]; - [lines addPointer:&lineRect]; - newBounds = NSUnionRect(lineRect, newBounds); - } - } - if (lines == nil) { - [self release]; - self = nil; - } else { - NSMutableArray *quadPoints = [[NSMutableArray alloc] init]; - NSUInteger i, iMax = [lines count]; - for (i = 0; i < iMax; i++) - addQuadPointsWithBounds(quadPoints, [lines rectAtIndex:i], newBounds.origin, lineAngle); - [self setBounds:newBounds]; - [self setQuadrilateralPoints:quadPoints]; - [[self extraIvars] setLineRects:lines]; - [quadPoints release]; - [lines release]; - } + NSMutableArray *quadPoints = [[NSMutableArray alloc] init]; + NSUInteger i, iMax = [lines count]; + for (i = 0; i < iMax; i++) + addQuadPointsWithBounds(quadPoints, [lines rectAtIndex:i], bounds.origin, lineAngle); + [self setQuadrilateralPoints:quadPoints]; + [[self extraIvars] setLineRects:lines]; + [quadPoints release]; + [lines release]; } } return self; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |