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
(32) |
Oct
|
Nov
|
Dec
|
From: <ho...@us...> - 2024-09-23 20:53:44
|
Revision: 14474 http://sourceforge.net/p/skim-app/code/14474 Author: hofman Date: 2024-09-23 20:53:42 +0000 (Mon, 23 Sep 2024) Log Message: ----------- Exclude some windows from windows menu. No need to set level of preview window. Modified Paths: -------------- trunk/SKApplication.m trunk/SKDownloadController.m trunk/SKPresentationOptionsSheetController.m Modified: trunk/SKApplication.m =================================================================== --- trunk/SKApplication.m 2024-09-23 16:03:13 UTC (rev 14473) +++ trunk/SKApplication.m 2024-09-23 20:53:42 UTC (rev 14474) @@ -42,7 +42,6 @@ #import "NSDocument_SKExtensions.h" #import "NSEvent_SKExtensions.h" #import "NSString_SKExtensions.h" -#import "SKDownloadController.h" #import "SKPreferenceController.h" NSString *SKApplicationStartsTerminatingNotification = @"SKApplicationStartsTerminatingNotification"; @@ -164,9 +163,6 @@ } - (void)addWindowsItem:(NSWindow *)aWindow title:(NSString *)aString filename:(BOOL)isFilename { - if ([[aWindow windowController] isKindOfClass:[SKDownloadController class]]) - return; - if ([[aWindow windowController] isKindOfClass:[SKPreferenceController class]]) aString = [NSLocalizedString(@"Preferences", @"Window description") stringByAppendingEmDashAndString:aString]; @@ -176,9 +172,6 @@ } - (void)changeWindowsItem:(NSWindow *)aWindow title:(NSString *)aString filename:(BOOL)isFilename { - if ([[aWindow windowController] isKindOfClass:[SKDownloadController class]]) - return; - if ([[aWindow windowController] isKindOfClass:[SKPreferenceController class]]) aString = [NSLocalizedString(@"Preferences", @"Window description") stringByAppendingEmDashAndString:aString]; Modified: trunk/SKDownloadController.m =================================================================== --- trunk/SKDownloadController.m 2024-09-23 16:03:13 UTC (rev 14473) +++ trunk/SKDownloadController.m 2024-09-23 20:53:42 UTC (rev 14474) @@ -147,6 +147,8 @@ [self setWindowFrameAutosaveName:SKDownloadsWindowFrameAutosaveName]; + [[self window] setExcludedFromWindowsMenu:YES]; + [tableView setTypeSelectHelper:[SKTypeSelectHelper typeSelectHelper]]; [tableView registerForDraggedTypes:@[(__bridge NSString *)kUTTypeURL, (__bridge NSString *)kUTTypeFileURL, NSURLPboardType, NSFilenamesPboardType, NSPasteboardTypeString]]; Modified: trunk/SKPresentationOptionsSheetController.m =================================================================== --- trunk/SKPresentationOptionsSheetController.m 2024-09-23 16:03:13 UTC (rev 14473) +++ trunk/SKPresentationOptionsSheetController.m 2024-09-23 20:53:42 UTC (rev 14474) @@ -295,6 +295,7 @@ previewWindow = [[NSWindow alloc] initWithContentRect:rect styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskFullSizeContentView backing:NSBackingStoreBuffered defer:NO]; [previewWindow setReleasedWhenClosed:NO]; [previewWindow setTitlebarAppearsTransparent:YES]; + [previewWindow setExcludedFromWindowsMenu:YES]; NSView *contentView = [previewWindow contentView]; @@ -332,7 +333,6 @@ [previewWindow setTitle:[SKTransitionController localizedNameForStyle:[info transitionStyle]]]; [previewWindow setFrame:rect display:NO]; [previewWindow center]; - [previewWindow setLevel:[[self window] level]]; [previewWindow makeKeyAndOrderFront:nil]; [previewView performSelector:@selector(goToNextPage:) withObject:nil afterDelay:1.0]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-23 16:03:15
|
Revision: 14473 http://sourceforge.net/p/skim-app/code/14473 Author: hofman Date: 2024-09-23 16:03:13 +0000 (Mon, 23 Sep 2024) Log Message: ----------- Separate display code for presentation view into intermediate superclass. Add a preview action to the presentation options sheet. Modified Paths: -------------- trunk/Base.lproj/TransitionSheet.xib trunk/SKPresentationOptionsSheetController.h trunk/SKPresentationOptionsSheetController.m trunk/SKPresentationView.h trunk/SKPresentationView.m trunk/SKTransitionController.h trunk/SKTransitionController.m trunk/de.lproj/TransitionSheet.strings trunk/en.lproj/TransitionSheet.strings trunk/es.lproj/TransitionSheet.strings trunk/fr.lproj/TransitionSheet.strings trunk/it.lproj/TransitionSheet.strings trunk/ja.lproj/TransitionSheet.strings trunk/nl.lproj/TransitionSheet.strings trunk/pl.lproj/TransitionSheet.strings trunk/ru.lproj/TransitionSheet.strings trunk/zh_CN.lproj/TransitionSheet.strings trunk/zh_TW.lproj/TransitionSheet.strings Modified: trunk/Base.lproj/TransitionSheet.xib =================================================================== --- trunk/Base.lproj/TransitionSheet.xib 2024-09-23 15:59:17 UTC (rev 14472) +++ trunk/Base.lproj/TransitionSheet.xib 2024-09-23 16:03:13 UTC (rev 14473) @@ -13,6 +13,7 @@ <outlet property="cancelButton" destination="31" id="KWh-6S-Kx4"/> <outlet property="notesDocumentPopUpButton" destination="69" id="99"/> <outlet property="okButton" destination="27" id="vvD-TX-nTy"/> + <outlet property="previewButton" destination="aK4-To-cWd" id="tF5-hw-0eF"/> <outlet property="stylePopUpButton" destination="13" id="ckf-of-OsA"/> <outlet property="tableView" destination="279" id="287"/> <outlet property="tableWidthConstraint" destination="iKt-mE-odp" id="MPv-aK-lfF"/> @@ -393,11 +394,25 @@ <autoresizingMask key="autoresizingMask"/> </scroller> </scrollView> + <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aK4-To-cWd"> + <rect key="frame" x="152" y="13" width="82" height="32"/> + <buttonCell key="cell" type="push" title="Preview" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="OOi-HR-fjj"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + <string key="keyEquivalent" base64-UTF8="YES"> +Gw +</string> + </buttonCell> + <connections> + <action selector="preview:" target="-2" id="On3-iX-X3z"/> + </connections> + </button> </subviews> <constraints> <constraint firstItem="67" firstAttribute="leading" secondItem="276" secondAttribute="trailing" constant="8" id="2rg-eT-ead"/> <constraint firstAttribute="bottom" secondItem="276" secondAttribute="bottom" constant="20" symbolic="YES" id="3T0-cp-NvT"/> <constraint firstItem="67" firstAttribute="top" secondItem="138" secondAttribute="bottom" constant="8" symbolic="YES" id="72r-F8-Uf4"/> + <constraint firstItem="31" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="aK4-To-cWd" secondAttribute="trailing" constant="12" symbolic="YES" id="8F4-F1-lLq"/> <constraint firstItem="138" firstAttribute="top" secondItem="8" secondAttribute="top" constant="20" symbolic="YES" id="GHg-dB-8ix"/> <constraint firstAttribute="bottom" secondItem="27" secondAttribute="bottom" constant="20" symbolic="YES" id="MIv-MP-aBB"/> <constraint firstItem="27" firstAttribute="leading" secondItem="31" secondAttribute="trailing" constant="12" symbolic="YES" id="NR2-CA-Nxl"/> @@ -404,9 +419,10 @@ <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="138" secondAttribute="trailing" constant="20" symbolic="YES" id="RXf-TG-FCJ"/> <constraint firstItem="138" firstAttribute="leading" secondItem="67" secondAttribute="leading" id="UBr-68-Taj"/> <constraint firstItem="276" firstAttribute="top" secondItem="8" secondAttribute="top" constant="20" symbolic="YES" id="Wa7-gP-eSb"/> - <constraint firstItem="31" firstAttribute="baseline" secondItem="27" secondAttribute="baseline" id="ZTB-Ht-m3V"/> + <constraint firstItem="aK4-To-cWd" firstAttribute="firstBaseline" secondItem="27" secondAttribute="firstBaseline" id="Zzd-CJ-GmB"/> <constraint firstItem="27" firstAttribute="baseline" secondItem="31" secondAttribute="firstBaseline" id="brZ-zc-ukR"/> <constraint firstItem="27" firstAttribute="width" secondItem="31" secondAttribute="width" id="buf-gV-RCb"/> + <constraint firstItem="138" firstAttribute="leading" secondItem="aK4-To-cWd" secondAttribute="leading" id="diz-vs-P9p"/> <constraint firstAttribute="trailing" secondItem="67" secondAttribute="trailing" constant="20" symbolic="YES" id="eM0-LM-BFY"/> <constraint firstItem="68" firstAttribute="top" secondItem="67" secondAttribute="bottom" constant="8" symbolic="YES" id="f4s-ds-QZB"/> <constraint firstItem="67" firstAttribute="leading" secondItem="8" secondAttribute="leading" constant="159" id="m1r-zo-sbv"/> Modified: trunk/SKPresentationOptionsSheetController.h =================================================================== --- trunk/SKPresentationOptionsSheetController.h 2024-09-23 15:59:17 UTC (rev 14472) +++ trunk/SKPresentationOptionsSheetController.h 2024-09-23 16:03:13 UTC (rev 14473) @@ -42,7 +42,7 @@ NS_ASSUME_NONNULL_BEGIN -@class SKMainWindowController, SKThumbnail, SKTransitionInfo; +@class SKMainWindowController, SKThumbnail, SKTransitionInfo, SKPDFPageView; @interface SKPresentationOptionsSheetController : NSWindowController <NSWindowDelegate, SKTableViewDelegate, NSTableViewDataSource, NSTouchBarDelegate> { NSPopUpButton *notesDocumentPopUpButton; @@ -50,6 +50,7 @@ NSPopUpButton *stylePopUpButton; NSButton *okButton; NSButton *cancelButton; + NSButton *previewButton; NSLayoutConstraint *boxLeadingConstraint; NSLayoutConstraint *tableWidthConstraint; NSArrayController *arrayController; @@ -59,12 +60,14 @@ __weak SKMainWindowController *controller; NSUndoManager *undoManager; NSMutableSet<SKTransitionInfo *> *changedTransitions; + NSWindow *previewWindow; + SKPDFPageView *previewView; } @property (nonatomic, nullable, strong) IBOutlet NSPopUpButton *notesDocumentPopUpButton; @property (nonatomic, nullable, strong) IBOutlet SKTableView *tableView; @property (nonatomic, nullable, strong) IBOutlet NSPopUpButton *stylePopUpButton; -@property (nonatomic, nullable, strong) IBOutlet NSButton *okButton, *cancelButton; +@property (nonatomic, nullable, strong) IBOutlet NSButton *okButton, *cancelButton, *previewButton; @property (nonatomic, nullable, strong) IBOutlet NSLayoutConstraint *boxLeadingConstraint, *tableWidthConstraint; @property (nonatomic, nullable, strong) IBOutlet NSArrayController *arrayController; @property (nonatomic) BOOL separate; @@ -81,6 +84,8 @@ - (void)startObservingTransitions:(NSArray<SKTransitionInfo *> *)infos; - (void)stopObservingTransitions:(NSArray<SKTransitionInfo *> *)infos; +- (IBAction)preview:(nullable id)sender; + @end NS_ASSUME_NONNULL_END Modified: trunk/SKPresentationOptionsSheetController.m =================================================================== --- trunk/SKPresentationOptionsSheetController.m 2024-09-23 15:59:17 UTC (rev 14472) +++ trunk/SKPresentationOptionsSheetController.m 2024-09-23 16:03:13 UTC (rev 14473) @@ -52,6 +52,8 @@ #import "NSGraphics_SKExtensions.h" #import "NSColor_SKExtensions.h" #import "NSView_SKExtensions.h" +#import "SKPresentationView.h" +#import "SKAnimatedBorderlessWindow.h" #define PAGE_COLUMNID @"page" #define IMAGE_COLUMNID @"image" @@ -80,7 +82,7 @@ @implementation SKPresentationOptionsSheetController -@synthesize notesDocumentPopUpButton, tableView, stylePopUpButton, okButton, cancelButton, tableWidthConstraint, boxLeadingConstraint, arrayController, separate, transition, transitions, undoManager; +@synthesize notesDocumentPopUpButton, tableView, stylePopUpButton, okButton, cancelButton, previewButton, tableWidthConstraint, boxLeadingConstraint, arrayController, separate, transition, transitions, undoManager; @dynamic currentTransitions, pageTransitions, notesDocument, notesDocumentOffset; + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { @@ -138,6 +140,15 @@ [notesDocumentPopUpButton selectItemAtIndex:docIndex == -1 ? 0 : docIndex]; } +- (void)validatePreviewButton { + if (separate) { + NSInteger idx = [tableView selectedRow]; + [previewButton setEnabled:idx != -1 && [[transitions objectAtIndex:idx] transitionStyle] != SKNoTransition]; + } else { + [previewButton setEnabled:[transition transitionStyle] != SKNoTransition]; + } +} + - (void)windowDidLoad { // add the filter names to the popup NSUInteger i, count = [[SKTransitionController transitionNames] count]; @@ -183,6 +194,8 @@ [[self undoManager] enableUndoRegistration]; } + [self validatePreviewButton]; + // set the current notes document and observe changes for the popup [self handleDocumentsDidChangeNotification:nil]; NSDocument *currentDoc = [controller presentationNotesDocument]; @@ -262,6 +275,70 @@ } } +- (void)preview:(id)sender { + SKTransitionInfo *info = transition; + NSUInteger idx = 0; + if (separate) { + idx = [[tableView selectedRowIndexes] firstIndex]; + if (idx == NSNotFound) + return; + info = [transitions objectAtIndex:idx]; + } + if ([info transitionStyle] == SKNoTransition) + return; + + NSRect rect = [[[self window] screen] frame]; + rect.size.width = round(0.5 * NSWidth(rect)) + 12.0; + rect.size.height = round(0.5 * NSHeight(rect)) + 30.0; + + if (previewWindow == nil) { + previewWindow = [[NSWindow alloc] initWithContentRect:rect styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskFullSizeContentView backing:NSBackingStoreBuffered defer:NO]; + [previewWindow setReleasedWhenClosed:NO]; + [previewWindow setTitlebarAppearsTransparent:YES]; + + NSView *contentView = [previewWindow contentView]; + + NSVisualEffectView *veView = [[NSVisualEffectView alloc] init]; + [veView setMaterial:NSVisualEffectMaterialPopover]; + [veView setState:NSVisualEffectStateActive]; + [veView setBlendingMode:NSVisualEffectBlendingModeBehindWindow]; + [veView setTranslatesAutoresizingMaskIntoConstraints:NO]; + [contentView addSubviewWithConstraints:veView]; + + NSView *bgView = [[NSView alloc] init]; + CALayer *layer = [CALayer layer]; + [layer setBackgroundColor:CGColorGetConstantColor(kCGColorBlack)]; + [layer setCornerRadius:6.0]; + [bgView setLayer:layer]; + [bgView setWantsLayer:YES]; + [bgView setTranslatesAutoresizingMaskIntoConstraints:NO]; + [contentView addSubview:bgView]; + NSArray *constraints = @[ + [[bgView leadingAnchor] constraintEqualToAnchor:[contentView leadingAnchor] constant:6.0], + [[contentView trailingAnchor] constraintEqualToAnchor:[bgView trailingAnchor] constant:6.0], + [[bgView topAnchor] constraintEqualToAnchor:[contentView topAnchor] constant:24.0], + [[contentView bottomAnchor] constraintEqualToAnchor:[bgView bottomAnchor] constant:6.0]]; + [NSLayoutConstraint activateConstraints:constraints]; + + previewView = [[SKPDFPageView alloc] init]; + [previewView setTransitionController:[[SKTransitionController alloc] init]]; + [[previewView transitionController] setShouldScale:YES]; + [bgView addSubviewWithConstraints:previewView]; + } + + [previewView setPage:[[controller pdfDocument] pageAtIndex:idx]]; + [[previewView transitionController] setTransition:info]; + + [previewWindow setTitle:[SKTransitionController localizedNameForStyle:[info transitionStyle]]]; + [previewWindow setFrame:rect display:NO]; + [previewWindow center]; + [previewWindow setLevel:[[self window] level]]; + [previewWindow makeKeyAndOrderFront:nil]; + + [previewView performSelector:@selector(goToNextPage:) withObject:nil afterDelay:1.0]; + [previewWindow performSelector:@selector(orderOut:) withObject:nil afterDelay:2.0 + [info duration]]; +} + - (void)setSeparate:(BOOL)newSeparate { if (separate != newSeparate) { separate = newSeparate; @@ -308,6 +385,8 @@ } } [[[self undoManager] prepareWithInvocationTarget:self] setSeparate:separate == NO]; + + [self validatePreviewButton]; } } @@ -398,6 +477,9 @@ [changedTransitions addObject:object]; } + if ([keyPath isEqualToString:TRANSITIONSTYLE_KEY]) + [self validatePreviewButton]; + [[[self undoManager] prepareWithInvocationTarget:self] setValue:oldValue forKey:keyPath ofTransition:object]; } else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; @@ -477,6 +559,10 @@ return [tv makeViewWithIdentifier:[tableColumn identifier] owner:self]; } +- (void)tableViewSelectionDidChange:(NSNotification *)notification { + [self validatePreviewButton]; +} + - (id <SKImageToolTipContext>)tableView:(NSTableView *)tv imageContextForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row scale:(CGFloat *)scale { if ([[tableColumn identifier] isEqualToString:IMAGE_COLUMNID]) return [[controller pdfDocument] pageAtIndex:row]; Modified: trunk/SKPresentationView.h =================================================================== --- trunk/SKPresentationView.h 2024-09-23 15:59:17 UTC (rev 14472) +++ trunk/SKPresentationView.h 2024-09-23 16:03:13 UTC (rev 14473) @@ -45,10 +45,24 @@ @class PDFPage, SKTransitionController, SKNavigationWindow, SKCursorStyleWindow; -@interface SKPresentationView : NSView { +@interface SKPDFPageView : NSView { NSView *pageView; PDFPage *page; SKTransitionController *transitionController; +} + +@property (nonatomic, nullable, strong) PDFPage *page; + +@property (nonatomic, nullable, strong) SKTransitionController *transitionController; + +- (void)goToNextPage:(nullable id)sender; +- (void)goToPreviousPage:(nullable id)sender; + +@end + +#pragma mark - + +@interface SKPresentationView : SKPDFPageView { SKNavigationWindow *navWindow; SKCursorStyleWindow *cursorWindow; NSInteger laserPointerColor; @@ -66,8 +80,6 @@ } -@property (nonatomic, nullable, strong) PDFPage *page; - @property (nonatomic) BOOL autoScales; @property (nonatomic) BOOL canGoToNextPage; @@ -81,10 +93,6 @@ @property (nonatomic) BOOL removeCursorShadow; @property (nonatomic) BOOL drawInPresentation; -@property (nonatomic, nullable, strong) SKTransitionController *transitionController; - -- (void)goToNextPage:(nullable id)sender; -- (void)goToPreviousPage:(nullable id)sender; - (void)goToFirstPage:(nullable id)sender; - (void)goToLastPage:(nullable id)sender; Modified: trunk/SKPresentationView.m =================================================================== --- trunk/SKPresentationView.m 2024-09-23 15:59:17 UTC (rev 14472) +++ trunk/SKPresentationView.m 2024-09-23 16:03:13 UTC (rev 14473) @@ -78,30 +78,13 @@ static NSInteger navigationMode = SKNavigationBottom; -@interface SKPresentationView () <CALayerDelegate> - -- (void)setCursorForMouse:(NSEvent *)theEvent; -- (void)setCursorAndAutoHide; -- (void)doAutoHideCursor; -- (void)doAutoHide; -- (void)showNavWindow; - -- (void)doDragWindowWithEvent:(NSEvent *)theEvent; -- (void)doDrawFreehandNoteWithEvent:(NSEvent *)theEvent; -- (void)showHelpMenu; - +@interface SKPDFPageView () <CALayerDelegate> @end -@implementation SKPresentationView +@implementation SKPDFPageView @synthesize page, transitionController; -@dynamic autoScales, canGoToNextPage, canGoToPreviousPage, canGoToFirstPage, canGoToLastPage, cursorStyle, hasBlackout, removeCursorShadow, drawInPresentation; -+ (void)initialize { - SKINITIALIZE; - navigationMode = [[NSUserDefaults standardUserDefaults] integerForKey:SKPresentationNavigationOptionKey]; -} - static inline NSArray *defaultKeysToObserve() { if (@available(macOS 10.14, *)) return @[SKInvertColorsInDarkModeKey, SKSepiaToneKey, SKWhitePointKey]; @@ -112,12 +95,6 @@ - (instancetype)initWithFrame:(NSRect)frameRect { self = [super initWithFrame:frameRect]; if (self) { - pvFlags.autoScales = YES; - pvFlags.cursorHidden = NO; - pvFlags.useArrowCursor = [[NSUserDefaults standardUserDefaults] boolForKey:SKUseArrowCursorInPresentationKey]; - pvFlags.removeLaserPointerShadow = [[NSUserDefaults standardUserDefaults] boolForKey:SKRemoveLaserPointerShadowKey]; - pvFlags.enableDrawing = NO == [[NSUserDefaults standardUserDefaults] boolForKey:SKDisableDrawingInPresentationKey]; - page = nil; CALayer *layer = [CALayer layer]; @@ -134,8 +111,6 @@ [self setTranslatesAutoresizingMaskIntoConstraints:NO]; - [self addTrackingArea:[[NSTrackingArea alloc] initWithRect:NSZeroRect options:NSTrackingMouseMoved | NSTrackingMouseEnteredAndExited | NSTrackingActiveInKeyWindow | NSTrackingInVisibleRect owner:self userInfo:nil]]; - NSUserDefaults *sud = [NSUserDefaults standardUserDefaults]; for (NSString *key in defaultKeysToObserve()) [sud addObserver:self forKeyPath:key options:0 context:&SKPresentationViewDefaultsObservationContext]; @@ -167,10 +142,6 @@ #pragma mark Accessors -- (BOOL)canBecomeKeyView { - return YES; -} - - (void)setNeedsDisplay:(BOOL)needsDisplay { [super setNeedsDisplay:needsDisplay]; [pageView setNeedsDisplay:needsDisplay]; @@ -181,18 +152,6 @@ [pageView setNeedsDisplay:YES]; } -- (BOOL)autoScales { - return pvFlags.autoScales; -} - -- (void)setAutoScales:(BOOL)flag { - if (flag != pvFlags.autoScales) { - pvFlags.autoScales = flag; - [pageView setNeedsDisplay:YES]; - [[NSNotificationCenter defaultCenter] postNotificationName:SKPresentationViewAutoScalesChangedNotification object:self]; - } -} - - (void)setPage:(PDFPage *)newPage { if (newPage != page) { page = newPage; @@ -201,9 +160,7 @@ } } -- (BOOL)hasBlackout { - return [pageView alphaValue] <= 0.0; -} +- (BOOL)autoScales { return YES; } - (void)setTransitionController:(SKTransitionController *)newTransitionController { if (newTransitionController != transitionController) { @@ -213,42 +170,14 @@ } } -- (BOOL)canGoToNextPage { - return [page pageIndex] + 1 < [[page document] pageCount]; -} +#pragma mark Action -- (BOOL)canGoToPreviousPage { - return [page pageIndex] > 0; -} - -- (BOOL)canGoToFirstPage { - return [page pageIndex] > 0; -} - -- (BOOL)canGoToLastPage { - return [page pageIndex] + 1 < [[page document] pageCount]; -} - -- (NSInteger)cursorStyle { - return pvFlags.useArrowCursor ? -1 : laserPointerColor; -} - -- (BOOL)removeCursorShadow { - return pvFlags.removeLaserPointerShadow; -} - -- (BOOL)drawInPresentation { - return pvFlags.enableDrawing; -} - -#pragma mark Actions - - (NSRect)pageRect { NSRect bounds = [self bounds]; NSRect pageRect = [page boundsForBox:kPDFDisplayBoxCropBox]; if (([page rotation] % 180) != 0) pageRect = NSMakeRect(0.0, 0.0, NSHeight(pageRect), NSWidth(pageRect)); - CGFloat scale = pvFlags.autoScales ? fmin(NSHeight(bounds) / NSHeight(pageRect), NSWidth(bounds) / NSWidth(pageRect)) : 1.0; + CGFloat scale = [self autoScales] ? fmin(NSHeight(bounds) / NSHeight(pageRect), NSWidth(bounds) / NSWidth(pageRect)) : 1.0; return NSInsetRect(bounds, 0.5 * (NSWidth(bounds) - scale * NSWidth(pageRect)), 0.5 * (NSHeight(bounds) - scale * NSHeight(pageRect))); } @@ -287,6 +216,126 @@ } } +#pragma mark CALayer delegate + +- (void)drawLayer:(CALayer *)aLayer inContext:(CGContextRef)context { + if (page == nil) + return; + NSRect bounds = [self bounds]; + NSRect pageRect = [page boundsForBox:kPDFDisplayBoxCropBox]; + if (([page rotation] % 180) != 0) + pageRect = NSMakeRect(0.0, 0.0, NSHeight(pageRect), NSWidth(pageRect)); + CGFloat scale = [self autoScales] ? fmin(NSHeight(bounds) / NSHeight(pageRect), NSWidth(bounds) / NSWidth(pageRect)) : 1.0; + pageRect = NSInsetRect(bounds, 0.5 * (NSWidth(bounds) - scale * NSWidth(pageRect)), 0.5 * (NSHeight(bounds) - scale * NSHeight(pageRect))); + CGContextSaveGState(context); + CGContextSetFillColorWithColor(context, CGColorGetConstantColor(kCGColorWhite)); + CGContextFillRect(context, SKPixelAlignedRect(NSRectToCGRect(pageRect), context)); + CGContextRestoreGState(context); + CGContextSaveGState(context); + CGContextSetInterpolationQuality(context, [[NSUserDefaults standardUserDefaults] integerForKey:SKInterpolationQualityKey] + 1); + CGContextTranslateCTM(context, NSMinX(pageRect), NSMinY(pageRect)); + CGContextScaleCTM(context, scale, scale); + [page drawWithBox:kPDFDisplayBoxCropBox toContext:context]; + CGContextRestoreGState(context); +} + +- (BOOL)layer:(CALayer *)aLayer shouldInheritContentsScale:(CGFloat)newScale fromWindow:(NSWindow *)window { + return YES; +} + +@end + +#pragma mark - + +@interface SKPresentationView () + +- (void)setCursorForMouse:(NSEvent *)theEvent; +- (void)setCursorAndAutoHide; +- (void)doAutoHideCursor; +- (void)doAutoHide; +- (void)showNavWindow; + +- (void)doDragWindowWithEvent:(NSEvent *)theEvent; +- (void)doDrawFreehandNoteWithEvent:(NSEvent *)theEvent; +- (void)showHelpMenu; + +@end + +@implementation SKPresentationView + +@dynamic autoScales, canGoToNextPage, canGoToPreviousPage, canGoToFirstPage, canGoToLastPage, cursorStyle, hasBlackout, removeCursorShadow, drawInPresentation; + ++ (void)initialize { + SKINITIALIZE; + navigationMode = [[NSUserDefaults standardUserDefaults] integerForKey:SKPresentationNavigationOptionKey]; +} + +- (instancetype)initWithFrame:(NSRect)frameRect { + self = [super initWithFrame:frameRect]; + if (self) { + pvFlags.autoScales = YES; + pvFlags.cursorHidden = NO; + pvFlags.useArrowCursor = [[NSUserDefaults standardUserDefaults] boolForKey:SKUseArrowCursorInPresentationKey]; + pvFlags.removeLaserPointerShadow = [[NSUserDefaults standardUserDefaults] boolForKey:SKRemoveLaserPointerShadowKey]; + pvFlags.enableDrawing = NO == [[NSUserDefaults standardUserDefaults] boolForKey:SKDisableDrawingInPresentationKey]; + + [self addTrackingArea:[[NSTrackingArea alloc] initWithRect:NSZeroRect options:NSTrackingMouseMoved | NSTrackingMouseEnteredAndExited | NSTrackingActiveInKeyWindow | NSTrackingInVisibleRect owner:self userInfo:nil]]; + } + return self; +} + +#pragma mark Accessors + +- (BOOL)canBecomeKeyView { + return YES; +} + +- (BOOL)autoScales { + return pvFlags.autoScales; +} + +- (void)setAutoScales:(BOOL)flag { + if (flag != pvFlags.autoScales) { + pvFlags.autoScales = flag; + [pageView setNeedsDisplay:YES]; + [[NSNotificationCenter defaultCenter] postNotificationName:SKPresentationViewAutoScalesChangedNotification object:self]; + } +} + +- (BOOL)hasBlackout { + return [pageView alphaValue] <= 0.0; +} + +- (BOOL)canGoToNextPage { + return [page pageIndex] + 1 < [[page document] pageCount]; +} + +- (BOOL)canGoToPreviousPage { + return [page pageIndex] > 0; +} + +- (BOOL)canGoToFirstPage { + return [page pageIndex] > 0; +} + +- (BOOL)canGoToLastPage { + return [page pageIndex] + 1 < [[page document] pageCount]; +} + +- (NSInteger)cursorStyle { + return pvFlags.useArrowCursor ? -1 : laserPointerColor; +} + +- (BOOL)removeCursorShadow { + return pvFlags.removeLaserPointerShadow; +} + +- (BOOL)drawInPresentation { + return pvFlags.enableDrawing; +} + +#pragma mark Actions + - (void)goToFirstPage:(id)sender { PDFDocument *pdfDoc = [page document]; NSUInteger idx = [page pageIndex]; @@ -364,7 +413,7 @@ - (BOOL)validateMenuItem:(NSMenuItem *)menuItem { if ([menuItem action] == @selector(goToNextPage:)) return [self canGoToNextPage]; - else if ([menuItem action] == @selector(goToPrerviousPage:)) + else if ([menuItem action] == @selector(goToPreviousPage:)) return [self canGoToPreviousPage]; else if ([menuItem action] == @selector(goToFirstPage:)) return [self canGoToFirstPage]; @@ -847,31 +896,4 @@ [super viewDidMoveToWindow]; } -#pragma mark CALayer delegate - -- (void)drawLayer:(CALayer *)aLayer inContext:(CGContextRef)context { - if (page == nil) - return; - NSRect bounds = [self bounds]; - NSRect pageRect = [page boundsForBox:kPDFDisplayBoxCropBox]; - if (([page rotation] % 180) != 0) - pageRect = NSMakeRect(0.0, 0.0, NSHeight(pageRect), NSWidth(pageRect)); - CGFloat scale = pvFlags.autoScales ? fmin(NSHeight(bounds) / NSHeight(pageRect), NSWidth(bounds) / NSWidth(pageRect)) : 1.0; - pageRect = NSInsetRect(bounds, 0.5 * (NSWidth(bounds) - scale * NSWidth(pageRect)), 0.5 * (NSHeight(bounds) - scale * NSHeight(pageRect))); - CGContextSaveGState(context); - CGContextSetFillColorWithColor(context, CGColorGetConstantColor(kCGColorWhite)); - CGContextFillRect(context, SKPixelAlignedRect(NSRectToCGRect(pageRect), context)); - CGContextRestoreGState(context); - CGContextSaveGState(context); - CGContextSetInterpolationQuality(context, [[NSUserDefaults standardUserDefaults] integerForKey:SKInterpolationQualityKey] + 1); - CGContextTranslateCTM(context, NSMinX(pageRect), NSMinY(pageRect)); - CGContextScaleCTM(context, scale, scale); - [page drawWithBox:kPDFDisplayBoxCropBox toContext:context]; - CGContextRestoreGState(context); -} - -- (BOOL)layer:(CALayer *)aLayer shouldInheritContentsScale:(CGFloat)newScale fromWindow:(NSWindow *)window { - return YES; -} - @end Modified: trunk/SKTransitionController.h =================================================================== --- trunk/SKTransitionController.h 2024-09-23 15:59:17 UTC (rev 14472) +++ trunk/SKTransitionController.h 2024-09-23 16:03:13 UTC (rev 14473) @@ -48,6 +48,7 @@ NSWindow *window; __weak NSView *view; BOOL animating; + BOOL shouldScale; SKTransitionInfo *transition; NSArray<NSDictionary<NSString *, id> *> *pageTransitions; @@ -59,6 +60,8 @@ @property (class, nonatomic, readonly) NSArray<NSString *> *transitionNames; +@property (nonatomic) BOOL shouldScale; + + (NSString *)nameForStyle:(SKTransitionStyle)style; + (SKTransitionStyle)styleForName:(NSString *)name; Modified: trunk/SKTransitionController.m =================================================================== --- trunk/SKTransitionController.m 2024-09-23 15:59:17 UTC (rev 14472) +++ trunk/SKTransitionController.m 2024-09-23 16:03:13 UTC (rev 14473) @@ -158,7 +158,7 @@ @implementation SKTransitionController -@synthesize view, transition, pageTransitions; +@synthesize view, transition, pageTransitions, shouldScale; static NSDictionary *oldStyleNames = nil; @@ -445,10 +445,11 @@ CGRect cgBounds = scaleRect(bounds, imageScale); CGRect extent = [currentTransition shouldRestrict] ? cgRect : cgBounds; NSString *filterName = [[self class] nameForStyle:[currentTransition transitionStyle]]; + CGFloat scale = shouldScale ? imageScale * NSHeight(bounds) / NSHeight([[[view window] screen] frame]) : imageScale; CIFilter *transitionFilter = [self transitionFilterWithName:filterName rect:cgRect extent:extent - scale:imageScale + scale:scale forward:toIndex >= fromIndex initialImage:initialImage finalImage:finalImage]; Modified: trunk/de.lproj/TransitionSheet.strings =================================================================== (Binary files differ) Modified: trunk/en.lproj/TransitionSheet.strings =================================================================== (Binary files differ) Modified: trunk/es.lproj/TransitionSheet.strings =================================================================== (Binary files differ) Modified: trunk/fr.lproj/TransitionSheet.strings =================================================================== (Binary files differ) Modified: trunk/it.lproj/TransitionSheet.strings =================================================================== (Binary files differ) Modified: trunk/ja.lproj/TransitionSheet.strings =================================================================== (Binary files differ) Modified: trunk/nl.lproj/TransitionSheet.strings =================================================================== (Binary files differ) Modified: trunk/pl.lproj/TransitionSheet.strings =================================================================== (Binary files differ) Modified: trunk/ru.lproj/TransitionSheet.strings =================================================================== (Binary files differ) Modified: trunk/zh_CN.lproj/TransitionSheet.strings =================================================================== (Binary files differ) Modified: trunk/zh_TW.lproj/TransitionSheet.strings =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-23 15:59:18
|
Revision: 14472 http://sourceforge.net/p/skim-app/code/14472 Author: hofman Date: 2024-09-23 15:59:17 +0000 (Mon, 23 Sep 2024) Log Message: ----------- fix file reference for russian TransitionSheet localization in project file Modified Paths: -------------- trunk/Skim.xcodeproj/project.pbxproj Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2024-09-23 15:41:23 UTC (rev 14471) +++ trunk/Skim.xcodeproj/project.pbxproj 2024-09-23 15:59:17 UTC (rev 14472) @@ -1154,7 +1154,6 @@ CEB540460F261D1700723C1F /* zh_TW */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = zh_TW; path = zh_TW.lproj/ZoomValues.strings; sourceTree = "<group>"; }; CEB72B890C4A189D000350F9 /* SKTransitionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SKTransitionController.h; sourceTree = "<group>"; }; CEB735A10C4A8CD6000350F9 /* TransitionShading.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = TransitionShading.tiff; sourceTree = "<group>"; }; - CEB9A5282CA1C33F004C3661 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/TransitionSheet.strings; sourceTree = "<group>"; }; CEBC0DDB2791C607008686E8 /* NSObject_SKExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSObject_SKExtensions.h; sourceTree = "<group>"; }; CEBC0DDC2791C607008686E8 /* NSObject_SKExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObject_SKExtensions.m; sourceTree = "<group>"; }; CEBCA4BE2868A93A00E6376E /* SKLine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SKLine.h; sourceTree = "<group>"; }; @@ -3490,10 +3489,10 @@ CEF60DD1114C0E8E0074ACC4 /* it */, CEF60DFD114C0EC10074ACC4 /* es */, CEF877551190593E006436A2 /* pl */, + CEF60DE7114C0EA80074ACC4 /* ru */, CE157EEF12D4EBC100515B85 /* ja */, CE1632BF1582AC6A00CFF419 /* zh_CN */, CEF60E13114C0ED70074ACC4 /* zh_TW */, - CEB9A5282CA1C33F004C3661 /* ru */, ); name = TransitionSheet.strings; sourceTree = "<group>"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-23 15:41:26
|
Revision: 14471 http://sourceforge.net/p/skim-app/code/14471 Author: hofman Date: 2024-09-23 15:41:23 +0000 (Mon, 23 Sep 2024) Log Message: ----------- add back russian localization for TransitionSheet Modified Paths: -------------- trunk/Skim.xcodeproj/project.pbxproj Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2024-09-23 15:28:46 UTC (rev 14470) +++ trunk/Skim.xcodeproj/project.pbxproj 2024-09-23 15:41:23 UTC (rev 14471) @@ -1154,6 +1154,7 @@ CEB540460F261D1700723C1F /* zh_TW */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = zh_TW; path = zh_TW.lproj/ZoomValues.strings; sourceTree = "<group>"; }; CEB72B890C4A189D000350F9 /* SKTransitionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SKTransitionController.h; sourceTree = "<group>"; }; CEB735A10C4A8CD6000350F9 /* TransitionShading.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = TransitionShading.tiff; sourceTree = "<group>"; }; + CEB9A5282CA1C33F004C3661 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/TransitionSheet.strings; sourceTree = "<group>"; }; CEBC0DDB2791C607008686E8 /* NSObject_SKExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSObject_SKExtensions.h; sourceTree = "<group>"; }; CEBC0DDC2791C607008686E8 /* NSObject_SKExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObject_SKExtensions.m; sourceTree = "<group>"; }; CEBCA4BE2868A93A00E6376E /* SKLine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SKLine.h; sourceTree = "<group>"; }; @@ -3492,6 +3493,7 @@ CE157EEF12D4EBC100515B85 /* ja */, CE1632BF1582AC6A00CFF419 /* zh_CN */, CEF60E13114C0ED70074ACC4 /* zh_TW */, + CEB9A5282CA1C33F004C3661 /* ru */, ); name = TransitionSheet.strings; sourceTree = "<group>"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-23 15:28:47
|
Revision: 14470 http://sourceforge.net/p/skim-app/code/14470 Author: hofman Date: 2024-09-23 15:28:46 +0000 (Mon, 23 Sep 2024) Log Message: ----------- fix initializing varibale Modified Paths: -------------- trunk/SKMainWindowController_FullScreen.m Modified: trunk/SKMainWindowController_FullScreen.m =================================================================== --- trunk/SKMainWindowController_FullScreen.m 2024-09-22 16:48:33 UTC (rev 14469) +++ trunk/SKMainWindowController_FullScreen.m 2024-09-23 15:28:46 UTC (rev 14470) @@ -288,7 +288,7 @@ if ([self presentationNotesDocument]) { PDFDocument *pdfDoc = [[self presentationNotesDocument] pdfDocument]; NSInteger offset = [self presentationNotesOffset]; - NSUInteger pageIndex = (NSUInteger)MAX(0, MIN((NSInteger)[pdfDoc pageCount], (NSInteger)pageIndex + offset)); + NSUInteger pageIndex = (NSUInteger)MAX(0, MIN((NSInteger)[pdfDoc pageCount], (NSInteger)[[pdfView currentPage] pageIndex] + offset)); if ([self presentationNotesDocument] == [self document]) [[presentationPreview pdfView] goToCurrentPage:[pdfDoc pageAtIndex:pageIndex]]; else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-22 16:48:34
|
Revision: 14469 http://sourceforge.net/p/skim-app/code/14469 Author: hofman Date: 2024-09-22 16:48:33 +0000 (Sun, 22 Sep 2024) Log Message: ----------- Don't scale nil value Modified Paths: -------------- trunk/SKTransitionController.m Modified: trunk/SKTransitionController.m =================================================================== --- trunk/SKTransitionController.m 2024-09-22 16:45:21 UTC (rev 14468) +++ trunk/SKTransitionController.m 2024-09-22 16:48:33 UTC (rev 14469) @@ -313,6 +313,7 @@ else if ([[NSSet setWithObjects:@"inputForward", @"inputLeft", nil] containsObject:key]) value = [NSNumber numberWithBool:forward]; } else if ([type isEqualToString:kCIAttributeTypeDistance]) { + if ([transitionFilter valueForKey:key] == nil) continue; CGFloat width = [[transitionFilter valueForKey:key] doubleValue]; value = [NSNumber numberWithDouble:scale * width]; } else if ([type isEqualToString:kCIAttributeTypePosition]) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-22 16:45:23
|
Revision: 14468 http://sourceforge.net/p/skim-app/code/14468 Author: hofman Date: 2024-09-22 16:45:21 +0000 (Sun, 22 Sep 2024) Log Message: ----------- don't pass transitioninfo object to transition filter method Modified Paths: -------------- trunk/SKTransitionController.m Modified: trunk/SKTransitionController.m =================================================================== --- trunk/SKTransitionController.m 2024-09-22 16:06:04 UTC (rev 14467) +++ trunk/SKTransitionController.m 2024-09-22 16:45:21 UTC (rev 14468) @@ -279,9 +279,8 @@ } // rect and bounds are in pixels -- (CIFilter *)transitionFilterForTransition:(SKTransitionInfo *)info rect:(CGRect)rect bounds:(CGRect)bounds scale:(CGFloat)scale forward:(BOOL)forward initialImage:(CIImage *)initialImage finalImage:(CIImage *)finalImage { - NSString *filterName = [[self class] nameForStyle:[info transitionStyle]]; - CIFilter *transitionFilter = [CIFilter filterWithName:filterName]; +- (CIFilter *)transitionFilterWithName:(NSString *)name rect:(CGRect)rect extent:(CGRect)extent scale:(CGFloat)scale forward:(BOOL)forward initialImage:(CIImage *)initialImage finalImage:(CIImage *)finalImage { + CIFilter *transitionFilter = [CIFilter filterWithName:name]; [transitionFilter setDefaults]; @@ -289,11 +288,10 @@ id value = nil; NSString *type = [[[transitionFilter attributes] objectForKey:key] objectForKey:kCIAttributeType]; if ([key isEqualToString:kCIInputExtentKey]) { - CGRect extent = [info shouldRestrict] ? rect : bounds; value = [CIVector vectorWithCGRect:extent]; } else if ([key isEqualToString:kCIInputAngleKey]) { CGFloat angle = forward ? 0.0 : M_PI; - if ([filterName hasPrefix:@"CIPageCurl"]) + if ([name hasPrefix:@"CIPageCurl"]) angle = forward ? -M_PI_4 : -3.0 * M_PI_4; value = [NSNumber numberWithDouble:angle]; } else if ([key isEqualToString:kCIInputCenterKey]) { @@ -330,15 +328,15 @@ static CIImage *inputMaskImage = nil; if (inputMaskImage == nil) inputMaskImage = [[CIImage alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"TransitionMask" withExtension:@"jpg"]]; - CGRect extent = [inputMaskImage extent]; + CGRect maskExtent = [inputMaskImage extent]; CGAffineTransform transform; - if ((CGRectGetWidth(extent) < CGRectGetHeight(extent)) != (CGRectGetWidth(rect) < CGRectGetHeight(rect))) { + if ((CGRectGetWidth(maskExtent) < CGRectGetHeight(maskExtent)) != (CGRectGetWidth(rect) < CGRectGetHeight(rect))) { transform = CGAffineTransformMake(0.0, 1.0, 1.0, 0.0, 0.0, 0.0); - transform = CGAffineTransformTranslate(transform, CGRectGetMinY(rect) - CGRectGetMinY(bounds), CGRectGetMinX(rect) - CGRectGetMinX(bounds)); - transform = CGAffineTransformScale(transform, CGRectGetHeight(rect) / CGRectGetWidth(extent), CGRectGetWidth(rect) / CGRectGetHeight(extent)); + transform = CGAffineTransformTranslate(transform, CGRectGetMinY(rect), CGRectGetMinX(rect)); + transform = CGAffineTransformScale(transform, CGRectGetHeight(rect) / CGRectGetWidth(maskExtent), CGRectGetWidth(rect) / CGRectGetHeight(maskExtent)); } else { - transform = CGAffineTransformMakeTranslation(CGRectGetMinX(rect) - CGRectGetMinX(bounds), CGRectGetMinY(rect) - CGRectGetMinY(bounds)); - transform = CGAffineTransformScale(transform, CGRectGetWidth(rect) / CGRectGetWidth(extent), CGRectGetHeight(rect) / CGRectGetHeight(extent)); + transform = CGAffineTransformMakeTranslation(CGRectGetMinX(rect), CGRectGetMinY(rect)); + transform = CGAffineTransformScale(transform, CGRectGetWidth(rect) / CGRectGetWidth(maskExtent), CGRectGetHeight(rect) / CGRectGetHeight(maskExtent)); } value = [inputMaskImage imageByApplyingTransform:transform]; } else continue; @@ -444,13 +442,15 @@ CIImage *finalImage = [self currentImageForRect:toRect scale:&imageScale]; CGRect cgRect = CGRectIntegral(scaleRect(NSIntersectionRect(NSUnionRect(rect, toRect), bounds), imageScale)); CGRect cgBounds = scaleRect(bounds, imageScale); - CIFilter *transitionFilter = [self transitionFilterForTransition:currentTransition - rect:cgRect - bounds:cgBounds - scale:imageScale - forward:toIndex >= fromIndex - initialImage:initialImage - finalImage:finalImage]; + CGRect extent = [currentTransition shouldRestrict] ? cgRect : cgBounds; + NSString *filterName = [[self class] nameForStyle:[currentTransition transitionStyle]]; + CIFilter *transitionFilter = [self transitionFilterWithName:filterName + rect:cgRect + extent:extent + scale:imageScale + forward:toIndex >= fromIndex + initialImage:initialImage + finalImage:finalImage]; [self showTransitionViewForRect:bounds image:initialImage extent:cgBounds]; // Update the view and its window, so it shows the correct state when it is shown. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-22 16:06:06
|
Revision: 14467 http://sourceforge.net/p/skim-app/code/14467 Author: hofman Date: 2024-09-22 16:06:04 +0000 (Sun, 22 Sep 2024) Log Message: ----------- Scale position and rectangle default attribute values for transition filters Modified Paths: -------------- trunk/SKTransitionController.m Modified: trunk/SKTransitionController.m =================================================================== --- trunk/SKTransitionController.m 2024-09-22 15:29:35 UTC (rev 14466) +++ trunk/SKTransitionController.m 2024-09-22 16:06:04 UTC (rev 14467) @@ -287,6 +287,7 @@ for (NSString *key in [transitionFilter inputKeys]) { id value = nil; + NSString *type = [[[transitionFilter attributes] objectForKey:key] objectForKey:kCIAttributeType]; if ([key isEqualToString:kCIInputExtentKey]) { CGRect extent = [info shouldRestrict] ? rect : bounds; value = [CIVector vectorWithCGRect:extent]; @@ -308,15 +309,23 @@ value = inputShadingImage; } else if ([key isEqualToString:kCIInputBacksideImageKey]) { value = initialImage; - } else if ([[[[transitionFilter attributes] objectForKey:key] objectForKey:kCIAttributeType] isEqualToString:kCIAttributeTypeBoolean]) { + } else if ([type isEqualToString:kCIAttributeTypeBoolean]) { if ([[NSSet setWithObjects:@"inputBackward", @"inputRight", @"inputReversed", nil] containsObject:key]) value = [NSNumber numberWithBool:forward == NO]; else if ([[NSSet setWithObjects:@"inputForward", @"inputLeft", nil] containsObject:key]) value = [NSNumber numberWithBool:forward]; - } else if ([[[[transitionFilter attributes] objectForKey:key] objectForKey:kCIAttributeType] isEqualToString:kCIAttributeTypeDistance]) { + } else if ([type isEqualToString:kCIAttributeTypeDistance]) { CGFloat width = [[transitionFilter valueForKey:key] doubleValue]; value = [NSNumber numberWithDouble:scale * width]; - } else if ([[[[transitionFilter attributes] objectForKey:key] objectForKey:kCIAttributeClass] isEqualToString:@"CIImage"]) { + } else if ([type isEqualToString:kCIAttributeTypePosition]) { + if ([transitionFilter valueForKey:key] == nil) continue; + CGPoint point = [[transitionFilter valueForKey:key] CGPointValue]; + value = [CIVector vectorWithCGPoint:CGPointMake(scale * point.x, scale * point.y)]; + } else if ([type isEqualToString:kCIAttributeTypeRectangle]) { + if ([transitionFilter valueForKey:key] == nil) continue; + CGRect r = [[transitionFilter valueForKey:key] CGRectValue]; + value = [CIVector vectorWithCGRect:CGRectMake(scale * CGRectGetMinX(r), scale * CGRectGetMinY(r), scale * CGRectGetWidth(r), scale * CGRectGetHeight(r))]; + } else if ([type isEqualToString:kCIAttributeTypeImage]) { // Scale and translate our mask image to match the transition area size. static CIImage *inputMaskImage = nil; if (inputMaskImage == nil) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-22 15:29:37
|
Revision: 14466 http://sourceforge.net/p/skim-app/code/14466 Author: hofman Date: 2024-09-22 15:29:35 +0000 (Sun, 22 Sep 2024) Log Message: ----------- Scale default values for type distance filter attributes by the resolution scale Modified Paths: -------------- trunk/SKTransitionController.m Modified: trunk/SKTransitionController.m =================================================================== --- trunk/SKTransitionController.m 2024-09-22 15:28:13 UTC (rev 14465) +++ trunk/SKTransitionController.m 2024-09-22 15:29:35 UTC (rev 14466) @@ -279,7 +279,7 @@ } // rect and bounds are in pixels -- (CIFilter *)transitionFilterForTransition:(SKTransitionInfo *)info rect:(CGRect)rect bounds:(CGRect)bounds forward:(BOOL)forward initialImage:(CIImage *)initialImage finalImage:(CIImage *)finalImage { +- (CIFilter *)transitionFilterForTransition:(SKTransitionInfo *)info rect:(CGRect)rect bounds:(CGRect)bounds scale:(CGFloat)scale forward:(BOOL)forward initialImage:(CIImage *)initialImage finalImage:(CIImage *)finalImage { NSString *filterName = [[self class] nameForStyle:[info transitionStyle]]; CIFilter *transitionFilter = [CIFilter filterWithName:filterName]; @@ -313,6 +313,9 @@ value = [NSNumber numberWithBool:forward == NO]; else if ([[NSSet setWithObjects:@"inputForward", @"inputLeft", nil] containsObject:key]) value = [NSNumber numberWithBool:forward]; + } else if ([[[[transitionFilter attributes] objectForKey:key] objectForKey:kCIAttributeType] isEqualToString:kCIAttributeTypeDistance]) { + CGFloat width = [[transitionFilter valueForKey:key] doubleValue]; + value = [NSNumber numberWithDouble:scale * width]; } else if ([[[[transitionFilter attributes] objectForKey:key] objectForKey:kCIAttributeClass] isEqualToString:@"CIImage"]) { // Scale and translate our mask image to match the transition area size. static CIImage *inputMaskImage = nil; @@ -435,6 +438,7 @@ CIFilter *transitionFilter = [self transitionFilterForTransition:currentTransition rect:cgRect bounds:cgBounds + scale:imageScale forward:toIndex >= fromIndex initialImage:initialImage finalImage:finalImage]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-22 15:28:14
|
Revision: 14465 http://sourceforge.net/p/skim-app/code/14465 Author: hofman Date: 2024-09-22 15:28:13 +0000 (Sun, 22 Sep 2024) Log Message: ----------- declare some transition attributes as type distance instead of scalar Modified Paths: -------------- trunk/SkimTransitions/BlindsTransition/SKTBlindsTransition.m trunk/SkimTransitions/StripsTransition/SKTStripsTransition.m Modified: trunk/SkimTransitions/BlindsTransition/SKTBlindsTransition.m =================================================================== --- trunk/SkimTransitions/BlindsTransition/SKTBlindsTransition.m 2024-09-22 14:34:40 UTC (rev 14464) +++ trunk/SkimTransitions/BlindsTransition/SKTBlindsTransition.m 2024-09-22 15:28:13 UTC (rev 14465) @@ -33,7 +33,7 @@ [NSNumber numberWithDouble: 100.0], kCIAttributeSliderMax, [NSNumber numberWithDouble: 50.0], kCIAttributeDefault, [NSNumber numberWithDouble: 0.0], kCIAttributeIdentity, - kCIAttributeTypeScalar, kCIAttributeType, + kCIAttributeTypeDistance, kCIAttributeType, nil], kCIInputWidthKey, [NSDictionary dictionaryWithObjectsAndKeys: Modified: trunk/SkimTransitions/StripsTransition/SKTStripsTransition.m =================================================================== --- trunk/SkimTransitions/StripsTransition/SKTStripsTransition.m 2024-09-22 14:34:40 UTC (rev 14464) +++ trunk/SkimTransitions/StripsTransition/SKTStripsTransition.m 2024-09-22 15:28:13 UTC (rev 14465) @@ -38,7 +38,7 @@ [NSNumber numberWithDouble: 100.0], kCIAttributeSliderMax, [NSNumber numberWithDouble: 50.0], kCIAttributeDefault, [NSNumber numberWithDouble: 0.0], kCIAttributeIdentity, - kCIAttributeTypeScalar, kCIAttributeType, + kCIAttributeTypeDistance, kCIAttributeType, nil], kCIInputWidthKey, [NSDictionary dictionaryWithObjectsAndKeys: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2024-09-22 14:34:42
|
Revision: 14464 http://sourceforge.net/p/skim-app/code/14464 Author: hofman Date: 2024-09-22 14:34:40 +0000 (Sun, 22 Sep 2024) Log Message: ----------- fix index for animation Modified Paths: -------------- trunk/SKPresentationView.m Modified: trunk/SKPresentationView.m =================================================================== --- trunk/SKPresentationView.m 2024-09-20 14:59:20 UTC (rev 14463) +++ trunk/SKPresentationView.m 2024-09-22 14:34:40 UTC (rev 14464) @@ -282,7 +282,7 @@ NSUInteger idx = [page pageIndex]; if (idx > 0) { PDFPage *toPage = [pdfDoc pageAtIndex:idx - 1]; - if ([self window] == nil || NO == [self animateTransitionFromIndex:idx toPage:toPage atIndex:idx + 1]) + if ([self window] == nil || NO == [self animateTransitionFromIndex:idx toPage:toPage atIndex:idx - 1]) [self setPage:toPage]; } } 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: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. |