You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
(23) |
Apr
(254) |
May
(252) |
Jun
(209) |
Jul
(198) |
Aug
(192) |
Sep
(207) |
Oct
(120) |
Nov
(179) |
Dec
(52) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(48) |
Feb
(69) |
Mar
(129) |
Apr
(250) |
May
(113) |
Jun
(177) |
Jul
(228) |
Aug
(155) |
Sep
(218) |
Oct
(185) |
Nov
(109) |
Dec
(88) |
2009 |
Jan
(83) |
Feb
(39) |
Mar
(70) |
Apr
(47) |
May
(48) |
Jun
(67) |
Jul
(61) |
Aug
(97) |
Sep
(221) |
Oct
(141) |
Nov
(70) |
Dec
(61) |
2010 |
Jan
(45) |
Feb
(76) |
Mar
(178) |
Apr
(106) |
May
(57) |
Jun
(32) |
Jul
(64) |
Aug
(98) |
Sep
(96) |
Oct
(19) |
Nov
(34) |
Dec
(117) |
2011 |
Jan
(55) |
Feb
(48) |
Mar
(64) |
Apr
(21) |
May
(39) |
Jun
(53) |
Jul
(99) |
Aug
(56) |
Sep
(39) |
Oct
(26) |
Nov
(19) |
Dec
(69) |
2012 |
Jan
(17) |
Feb
(40) |
Mar
(17) |
Apr
|
May
(2) |
Jun
(8) |
Jul
(2) |
Aug
(10) |
Sep
(10) |
Oct
(38) |
Nov
(48) |
Dec
(70) |
2013 |
Jan
(43) |
Feb
(47) |
Mar
(39) |
Apr
(37) |
May
(25) |
Jun
(6) |
Jul
(20) |
Aug
(49) |
Sep
(33) |
Oct
(34) |
Nov
(75) |
Dec
(6) |
2014 |
Jan
(32) |
Feb
(10) |
Mar
(17) |
Apr
|
May
|
Jun
(26) |
Jul
(5) |
Aug
|
Sep
(4) |
Oct
(23) |
Nov
(80) |
Dec
(48) |
2015 |
Jan
(80) |
Feb
(50) |
Mar
(58) |
Apr
(20) |
May
(11) |
Jun
(16) |
Jul
(24) |
Aug
(27) |
Sep
(56) |
Oct
(30) |
Nov
(16) |
Dec
(6) |
2016 |
Jan
(31) |
Feb
(14) |
Mar
(23) |
Apr
(17) |
May
(40) |
Jun
(12) |
Jul
(17) |
Aug
(9) |
Sep
(32) |
Oct
(36) |
Nov
(23) |
Dec
(9) |
2017 |
Jan
(37) |
Feb
(23) |
Mar
(65) |
Apr
(22) |
May
(6) |
Jun
(3) |
Jul
|
Aug
|
Sep
(3) |
Oct
(22) |
Nov
(63) |
Dec
(71) |
2018 |
Jan
(83) |
Feb
(21) |
Mar
(35) |
Apr
(44) |
May
(14) |
Jun
(12) |
Jul
(8) |
Aug
(18) |
Sep
(10) |
Oct
(145) |
Nov
(144) |
Dec
(76) |
2019 |
Jan
(18) |
Feb
(28) |
Mar
(5) |
Apr
(208) |
May
(291) |
Jun
(158) |
Jul
(27) |
Aug
(8) |
Sep
(10) |
Oct
(83) |
Nov
(41) |
Dec
(31) |
2020 |
Jan
(16) |
Feb
(46) |
Mar
(100) |
Apr
(78) |
May
(69) |
Jun
(71) |
Jul
(28) |
Aug
(131) |
Sep
(176) |
Oct
(89) |
Nov
(147) |
Dec
(19) |
2021 |
Jan
(19) |
Feb
(25) |
Mar
(91) |
Apr
(98) |
May
(14) |
Jun
(44) |
Jul
(8) |
Aug
(3) |
Sep
(38) |
Oct
(57) |
Nov
(97) |
Dec
(74) |
2022 |
Jan
(89) |
Feb
(47) |
Mar
(15) |
Apr
(50) |
May
(54) |
Jun
(56) |
Jul
(80) |
Aug
(12) |
Sep
(11) |
Oct
(60) |
Nov
(48) |
Dec
(4) |
2023 |
Jan
(75) |
Feb
(49) |
Mar
(84) |
Apr
(24) |
May
(13) |
Jun
(74) |
Jul
(32) |
Aug
(66) |
Sep
(50) |
Oct
(38) |
Nov
(105) |
Dec
(181) |
2024 |
Jan
(21) |
Feb
(49) |
Mar
(77) |
Apr
(84) |
May
(20) |
Jun
(71) |
Jul
(53) |
Aug
(33) |
Sep
(15) |
Oct
|
Nov
|
Dec
|
From: <ho...@us...> - 2024-09-17 16:05:41
|
Revision: 14457 http://sourceforge.net/p/skim-app/code/14457 Author: hofman Date: 2024-09-17 16:05:39 +0000 (Tue, 17 Sep 2024) Log Message: ----------- Register undo for page rotation by gestures only for full rotationinstead of 90 degree steps Modified Paths: -------------- trunk/SKMainWindowController_UI.m trunk/SKPDFView.h trunk/SKPDFView.m Modified: trunk/SKMainWindowController_UI.m =================================================================== --- trunk/SKMainWindowController_UI.m 2024-09-17 15:47:33 UTC (rev 14456) +++ trunk/SKMainWindowController_UI.m 2024-09-17 16:05:39 UTC (rev 14457) @@ -1570,8 +1570,15 @@ [self showSnapshotAtPageNumber:pageNum forRect:rect scaleFactor:scaleFactor autoFits:autoFits]; } -- (void)PDFView:(PDFView *)sender rotatePageAtIndex:(NSUInteger)idx by:(NSInteger)rotation { - [self rotatePageAtIndex:idx by:rotation]; +- (void)PDFView:(PDFView *)sender didRotatePageAtIndex:(NSUInteger)idx by:(NSInteger)rotation { + NSUndoManager *undoManager = [[self document] undoManager]; + [[undoManager prepareWithInvocationTarget:self] rotatePageAtIndex:idx by:-rotation]; + [undoManager setActionName:NSLocalizedString(@"Rotate Page", @"Undo action name")]; + [undoManager setActionIsDiscardable:YES]; + + PDFPage *page = [[pdfView document] pageAtIndex:idx]; + [[NSNotificationCenter defaultCenter] postNotificationName:SKPDFPageBoundsDidChangeNotification + object:[pdfView document] userInfo:@{SKPDFPageActionKey:SKPDFPageActionRotate, SKPDFPagePageKey:page}]; } - (NSUndoManager *)undoManagerForPDFView:(PDFView *)sender { Modified: trunk/SKPDFView.h =================================================================== --- trunk/SKPDFView.h 2024-09-17 15:47:33 UTC (rev 14456) +++ trunk/SKPDFView.h 2024-09-17 16:05:39 UTC (rev 14457) @@ -125,7 +125,7 @@ - (void)PDFView:(PDFView *)sender showSnapshotAtPageNumber:(NSInteger)pageNum forRect:(NSRect)rect scaleFactor:(CGFloat)scaleFactor autoFits:(BOOL)autoFits; - (void)PDFViewPerformHideFind:(PDFView *)sender; - (BOOL)PDFViewIsFindVisible:(PDFView *)sender; -- (void)PDFView:(PDFView *)sender rotatePageAtIndex:(NSUInteger)idx by:(NSInteger)rotation; +- (void)PDFView:(PDFView *)sender didRotatePageAtIndex:(NSUInteger)idx by:(NSInteger)rotation; - (nullable NSUndoManager *)undoManagerForPDFView:(PDFView *)sender; @end Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2024-09-17 15:47:33 UTC (rev 14456) +++ trunk/SKPDFView.m 2024-09-17 16:05:39 UTC (rev 14457) @@ -2076,23 +2076,35 @@ } - (void)rotateWithEvent:(NSEvent *)theEvent { - if ([theEvent phase] == NSEventPhaseBegan) { + NSEventPhase phase = [theEvent phase]; + if (phase == NSEventPhaseBegan) { PDFPage *page = [self pageAndPoint:NULL forEvent:theEvent nearest:YES]; gestureRotation = 0.0; gesturePageIndex = [(page ?: [self currentPage]) pageIndex]; + } else if (phase == NSEventPhaseMayBegin) { + gestureRotation = 0.0; + gesturePageIndex = NSNotFound; + return; + } else if (phase == NSEventPhaseNone || gesturePageIndex == NSNotFound) { + return; } + NSInteger prevRotation = 90 * (NSInteger)round(gestureRotation / 90.0); gestureRotation -= [theEvent rotation]; - if (fabs(gestureRotation) > 45.0 && gesturePageIndex != NSNotFound) { - CGFloat rotation = 90.0 * round(gestureRotation / 90.0); - if ([[self delegate] respondsToSelector:@selector(PDFView:rotatePageAtIndex:by:)]) { - [[self delegate] PDFView:self rotatePageAtIndex:gesturePageIndex by:(NSInteger)rotation]; - } else { + NSInteger rotation = 90 * (NSInteger)round(gestureRotation / 90.0); + if (((rotation - prevRotation) % 360)) { + PDFPage *page = [[self document] pageAtIndex:gesturePageIndex]; + [page setRotation:[page rotation] + rotation - prevRotation]; + } + if (phase == NSEventPhaseEnded) { + if ((rotation % 360) && [[self delegate] respondsToSelector:@selector(PDFView:didRotatePageAtIndex:by:)]) + [[self delegate] PDFView:self didRotatePageAtIndex:gesturePageIndex by:rotation % 360]; + gestureRotation = 0.0; + gesturePageIndex = NSNotFound; + } else if (phase == NSEventPhaseCancelled) { + if (gesturePageIndex != NSNotFound) { PDFPage *page = [[self document] pageAtIndex:gesturePageIndex]; - [page setRotation:[page rotation] + (NSInteger)rotation]; + [page setRotation:[page rotation] - rotation]; } - gestureRotation -= rotation; - } - if (([theEvent phase] == NSEventPhaseEnded || [theEvent phase] == NSEventPhaseCancelled)) { gestureRotation = 0.0; gesturePageIndex = NSNotFound; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-17 15:47:35
|
Revision: 14456 http://sourceforge.net/p/skim-app/code/14456 Author: hofman Date: 2024-09-17 15:47:33 +0000 (Tue, 17 Sep 2024) Log Message: ----------- Use a customview to display the pdf page in presentation. Simplifies the PDFView subclass and avoids flickering when pages changeor transitions. Synchronize currentPage in pdfview with the presentation view. Modified Paths: -------------- trunk/SKMainDocument.m trunk/SKMainTouchBarController.m trunk/SKMainWindowController.h trunk/SKMainWindowController.m trunk/SKMainWindowController_Actions.m trunk/SKMainWindowController_FullScreen.m trunk/SKMainWindowController_UI.m trunk/SKNavigationWindow.h trunk/SKNavigationWindow.m trunk/SKPDFView.h trunk/SKPDFView.m trunk/SKPresentationOptionsSheetController.m trunk/SKTransitionController.h trunk/SKTransitionController.m trunk/Skim.xcodeproj/project.pbxproj Added Paths: ----------- trunk/SKPresentationView.h trunk/SKPresentationView.m Modified: trunk/SKMainDocument.m =================================================================== --- trunk/SKMainDocument.m 2024-09-12 21:33:13 UTC (rev 14455) +++ trunk/SKMainDocument.m 2024-09-17 15:47:33 UTC (rev 14456) @@ -1693,11 +1693,11 @@ } - (PDFPage *)currentPage { - return [[self pdfView] currentPage]; + return [mainWindowController currentPage]; } - (void)setCurrentPage:(PDFPage *)page { - [[self pdfView] goToCurrentPage:page]; + [mainWindowController setCurrentPage:page]; } - (NSData *)currentQDPoint { @@ -1981,14 +1981,17 @@ if ([location isKindOfClass:[PDFPage class]]) { id pointData = [args objectForKey:@"At"]; - if ([pointData isKindOfClass:[NSData class]]) { + if ([mainWindowController interactionMode] == SKPresentationMode) { + [mainWindowController setCurrentPage:(PDFPage *)location]; + } else if ([pointData isKindOfClass:[NSData class]]) { NSPoint point = [(NSData *)pointData pointValueAsQDPoint]; [[self pdfView] goToDestination:[[PDFDestination alloc] initWithPage:(PDFPage *)location atPoint:point]]; } else { [[self pdfView] goToCurrentPage:(PDFPage *)location]; } + } else if ([mainWindowController interactionMode] == SKPresentationMode) { } else if ([location isKindOfClass:[PDFAnnotation class]]) { - [[self pdfView] scrollAnnotationToVisible:(PDFAnnotation *)location]; + [[self pdfView] scrollAnnotationToVisible:(PDFAnnotation *)location]; } else if ([location isKindOfClass:[PDFOutline class]]) { PDFDestination *dest = [(PDFOutline *)location destination]; if (dest) { Modified: trunk/SKMainTouchBarController.m =================================================================== --- trunk/SKMainTouchBarController.m 2024-09-12 21:33:13 UTC (rev 14455) +++ trunk/SKMainTouchBarController.m 2024-09-17 15:47:33 UTC (rev 14456) @@ -291,33 +291,30 @@ - (void)goToPreviousNextPage:(id)sender { NSInteger tag = [sender selectedSegment]; if (tag == 0) - [mainController.pdfView goToPreviousPage:sender]; + [mainController doGoToPreviousPage:sender]; else if (tag == 1) - [mainController.pdfView goToNextPage:sender]; + [mainController doGoToNextPage:sender]; } - (void)goToPreviousNextFirstLastPage:(id)sender { NSInteger tag = [sender selectedSegment]; if (tag == 0) - [mainController.pdfView goToFirstPage:sender]; + [mainController doGoToFirstPage:sender]; else if (tag == 1) - [mainController.pdfView goToNextPage:sender]; + [mainController doGoToPreviousPage:sender]; else if (tag == 2) - [mainController.pdfView goToPreviousPage:sender]; + [mainController doGoToNextPage:sender]; else if (tag == 3) - [mainController.pdfView goToLastPage:sender]; + [mainController doGoToLastPage:sender]; } - (void)zoomInActualOut:(id)sender { NSInteger tag = [sender selectedSegment]; if ([mainController interactionMode] == SKPresentationMode) { - if (tag == 0) { - if ([mainController.pdfView autoScales]) - [mainController.pdfView setScaleFactor:1.0]; - } else if (tag == 1) { - [mainController.pdfView setScaleFactor:1.0]; + if (tag == 0 || tag == 1) { + [mainController doZoomToActualSize:sender]; } else if (tag == 2) { - [mainController.pdfView setAutoScales:YES]; + [mainController doAutoScale:sender]; } } else { if (tag == 0) { @@ -368,9 +365,10 @@ } - (void)handleScaleChangedNotification:(NSNotification *)notification { - [zoomInActualOutButton setEnabled:[mainController.pdfView canZoomOut] forSegment:0]; + BOOL isPresentation = [mainController interactionMode] == SKPresentationMode; + [zoomInActualOutButton setEnabled:isPresentation == NO && [mainController.pdfView canZoomOut] forSegment:0]; [zoomInActualOutButton setEnabled:YES forSegment:1]; - [zoomInActualOutButton setEnabled:[mainController.pdfView canZoomIn] forSegment:2]; + [zoomInActualOutButton setEnabled:isPresentation || [mainController.pdfView canZoomIn] forSegment:2]; } - (void)handleToolModeChangedNotification:(NSNotification *)notification { @@ -429,6 +427,7 @@ [toolModeButton setEnabled:enabled]; [annotationModeButton setEnabled:enabled]; [noteButton setEnabled:enabled]; + [self handleScaleChangedNotification:nil]; } - (void)overviewChanged { Modified: trunk/SKMainWindowController.h =================================================================== --- trunk/SKMainWindowController.h 2024-09-12 21:33:13 UTC (rev 14455) +++ trunk/SKMainWindowController.h 2024-09-17 15:47:33 UTC (rev 14456) @@ -69,8 +69,8 @@ }; @class PDFAnnotation, PDFSelection, SKGroupedSearchResult; -@class SKPDFView, SKSecondaryPDFView, SKStatusBar, SKFindController, SKSplitView, SKFieldEditor, SKOverviewView, SKSideWindow; -@class SKLeftSideViewController, SKRightSideViewController, SKMainToolbarController, SKMainTouchBarController, SKProgressController, SKPresentationOptionsSheetController, SKNoteTypeSheetController, SKSnapshotWindowController; +@class SKPDFView, SKSecondaryPDFView, SKPresentationView, SKStatusBar, SKFindController, SKSplitView, SKFieldEditor, SKOverviewView, SKSideWindow; +@class SKLeftSideViewController, SKRightSideViewController, SKMainToolbarController, SKMainTouchBarController, SKProgressController, SKPresentationOptionsSheetController, SKNoteTypeSheetController, SKSnapshotWindowController, SKTransitionController; @interface SKMainWindowController : NSWindowController <SKSnapshotWindowControllerDelegate, SKThumbnailDelegate, SKFindControllerDelegate, SKPDFViewDelegate, SKPDFDocumentDelegate, NSTouchBarDelegate> { SKSplitView *splitView; @@ -83,6 +83,8 @@ SKSecondaryPDFView *secondaryPdfView; + SKPresentationView *presentationView; + SKLeftSideViewController *leftSideController; SKRightSideViewController *rightSideController; @@ -224,6 +226,8 @@ @property (nonatomic, nullable, readonly) NSString *searchString; +- (SKTransitionController *)transitionControllerCreating:(BOOL)create; + - (void)showSnapshotAtPageNumber:(NSInteger)pageNum forRect:(NSRect)rect scaleFactor:(CGFloat)scaleFactor autoFits:(BOOL)autoFits; - (void)showSnapshotsWithSetups:(NSArray *)setups; - (void)showNote:(PDFAnnotation *)annotation; @@ -271,6 +275,8 @@ @property (nonatomic, nullable, copy) NSString *pageLabel; +@property (nonatomic, nullable, strong) PDFPage *currentPage; + @property (nonatomic, readonly) SKInteractionMode interactionMode; @property (nonatomic) SKLeftSidePaneState leftSidePaneState; Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2024-09-12 21:33:13 UTC (rev 14455) +++ trunk/SKMainWindowController.m 2024-09-17 15:47:33 UTC (rev 14456) @@ -107,6 +107,7 @@ #import "NSObject_SKExtensions.h" #import "SKChainedUndoManager.h" #import "SKThumbnailStamp.h" +#import "SKPresentationView.h" #define MULTIPLICATION_SIGN_CHARACTER (unichar)0x00d7 @@ -158,6 +159,7 @@ #define LOCKED_KEY @"locked" #define CROPBOXES_KEY @"cropBpxes" +#define TRANSITION_KEY @"transition" #define PAGETRANSITIONS_KEY @"pageTransitions" #define WINDOW_KEY @"window" @@ -174,6 +176,8 @@ static char SKMainWindowContentLayoutObservationContext; +static char SKMainWindowTransitionsObservationContext; + #define SKLeftSidePaneWidthKey @"SKLeftSidePaneWidth" #define SKRightSidePaneWidthKey @"SKRightSidePaneWidth" @@ -212,7 +216,7 @@ @implementation SKMainWindowController @synthesize mainWindow, splitView, topConstraint, centerContentView, pdfSplitView, pdfContentView, findBarTopConstraint, statusBar, pdfView, secondaryPdfView, leftSideController, rightSideController, leftSideContentView, rightSideContentView, presentationNotesDocument, presentationNotesOffset, notes, thumbnails, snapshots, searchResults, groupedSearchResults, tags, rating, pageLabel, interactionMode, placeholderPdfDocument; -@dynamic pdfDocument, presentationOptions, presentationUndoManager, selectedNotes, hasNotes, widgetProperties, leftSidePaneState, rightSidePaneState, findPaneState, displaysFindPane, leftSidePaneIsOpen, rightSidePaneIsOpen, recentInfoNeedsUpdate, searchString, hasOverview, notesMenu; +@dynamic pdfDocument, presentationOptions, presentationUndoManager, selectedNotes, hasNotes, widgetProperties, currentPage, leftSidePaneState, rightSidePaneState, findPaneState, displaysFindPane, leftSidePaneIsOpen, rightSidePaneIsOpen, recentInfoNeedsUpdate, searchString, hasOverview, notesMenu; + (BOOL)automaticallyNotifiesObserversOfPageLabel { return NO; } @@ -1208,6 +1212,20 @@ return YES; } +- (PDFPage *)currentPage { + if ([self interactionMode] == SKPresentationMode) + return [presentationView page]; + else + return [[self pdfView] currentPage]; +} + +- (void)setCurrentPage:(PDFPage *)page { + if ([self interactionMode] == SKPresentationMode) + return [presentationView setPage:page]; + else + [[self pdfView] goToCurrentPage:page]; +} + - (SKLeftSidePaneState)leftSidePaneState { return mwcFlags.leftSidePaneState; } @@ -1399,8 +1417,21 @@ groupedSearchResults = [newGroupedSearchResults mutableCopy]; } +- (SKTransitionController *)transitionControllerCreating:(BOOL)create { + SKTransitionController *transitionController = [presentationView transitionController]; + if (transitionController == nil && create) { + transitionController = [[SKTransitionController alloc] init]; + [transitionController addObserver:self forKeyPath:TRANSITION_KEY options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:&SKMainWindowTransitionsObservationContext]; + [transitionController addObserver:self forKeyPath:PAGETRANSITIONS_KEY options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:&SKMainWindowTransitionsObservationContext]; + if (presentationView == nil) + presentationView = [[SKPresentationView alloc] init]; + [presentationView setTransitionController:transitionController]; + } + return transitionController; +} + - (NSDictionary *)presentationOptions { - SKTransitionController *transitions = [pdfView transitionController]; + SKTransitionController *transitions = [self transitionControllerCreating:NO]; SKTransitionInfo *transition = [transitions transition]; NSArray *pageTransitions = [transitions pageTransitions]; NSMutableDictionary *options = nil; @@ -1412,7 +1443,7 @@ } - (void)setPresentationOptions:(NSDictionary *)dictionary { - SKTransitionController *transitions = [pdfView transitionController]; + SKTransitionController *transitions = [self transitionControllerCreating:YES]; [transitions setTransition:[[SKTransitionInfo alloc] initWithProperties:dictionary]]; [transitions setPageTransitions:[dictionary objectForKey:PAGETRANSITIONS_KEY]]; } @@ -1545,7 +1576,7 @@ } BOOL isPresentation = [self interactionMode] == SKPresentationMode; - NSView *oldView = isPresentation ? pdfView : splitView; + NSView *oldView = isPresentation ? presentationView : splitView; NSView *contentView = [oldView superview]; BOOL hasStatus = isPresentation == NO && [statusBar isVisible]; NSArray *constraints = @[ @@ -1609,7 +1640,8 @@ animate = NO; BOOL isMainWindow = [overviewContentView window] == mainWindow; - NSView *newView = isMainWindow ? splitView : pdfView; + NSView *newView = isMainWindow ? splitView : presentationView; + NSView *newKeyView = isMainWindow ? pdfView : presentationView; NSView *contentView = [overviewContentView superview]; BOOL hasStatus = isMainWindow && [statusBar isVisible]; NSArray *constraints = @[ @@ -1625,8 +1657,7 @@ } completionHandler:^{ [touchBarController overviewChanged]; - if ([pdfView window] == [self window]) - [[self window] makeFirstResponder:pdfView]; + [[newKeyView window] makeFirstResponder:newKeyView]; if (handler) handler(); }]; @@ -1634,8 +1665,7 @@ [contentView replaceSubview:overviewContentView with:newView]; [NSLayoutConstraint activateConstraints:constraints]; [touchBarController overviewChanged]; - if ([pdfView window] == [self window]) - [[self window] makeFirstResponder:pdfView]; + [[newKeyView window] makeFirstResponder:newKeyView]; if (handler) handler(); } @@ -2160,8 +2190,11 @@ if (presentationNotes == nil) presentationNotes = [[NSMutableArray alloc] init]; [presentationNotes addObject:annotation]; - if (page) + if (page) { [self updateThumbnailAtPageIndex:[page pageIndex]]; + if ([presentationView page] == page) + [presentationView setNeedsDisplay:YES]; + } } else { [[undoManager prepareWithInvocationTarget:[notification object]] removeAnnotation:annotation]; @@ -2183,6 +2216,8 @@ [self snapshotNeedsUpdate:wc placeholder:NO]; } [secondaryPdfView setNeedsDisplayForAddedAnnotation:annotation onPage:page]; + if ([self interactionMode] == SKPresentationMode && [presentationView page] == page) + [presentationView setNeedsDisplay:YES]; } } } @@ -2197,8 +2232,11 @@ [[[self presentationUndoManager] prepareWithInvocationTarget:[notification object]] addAnnotation:annotation toPage:page]; [presentationNotes removeObject:annotation]; - if (page) + if (page) { [self updateThumbnailAtPageIndex:[page pageIndex]]; + if ([presentationView page] == page) + [presentationView setNeedsDisplay:YES]; + } } else { [[undoManager prepareWithInvocationTarget:[notification object]] addAnnotation:annotation toPage:page]; @@ -2223,6 +2261,8 @@ [self snapshotNeedsUpdate:wc placeholder:NO]; } [secondaryPdfView setNeedsDisplayForRemovedAnnotation:annotation onPage:page]; + if ([self interactionMode] == SKPresentationMode && [presentationView page] == page) + [presentationView setNeedsDisplay:YES]; } } } @@ -2246,6 +2286,8 @@ } [secondaryPdfView setNeedsDisplayForRemovedAnnotation:annotation onPage:oldPage]; [secondaryPdfView setNeedsDisplayForAddedAnnotation:annotation onPage:newPage]; + if ([self interactionMode] == SKPresentationMode && ([presentationView page] == oldPage || [presentationView page] == newPage)) + [presentationView setNeedsDisplay:YES]; } [rightSideController.noteArrayController rearrangeObjects]; @@ -2489,6 +2531,12 @@ @try { [overviewView removeObserver:self forKeyPath:@"selectionIndexPaths" context:&SKMainWindowThumbnailSelectionObservationContext]; } @catch (id e) {} } + if ([presentationView transitionController]) { + @try { [[presentationView transitionController] removeObserver:self forKeyPath:TRANSITION_KEY context:&SKMainWindowTransitionsObservationContext]; } + @catch (id e) {} + @try { [[presentationView transitionController] removeObserver:self forKeyPath:PAGETRANSITIONS_KEY context:&SKMainWindowTransitionsObservationContext]; } + @catch (id e) {} + } } #pragma mark Undo @@ -2601,13 +2649,29 @@ } } + } else if (context == &SKMainWindowTransitionsObservationContext) { + + id oldValue = [change objectForKey:NSKeyValueChangeOldKey]; + if (oldValue == [NSNull null]) + oldValue = nil; + + if ([keyPath isEqualToString:TRANSITION_KEY]) + [[[self document] undoManager] registerUndoWithTarget:object selector:@selector(setTransition:) object:oldValue]; + else if ([keyPath isEqualToString:PAGETRANSITIONS_KEY]) + [[[self document] undoManager] registerUndoWithTarget:object selector:@selector(setPageTransitions:) object:oldValue]; + } else if (context == &SKMainWindowThumbnailSelectionObservationContext) { NSIndexSet *indexes = [overviewView selectionIndexes]; if ([indexes count] == 1 && mwcFlags.updatingThumbnailSelection == 0) { NSUInteger pageIndex = [indexes firstIndex]; - if ([[pdfView currentPage] pageIndex] != pageIndex) - [pdfView goToCurrentPage:[[pdfView document] pageAtIndex:pageIndex]]; + if ([self interactionMode] == SKPresentationMode) { + if ([[presentationView page] pageIndex] != pageIndex) + [presentationView setPage:[[pdfView document] pageAtIndex:pageIndex]]; + } else { + if ([[pdfView currentPage] pageIndex] != pageIndex) + [pdfView goToCurrentPage:[[pdfView document] pageAtIndex:pageIndex]]; + } } else if ([indexes count] == 0) { mwcFlags.updatingThumbnailSelection = 1; [overviewView setSelectionIndexes:[NSIndexSet indexSetWithIndex:[[pdfView currentPage] pageIndex]]]; @@ -2705,6 +2769,9 @@ [self updateRightStatus]; } } + + if ([self interactionMode] == SKPresentationMode && [presentationView page] == page) + [presentationView setNeedsDisplay:YES]; } if (mwcFlags.autoResizeNoteRows) { Modified: trunk/SKMainWindowController_Actions.m =================================================================== --- trunk/SKMainWindowController_Actions.m 2024-09-12 21:33:13 UTC (rev 14455) +++ trunk/SKMainWindowController_Actions.m 2024-09-17 15:47:33 UTC (rev 14456) @@ -80,6 +80,7 @@ #import "PDFSelection_SKExtensions.h" #import "SKOutlineView.h" #import "SKOverviewView.h" +#import "SKPresentationView.h" #import "NSUserDefaults_SKExtensions.h" #define STATUSBAR_HEIGHT 22.0 @@ -329,20 +330,32 @@ } - (IBAction)doGoToNextPage:(id)sender { - [pdfView goToNextPage:sender]; + if ([self interactionMode] == SKPresentationMode) + [presentationView goToNextPage:sender]; + else + [pdfView goToNextPage:sender]; } - (IBAction)doGoToPreviousPage:(id)sender { - [pdfView goToPreviousPage:sender]; + if ([self interactionMode] == SKPresentationMode) + [presentationView goToPreviousPage:sender]; + else + [pdfView goToPreviousPage:sender]; } - (IBAction)doGoToFirstPage:(id)sender { - [pdfView goToFirstPage:sender]; + if ([self interactionMode] == SKPresentationMode) + [presentationView goToFirstPage:sender]; + else + [pdfView goToFirstPage:sender]; } - (IBAction)doGoToLastPage:(id)sender { - [pdfView goToLastPage:sender]; + if ([self interactionMode] == SKPresentationMode) + [presentationView goToLastPage:sender]; + else + [pdfView goToLastPage:sender]; } - (IBAction)doGoToPage:(id)sender { @@ -364,10 +377,14 @@ - (IBAction)doGoBack:(id)sender { [pdfView goBack:sender]; + if ([self interactionMode] == SKPresentationMode) + [presentationView setPage:[pdfView currentPage]]; } - (IBAction)doGoForward:(id)sender { [pdfView goForward:sender]; + if ([self interactionMode] == SKPresentationMode) + [presentationView setPage:[pdfView currentPage]]; } - (IBAction)goToMarkedPage:(id)sender { @@ -375,6 +392,7 @@ NSUInteger currentPageIndex = [[pdfView currentPage] pageIndex]; if (markedPage.pageIndex == NSNotFound || [pdfDoc isLocked] || [pdfDoc pageCount] == 0) { NSBeep(); + return; } else if (beforeMarkedPage.pageIndex != NSNotFound) { beforeMarkedPage.pageIndex = MIN(beforeMarkedPage.pageIndex, [pdfDoc pageCount] - 1); [pdfView goToCurrentDestination:beforeMarkedPage]; @@ -383,6 +401,8 @@ markedPage.pageIndex = MIN(markedPage.pageIndex, [pdfDoc pageCount] - 1); [pdfView goToCurrentDestination:markedPage]; } + if ([self interactionMode] == SKPresentationMode) + [presentationView setPage:[pdfView currentPage]]; } - (IBAction)markPage:(id)sender { @@ -409,7 +429,10 @@ } - (IBAction)doZoomToActualSize:(id)sender { - [pdfView setScaleFactor:1.0]; + if ([self interactionMode] == SKPresentationMode) + [presentationView setAutoScales:NO]; + else + [pdfView setScaleFactor:1.0]; } - (IBAction)doZoomToSelection:(id)sender { @@ -468,12 +491,15 @@ } - (IBAction)doAutoScale:(id)sender { - [pdfView setAutoScales:YES]; + if ([self interactionMode] == SKPresentationMode) + [presentationView setAutoScales:YES]; + else + [pdfView setAutoScales:YES]; } - (IBAction)toggleAutoScale:(id)sender { if ([self interactionMode] == SKPresentationMode) - [pdfView toggleAutoActualSize:sender]; + [presentationView toggleAutoActualSize:sender]; else [pdfView setAutoScales:[pdfView autoScales] == NO]; } @@ -1226,6 +1252,8 @@ [self toggleLeftSidePane:sender]; else if ([self hasOverview]) [self hideOverviewAnimating:YES]; + else if ([presentationView hasBlackout]) + [presentationView toggleBlackout:sender]; else [self exitPresentation]; } else if ([self hasOverview]) { Modified: trunk/SKMainWindowController_FullScreen.m =================================================================== --- trunk/SKMainWindowController_FullScreen.m 2024-09-12 21:33:13 UTC (rev 14455) +++ trunk/SKMainWindowController_FullScreen.m 2024-09-17 15:47:33 UTC (rev 14456) @@ -65,6 +65,7 @@ #import "NSColor_SKExtensions.h" #import "SKStatusBar.h" #import "SKAnimatedBorderlessWindow.h" +#import "SKPresentationView.h" #import "NSWindow_SKExtensions.h" #define MAINWINDOWFRAME_KEY @"windowFrame" @@ -190,61 +191,6 @@ return alternateScreens; } -- (void)enterPresentationMode { - NSScrollView *scrollView = [pdfView scrollView]; - [savedNormalSetup setObject:[NSNumber numberWithBool:[scrollView hasHorizontalScroller]] forKey:HASHORIZONTALSCROLLER_KEY]; - [savedNormalSetup setObject:[NSNumber numberWithBool:[scrollView hasVerticalScroller]] forKey:HASVERTICALSCROLLER_KEY]; - [savedNormalSetup setObject:[NSNumber numberWithBool:[scrollView autohidesScrollers]] forKey:AUTOHIDESSCROLLERS_KEY]; - [savedNormalSetup setObject:[NSNumber numberWithBool:[scrollView drawsBackground]] forKey:DRAWSBACKGROUND_KEY]; - // Set up presentation mode - [pdfView setNeedsRewind:YES]; - [pdfView setBackgroundColor:[NSColor clearColor]]; - [pdfView setAutoScales:YES]; - [pdfView setDisplayMode:kPDFDisplaySinglePage]; - [pdfView setDisplayBox:kPDFDisplayBoxCropBox]; - [pdfView setDisplaysPageBreaks:NO]; - [scrollView setAutohidesScrollers:YES]; - [scrollView setHasHorizontalScroller:NO]; - [scrollView setHasVerticalScroller:NO]; - [scrollView setDrawsBackground:NO]; - if (mwcFlags.fullSizeContent) { - [scrollView setAutomaticallyAdjustsContentInsets:YES]; - [scrollView setContentInsets:NSEdgeInsetsZero]; - } - - [pdfView setCurrentSelection:nil]; - if ([pdfView hasReadingBar]) - [pdfView toggleReadingBar]; - - if ([[NSUserDefaults standardUserDefaults] boolForKey:SKResizablePresentationKey]) { - [[self window] setStyleMask:[[self window] styleMask] | NSWindowStyleMaskResizable]; - [[self window] setHasShadow:YES]; - } - - // prevent sleep - if (activity == nil) - activity = [[NSProcessInfo processInfo] beginActivityWithOptions:NSActivityUserInitiated | NSActivityIdleDisplaySleepDisabled | NSActivityIdleSystemSleepDisabled reason:@"Presentation"]; -} - -- (void)exitPresentationMode { - if (activity) { - [[NSProcessInfo processInfo] endActivity:activity]; - activity = nil; - } - - [self removePresentationNotesNavigation]; - - NSScrollView *scrollView = [pdfView scrollView]; - [scrollView setHasHorizontalScroller:[[savedNormalSetup objectForKey:HASHORIZONTALSCROLLER_KEY] boolValue]]; - [scrollView setHasVerticalScroller:[[savedNormalSetup objectForKey:HASVERTICALSCROLLER_KEY] boolValue]]; - [scrollView setAutohidesScrollers:[[savedNormalSetup objectForKey:AUTOHIDESSCROLLERS_KEY] boolValue]]; - [scrollView setDrawsBackground:[[savedNormalSetup objectForKey:DRAWSBACKGROUND_KEY] boolValue]]; - if (mwcFlags.fullSizeContent && [[findController view] window]) { - [scrollView setAutomaticallyAdjustsContentInsets:NO]; - [scrollView setContentInsets:NSEdgeInsetsMake([findController height] + titleBarHeight, 0.0, 0.0, 0.0)]; - } -} - - (void)showNotesForPresentationWindow:(NSWindow *)window { PDFDocument *pdfDoc = [[self presentationNotesDocument] pdfDocument]; NSInteger offset = [self presentationNotesOffset]; @@ -284,7 +230,8 @@ [mainWindow makeKeyAndOrderFront:nil]; } [mainWindow display]; - [mainWindow makeFirstResponder:[self hasOverview] ? overviewView : pdfView]; + if ([pdfView window] == mainWindow) + [mainWindow makeFirstResponder:pdfView]; [mainWindow recalculateKeyViewLoop]; [mainWindow setDelegate:self]; [mainWindow makeKeyWindow]; @@ -327,36 +274,27 @@ [window setAlphaValue:0.0]; } -- (void)displayStaticContentInPresentationWindow:(NSWindow *)window { - NSRect rect = [[window contentView] bounds]; - NSBitmapImageRep *imageRep = nil; - - if ([pdfView window] == window) { - imageRep = [pdfView bitmapImageRepCachingDisplay]; - } else { - PDFPage *page = [pdfView currentPage]; - NSRect pageRect = [page boundsForBox:kPDFDisplayBoxCropBox]; - if (([page rotation] % 180) != 0) - pageRect = NSMakeRect(0.0, 0.0, NSHeight(pageRect), NSWidth(pageRect)); - CGFloat scale = fmin(NSHeight(rect) / NSHeight(pageRect), NSWidth(rect) / NSWidth(pageRect)); - pageRect = NSInsetRect(rect, 0.5 * (NSWidth(rect) - scale * NSWidth(pageRect)), 0.5 * (NSHeight(rect) - scale * NSHeight(pageRect))); - imageRep = [[window contentView] bitmapImageRepForCachingDisplayInRect:rect]; - CGContextRef context = [[NSGraphicsContext graphicsContextWithBitmapImageRep:imageRep] CGContext]; - CGContextSetFillColorWithColor(context, CGColorGetConstantColor(kCGColorWhite)); - CGContextFillRect(context, SKPixelAlignedRect(NSRectToCGRect(pageRect), context)); - CGContextSaveGState(context); - CGContextTranslateCTM(context, NSMinX(pageRect), NSMinY(pageRect)); - CGContextScaleCTM(context, scale, scale); - [page drawWithBox:kPDFDisplayBoxCropBox toContext:context]; - CGContextRestoreGState(context); +#pragma mark SKPresentationView delegate + +- (void)handlePresentationViewPageChanged:(NSNotification *)notification { + PDFPage *page = [presentationView page]; + if (page) { + if (page != [pdfView currentPage]) { + // make sure we can synchronize the page between the presentationView and the pdfView + if ([pdfView displayMode] != kPDFDisplaySinglePage) + [pdfView setExtendedDisplayMode:kPDFDisplaySinglePage]; + [pdfView goToCurrentPage:page]; + } + if ([self presentationNotesDocument]) { + PDFDocument *pdfDoc = [[self presentationNotesDocument] pdfDocument]; + NSInteger offset = [self presentationNotesOffset]; + NSUInteger pageIndex = (NSUInteger)MAX(0, MIN((NSInteger)[pdfDoc pageCount], (NSInteger)pageIndex + offset)); + if ([self presentationNotesDocument] == [self document]) + [[presentationPreview pdfView] goToCurrentPage:[pdfDoc pageAtIndex:pageIndex]]; + else + [[self presentationNotesDocument] setCurrentPage:[pdfDoc pageAtIndex:pageIndex]]; + } } - - NSImage *image = [[NSImage alloc] initWithSize:rect.size]; - [image addRepresentation:imageRep]; - - if ([pdfView window] == window) - [pdfView removeFromSuperview]; - [[window addImageViewWithImage:image] setContentFilters:SKColorEffectFilters()]; } #pragma mark API @@ -412,7 +350,15 @@ NSWindow *presentationWindow = [[SKFullScreenWindow alloc] initWithContentRect:[screen ?: [mainWindow screen] frame]]; [presentationWindow setAlphaValue:0.0]; - [self displayStaticContentInPresentationWindow:presentationWindow]; + + if (presentationView == nil) + presentationView = [[SKPresentationView alloc] initWithFrame:[[presentationWindow contentView] bounds]]; + [[presentationWindow contentView] addSubviewWithConstraints:presentationView]; + [presentationWindow makeFirstResponder:presentationView]; + [presentationView setAutoScales:YES]; + [presentationView setPage:[pdfView currentPage]]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePresentationViewPageChanged:) name:SKPresentationViewPageChangedNotification object:presentationView]; + [presentationWindow orderFront:nil]; if ([self presentationNotesDocument]) @@ -429,7 +375,7 @@ [[[presentationPreview window] animator] setAlphaValue:1.0]; } completionHandler:^{ - PDFPage *page = [[self pdfView] currentPage]; + //PDFPage *page = [[self pdfView] currentPage]; if ([[[self window] tabbedWindows] count] > 1) { NSUInteger tabIndex = [[[self window] tabbedWindows] indexOfObject:[self window]]; @@ -454,21 +400,19 @@ if ([self hasOverview]) [self hideOverviewAnimating:NO]; - [self enterPresentationMode]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:SKResizablePresentationKey]) { + [[self window] setStyleMask:[[self window] styleMask] | NSWindowStyleMaskResizable]; + [[self window] setHasShadow:YES]; + } - [[[[presentationWindow contentView] subviews] firstObject] removeFromSuperview]; - [[presentationWindow contentView] addSubviewWithConstraints:pdfView]; - [pdfView layoutDocumentView]; - [pdfView requiresDisplay]; - [presentationWindow makeFirstResponder:pdfView]; - [presentationWindow recalculateKeyViewLoop]; + // prevent sleep + if (activity == nil) + activity = [[NSProcessInfo processInfo] beginActivityWithOptions:NSActivityUserInitiated | NSActivityIdleDisplaySleepDisabled | NSActivityIdleSystemSleepDisabled reason:@"Presentation"]; + [presentationWindow setDelegate:self]; - if ([[pdfView currentPage] isEqual:page] == NO) - [pdfView goToPage:page]; + [presentationView didOpen]; - [pdfView setPresentationMode:YES]; - [touchBarController interactionModeChanged]; mwcFlags.isSwitchingFullScreen = 0; @@ -479,9 +423,6 @@ if ([self canExitPresentation] == NO) return; - NSColor *backgroundColor = [PDFView defaultBackgroundColor]; - PDFPage *page = [[self pdfView] currentPage]; - mwcFlags.isSwitchingFullScreen = 1; if ([self leftSidePaneIsOpen]) @@ -495,13 +436,11 @@ presentationNotes = nil; presentationUndoManager = nil; - // do this first, otherwise the navigation window may be covered by fadeWindow and then reveiled again, which looks odd - [pdfView setPresentationMode:NO]; + [presentationView willClose]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:SKPresentationViewPageChangedNotification object:presentationView]; NSWindow *presentationWindow = [self window]; - [self displayStaticContentInPresentationWindow:presentationWindow]; - while ([[presentationWindow childWindows] count] > 0) { NSWindow *childWindow = [[presentationWindow childWindows] lastObject]; [presentationWindow removeChildWindow:childWindow]; @@ -513,21 +452,20 @@ interactionMode = SKNormalMode; - // this should be done before exitPresentationMode to get a smooth transition - [pdfContentView addSubview:pdfView positioned:NSWindowBelow relativeTo:nil]; - [NSLayoutConstraint activateConstraints:@[ - [[pdfView leadingAnchor] constraintEqualToAnchor:[pdfContentView leadingAnchor]], - [[pdfContentView trailingAnchor] constraintEqualToAnchor:[pdfView trailingAnchor]], - [[pdfView topAnchor] constraintEqualToAnchor:[pdfContentView topAnchor]], - [[pdfContentView bottomAnchor] constraintEqualToAnchor:[pdfView bottomAnchor]]]]; - [pdfView setBackgroundColor:backgroundColor]; - [secondaryPdfView setBackgroundColor:backgroundColor]; - if ([self hasOverview]) - [overviewContentView removeFromSuperview]; + if (activity) { + [[NSProcessInfo processInfo] endActivity:activity]; + activity = nil; + } - [self exitPresentationMode]; - [self applyPDFSettings:savedNormalSetup rewind:YES]; + [self removePresentationNotesNavigation]; + PDFDisplayMode mode = [[savedNormalSetup objectForKey:@"displayMode"] integerValue]; + if (mode == kPDFDisplaySinglePageContinuous && [[savedNormalSetup objectForKey:@"displayDirection"] boolValue]) + mode = kPDFDisplayHorizontalContinuous; + //make sure we reset the display mode + if (mode != [pdfView extendedDisplayMode]) + [pdfView setExtendedDisplayModeAndRewind:mode]; + [pdfView layoutDocumentView]; [pdfView requiresDisplay]; @@ -537,9 +475,6 @@ } mwcFlags.thumbnailsUpdatedDuringPresentaton = 0; - if ([[[self pdfView] currentPage] isEqual:page] == NO) - [[self pdfView] goToCurrentPage:page]; - mwcFlags.isSwitchingFullScreen = 0; [self forceSubwindowsOnTop:NO]; @@ -574,7 +509,11 @@ [[[presentationPreview window] animator] setAlphaValue:0.0]; } completionHandler:^{ + if ([overviewContentView window] == presentationWindow) + [overviewContentView removeFromSuperview]; [presentationWindow orderOut:nil]; + [presentationView setPage:nil]; + [presentationView setAutoScales:NO]; if (presentationPreview) { [[presentationPreview window] setAnimationBehavior:NSWindowAnimationBehaviorNone]; [presentationPreview close]; Modified: trunk/SKMainWindowController_UI.m =================================================================== --- trunk/SKMainWindowController_UI.m 2024-09-12 21:33:13 UTC (rev 14455) +++ trunk/SKMainWindowController_UI.m 2024-09-17 15:47:33 UTC (rev 14456) @@ -90,6 +90,7 @@ #import "NSObject_SKExtensions.h" #import "NSPasteboard_SKExtensions.h" #import "SKApplicationController.h" +#import "SKPresentationView.h" #define NOTES_KEY @"notes" #define SNAPSHOTS_KEY @"snapshots" @@ -483,11 +484,16 @@ if ([[aNotification object] isEqual:leftSideController.thumbnailTableView]) { if (mwcFlags.updatingThumbnailSelection == 0) { NSInteger row = [leftSideController.thumbnailTableView selectedRow]; - if (row != -1) - [pdfView goToCurrentPage:[[pdfView document] pageAtIndex:row]]; - - if ([self interactionMode] == SKPresentationMode && [[NSUserDefaults standardUserDefaults] boolForKey:SKAutoHidePresentationContentsKey]) - [self hideSideWindow]; + if ([self interactionMode] == SKPresentationMode) { + if (row != -1) + [presentationView setPage:[[pdfView document] pageAtIndex:row]]; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:SKAutoHidePresentationContentsKey]) + [self hideSideWindow]; + } else { + if (row != -1) + [pdfView goToCurrentPage:[[pdfView document] pageAtIndex:row]]; + } } } else if ([[aNotification object] isEqual:rightSideController.snapshotTableView]) { NSInteger row = [[aNotification object] selectedRow]; @@ -1564,18 +1570,6 @@ [self showSnapshotAtPageNumber:pageNum forRect:rect scaleFactor:scaleFactor autoFits:autoFits]; } -- (void)PDFViewExitPresentation:(PDFView *)sender { - [self exitPresentation]; -} - -- (void)PDFViewTogglePages:(PDFView *)sender { - [self toggleOverview:sender]; -} - -- (void)PDFViewToggleContents:(PDFView *)sender { - [self toggleLeftSidePane:sender]; -} - - (void)PDFView:(PDFView *)sender rotatePageAtIndex:(NSUInteger)idx by:(NSInteger)rotation { [self rotatePageAtIndex:idx by:rotation]; } @@ -1801,7 +1795,7 @@ } else if (action == @selector(doZoomOut:)) { return [self interactionMode] != SKPresentationMode && [self hasOverview] == NO && [pdfView canZoomOut]; } else if (action == @selector(doZoomToActualSize:)) { - return [[self pdfDocument] isLocked] == NO && ([pdfView autoScales] || fabs([pdfView scaleFactor] - 1.0) > 0.0); + return [[self pdfDocument] isLocked] == NO && ([self interactionMode] == SKPresentationMode ? [presentationView autoScales] : ([pdfView autoScales] || fabs([pdfView scaleFactor] - 1.0) > 0.0)); } else if (action == @selector(doZoomToPhysicalSize:)) { return [self interactionMode] != SKPresentationMode && [self hasOverview] == NO && [[self pdfDocument] isLocked] == NO && ([pdfView autoScales] || fabs([pdfView physicalScaleFactor] - 1.0 ) > 0.001); } else if (action == @selector(doZoomToSelection:)) { @@ -1818,9 +1812,9 @@ } return [self interactionMode] != SKPresentationMode && [self hasOverview] == NO && [[self pdfDocument] isLocked] == NO; } else if (action == @selector(doAutoScale:)) { - return [[self pdfDocument] isLocked] == NO && [pdfView autoScales] == NO && [self hasOverview] == NO; + return [[self pdfDocument] isLocked] == NO && ([self interactionMode] == SKPresentationMode ? [presentationView autoScales] == NO : [pdfView autoScales] == NO) && [self hasOverview] == NO; } else if (action == @selector(toggleAutoScale:)) { - [menuItem setState:[pdfView autoScales] ? NSControlStateValueOn : NSControlStateValueOff]; + [menuItem setState:([self interactionMode] == SKPresentationMode ? [presentationView autoScales] : [pdfView autoScales]) ? NSControlStateValueOn : NSControlStateValueOff]; return [[self pdfDocument] isLocked] == NO && [self hasOverview] == NO; } else if (action == @selector(rotateRight:) || action == @selector(rotateLeft:) || action == @selector(rotateAllRight:) || action == @selector(rotateAllLeft:)) { return [self interactionMode] != SKPresentationMode && [[self pdfDocument] isLocked] == NO; @@ -1996,16 +1990,6 @@ [self updateLeftStatus]; if ([[NSUserDefaults standardUserDefaults] boolForKey:SKDisplayPageBoundsKey]) [self updateRightStatus]; - - if ([self interactionMode] == SKPresentationMode && [self presentationNotesDocument]) { - PDFDocument *pdfDoc = [[self presentationNotesDocument] pdfDocument]; - NSInteger offset = [self presentationNotesOffset]; - pageIndex = (NSUInteger)MAX(0, MIN((NSInteger)[pdfDoc pageCount], (NSInteger)pageIndex + offset)); - if ([self presentationNotesDocument] == [self document]) - [[presentationPreview pdfView] goToCurrentPage:[pdfDoc pageAtIndex:pageIndex]]; - else - [[self presentationNotesDocument] setCurrentPage:[pdfDoc pageAtIndex:pageIndex]]; - } mwcFlags.recentInfoNeedsUpdate = 1; } Modified: trunk/SKNavigationWindow.h =================================================================== --- trunk/SKNavigationWindow.h 2024-09-12 21:33:13 UTC (rev 14455) +++ trunk/SKNavigationWindow.h 2024-09-17 15:47:33 UTC (rev 14456) @@ -41,10 +41,10 @@ NS_ASSUME_NONNULL_BEGIN -@class SKPDFView, SKNavigationToolTipView, SKNavigationButton; +@class SKPresentationView, SKNavigationToolTipView, SKNavigationButton; @interface SKHUDWindow : SKAnimatedBorderlessWindow -- (instancetype)initWithPDFView:(SKPDFView *)pdfView; +- (instancetype)initWithView:(SKPresentationView *)pdfView; - (void)showForWindow:(NSWindow *)window; - (void)handleParentWindowDidResizeNotification:(NSNotification *)notification; @end @@ -57,7 +57,7 @@ SKNavigationButton *cursorButton; SKNavigationButton *closeButton; } -- (void)handleScaleChangedNotification:(NSNotification *)notification; +- (void)handleAutoScalesChangedNotification:(NSNotification *)notification; - (void)handlePageChangedNotification:(NSNotification *)notification; @end Modified: trunk/SKNavigationWindow.m =================================================================== --- trunk/SKNavigationWindow.m 2024-09-12 21:33:13 UTC (rev 14455) +++ trunk/SKNavigationWindow.m 2024-09-17 15:47:33 UTC (rev 14456) @@ -37,9 +37,8 @@ */ #import "SKNavigationWindow.h" -#import <Quartz/Quartz.h> #import "NSBezierPath_SKExtensions.h" -#import "SKPDFView.h" +#import "SKPresentationView.h" #import "NSParagraphStyle_SKExtensions.h" #import "NSGeometry_SKExtensions.h" #import "PDFView_SKExtensions.h" @@ -74,8 +73,8 @@ @implementation SKHUDWindow -- (instancetype)initWithPDFView:(SKPDFView *)pdfView { - NSScreen *screen = [[pdfView window] screen] ?: [NSScreen mainScreen]; +- (instancetype)initWithView:(SKPresentationView *)presentationView { + NSScreen *screen = [[presentationView window] screen] ?: [NSScreen mainScreen]; CGFloat width = 5 * BUTTON_WIDTH + 3 * SEP_WIDTH + 2 * BUTTON_MARGIN; NSRect contentRect = NSMakeRect(NSMidX([screen frame]) - 0.5 * width, NSMinY([screen frame]) + WINDOW_OFFSET, width, BUTTON_HEIGHT + 2 * BUTTON_MARGIN); self = [super initWithContentRect:contentRect]; @@ -83,7 +82,7 @@ [self setIgnoresMouseEvents:NO]; [self setDisplaysWhenScreenProfileChanges:YES]; - [self setLevel:[[pdfView window] level]]; + [self setLevel:[[presentationView window] level]]; [self setMovableByWindowBackground:YES]; contentRect.origin = NSZeroPoint; @@ -147,26 +146,26 @@ @implementation SKNavigationWindow -- (instancetype)initWithPDFView:(SKPDFView *)pdfView { - self = [super initWithPDFView:pdfView]; +- (instancetype)initWithView:(SKPresentationView *)presentationView { + self = [super initWithView:presentationView]; if (self) { NSRect rect = NSMakeRect(BUTTON_MARGIN, BUTTON_MARGIN, BUTTON_WIDTH, BUTTON_HEIGHT); previousButton = [[SKNavigationButton alloc] initWithFrame:rect]; - [previousButton setTarget:pdfView]; + [previousButton setTarget:presentationView]; [previousButton setAction:@selector(goToPreviousPage:)]; [previousButton setToolTip:NSLocalizedString(@"Previous", @"Tool tip message")]; [previousButton setPath:previousButtonPath(rect.size)]; - [previousButton setEnabled:[pdfView canGoToPreviousPage]]; + [previousButton setEnabled:[presentationView canGoToPreviousPage]]; [[self contentView] addSubview:previousButton]; rect.origin.x = NSMaxX(rect); nextButton = [[SKNavigationButton alloc] initWithFrame:rect]; - [nextButton setTarget:pdfView]; + [nextButton setTarget:presentationView]; [nextButton setAction:@selector(goToNextPage:)]; [nextButton setToolTip:NSLocalizedString(@"Next", @"Tool tip message")]; [nextButton setPath:nextButtonPath(rect.size)]; - [nextButton setEnabled:[pdfView canGoToNextPage]]; + [nextButton setEnabled:[presentationView canGoToNextPage]]; [[self contentView] addSubview:nextButton]; rect.origin.x = NSMaxX(rect); @@ -176,19 +175,19 @@ rect.origin.x = NSMaxX(rect); rect.size.width = BUTTON_WIDTH; zoomButton = [[SKNavigationButton alloc] initWithFrame:rect]; - [zoomButton setTarget:pdfView]; + [zoomButton setTarget:presentationView]; [zoomButton setAction:@selector(toggleAutoActualSize:)]; [zoomButton setToolTip:NSLocalizedString(@"Fit to Screen", @"Tool tip message")]; [zoomButton setAlternateToolTip:NSLocalizedString(@"Actual Size", @"Tool tip message")]; [zoomButton setPath:zoomButtonPath(rect.size)]; [zoomButton setAlternatePath:alternateZoomButtonPath(rect.size)]; - [zoomButton setState:[pdfView autoScales]]; + [zoomButton setState:[presentationView autoScales]]; [zoomButton setButtonType:NSPushOnPushOffButton]; [[self contentView] addSubview:zoomButton]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleScaleChangedNotification:) - name:PDFViewScaleChangedNotification object:pdfView]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleAutoScalesChangedNotification:) + name:SKPresentationViewAutoScalesChangedNotification object:presentationView]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePageChangedNotification:) - name:PDFViewPageChangedNotification object:pdfView]; + name:SKPresentationViewPageChangedNotification object:presentationView]; rect.origin.x = NSMaxX(rect); rect.size.width = SEP_WIDTH; @@ -197,7 +196,7 @@ rect.origin.x = NSMaxX(rect); rect.size.width = BUTTON_WIDTH; cursorButton = [[SKNavigationButton alloc] initWithFrame:rect]; - [cursorButton setTarget:pdfView]; + [cursorButton setTarget:presentationView]; [cursorButton setAction:@selector(showCursorStyleWindow:)]; [cursorButton setToolTip:NSLocalizedString(@"Pointer", @"Tool tip message")]; [cursorButton setPath:cursorButtonPath(rect.size)]; @@ -210,13 +209,13 @@ rect.origin.x = NSMaxX(rect); rect.size.width = BUTTON_WIDTH; closeButton = [[SKNavigationButton alloc] initWithFrame:rect]; - [closeButton setTarget:pdfView]; + [closeButton setTarget:presentationView]; [closeButton setAction:@selector(exitPresentation:)]; [closeButton setToolTip:NSLocalizedString(@"Close", @"Tool tip message")]; [closeButton setPath:closeButtonPath(rect.size)]; [[self contentView] addSubview:closeButton]; - NSScreen *screen = [[pdfView window] screen] ?: [NSScreen mainScreen]; + NSScreen *screen = [[presentationView window] screen] ?: [NSScreen mainScreen]; NSRect frame; frame.size.width = 5 * BUTTON_WIDTH + 3 * SEP_WIDTH + 2 * BUTTON_MARGIN; frame.size.height = BUTTON_HEIGHT + 2.0 * BUTTON_MARGIN; @@ -233,7 +232,7 @@ [super orderOut:sender]; } -- (void)handleScaleChangedNotification:(NSNotification *)notification { +- (void)handleAutoScalesChangedNotification:(NSNotification *)notification { [zoomButton setState:[[notification object] autoScales] ? NSControlStateValueOn : NSControlStateValueOff]; } @@ -251,8 +250,8 @@ @implementation SKCursorStyleWindow -- (instancetype)initWithPDFView:(SKPDFView *)pdfView { - self = [super initWithPDFView:pdfView]; +- (instancetype)initWithView:(SKPresentationView *)presentationView { + self = [super initWithView:presentationView]; if (self) { NSRect rect; @@ -270,8 +269,8 @@ rect = [styleButton frame]; rect.origin.x = rect.origin.y = BUTTON_MARGIN; [styleButton setFrame:rect]; - [styleButton selectSegmentWithTag:[pdfView cursorStyle]]; - [styleButton setTarget:pdfView]; + [styleButton selectSegmentWithTag:[presentationView cursorStyle]]; + [styleButton setTarget:presentationView]; [styleButton setAction:@selector(changeCursorStyle:)]; if (@available(macOS 10.14, *)) [[styleButton cell] setBackgroundStyle:NSBackgroundStyleEmphasized]; @@ -292,8 +291,8 @@ [removeShadowButton setSegmentCount:1]; [removeShadowButton setTrackingMode:NSSegmentSwitchTrackingSelectAny]; [removeShadowButton setLabel:NSLocalizedString(@"Remove shadow", @"Button title") forSegment:0]; - [removeShadowButton setSelected:[pdfView removeCursorShadow] forSegment:0]; - [removeShadowButton setTarget:pdfView]; + [removeShadowButton setSelected:[presentationView removeCursorShadow] forSegment:0]; + [removeShadowButton setTarget:presentationView]; [removeShadowButton setAction:@selector(toggleRemoveCursorShadow:)]; if (@available(macOS 10.14, *)) [[removeShadowButton cell] setBackgroundStyle:NSBackgroundStyleEmphasized]; @@ -313,8 +312,8 @@ [drawButton setTrackingMode:NSSegmentSwitchTrackingSelectAny]; [drawButton setWidth:30.0 forSegment:0]; [drawButton setImage:[NSImage imageNamed:SKImageNameInkToolAdorn] forSegment:0]; - [drawButton setSelected:[pdfView drawInPresentation] forSegment:0]; - [drawButton setTarget:pdfView]; + [drawButton setSelected:[presentationView drawInPresentation] forSegment:0]; + [drawButton setTarget:presentationView]; [drawButton setAction:@selector(toggleDrawInPresentation:)]; if (@available(macOS 10.14, *)) [[drawButton cell] setBackgroundStyle:NSBackgroundStyleEmphasized]; @@ -338,7 +337,7 @@ [closeButton setTrackingMode:NSSegmentSwitchTrackingMomentary]; [closeButton setWidth:24.0 forSegment:0]; [closeButton setImage:[NSImage imageNamed:NSImageNameStopProgressTemplate] forSegment:0]; - [closeButton setTarget:pdfView]; + [closeButton setTarget:presentationView]; [closeButton setAction:@selector(closeCursorStyleWindow:)]; if (@available(macOS 10.14, *)) [[closeButton cell] setBackgroundStyle:NSBackgroundStyleEmphasized]; @@ -346,7 +345,7 @@ [closeButton sizeToFit]; [[self contentView] addSubview:closeButton]; - NSScreen *screen = [[pdfView window] screen] ?: [NSScreen mainScreen]; + NSScreen *screen = [[presentationView window] screen] ?: [NSScreen mainScreen]; NSRect frame; frame.size.width = NSWidth([styleButton frame]) + NSWidth([removeShadowButton frame]) + NSWidth([drawButton frame]) + NSWidth([closeButton frame]) + 2.0 * BUTTON_MARGIN + 2.0 * SMALL_SEP_WIDTH; frame.size.height = NSHeight(rect) + 2.0 * BUTTON_MARGIN; Modified: trunk/SKPDFView.h =================================================================== --- trunk/SKPDFView.h 2024-09-12 21:33:13 UTC (rev 14455) +++ trunk/SKPDFView.h 2024-09-17 15:47:33 UTC (rev 14456) @@ -123,9 +123,6 @@ - (void)PDFViewDidEndEditing:(PDFView *)sender; - (void)PDFView:(PDFView *)sender editAnnotation:(PDFAnnotation *)annotation; - (void)PDFView:(PDFView *)sender showSnapshotAtPageNumber:(NSInteger)pageNum forRect:(NSRect)rect scaleFactor:(CGFloat)scaleFactor autoFits:(BOOL)autoFits; -- (void)PDFViewExitPresentation:(PDFView *)sender; -- (void)PDFViewTogglePages:(PDFView *)sender; -- (void)PDFViewToggleContents:(PDFView *)sender; - (void)PDFViewPerformHideFind:(PDFView *)sender; - (BOOL)PDFViewIsFindVisible:(PDFView *)sender; - (void)PDFView:(PDFView *)sender rotatePageAtIndex:(NSUInteger)idx by:(NSInteger)rotation; @@ -132,7 +129,7 @@ - (nullable NSUndoManager *)undoManagerForPDFView:(PDFView *)sender; @end -@class SKReadingBar, SKTransitionController, SKTypeSelectHelper, SKNavigationWindow, SKCursorStyleWindow, SKTextNoteEditor, SKSyncDot, SKLoupeController, SKLayerController; +@class SKReadingBar, SKTypeSelectHelper, SKNavigationWindow, SKCursorStyleWindow, SKTextNoteEditor, SKSyncDot, SKLoupeController, SKLayerController; @interface SKPDFView : SKBasePDFView { SKToolMode toolMode; @@ -152,8 +149,6 @@ CGFloat pacerWaitTime; NSInteger pacerCounter; - SKTransitionController *transitionController; - SKTypeSelectHelper *typeSelectHelper; PDFAnnotation *currentAnnotation; @@ -180,20 +175,11 @@ NSInteger spellingTag; - NSInteger laserPointerColor; - _Atomic(BOOL) inKeyWindow; - struct _pdfvFlags { - unsigned int presentationMode:1; - unsigned int hideNotes:1; - unsigned int wantsNewUndoGroup:1; - unsigned int cursorHidden:1; - unsigned int useArrowCursorInPresentation:1; - unsigned int removeLaserPointerShadow:1; - unsigned int drawInPresentation:1; - unsigned int zooming:1; - } pdfvFlags; + BOOL hideNotes; + BOOL wantsNewUndoGroup; + BOOL zooming; } @property (nonatomic) PDFDisplayMode extendedDisplayMode; @@ -201,7 +187,6 @@ @property (nonatomic) SKToolMode toolMode; @property (nonatomic) SKNoteType annotationMode; @property (nonatomic) SKTemporaryToolMode temporaryToolMode; -@property (nonatomic, getter=isPresentationMode) BOOL presentationMode; @property (nonatomic, nullable, strong) PDFAnnotation *currentAnnotation; @property (nonatomic, readonly, getter=isEditing) BOOL editing; @property (nonatomic, readonly, getter=isZooming) BOOL zooming; @@ -214,7 +199,6 @@ @property (nullable, readonly) SKReadingBar *readingBar; @property (nonatomic) CGFloat pacerSpeed; @property (nonatomic, readonly) BOOL hasPacer; -@property (nonatomic, nullable, readonly) SKTransitionController *transitionController; @property (nonatomic, nullable, strong) SKTypeSelectHelper *typeSelectHelper; @property (nonatomic) BOOL needsRewind; @@ -241,19 +225,6 @@ - (void)setDisplayBoxAndRewind:(PDFDisplayBox)box; - (void)setDisplaysAsBookAndRewind:(BOOL)asBook; -- (void)zoomLog:(nullable id)sender; -- (void)toggleAutoActualSize:(nullable id)sender; -- (void)exitPresentation:(nullable id)sender; - -- (void)showCursorStyleWindow:(nullable id)sender; -- (void)closeCursorStyleWindow:(nullable id)sender; -- (NSInteger)cursorStyle; -- (void)changeCursorStyle:(nullable id)sender; -- (BOOL)removeCursorShadow; -- (void)toggleRemoveCursorShadow:(nullable id)sender; -- (BOOL)drawInPresentation; -- (void)toggleDrawInPresentation:(nullable id)sender; - - (void)addAnnotationForContext:(nullable id)sender; - (void)addAnnotationWithType:(SKNoteType)annotationType; - (void)removeCurrentAnnotation:(nullable id)sender; Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2024-09-12 21:33:13 UTC (rev 14455) +++ trunk/SKPDFView.m 2024-09-17 15:47:33 UTC (rev 14456) @@ -37,7 +37,6 @@ */ #import "SKPDFView.h" -#import "SKNavigationWindow.h" #import "SKImageToolTipWindow.h" #import <SkimNotes/SkimNotes.h> #import "PDFAnnotation_SKExtensions.h" @@ -50,7 +49,6 @@ #import "SKStringConstants.h" #import "NSUserDefaults_SKExtensions.h" #import "SKReadingBar.h" -#import "SKTransitionController.h" #import "SKTextNoteEditor.h" #import "SKSyncDot.h" #import "SKLineInspector.h" @@ -107,9 +105,6 @@ #define SMALL_MAGNIFICATION 1.5 #define LARGE_MAGNIFICATION 4.0 -#define AUTO_HIDE_DELAY 3.0 -#define SHOW_NAV_DELAY 0.25 - // based on: reading speed: 240 words/min // layout: 10 words/line, 40 line/page, 600 points/page #define DEFAULT_PACER_SPEED 6.0 @@ -138,10 +133,6 @@ #define SKUseToolModeCursorsKey @"SKUseToolModeCursors" #define SKMagnifyWithMousePressedKey @"SKMagnifyWithMousePressed" #define SKPacerSpeedKey @"SKPacerSpeed" -#define SKUseArrowCursorInPresentationKey @"SKUseArrowCursorInPresentation" -#define SKLaserPointerColorKey @"SKLaserPointerColor" -#define SKRemoveLaserPointerShadowKey @"SKRemoveLaserPointerShadows" -#define SKDisableDrawingInPresentationKey @"SKDisableDrawingInPresentation" #define SKAnnotationKey @"SKAnnotation" @@ -157,12 +148,6 @@ static inline NSSize SKFitTextNoteSize(NSString *string, NSFont *font, CGFloat width); enum { - SKNavigationNone, - SKNavigationBottom, - SKNavigationEverywhere, -}; - -enum { SKLayerNone, SKLayerUse, SKLayerAdd, @@ -206,15 +191,9 @@ - (void)beginNewUndoGroupIfNeededWithCommit:(BOOL)commit; -- (void)enableNavigation; -- (void)disableNavigation; - - (void)stopPacer; - (void)updatePacer; -- (void)doAutoHide; -- (void)showNavWindow; - - (void)setNeedsDisplayForReadingBarBounds:(NSRect)rect onPage:(PDFPage *)page; - (void)doMoveCurrentAnnotationForKey:(unichar)eventChar byAmount:(CGFloat)delta; @@ -236,7 +215,6 @@ - (void)doMarqueeZoomWithEvent:(NSEvent *)theEvent; - (BOOL)doDragMouseWithEvent:(NSEvent *)theEvent; - (BOOL)doDragTextWithEvent:(NSEvent *)theEvent; -- (void)doDragWindowWithEvent:(NSEvent *)theEvent; - (void)setCursorForMouse:(NSEvent *)theEvent; - (void)showHelpMenu; @@ -253,8 +231,8 @@ @implementation SKPDFView -@synthesize toolMode, annotationMode, temporaryToolMode, currentAnnotation, readingBar, pacerSpeed, transitionController, typeSelectHelper, syncDot; -@dynamic extendedDisplayMode, presentationMode, displaysHorizontally, hideNotes, canSelectNote, hasReadingBar, hasPacer, currentSelectionPage, currentSelectionRect, currentMagnification, needsRewind, editing, zooming; +@synthesize toolMode, annotationMode, temporaryToolMode, currentAnnotation, readingBar, pacerSpeed, typeSelectHelper, syncDot, hideNotes, zooming; +@dynamic extendedDisplayMode, displaysHorizontally, canSelectNote, hasReadingBar, hasPacer, currentSelectionPage, currentSelectionRect, currentMagnification, needsRewind, editing; + (void)initialize { SKINITIALIZE; @@ -283,26 +261,14 @@ toolMode = [[NSUserDefaults standardUserDefaults] integerForKey:SKLastToolModeKey]; annotationMode = [[NSUserDefaults standardUserDefaults] integerForKey:SKLastAnnotationModeKey]; - transitionController = nil; - typeSelectHelper = nil; spellingTag = [NSSpellChecker uniqueSpellDocumentTag]; - pdfvFlags.presentationMode = 0; - pdfvFlags.hideNotes = 0; - pdfvFlags.wantsNewUndoGroup = 0; - pdfvFlags.cursorHidden = 0; - pdfvFlags.useArrowCursorInPresentation = [[NSUserDefaults standardUserDefaults] boolForKey:SKUseArrowCursorInPresentationKey]; - pdfvFlags.removeLaserPointerShadow = [[NSUserDefaults standardUserDefaults] boolForKey:SKRemoveLaserPointerShadowKey]; - pdfvFlags.drawInPresentation = NO == [[NSUserDefaults standardUserDefaults] boolForKey:SKDisableDrawingInPresentationKey]; + hideNotes = NO; + wantsNewUndoGroup = NO; inKeyWindow = NO; - laserPointerColor = [[NSUserDefaults standardUserDefaults] integerForKey:SKLaserPointer... [truncated message content] |
From: <ho...@us...> - 2024-09-12 21:33:15
|
Revision: 14455 http://sourceforge.net/p/skim-app/code/14455 Author: hofman Date: 2024-09-12 21:33:13 +0000 (Thu, 12 Sep 2024) Log Message: ----------- fix selector Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2024-09-09 09:07:48 UTC (rev 14454) +++ trunk/SKPDFView.m 2024-09-12 21:33:13 UTC (rev 14455) @@ -3453,7 +3453,7 @@ return toolMode == SKToolModeNote; } else if (action == @selector(moveReadingBar:) || action == @selector(resizeReadingBar:)) { return [self hasReadingBar]; - } else if (action == @selector(nextLaserPointerColor:) || action == @selector(nextLaserPointerColor:)) { + } else if (action == @selector(nextLaserPointerColor:) || action == @selector(previousLaserPointerColor:)) { return pdfvFlags.useArrowCursorInPresentation == 0; } else { return [super validateMenuItem:menuItem]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-09 09:07:53
|
Revision: 14454 http://sourceforge.net/p/skim-app/code/14454 Author: hofman Date: 2024-09-09 09:07:48 +0000 (Mon, 09 Sep 2024) Log Message: ----------- Ignore function and numeric pad modifiers for arrow keys Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2024-09-08 16:46:20 UTC (rev 14453) +++ trunk/SKPDFView.m 2024-09-09 09:07:48 UTC (rev 14454) @@ -1775,7 +1775,7 @@ if (pdfvFlags.presentationMode) { // Presentation mode if ([[self scrollView] hasHorizontalScroller] == NO && - (eventChar == NSRightArrowFunctionKey) && (modifiers == 0)) { + (eventChar == NSRightArrowFunctionKey) && (standardModifiers == 0)) { [self goToNextPage:self]; } else if ([[self scrollView] hasHorizontalScroller] == NO && (eventChar == NSLeftArrowFunctionKey) && (standardModifiers == 0)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-08 16:46:22
|
Revision: 14453 http://sourceforge.net/p/skim-app/code/14453 Author: hofman Date: 2024-09-08 16:46:20 +0000 (Sun, 08 Sep 2024) Log Message: ----------- disable swipe gestures in pdfview in presentqtion mode so we can forward it to use our transitions Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2024-09-05 21:43:37 UTC (rev 14452) +++ trunk/SKPDFView.m 2024-09-08 16:46:20 UTC (rev 14453) @@ -714,6 +714,8 @@ if (pdfvFlags.presentationMode) [self enableNavigation]; [self resetPDFToolTipRects]; + if ([self respondsToSelector:@selector(enableSwipeGestures:)]) + [self enableSwipeGestures:pdfvFlags.presentationMode == 0]; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-05 21:43:38
|
Revision: 14452 http://sourceforge.net/p/skim-app/code/14452 Author: hofman Date: 2024-09-05 21:43:37 +0000 (Thu, 05 Sep 2024) Log Message: ----------- always represent real point and real rectangle scripting types with floating point values Modified Paths: -------------- trunk/NSData_SKExtensions.m Modified: trunk/NSData_SKExtensions.m =================================================================== --- trunk/NSData_SKExtensions.m 2024-09-01 22:49:21 UTC (rev 14451) +++ trunk/NSData_SKExtensions.m 2024-09-05 21:43:37 UTC (rev 14452) @@ -186,14 +186,10 @@ } + (NSData *)dataWithPointAsNSPoint:(NSPoint)point { - if (floor(point.x) >= point.x && floor(point.y) >= point.y) - return [self dataWithPointAsQDPoint:point]; return [self dataWithBytes:&point length:sizeof(NSPoint)]; } + (NSData *)dataWithRectAsNSRect:(NSRect)rect { - if (floor(NSMinX(rect)) >= NSMinX(rect) && floor(NSMinY(rect)) >= NSMinY(rect) && floor(NSMaxX(rect)) >= NSMaxX(rect) && floor(NSMaxY(rect)) >= NSMaxY(rect)) - return [self dataWithRectAsQDRect:rect]; return [self dataWithBytes:&rect length:sizeof(NSRect)]; } @@ -220,6 +216,9 @@ if ([self length] == sizeof(NSPoint)) { const NSPoint *nsPoint = (const NSPoint *)[self bytes]; point = *nsPoint; + } else if ([self length] == sizeof(Point)) { + const Point *qdPoint = (const Point *)[self bytes]; + point = SKNSPointFromQDPoint(*qdPoint); } return point; } @@ -229,6 +228,9 @@ if ([self length] == sizeof(NSRect)) { const NSRect *nsRect = (const NSRect *)[self bytes]; rect = *nsRect; + } else if ([self length] == sizeof(Rect)) { + const Rect *qdRect = (const Rect *)[self bytes]; + rect = SKNSRectFromQDRect(*qdRect); } return rect; } @@ -266,27 +268,19 @@ } } else { NSData *data = [descriptor data]; - if ([data length] == sizeof(NSPoint) || [data length] == sizeof(Point)) + if ([data length] == sizeof(NSPoint)) return data; + if ([data length] == sizeof(Point)) + point = [data pointValueAsQDPoint]; } return [NSData dataWithPointAsNSPoint:point]; } - (NSAppleEventDescriptor *)scriptingRealPointDescriptor { - NSAppleEventDescriptor *descriptor; - if ([self length] == sizeof(Point)) { - descriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeQDPoint data:self]; - } else { - NSPoint point = [self pointValueAsNSPoint]; - if (floor(point.x) >= point.x && floor(point.y) >= point.y) { - Point qdPoint = SKQDPointFromNSPoint(point); - descriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeQDPoint bytes:&qdPoint length:sizeof(Point)]; - } else { - descriptor = [NSAppleEventDescriptor listDescriptor]; - [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.x] atIndex:1]; - [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.y] atIndex:2]; - } - } + NSPoint point = [self pointValueAsNSPoint]; + NSAppleEventDescriptor *descriptor = [NSAppleEventDescriptor listDescriptor]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.x] atIndex:1]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.y] atIndex:2]; return descriptor; } @@ -301,29 +295,21 @@ } } else { NSData *data = [descriptor data]; - if ([data length] == sizeof(NSRect) || [data length] == sizeof(Rect)) + if ([data length] == sizeof(NSRect)) return data; + if ([data length] == sizeof(Rect)) + rect = [data rectValueAsQDRect]; } return [NSData dataWithRectAsNSRect:rect]; } - (NSAppleEventDescriptor *)scriptingRealRectangleDescriptor { - NSAppleEventDescriptor *descriptor; - if ([self length] == sizeof(Rect)) { - descriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeQDRectangle data:self]; - } else { - NSRect rect = [self rectValueAsNSRect]; - if (floor(NSMinX(rect)) >= NSMinX(rect) && floor(NSMinY(rect)) >= NSMinY(rect) && floor(NSMaxX(rect)) >= NSMaxX(rect) && floor(NSMaxY(rect)) >= NSMaxY(rect)) { - Rect qdRect = SKQDRectFromNSRect(rect); - descriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeQDRectangle bytes:&qdRect length:sizeof(Rect)]; - } else { - descriptor = [NSAppleEventDescriptor listDescriptor]; - [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMinX(rect)] atIndex:1]; - [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMaxY(rect)] atIndex:2]; - [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMaxX(rect)] atIndex:3]; - [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMinY(rect)] atIndex:4]; - } - } + NSRect rect = [self rectValueAsNSRect]; + NSAppleEventDescriptor *descriptor = [NSAppleEventDescriptor listDescriptor]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMinX(rect)] atIndex:1]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMaxY(rect)] atIndex:2]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMaxX(rect)] atIndex:3]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMinY(rect)] atIndex:4]; return descriptor; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-01 22:49:23
|
Revision: 14451 http://sourceforge.net/p/skim-app/code/14451 Author: hofman Date: 2024-09-01 22:49:21 +0000 (Sun, 01 Sep 2024) Log Message: ----------- show magnification in status bar with sufficient precision Modified Paths: -------------- trunk/SKMainWindowController.m Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2024-09-01 22:39:06 UTC (rev 14450) +++ trunk/SKMainWindowController.m 2024-09-01 22:49:21 UTC (rev 14451) @@ -688,8 +688,13 @@ } else { message = [NSString stringWithFormat:@"%.1f %C %.1f @ (%.1f, %.1f) %@", NSWidth(rect), MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect), NSMinX(rect), NSMinY(rect), NSLocalizedString(@"pt", @"size unit")]; } - } else if (magnification > 0.0001) { - message = [NSString stringWithFormat:@"%.2f %C", magnification, MULTIPLICATION_SIGN_CHARACTER]; + } else if (magnification > 0.001) { + if (floor(magnification) >= magnification) + message = [NSString stringWithFormat:@"%.0f %C", magnification, MULTIPLICATION_SIGN_CHARACTER]; + else if (floor(10.0 * magnification) >= 10.0 * magnification) + message = [NSString stringWithFormat:@"%.1f %C", magnification, MULTIPLICATION_SIGN_CHARACTER]; + else + message = [NSString stringWithFormat:@"%.2f %C", magnification, MULTIPLICATION_SIGN_CHARACTER]; } else { message = @""; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-01 22:39:08
|
Revision: 14450 http://sourceforge.net/p/skim-app/code/14450 Author: hofman Date: 2024-09-01 22:39:06 +0000 (Sun, 01 Sep 2024) Log Message: ----------- combine if's Modified Paths: -------------- trunk/SKMainWindowController.m Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2024-09-01 22:36:51 UTC (rev 14449) +++ trunk/SKMainWindowController.m 2024-09-01 22:39:06 UTC (rev 14450) @@ -683,11 +683,10 @@ NSString *units = useMetric ? NSLocalizedString(@"cm", @"size unit") : NSLocalizedString(@"in", @"size unit"); CGFloat factor = useMetric ? CM_PER_POINT : INCH_PER_POINT; message = [NSString stringWithFormat:@"%.2f %C %.2f @ (%.2f, %.2f) %@", NSWidth(rect) * factor, MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect) * factor, NSMinX(rect) * factor, NSMinY(rect) * factor, units]; + } else if (floor(NSMinX(rect)) >= NSMinX(rect) && floor(NSMinY(rect)) >= NSMinY(rect) && floor(NSWidth(rect)) >= NSWidth(rect) && floor(NSHeight(rect)) >= NSHeight(rect)) { + message = [NSString stringWithFormat:@"%.0f %C %.0f @ (%.0f, %.0f) %@", NSWidth(rect), MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect), NSMinX(rect), NSMinY(rect), NSLocalizedString(@"pt", @"size unit")]; } else { - if (floor(NSMinX(rect)) >= NSMinX(rect) && floor(NSMinY(rect)) >= NSMinY(rect) && floor(NSWidth(rect)) >= NSWidth(rect) && floor(NSHeight(rect)) >= NSHeight(rect)) - message = [NSString stringWithFormat:@"%.0f %C %.0f @ (%.0f, %.0f) %@", NSWidth(rect), MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect), NSMinX(rect), NSMinY(rect), NSLocalizedString(@"pt", @"size unit")]; - else - message = [NSString stringWithFormat:@"%.1f %C %.1f @ (%.1f, %.1f) %@", NSWidth(rect), MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect), NSMinX(rect), NSMinY(rect), NSLocalizedString(@"pt", @"size unit")]; + message = [NSString stringWithFormat:@"%.1f %C %.1f @ (%.1f, %.1f) %@", NSWidth(rect), MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect), NSMinX(rect), NSMinY(rect), NSLocalizedString(@"pt", @"size unit")]; } } else if (magnification > 0.0001) { message = [NSString stringWithFormat:@"%.2f %C", magnification, MULTIPLICATION_SIGN_CHARACTER]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-01 22:36:54
|
Revision: 14449 http://sourceforge.net/p/skim-app/code/14449 Author: hofman Date: 2024-09-01 22:36:51 +0000 (Sun, 01 Sep 2024) Log Message: ----------- Display integral rect in status when the rect is not fractional Modified Paths: -------------- trunk/SKMainWindowController.m Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2024-09-01 22:26:53 UTC (rev 14448) +++ trunk/SKMainWindowController.m 2024-09-01 22:36:51 UTC (rev 14449) @@ -684,7 +684,10 @@ CGFloat factor = useMetric ? CM_PER_POINT : INCH_PER_POINT; message = [NSString stringWithFormat:@"%.2f %C %.2f @ (%.2f, %.2f) %@", NSWidth(rect) * factor, MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect) * factor, NSMinX(rect) * factor, NSMinY(rect) * factor, units]; } else { - message = [NSString stringWithFormat:@"%.1f %C %.1f @ (%.1f, %.1f) %@", NSWidth(rect), MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect), NSMinX(rect), NSMinY(rect), NSLocalizedString(@"pt", @"size unit")]; + if (floor(NSMinX(rect)) >= NSMinX(rect) && floor(NSMinY(rect)) >= NSMinY(rect) && floor(NSWidth(rect)) >= NSWidth(rect) && floor(NSHeight(rect)) >= NSHeight(rect)) + message = [NSString stringWithFormat:@"%.0f %C %.0f @ (%.0f, %.0f) %@", NSWidth(rect), MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect), NSMinX(rect), NSMinY(rect), NSLocalizedString(@"pt", @"size unit")]; + else + message = [NSString stringWithFormat:@"%.1f %C %.1f @ (%.1f, %.1f) %@", NSWidth(rect), MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect), NSMinX(rect), NSMinY(rect), NSLocalizedString(@"pt", @"size unit")]; } } else if (magnification > 0.0001) { message = [NSString stringWithFormat:@"%.2f %C", magnification, MULTIPLICATION_SIGN_CHARACTER]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-01 22:26:55
|
Revision: 14448 http://sourceforge.net/p/skim-app/code/14448 Author: hofman Date: 2024-09-01 22:26:53 +0000 (Sun, 01 Sep 2024) Log Message: ----------- Make selection rect align with integer points on page, we only use its result this way Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2024-09-01 21:50:02 UTC (rev 14447) +++ trunk/SKPDFView.m 2024-09-01 22:26:53 UTC (rev 14448) @@ -4637,6 +4637,8 @@ SKRectEdges resizeHandle = didSelect ? SKResizeHandleForPointFromRect(initialPoint, selectionRect, margin) : 0; + initialPoint = SKIntegralPoint(initialPoint); + if (resizeHandle == 0 && (didSelect == NO || NSPointInRect(initialPoint, selectionRect) == NO)) { selectionRect.origin = initialPoint; selectionRect.size = NSZeroSize; @@ -4662,7 +4664,7 @@ NSRect newRect = initialRect; NSPoint delta; - newPoint = [self convertPoint:[theEvent locationInView:self] toPage:page]; + newPoint = SKIntegralPoint([self convertPoint:[theEvent locationInView:self] toPage:page]); delta = SKSubstractPoints(newPoint, initialPoint); if (resizeHandle) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-01 21:50:04
|
Revision: 14447 http://sourceforge.net/p/skim-app/code/14447 Author: hofman Date: 2024-09-01 21:50:02 +0000 (Sun, 01 Sep 2024) Log Message: ----------- Set max scale factor of pdfviews to 20, 100 is really too big Modified Paths: -------------- trunk/SKMainWindowController.m Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2024-09-01 21:09:27 UTC (rev 14446) +++ trunk/SKMainWindowController.m 2024-09-01 21:50:02 UTC (rev 14447) @@ -1108,6 +1108,9 @@ [self registerForDocumentNotifications]; + [pdfView setMaxScaleFactor:20.0]; + [secondaryPdfView setMaxScaleFactor:20.0]; + [toolbarController updateMinMaxScale]; if ([pdfDocument isLocked]) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-01 21:09:29
|
Revision: 14446 http://sourceforge.net/p/skim-app/code/14446 Author: hofman Date: 2024-09-01 21:09:27 +0000 (Sun, 01 Sep 2024) Log Message: ----------- Allow real rectangle for obtain command Modified Paths: -------------- trunk/SKObtainCommand.m Modified: trunk/SKObtainCommand.m =================================================================== --- trunk/SKObtainCommand.m 2024-09-01 17:44:34 UTC (rev 14445) +++ trunk/SKObtainCommand.m 2024-09-01 21:09:27 UTC (rev 14446) @@ -67,7 +67,7 @@ type = typeSInt32; } else if (type == typeQDRectangle || type == typeRectangle) { type = typeQDRectangle; - } else if (type != typePage && type != typeRTF) { + } else if (type != typePage && type != typeRTF && type != typeNSRectangle) { [self setScriptErrorNumber:NSOperationNotSupportedForKeyScriptError]; return nil; } @@ -75,7 +75,7 @@ if ([data isKindOfClass:[NSData class]] == NO) { data = nil; selection = [PDFSelection selectionWithSpecifier:[[self arguments] objectForKey:@"Object"] onPage:page]; - } else if (type == typeSInt32 || type == typeQDRectangle || type == typePage) { + } else if (type == typeSInt32 || type == typeQDRectangle || type == typeNSRectangle || type == typePage) { [self setScriptErrorNumber:NSOperationNotSupportedForKeyScriptError]; return nil; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-01 17:44:36
|
Revision: 14445 http://sourceforge.net/p/skim-app/code/14445 Author: hofman Date: 2024-09-01 17:44:34 +0000 (Sun, 01 Sep 2024) Log Message: ----------- Add support for real rectangle scripting type, to get as bounds of a selection Modified Paths: -------------- trunk/NSData_SKExtensions.h trunk/NSData_SKExtensions.m trunk/SKObtainCommand.m trunk/Skim.sdef Modified: trunk/NSData_SKExtensions.h =================================================================== --- trunk/NSData_SKExtensions.h 2024-09-01 17:26:09 UTC (rev 14444) +++ trunk/NSData_SKExtensions.h 2024-09-01 17:44:34 UTC (rev 14445) @@ -63,10 +63,12 @@ + (NSData *)dataWithPointAsQDPoint:(NSPoint)point; + (NSData *)dataWithRectAsQDRect:(NSRect)rect; + (NSData *)dataWithPointAsNSPoint:(NSPoint)point; ++ (NSData *)dataWithRectAsNSRect:(NSRect)rect; @property (nonatomic, readonly) NSPoint pointValueAsQDPoint; @property (nonatomic, readonly) NSRect rectValueAsQDRect; @property (nonatomic, readonly) NSPoint pointValueAsNSPoint; +@property (nonatomic, readonly) NSRect rectValueAsNSRect; + (instancetype)scriptingPdfWithDescriptor:(NSAppleEventDescriptor *)descriptor; @property (nonatomic, readonly) NSAppleEventDescriptor *scriptingPdfDescriptor; @@ -76,6 +78,8 @@ @property (nonatomic, readonly) NSAppleEventDescriptor *scriptingRtfDescriptor; + (instancetype)scriptingRealPointWithDescriptor:(NSAppleEventDescriptor *)descriptor; @property (nonatomic, readonly) NSAppleEventDescriptor *scriptingRealPointDescriptor; ++ (instancetype)scriptingRealRectangleWithDescriptor:(NSAppleEventDescriptor *)descriptor; +@property (nonatomic, readonly) NSAppleEventDescriptor *scriptingRealRectangleDescriptor; @end Modified: trunk/NSData_SKExtensions.m =================================================================== --- trunk/NSData_SKExtensions.m 2024-09-01 17:26:09 UTC (rev 14444) +++ trunk/NSData_SKExtensions.m 2024-09-01 17:44:34 UTC (rev 14445) @@ -191,6 +191,12 @@ return [self dataWithBytes:&point length:sizeof(NSPoint)]; } ++ (NSData *)dataWithRectAsNSRect:(NSRect)rect { + if (floor(NSMinX(rect)) >= NSMinX(rect) && floor(NSMinY(rect)) >= NSMinY(rect) && floor(NSMaxX(rect)) >= NSMaxX(rect) && floor(NSMaxY(rect)) >= NSMaxY(rect)) + return [self dataWithRectAsQDRect:rect]; + return [self dataWithBytes:&rect length:sizeof(NSRect)]; +} + - (NSPoint)pointValueAsQDPoint { NSPoint point = NSZeroPoint; if ([self length] == sizeof(Point)) { @@ -218,6 +224,15 @@ return point; } +- (NSRect)rectValueAsNSRect { + NSRect rect = NSZeroRect; + if ([self length] == sizeof(NSRect)) { + const NSRect *nsRect = (const NSRect *)[self bytes]; + rect = *nsRect; + } + return rect; +} + + (instancetype)scriptingPdfWithDescriptor:(NSAppleEventDescriptor *)descriptor { return [descriptor data]; } @@ -275,4 +290,41 @@ return descriptor; } ++ (instancetype)scriptingRealRectangleWithDescriptor:(NSAppleEventDescriptor *)descriptor { + NSRect rect = NSZeroRect; + if ([descriptor descriptorType] == typeAEList) { + if ([descriptor numberOfItems] == 4) { + rect.origin.x = [[descriptor descriptorAtIndex:1] doubleValue]; + rect.size.width = [[descriptor descriptorAtIndex:3] doubleValue] - NSMinX(rect); + rect.origin.y = [[descriptor descriptorAtIndex:4] doubleValue]; + rect.size.height = [[descriptor descriptorAtIndex:2] doubleValue] - NSMinY(rect); + } + } else { + NSData *data = [descriptor data]; + if ([data length] == sizeof(NSRect) || [data length] == sizeof(Rect)) + return data; + } + return [NSData dataWithRectAsNSRect:rect]; +} + +- (NSAppleEventDescriptor *)scriptingRealRectangleDescriptor { + NSAppleEventDescriptor *descriptor; + if ([self length] == sizeof(Rect)) { + descriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeQDRectangle data:self]; + } else { + NSRect rect = [self rectValueAsNSRect]; + if (floor(NSMinX(rect)) >= NSMinX(rect) && floor(NSMinY(rect)) >= NSMinY(rect) && floor(NSMaxX(rect)) >= NSMaxX(rect) && floor(NSMaxY(rect)) >= NSMaxY(rect)) { + Rect qdRect = SKQDRectFromNSRect(rect); + descriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeQDRectangle bytes:&qdRect length:sizeof(Rect)]; + } else { + descriptor = [NSAppleEventDescriptor listDescriptor]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMinX(rect)] atIndex:1]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMaxY(rect)] atIndex:2]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMaxX(rect)] atIndex:3]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:NSMinY(rect)] atIndex:4]; + } + } + return descriptor; +} + @end Modified: trunk/SKObtainCommand.m =================================================================== --- trunk/SKObtainCommand.m 2024-09-01 17:26:09 UTC (rev 14444) +++ trunk/SKObtainCommand.m 2024-09-01 17:44:34 UTC (rev 14445) @@ -41,10 +41,12 @@ #import "PDFSelection_SKExtensions.h" #import "NSAttributedString_SKExtensions.h" #import "NSGeometry_SKExtensions.h" +#import "NSData_SKExtensions.h" -#define typeRichText 'ricT' -#define typeRTF 'RTF ' -#define typePage 'Page' +#define typeRichText 'ricT' +#define typeRTF 'RTF ' +#define typeNSRectangle 'NSrt' +#define typePage 'Page' @implementation SKObtainCommand @@ -92,6 +94,9 @@ NSRect bounds = [selection hasCharacters] ? [selection boundsForPage:page ?: [selection safeFirstPage]] : NSZeroRect; Rect qdBounds = SKQDRectFromNSRect(bounds); desc = [NSAppleEventDescriptor descriptorWithDescriptorType:type bytes:&qdBounds length:sizeof(Rect)]; + } else if (type == typeNSRectangle) { + NSRect bounds = [selection hasCharacters] ? [selection boundsForPage:page ?: [selection safeFirstPage]] : NSZeroRect; + desc = [[NSData dataWithRectAsNSRect:bounds] scriptingRealRectangleDescriptor]; } else if (type == typeSInt32) { NSUInteger first = NSNotFound, last = NSNotFound; if ((page = [selection safeFirstPage])) Modified: trunk/Skim.sdef =================================================================== --- trunk/Skim.sdef 2024-09-01 17:26:09 UTC (rev 14444) +++ trunk/Skim.sdef 2024-09-01 17:44:34 UTC (rev 14445) @@ -486,7 +486,7 @@ description="Get properties for a selection or raw RTF data."> <cocoa class="SKObtainCommand"/> <direct-parameter type="type" - description="The type of object to return. Can be (rich) text, RTF, rectangle, integer, or page."/> + description="The type of object to return. Can be (rich) text, RTF, (real) rectangle, integer, or page."/> <parameter name="for" code="for " description="The selection or raw RTF data."> <type type="specifier" list="yes"/> @@ -1262,6 +1262,10 @@ <cocoa class="NSData"/> </value-type> + <value-type name="real rectangle" code="NSrt"> + <cocoa class="NSData"/> + </value-type> + <value-type name="PDF" code="PDF "> <cocoa class="NSData"/> </value-type> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-01 17:26:12
|
Revision: 14444 http://sourceforge.net/p/skim-app/code/14444 Author: hofman Date: 2024-09-01 17:26:09 +0000 (Sun, 01 Sep 2024) Log Message: ----------- Return QD Point data for scripting whn point coordinates are integral Modified Paths: -------------- trunk/NSData_SKExtensions.m Modified: trunk/NSData_SKExtensions.m =================================================================== --- trunk/NSData_SKExtensions.m 2024-09-01 09:07:01 UTC (rev 14443) +++ trunk/NSData_SKExtensions.m 2024-09-01 17:26:09 UTC (rev 14444) @@ -186,6 +186,8 @@ } + (NSData *)dataWithPointAsNSPoint:(NSPoint)point { + if (floor(point.x) >= point.x && floor(point.y) >= point.y) + return [self dataWithPointAsQDPoint:point]; return [self dataWithBytes:&point length:sizeof(NSPoint)]; } @@ -256,15 +258,19 @@ } - (NSAppleEventDescriptor *)scriptingRealPointDescriptor { - NSPoint point = [self pointValueAsNSPoint]; NSAppleEventDescriptor *descriptor; - if (floor(point.x) >= point.x && floor(point.y) >= point.y) { - Point qdPoint = SKQDPointFromNSPoint(point); - descriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeQDPoint bytes:&qdPoint length:sizeof(Point)]; + if ([self length] == sizeof(Point)) { + descriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeQDPoint data:self]; } else { - descriptor = [NSAppleEventDescriptor listDescriptor]; - [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.x] atIndex:1]; - [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.y] atIndex:2]; + NSPoint point = [self pointValueAsNSPoint]; + if (floor(point.x) >= point.x && floor(point.y) >= point.y) { + Point qdPoint = SKQDPointFromNSPoint(point); + descriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeQDPoint bytes:&qdPoint length:sizeof(Point)]; + } else { + descriptor = [NSAppleEventDescriptor listDescriptor]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.x] atIndex:1]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.y] atIndex:2]; + } } return descriptor; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-01 09:07:04
|
Revision: 14443 http://sourceforge.net/p/skim-app/code/14443 Author: hofman Date: 2024-09-01 09:07:01 +0000 (Sun, 01 Sep 2024) Log Message: ----------- return qd point descriptor for real point when both coordinates are integral Modified Paths: -------------- trunk/NSData_SKExtensions.m Modified: trunk/NSData_SKExtensions.m =================================================================== --- trunk/NSData_SKExtensions.m 2024-08-31 16:56:26 UTC (rev 14442) +++ trunk/NSData_SKExtensions.m 2024-09-01 09:07:01 UTC (rev 14443) @@ -257,9 +257,15 @@ - (NSAppleEventDescriptor *)scriptingRealPointDescriptor { NSPoint point = [self pointValueAsNSPoint]; - NSAppleEventDescriptor *descriptor = [NSAppleEventDescriptor listDescriptor]; - [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.x] atIndex:1]; - [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.y] atIndex:2]; + NSAppleEventDescriptor *descriptor; + if (floor(point.x) >= point.x && floor(point.y) >= point.y) { + Point qdPoint = SKQDPointFromNSPoint(point); + descriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeQDPoint bytes:&qdPoint length:sizeof(Point)]; + } else { + descriptor = [NSAppleEventDescriptor listDescriptor]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.x] atIndex:1]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.y] atIndex:2]; + } return descriptor; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-08-31 16:56:29
|
Revision: 14442 http://sourceforge.net/p/skim-app/code/14442 Author: hofman Date: 2024-08-31 16:56:26 +0000 (Sat, 31 Aug 2024) Log Message: ----------- Define a real point type in scripting support and define a point list as a list of real points, use that for path list of an ink note Modified Paths: -------------- trunk/NSData_SKExtensions.h trunk/NSData_SKExtensions.m trunk/PDFAnnotationInk_SKExtensions.m trunk/PDFAnnotationMarkup_SKExtensions.m trunk/PDFPage_SKExtensions.m trunk/Skim.sdef Modified: trunk/NSData_SKExtensions.h =================================================================== --- trunk/NSData_SKExtensions.h 2024-08-31 16:07:55 UTC (rev 14441) +++ trunk/NSData_SKExtensions.h 2024-08-31 16:56:26 UTC (rev 14442) @@ -62,9 +62,11 @@ + (NSData *)dataWithPointAsQDPoint:(NSPoint)point; + (NSData *)dataWithRectAsQDRect:(NSRect)rect; ++ (NSData *)dataWithPointAsNSPoint:(NSPoint)point; @property (nonatomic, readonly) NSPoint pointValueAsQDPoint; @property (nonatomic, readonly) NSRect rectValueAsQDRect; +@property (nonatomic, readonly) NSPoint pointValueAsNSPoint; + (instancetype)scriptingPdfWithDescriptor:(NSAppleEventDescriptor *)descriptor; @property (nonatomic, readonly) NSAppleEventDescriptor *scriptingPdfDescriptor; @@ -72,6 +74,8 @@ @property (nonatomic, readonly) NSAppleEventDescriptor *scriptingTiffPictureDescriptor; + (instancetype)scriptingRtfWithDescriptor:(NSAppleEventDescriptor *)descriptor; @property (nonatomic, readonly) NSAppleEventDescriptor *scriptingRtfDescriptor; ++ (instancetype)scriptingRealPointWithDescriptor:(NSAppleEventDescriptor *)descriptor; +@property (nonatomic, readonly) NSAppleEventDescriptor *scriptingRealPointDescriptor; @end Modified: trunk/NSData_SKExtensions.m =================================================================== --- trunk/NSData_SKExtensions.m 2024-08-31 16:07:55 UTC (rev 14441) +++ trunk/NSData_SKExtensions.m 2024-08-31 16:56:26 UTC (rev 14442) @@ -185,6 +185,10 @@ return [self dataWithBytes:&qdRect length:sizeof(Rect)]; } ++ (NSData *)dataWithPointAsNSPoint:(NSPoint)point { + return [self dataWithBytes:&point length:sizeof(NSPoint)]; +} + - (NSPoint)pointValueAsQDPoint { NSPoint point = NSZeroPoint; if ([self length] == sizeof(Point)) { @@ -203,6 +207,15 @@ return rect; } +- (NSPoint)pointValueAsNSPoint { + NSPoint point = NSZeroPoint; + if ([self length] == sizeof(NSPoint)) { + const NSPoint *nsPoint = (const NSPoint *)[self bytes]; + point = *nsPoint; + } + return point; +} + + (instancetype)scriptingPdfWithDescriptor:(NSAppleEventDescriptor *)descriptor { return [descriptor data]; } @@ -227,4 +240,27 @@ return [NSAppleEventDescriptor descriptorWithDescriptorType:'RTF ' data:self]; } ++ (instancetype)scriptingRealPointWithDescriptor:(NSAppleEventDescriptor *)descriptor { + NSPoint point = NSZeroPoint; + if ([descriptor descriptorType] == typeAEList) { + if ([descriptor numberOfItems] == 2) { + point.x = [[descriptor descriptorAtIndex:1] doubleValue]; + point.y = [[descriptor descriptorAtIndex:2] doubleValue]; + } + } else { + NSData *data = [descriptor data]; + if ([data length] == sizeof(NSPoint) || [data length] == sizeof(Point)) + return data; + } + return [NSData dataWithPointAsNSPoint:point]; +} + +- (NSAppleEventDescriptor *)scriptingRealPointDescriptor { + NSPoint point = [self pointValueAsNSPoint]; + NSAppleEventDescriptor *descriptor = [NSAppleEventDescriptor listDescriptor]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.x] atIndex:1]; + [descriptor insertDescriptor:[NSAppleEventDescriptor descriptorWithDouble:point.y] atIndex:2]; + return descriptor; +} + @end Modified: trunk/PDFAnnotationInk_SKExtensions.m =================================================================== --- trunk/PDFAnnotationInk_SKExtensions.m 2024-08-31 16:07:55 UTC (rev 14441) +++ trunk/PDFAnnotationInk_SKExtensions.m 2024-08-31 16:56:26 UTC (rev 14442) @@ -310,7 +310,7 @@ pointValues = [[NSMutableArray alloc] initWithCapacity:iMax]; for (i = 0; i < iMax; i++) { point = [path associatedPointForElementAtIndex:i]; - [pointValues addObject:[NSData dataWithPointAsQDPoint:SKAddPoints(point, origin)]]; + [pointValues addObject:[NSData dataWithPointAsNSPoint:SKAddPoints(point, origin)]]; } [pointLists addObject:pointValues]; } Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2024-08-31 16:07:55 UTC (rev 14441) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2024-08-31 16:56:26 UTC (rev 14442) @@ -341,7 +341,7 @@ pointValues = [[NSMutableArray alloc] initWithCapacity:iMax]; for (j = 0; j < 4; j++) { point = [[[self quadrilateralPoints] objectAtIndex:4 * i + j] pointValue]; - [pointValues addObject:[NSData dataWithPointAsQDPoint:SKAddPoints(point, origin)]]; + [pointValues addObject:[NSData dataWithPointAsNSPoint:SKAddPoints(point, origin)]]; } [pointLists addObject:pointValues]; } Modified: trunk/PDFPage_SKExtensions.m =================================================================== --- trunk/PDFPage_SKExtensions.m 2024-08-31 16:07:55 UTC (rev 14441) +++ trunk/PDFPage_SKExtensions.m 2024-08-31 16:56:26 UTC (rev 14442) @@ -732,12 +732,10 @@ for (id pt in list) { NSPoint point; if ([pt isKindOfClass:[NSData class]]) { - point = [pt pointValueAsQDPoint]; + point = [pt pointValueAsNSPoint]; } else if ([pt isKindOfClass:[NSArray class]] && [pt count] == 2) { - Point qdPoint; - qdPoint.v = [[pt objectAtIndex:0] intValue]; - qdPoint.h = [[pt objectAtIndex:1] intValue]; - point = SKNSPointFromQDPoint(qdPoint); + point.x = [[pt objectAtIndex:0] doubleValue]; + point.y = [[pt objectAtIndex:1] doubleValue]; } else continue; [PDFAnnotation addPoint:point toSkimNotesPath:path]; } Modified: trunk/Skim.sdef =================================================================== --- trunk/Skim.sdef 2024-08-31 16:07:55 UTC (rev 14441) +++ trunk/Skim.sdef 2024-08-31 16:56:26 UTC (rev 14442) @@ -1121,7 +1121,7 @@ <class name="point list" plural="point lists" code="PtLi" description="A list of points."> <cocoa class="NSArray"/> - <type type="point" list="yes"/> + <type type="real point" list="yes"/> </class> <class name="TeX line" plural="TeX lines" code="Line" @@ -1258,6 +1258,10 @@ </property> </record-type> + <value-type name="real point" code="NSpt"> + <cocoa class="NSData"/> + </value-type> + <value-type name="PDF" code="PDF "> <cocoa class="NSData"/> </value-type> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-08-31 16:07:57
|
Revision: 14441 http://sourceforge.net/p/skim-app/code/14441 Author: hofman Date: 2024-08-31 16:07:55 +0000 (Sat, 31 Aug 2024) Log Message: ----------- show bounds in points in status bar with one digit precision Modified Paths: -------------- trunk/SKMainWindowController.m Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2024-08-30 22:07:46 UTC (rev 14440) +++ trunk/SKMainWindowController.m 2024-08-31 16:07:55 UTC (rev 14441) @@ -684,7 +684,7 @@ CGFloat factor = useMetric ? CM_PER_POINT : INCH_PER_POINT; message = [NSString stringWithFormat:@"%.2f %C %.2f @ (%.2f, %.2f) %@", NSWidth(rect) * factor, MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect) * factor, NSMinX(rect) * factor, NSMinY(rect) * factor, units]; } else { - message = [NSString stringWithFormat:@"%ld %C %ld @ (%ld, %ld) %@", (long)NSWidth(rect), MULTIPLICATION_SIGN_CHARACTER, (long)NSHeight(rect), (long)NSMinX(rect), (long)NSMinY(rect), NSLocalizedString(@"pt", @"size unit")]; + message = [NSString stringWithFormat:@"%.1f %C %.1f @ (%.1f, %.1f) %@", NSWidth(rect), MULTIPLICATION_SIGN_CHARACTER, NSHeight(rect), NSMinX(rect), NSMinY(rect), NSLocalizedString(@"pt", @"size unit")]; } } else if (magnification > 0.0001) { message = [NSString stringWithFormat:@"%.2f %C", magnification, MULTIPLICATION_SIGN_CHARACTER]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-08-30 22:07:49
|
Revision: 14440 http://sourceforge.net/p/skim-app/code/14440 Author: hofman Date: 2024-08-30 22:07:46 +0000 (Fri, 30 Aug 2024) Log Message: ----------- avoid a local variable Modified Paths: -------------- trunk/SKConversionProgressController.m Modified: trunk/SKConversionProgressController.m =================================================================== --- trunk/SKConversionProgressController.m 2024-08-27 17:36:08 UTC (rev 14439) +++ trunk/SKConversionProgressController.m 2024-08-30 22:07:46 UTC (rev 14440) @@ -282,16 +282,17 @@ NSURL *tmpDirURL = [[NSFileManager defaultManager] URLForDirectory:NSItemReplacementDirectory inDomain:NSUserDomainMask appropriateForURL:aURL create:YES error:NULL]; BOOL outputPS = [commandName isEqualToString:@"dvips"]; NSURL *outFileURL = [tmpDirURL URLByAppendingPathComponent:[aURL lastPathComponentReplacingPathExtension:outputPS ? @"ps" : @"pdf"] isDirectory:NO]; - BOOL isStandardPS = [commandName hasPrefix:@"ps2pdf"] && ([PS_SEARCH_PATHS containsObject:[toolPath stringByDeletingLastPathComponent]]); NSArray *arguments = nil; - if (isStandardPS && [[NSWorkspace sharedWorkspace] type:fileType conformsToType:SKEncapsulatedPostScriptDocumentType]) - arguments = @[@"-dALLOWPSTRANSPARENCY", @"-dEPSCrop", [aURL path], [outFileURL path]]; - else if (isStandardPS) - arguments = @[@"-dALLOWPSTRANSPARENCY", [aURL path], [outFileURL path]]; - else if ([commandName isEqualToString:@"dvipdf"] || [commandName hasPrefix:@"ps2pdf"]) + if ([commandName hasPrefix:@"ps2pdf"] && [PS_SEARCH_PATHS containsObject:[toolPath stringByDeletingLastPathComponent]]) { + if ([[NSWorkspace sharedWorkspace] type:fileType conformsToType:SKEncapsulatedPostScriptDocumentType]) + arguments = @[@"-dALLOWPSTRANSPARENCY", @"-dEPSCrop", [aURL path], [outFileURL path]]; + else + arguments = @[@"-dALLOWPSTRANSPARENCY", [aURL path], [outFileURL path]]; + } else if ([commandName isEqualToString:@"dvipdf"] || [commandName hasPrefix:@"ps2pdf"]) { arguments = @[[aURL path], [outFileURL path]]; - else + } else { arguments = @[@"-o", [outFileURL path], [aURL path]]; + } task = [[NSTask alloc] init]; [task setLaunchPath:toolPath]; [task setArguments:arguments]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-08-27 17:36:11
|
Revision: 14439 http://sourceforge.net/p/skim-app/code/14439 Author: hofman Date: 2024-08-27 17:36:08 +0000 (Tue, 27 Aug 2024) Log Message: ----------- add -dEPSCrop option to ps2pdf command when converting EPS Modified Paths: -------------- trunk/SKConversionProgressController.m Modified: trunk/SKConversionProgressController.m =================================================================== --- trunk/SKConversionProgressController.m 2024-08-23 16:26:45 UTC (rev 14438) +++ trunk/SKConversionProgressController.m 2024-08-27 17:36:08 UTC (rev 14439) @@ -283,8 +283,15 @@ BOOL outputPS = [commandName isEqualToString:@"dvips"]; NSURL *outFileURL = [tmpDirURL URLByAppendingPathComponent:[aURL lastPathComponentReplacingPathExtension:outputPS ? @"ps" : @"pdf"] isDirectory:NO]; BOOL isStandardPS = [commandName hasPrefix:@"ps2pdf"] && ([PS_SEARCH_PATHS containsObject:[toolPath stringByDeletingLastPathComponent]]); - NSArray *arguments = isStandardPS ? @[@"-dALLOWPSTRANSPARENCY", [aURL path], [outFileURL path]] : [commandName isEqualToString:@"dvipdf"] || [commandName hasPrefix:@"ps2pdf"] ? @[[aURL path], [outFileURL path]] : @[@"-o", [outFileURL path], [aURL path]]; - + NSArray *arguments = nil; + if (isStandardPS && [[NSWorkspace sharedWorkspace] type:fileType conformsToType:SKEncapsulatedPostScriptDocumentType]) + arguments = @[@"-dALLOWPSTRANSPARENCY", @"-dEPSCrop", [aURL path], [outFileURL path]]; + else if (isStandardPS) + arguments = @[@"-dALLOWPSTRANSPARENCY", [aURL path], [outFileURL path]]; + else if ([commandName isEqualToString:@"dvipdf"] || [commandName hasPrefix:@"ps2pdf"]) + arguments = @[[aURL path], [outFileURL path]]; + else + arguments = @[@"-o", [outFileURL path], [aURL path]]; task = [[NSTask alloc] init]; [task setLaunchPath:toolPath]; [task setArguments:arguments]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-08-23 16:26:46
|
Revision: 14438 http://sourceforge.net/p/skim-app/code/14438 Author: hofman Date: 2024-08-23 16:26:45 +0000 (Fri, 23 Aug 2024) Log Message: ----------- replace <v> or <version> by version in out directory for build scrript Modified Paths: -------------- trunk/build_skim.py Modified: trunk/build_skim.py =================================================================== --- trunk/build_skim.py 2024-08-23 14:45:49 UTC (rev 14437) +++ trunk/build_skim.py 2024-08-23 16:26:45 UTC (rev 14438) @@ -593,6 +593,10 @@ else: sys.stderr.write("\nWARNING: built product will not be notarized\n\n") + out = out.replace("<v>", new_version_string) + out = out.replace("<version>", new_version_string) + out = os.path.expanduser(out) + try: # probably already exists os.makedirs(out) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-08-23 14:45:50
|
Revision: 14437 http://sourceforge.net/p/skim-app/code/14437 Author: hofman Date: 2024-08-23 14:45:49 +0000 (Fri, 23 Aug 2024) Log Message: ----------- Don't add spaces at end of release notes in appcast Modified Paths: -------------- trunk/build_skim.py Modified: trunk/build_skim.py =================================================================== --- trunk/build_skim.py 2024-08-22 08:54:41 UTC (rev 14436) +++ trunk/build_skim.py 2024-08-23 14:45:49 UTC (rev 14437) @@ -465,7 +465,7 @@ <channel> <item> <title>Version """ + newVersionString + """</title> - <description><![CDATA[""" + relNotes + """ ]]></description> + <description><![CDATA[""" + relNotes + """]]></description> <pubDate>""" + appcastDate + """</pubDate> <sparkle:minimumSystemVersion>""" + minimumSystemVersion + """</sparkle:minimumSystemVersion> <enclosure url=\"""" + download_url + """\" sparkle:version=\"""" + newVersion + """\" sparkle:shortVersionString=\"""" + newVersionString + """\" type=\"""" + type + """\" """ + signatureAndSize + """ /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-08-22 08:54:43
|
Revision: 14436 http://sourceforge.net/p/skim-app/code/14436 Author: hofman Date: 2024-08-22 08:54:41 +0000 (Thu, 22 Aug 2024) Log Message: ----------- Tag for release Added Paths: ----------- tags/REL_1_7_4/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-08-22 08:54:26
|
Revision: 14435 http://sourceforge.net/p/skim-app/code/14435 Author: hofman Date: 2024-08-22 08:54:23 +0000 (Thu, 22 Aug 2024) Log Message: ----------- update version numbers for release Modified Paths: -------------- trunk/Info.plist trunk/Skim.xcodeproj/project.pbxproj Modified: trunk/Info.plist =================================================================== --- trunk/Info.plist 2024-08-21 09:26:54 UTC (rev 14434) +++ trunk/Info.plist 2024-08-22 08:54:23 UTC (rev 14435) @@ -310,7 +310,7 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>1.7.3</string> + <string>1.7.4</string> <key>CFBundleSignature</key> <string>SKim</string> <key>CFBundleURLTypes</key> Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2024-08-21 09:26:54 UTC (rev 14434) +++ trunk/Skim.xcodeproj/project.pbxproj 2024-08-22 08:54:23 UTC (rev 14435) @@ -3803,7 +3803,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = CE17EE460E24ED7C00DE06EA /* Skim-App.xcconfig */; buildSettings = { - CURRENT_PROJECT_VERSION = 155; + CURRENT_PROJECT_VERSION = 156; }; name = Debug; }; @@ -3811,7 +3811,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = CE17EE460E24ED7C00DE06EA /* Skim-App.xcconfig */; buildSettings = { - CURRENT_PROJECT_VERSION = 155; + CURRENT_PROJECT_VERSION = 156; }; name = Release; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-08-21 09:26:57
|
Revision: 14434 http://sourceforge.net/p/skim-app/code/14434 Author: hofman Date: 2024-08-21 09:26:54 +0000 (Wed, 21 Aug 2024) Log Message: ----------- Update release notes Modified Paths: -------------- trunk/ReleaseNotes.rtf Modified: trunk/ReleaseNotes.rtf =================================================================== --- trunk/ReleaseNotes.rtf 2024-08-21 09:20:58 UTC (rev 14433) +++ trunk/ReleaseNotes.rtf 2024-08-21 09:26:54 UTC (rev 14434) @@ -379,8 +379,7 @@ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\partightenfactor0 \ls2\ilvl0 \f1\i0\b0\fs22 \cf2 {\listtext \uc0\u8226 }Return line selection from 'get selection for' script command with a single point.\ -\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\partightenfactor0 -\ls2\ilvl0\cf2 {\listtext \uc0\u8226 }TeX editor presets for Sublime Text 3 & 4.\ +{\listtext \uc0\u8226 }TeX editor presets for Sublime Text 3 & 4.\ {\listtext \uc0\u8226 }New option to always select new notes.\ {\listtext \uc0\u8226 }Expose option to set the text of new notes or update the text of dragged notes.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\partightenfactor0 @@ -397,6 +396,9 @@ {\listtext \uc0\u8226 }Fix display while drawing freehand notes under certain conditions.\ {\listtext \uc0\u8226 }Allow setting scale factor in range appropriate for document.\ {\listtext \uc0\u8226 }Support customized colors for custom pointers.\ +{\listtext \uc0\u8226 }Allow selecting new markup by selecting word or line.\ +{\listtext \uc0\u8226 }Slower default reading pacer speed.\ +{\listtext \uc0\u8226 }Let reading pacer wait by number of lines in reading bar at the end.\ \pard\tx560\tx1440\tx2880\tx4320\tx5760\tx7200\partightenfactor0 \f2\b\fs28 \cf2 \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-08-21 09:21:00
|
Revision: 14433 http://sourceforge.net/p/skim-app/code/14433 Author: hofman Date: 2024-08-21 09:20:58 +0000 (Wed, 21 Aug 2024) Log Message: ----------- Use slower default reading pacer and smaller line heights based on some reasonable average reading speed and text layout Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2024-08-20 16:45:56 UTC (rev 14432) +++ trunk/SKPDFView.m 2024-08-21 09:20:58 UTC (rev 14433) @@ -110,8 +110,10 @@ #define AUTO_HIDE_DELAY 3.0 #define SHOW_NAV_DELAY 0.25 -#define DEFAULT_PACER_SPEED 10.0 -#define PACER_LINE_HEIGHT 20.0 +// based on: reading speed: 240 words/min +// layout: 10 words/line, 40 line/page, 600 points/page +#define DEFAULT_PACER_SPEED 6.0 +#define PACER_LINE_HEIGHT 15.0 NSString *SKPDFViewDisplaysAsBookChangedNotification = @"SKPDFViewDisplaysAsBookChangedNotification"; NSString *SKPDFViewDisplaysPageBreaksChangedNotification = @"SKPDFViewDisplaysPageBreaksChangedNotification"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |