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
(21) |
Oct
|
Nov
|
Dec
|
From: <ho...@us...> - 2024-09-20 14:59:22
|
Revision: 14463 http://sourceforge.net/p/skim-app/code/14463 Author: hofman Date: 2024-09-20 14:59:20 +0000 (Fri, 20 Sep 2024) Log Message: ----------- combine some cursor and navwindow related calls in convenience methods Modified Paths: -------------- trunk/SKPresentationView.m Modified: trunk/SKPresentationView.m =================================================================== --- trunk/SKPresentationView.m 2024-09-20 14:18:04 UTC (rev 14462) +++ trunk/SKPresentationView.m 2024-09-20 14:59:20 UTC (rev 14463) @@ -81,6 +81,7 @@ @interface SKPresentationView () <CALayerDelegate> - (void)setCursorForMouse:(NSEvent *)theEvent; +- (void)setCursorAndAutoHide; - (void)doAutoHideCursor; - (void)doAutoHide; - (void)showNavWindow; @@ -314,7 +315,7 @@ - (void)toggleLaserPointer:(id)sender { pvFlags.useArrowCursor = pvFlags.useArrowCursor == NO; - [self setCursorForMouse:nil]; + [self setCursorAndAutoHide]; [[NSUserDefaults standardUserDefaults] setBool:pvFlags.useArrowCursor forKey:SKUseArrowCursorInPresentationKey]; [cursorWindow selectCursorStyle:[self cursorStyle]]; } @@ -321,9 +322,7 @@ - (void)nextLaserPointerColor:(id)sender { laserPointerColor = (laserPointerColor + 1) % 7; - pvFlags.cursorHidden = NO; - [self setCursorForMouse:nil]; - [self performSelectorOnce:@selector(doAutoHide) afterDelay:AUTO_HIDE_DELAY]; + [self setCursorAndAutoHide]; [[NSUserDefaults standardUserDefaults] setInteger:laserPointerColor forKey:SKLaserPointerColorKey]; [cursorWindow selectCursorStyle:[self cursorStyle]]; } @@ -330,9 +329,7 @@ - (void)previousLaserPointerColor:(id)sender { laserPointerColor = (laserPointerColor + 6) % 7; - pvFlags.cursorHidden = NO; - [self setCursorForMouse:nil]; - [self performSelectorOnce:@selector(doAutoHide) afterDelay:AUTO_HIDE_DELAY]; + [self setCursorAndAutoHide]; [[NSUserDefaults standardUserDefaults] setInteger:laserPointerColor forKey:SKLaserPointerColorKey]; [cursorWindow selectCursorStyle:[self cursorStyle]]; } @@ -445,8 +442,7 @@ if (didHideMouse) { [self doAutoHideCursor]; } else { - [self setCursorForMouse:nil]; - [self performSelectorOnce:@selector(doAutoHideCursor) afterDelay:AUTO_HIDE_DELAY]; + [self setCursorAndAutoHide]; } } @@ -453,7 +449,7 @@ - (void)mouseMoved:(NSEvent *)theEvent { pvFlags.cursorHidden = NO; - [self setCursorForMouse:theEvent]; + [self setCursorAndAutoHide]; if (navigationMode != SKNavigationNone && [navWindow isVisible] == NO) { if (navigationMode == SKNavigationEverywhere && [cursorWindow isVisible] == NO && NSPointInRect([theEvent locationInWindow], [[[self window] contentView] frame])) { @@ -465,7 +461,7 @@ [self performSelectorOnce:@selector(showNavWindow) afterDelay:SHOW_NAV_DELAY]; } } - [self performSelectorOnce:@selector(doAutoHide) afterDelay:AUTO_HIDE_DELAY]; + [super mouseMoved:theEvent]; } @@ -717,6 +713,11 @@ #pragma mark Cursors and HUD windows +- (void)cancelDelayedRequests { + [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(showNavWindow) object:nil]; + [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHide) object:nil]; +} + - (void)didOpen { [self setAutoScales:YES]; [pageView setAlphaValue:1.0]; @@ -728,9 +729,7 @@ - (void)willClose { pvFlags.cursorHidden = NO; [NSCursor setHiddenUntilMouseMoves:NO]; - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(showNavWindow) object:nil]; - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHide) object:nil]; - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHideCursor) object:nil]; + [self cancelDelayedRequests]; if (navWindow) { [navWindow remove]; navWindow = nil; @@ -755,6 +754,12 @@ [[NSCursor laserPointerCursorWithColor:laserPointerColor] set]; } +- (void)setCursorAndAutoHide { + pvFlags.cursorHidden = NO; + [self setCursorForMouse:nil]; + [self performSelectorOnce:@selector(doAutoHide) afterDelay:AUTO_HIDE_DELAY]; +} + - (void)doAutoHideCursor { if ([NSWindow windowNumberAtPoint:[NSEvent mouseLocation] belowWindowWithWindowNumber:0] == [[self window] windowNumber]) { [[NSCursor emptyCursor] set]; @@ -793,9 +798,7 @@ } - (void)handleWindowDidResignKeyNotification:(NSNotification *)notification { - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(showNavWindow) object:nil]; - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHide) object:nil]; - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHideCursor) object:nil]; + [self cancelDelayedRequests]; pvFlags.cursorHidden = NO; [[NSCursor arrowCursor] set]; } @@ -808,9 +811,7 @@ } - (void)viewWillMoveToWindow:(NSWindow *)newWindow { - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(showNavWindow) object:nil]; - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHide) object:nil]; - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHideCursor) object:nil]; + [self cancelDelayedRequests]; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSWindow *oldWindow = [self window]; @@ -822,9 +823,6 @@ [nc addObserver:self selector:@selector(handleWindowDidBecomeKeyNotification:) name:NSWindowDidBecomeKeyNotification object:newWindow]; [nc addObserver:self selector:@selector(handleWindowDidResignKeyNotification:) name:NSWindowDidResignKeyNotification object:newWindow]; } else { - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(showNavWindow) object:nil]; - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHide) object:nil]; - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHideCursor) object:nil]; [pageView setAlphaValue:1.0]; pvFlags.cursorHidden = NO; [NSCursor setHiddenUntilMouseMoves:NO]; @@ -843,10 +841,8 @@ } - (void)viewDidMoveToWindow { - if ([[self window] isKeyWindow]) { - [self performSelectorOnce:@selector(setCursorForMouse:) afterDelay:0.0]; - [self performSelectorOnce:@selector(doAutoHide) afterDelay:AUTO_HIDE_DELAY]; - } + if ([[self window] isKeyWindow]) + [self handleWindowDidBecomeKeyNotification:nil]; [super viewDidMoveToWindow]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-20 14:18:05
|
Revision: 14462 http://sourceforge.net/p/skim-app/code/14462 Author: hofman Date: 2024-09-20 14:18:04 +0000 (Fri, 20 Sep 2024) Log Message: ----------- set arrow cursor when window resigns key, e.g. when showing a sheet Modified Paths: -------------- trunk/SKPresentationView.m Modified: trunk/SKPresentationView.m =================================================================== --- trunk/SKPresentationView.m 2024-09-19 16:27:07 UTC (rev 14461) +++ trunk/SKPresentationView.m 2024-09-20 14:18:04 UTC (rev 14462) @@ -797,7 +797,7 @@ [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHide) object:nil]; [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHideCursor) object:nil]; pvFlags.cursorHidden = NO; - [self performSelectorOnce:@selector(setCursorForMouse:) afterDelay:0.0]; + [[NSCursor arrowCursor] set]; } - (void)handleWindowDidBecomeKeyNotification:(NSNotification *)notification { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-19 16:27:09
|
Revision: 14461 http://sourceforge.net/p/skim-app/code/14461 Author: hofman Date: 2024-09-19 16:27:07 +0000 (Thu, 19 Sep 2024) Log Message: ----------- delay setting cursor in some cases as calling it directly is ignored Modified Paths: -------------- trunk/SKPresentationView.m Modified: trunk/SKPresentationView.m =================================================================== --- trunk/SKPresentationView.m 2024-09-19 16:06:09 UTC (rev 14460) +++ trunk/SKPresentationView.m 2024-09-19 16:27:07 UTC (rev 14461) @@ -721,7 +721,7 @@ [self setAutoScales:YES]; [pageView setAlphaValue:1.0]; - [self setCursorForMouse:nil]; + [self performSelectorOnce:@selector(setCursorForMouse:) afterDelay:0.0]; [self performSelectorOnce:@selector(doAutoHide) afterDelay:AUTO_HIDE_DELAY]; } @@ -797,12 +797,12 @@ [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHide) object:nil]; [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(doAutoHideCursor) object:nil]; pvFlags.cursorHidden = NO; - [self setCursorForMouse:nil]; + [self performSelectorOnce:@selector(setCursorForMouse:) afterDelay:0.0]; } - (void)handleWindowDidBecomeKeyNotification:(NSNotification *)notification { if (pvFlags.cursorHidden == NO) { - [self setCursorForMouse:nil]; + [self performSelectorOnce:@selector(setCursorForMouse:) afterDelay:0.0]; [self performSelectorOnce:@selector(doAutoHide) afterDelay:AUTO_HIDE_DELAY]; } } @@ -844,7 +844,7 @@ - (void)viewDidMoveToWindow { if ([[self window] isKeyWindow]) { - [self setCursorForMouse:nil]; + [self performSelectorOnce:@selector(setCursorForMouse:) afterDelay:0.0]; [self performSelectorOnce:@selector(doAutoHide) afterDelay:AUTO_HIDE_DELAY]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-19 16:06:12
|
Revision: 14460 http://sourceforge.net/p/skim-app/code/14460 Author: hofman Date: 2024-09-19 16:06:09 +0000 (Thu, 19 Sep 2024) Log Message: ----------- remove unused method Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2024-09-19 15:51:01 UTC (rev 14459) +++ trunk/SKPDFView.m 2024-09-19 16:06:09 UTC (rev 14460) @@ -3825,10 +3825,6 @@ [currentAnnotation setBounds:newBounds]; } -- (void)updateCursorForMouse:(NSEvent *)theEvent { - [self setCursorForAreaOfInterest:[self areaOfInterestForMouse:theEvent]]; -} - - (void)doDragAnnotationWithEvent:(NSEvent *)theEvent { // currentAnnotation should be movable, or nil to be added in an appropriate note tool mode This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-19 15:51:04
|
Revision: 14459 http://sourceforge.net/p/skim-app/code/14459 Author: hofman Date: 2024-09-19 15:51:01 +0000 (Thu, 19 Sep 2024) Log Message: ----------- remove begin/end GestureWithEvent handlers Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2024-09-18 22:14:03 UTC (rev 14458) +++ trunk/SKPDFView.m 2024-09-19 15:51:01 UTC (rev 14459) @@ -2062,19 +2062,6 @@ } } -- (void)beginGestureWithEvent:(NSEvent *)theEvent { - [super beginGestureWithEvent:theEvent]; - PDFPage *page = [self pageAndPoint:NULL forEvent:theEvent nearest:YES]; - gestureRotation = 0.0; - gesturePageIndex = [(page ?: [self currentPage]) pageIndex]; -} - -- (void)endGestureWithEvent:(NSEvent *)theEvent { - [super endGestureWithEvent:theEvent]; - gestureRotation = 0.0; - gesturePageIndex = NSNotFound; -} - - (void)rotateWithEvent:(NSEvent *)theEvent { NSEventPhase phase = [theEvent phase]; if (phase == NSEventPhaseBegan) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-18 22:14:05
|
Revision: 14458 http://sourceforge.net/p/skim-app/code/14458 Author: hofman Date: 2024-09-18 22:14:03 +0000 (Wed, 18 Sep 2024) Log Message: ----------- let metal command buffer keep strong reference to recources, avoids a warning with the page turn transition Modified Paths: -------------- trunk/SKTransitionController.m Modified: trunk/SKTransitionController.m =================================================================== --- trunk/SKTransitionController.m 2024-09-17 16:05:39 UTC (rev 14457) +++ trunk/SKTransitionController.m 2024-09-18 22:14:03 UTC (rev 14458) @@ -606,7 +606,7 @@ return; id<CAMetalDrawable> drawable = [view currentDrawable]; - id<MTLCommandBuffer> commandBuffer = [commandQueue commandBufferWithUnretainedReferences]; + id<MTLCommandBuffer> commandBuffer = [commandQueue commandBuffer]; id<MTLRenderCommandEncoder> commandEncoder = [commandBuffer renderCommandEncoderWithDescriptor:[view currentRenderPassDescriptor]]; [commandEncoder endEncoding]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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. |