Revision: 15247
http://sourceforge.net/p/skim-app/code/15247
Author: hofman
Date: 2025-05-21 09:28:07 +0000 (Wed, 21 May 2025)
Log Message:
-----------
Allow clicking local links in presentation
Modified Paths:
--------------
trunk/SKPresentationView.m
Modified: trunk/SKPresentationView.m
===================================================================
--- trunk/SKPresentationView.m 2025-05-21 09:12:57 UTC (rev 15246)
+++ trunk/SKPresentationView.m 2025-05-21 09:28:07 UTC (rev 15247)
@@ -55,6 +55,7 @@
#import "NSView_SKExtensions.h"
#import "PDFPage_SKExtensions.h"
#import "PDFDocument_SKExtensions.h"
+#import "PDFAnnotation_SKExtensions.h"
#define NAVIGATION_BOTTOM_EDGE_HEIGHT 5.0
@@ -611,6 +612,20 @@
return [transform transformPoint:point];
}
+- (PDFAnnotation *)linkAnotationAtPoint:(NSPoint)point {
+ if (page == nil)
+ return nil;
+
+ point = [self convertPointToPage:point];
+
+ for (PDFAnnotation *annotation in [[page annotations]
reverseObjectEnumerator]) {
+ if ([annotation isLink] && [annotation hitTest:point])
+ return annotation;
+ }
+
+ return nil;
+}
+
#pragma mark Accessors
- (BOOL)canBecomeKeyView {
@@ -786,7 +801,11 @@
if ([pageLayer opacity] <= 0.0) {
[pageLayer setOpacity:1.0];
} else if ([NSApp willDragMouse] == NO) {
- [self goToNextPage:self];
+ PDFDestination *link = [[self linkAnotationAtPoint:[theEvent
locationInView:self]] destination];
+ if (link)
+ [self setPage:[link page]];
+ else
+ [self goToNextPage:self];
} else if (IS_TABLET_EVENT(theEvent, NSPointingDeviceTypePen) == NO &&
([[self window] styleMask] & NSWindowStyleMaskResizable) != 0 &&
NSEqualRects([[self window] frame], [[[self window] screen] frame]) == NO &&
(pvFlags.enableDrawing == NO || ([theEvent modifierFlags] &
NSEventModifierFlagShift) == 0)) {
pvFlags.cursorHidden = NO;
[[NSCursor closedHandCursor] set];
@@ -807,8 +826,8 @@
- (void)mouseMoved:(NSEvent *)theEvent {
pvFlags.cursorHidden = NO;
-
- [self setCursorAndAutoHide];
+ [self setCursorForMouse:theEvent];
+ [self performSelectorOnce:@selector(doAutoHide)
afterDelay:AUTO_HIDE_DELAY];
if (navigationMode != SKNavigationNone && [navWindow isVisible] == NO) {
if (navigationMode == SKNavigationEverywhere && [cursorWindow
isVisible] == NO && NSPointInRect([theEvent locationInWindow], [[[self window]
contentView] frame])) {
@@ -1114,6 +1133,8 @@
[[NSCursor arrowCursor] set];
else if (pvFlags.cursorHidden)
[[NSCursor emptyCursor] set];
+ else if ([[self linkAnotationAtPoint:point] destination])
+ [[NSCursor pointingHandCursor] set];
else if (pvFlags.useArrowCursor)
[[NSCursor arrowCursor] set];
else if (pvFlags.removeLaserPointerShadow)
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit