Revision: 16656
http://sourceforge.net/p/skim-app/code/16656
Author: hofman
Date: 2026-10-13 16:51:31 +0000 (Tue, 13 Oct 2026)
Log Message:
-----------
add an action to crop all even or odd pages, add as an alternate item to Crop
Page
Modified Paths:
--------------
trunk/Base.lproj/MainMenu.xib
trunk/SKMainWindowController_Actions.h
trunk/SKMainWindowController_Actions.m
trunk/SKMainWindowController_UI.m
trunk/de.lproj/Localizable.strings
trunk/de.lproj/MainMenu.strings
trunk/en.lproj/Localizable.strings
trunk/en.lproj/MainMenu.strings
trunk/es.lproj/Localizable.strings
trunk/es.lproj/MainMenu.strings
trunk/fr.lproj/Localizable.strings
trunk/fr.lproj/MainMenu.strings
trunk/it.lproj/Localizable.strings
trunk/it.lproj/MainMenu.strings
trunk/ja.lproj/Localizable.strings
trunk/ja.lproj/MainMenu.strings
trunk/nl.lproj/Localizable.strings
trunk/nl.lproj/MainMenu.strings
trunk/pl.lproj/Localizable.strings
trunk/pl.lproj/MainMenu.strings
trunk/ru.lproj/Localizable.strings
trunk/ru.lproj/MainMenu.strings
trunk/tr.lproj/Localizable.strings
trunk/tr.lproj/MainMenu.strings
trunk/zh_CN.lproj/Localizable.strings
trunk/zh_CN.lproj/MainMenu.strings
trunk/zh_TW.lproj/Localizable.strings
trunk/zh_TW.lproj/MainMenu.strings
Modified: trunk/Base.lproj/MainMenu.xib
===================================================================
--- trunk/Base.lproj/MainMenu.xib 2026-10-13 09:26:34 UTC (rev 16655)
+++ trunk/Base.lproj/MainMenu.xib 2026-10-13 16:51:31 UTC (rev 16656)
@@ -1197,6 +1197,12 @@
<action selector="crop:" target="-1"
id="769"/>
</connections>
</menuItem>
+ <menuItem title="Crop Odd Pages" alternate="YES"
keyEquivalent="k" id="c8k-Ij-2Cy">
+ <modifierMask key="keyEquivalentModifierMask"
control="YES" option="YES" command="YES"/>
+ <connections>
+ <action selector="cropHalf:" target="-1"
id="PNJ-Ag-Bbw"/>
+ </connections>
+ </menuItem>
<menuItem title="Reset Crop" keyEquivalent="K"
id="3CO-Cw-8Fj">
<modifierMask key="keyEquivalentModifierMask"
option="YES" command="YES"/>
<connections>
Modified: trunk/SKMainWindowController_Actions.h
===================================================================
--- trunk/SKMainWindowController_Actions.h 2026-10-13 09:26:34 UTC (rev
16655)
+++ trunk/SKMainWindowController_Actions.h 2026-10-13 16:51:31 UTC (rev
16656)
@@ -86,6 +86,7 @@
- (IBAction)rotateAllLeft:(nullable id)sender;
- (IBAction)crop:(nullable id)sender;
- (IBAction)cropAll:(nullable id)sender;
+- (IBAction)cropHalf:(nullable id)sender;
- (IBAction)autoCropAll:(nullable id)sender;
- (IBAction)smartAutoCropAll:(nullable id)sender;
- (IBAction)resetCrop:(nullable id)sender;
Modified: trunk/SKMainWindowController_Actions.m
===================================================================
--- trunk/SKMainWindowController_Actions.m 2026-10-13 09:26:34 UTC (rev
16655)
+++ trunk/SKMainWindowController_Actions.m 2026-10-13 16:51:31 UTC (rev
16656)
@@ -601,11 +601,16 @@
NSInteger rectCount = [rects count];
NSPointerArray *oldRects = [[NSPointerArray alloc] initForRectPointers];
for (i = 0; i < count; i++) {
- PDFPage *page = [[pdfView document] pageAtIndex:i];
- NSRect rect = NSIntersectionRect([rects rectAtIndex:i % rectCount],
[page boundsForBox:kPDFDisplayBoxMediaBox]);
- NSRect oldRect = [page boundsForBox:kPDFDisplayBoxCropBox];
- [oldRects addPointer:&oldRect];
- [page setBounds:rect forBox:kPDFDisplayBoxCropBox];
+ NSRect rect = [rects rectAtIndex:i % rectCount];
+ if (NSEqualRects(rect, NSZeroRect)) {
+ [oldRects addPointer:&rect];
+ } else {
+ PDFPage *page = [[pdfView document] pageAtIndex:i];
+ rect = NSIntersectionRect(rect, [page
boundsForBox:kPDFDisplayBoxMediaBox]);
+ NSRect oldRect = [page boundsForBox:kPDFDisplayBoxCropBox];
+ [oldRects addPointer:&oldRect];
+ [page setBounds:rect forBox:kPDFDisplayBoxCropBox];
+ }
}
NSUndoManager *undoManager = [[self document] undoManager];
@@ -670,6 +675,52 @@
[pdfView setSelectToolRect:NSZeroRect];
}
+- (IBAction)cropHalf:(id)sender {
+ NSRect selRect = NSIntegralRect([pdfView selectToolRect]);
+ NSRect rect[2] = {NSZeroRect, NSZeroRect};
+ NSPointerArray *rectArray = [[NSPointerArray alloc] initForRectPointers];
+ BOOL emptySelection = NSIsEmptyRect(selRect);
+
+ if ([[pdfView document] pageCount] < 2) {
+ NSBeep();
+ return;
+ }
+
+ if (emptySelection) {
+ NSInteger i, j, count = [[pdfView document] pageCount], k = [[pdfView
currentPage] pageIndex] % 2;
+
+ [self beginProgressSheetWithMessage:[NSLocalizedString(@"Cropping
Pages", @"Message for progress sheet") stringByAppendingEllipsis]
maxValue:MIN(18, count)];
+
+ if (count < 19) {
+ for (i = k; i < count; i += 2) {
+ rect[k] = NSUnionRect(rect[k], [[[pdfView document]
pageAtIndex:i] autoCropBox]);
+ [self incrementProgressSheet];
+ }
+ } else {
+ NSInteger start[3] = {2 - k, 2 * ((count - 5) / 4) + k, 2 *
((count - k) / 2) - 6 + k};
+ for (j = 0; j < 3; j++) {
+ for (i = start[j]; i < start[j] + 6; i += 2) {
+ rect[k] = NSUnionRect(rect[k], [[[pdfView document]
pageAtIndex:i] autoCropBox]);
+ [self incrementProgressSheet];
+ }
+ }
+ }
+ [rectArray addPointer:rect];
+ [rectArray addPointer:rect+1];
+
+ [self dismissProgressSheet];
+ } else {
+ rect[[[pdfView selectToolPage] pageIndex] % 2] = selRect;
+ [rectArray addPointer:rect];
+ [rectArray addPointer:rect+1];
+ }
+
+ [self cropPagesToRects:rectArray];
+
+ if (emptySelection == NO)
+ [pdfView setSelectToolRect:NSZeroRect];
+}
+
- (IBAction)autoCropAll:(id)sender {
NSPointerArray *rectArray = [[NSPointerArray alloc] initForRectPointers];
PDFDocument *pdfDoc = [pdfView document];
Modified: trunk/SKMainWindowController_UI.m
===================================================================
--- trunk/SKMainWindowController_UI.m 2026-10-13 09:26:34 UTC (rev 16655)
+++ trunk/SKMainWindowController_UI.m 2026-10-13 16:51:31 UTC (rev 16656)
@@ -1844,6 +1844,13 @@
return [self interactionMode] != SKPresentationMode && [[self
pdfDocument] isLocked] == NO;
} else if (action == @selector(cropAll:) || action == @selector(crop:) ||
action == @selector(autoCropAll:) || action == @selector(smartAutoCropAll:)) {
return [self interactionMode] != SKPresentationMode && [[self
pdfDocument] isLocked] == NO;
+ } else if (action == @selector(cropHalf:)) {
+ PDFPage *page = [pdfView selectToolPage] ?: [pdfView currentPage];
+ if (([page pageIndex] % 2))
+ [menuItem setTitle:NSLocalizedString(@"Crop Even Pages", @"Menu
item title")];
+ else
+ [menuItem setTitle:NSLocalizedString(@"Crop Odd Pages", @"Menu
item title")];
+ return [self interactionMode] != SKPresentationMode && [[self
pdfDocument] isLocked] == NO && [[self pdfDocument] pageCount] > 1;
} else if (action == @selector(resetCrop:)) {
return mwcFlags.hasCropped && [self interactionMode] !=
SKPresentationMode && [[self pdfDocument] isLocked] == NO;
} else if (action == @selector(autoSelectContent:)) {
Modified: trunk/de.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/de.lproj/MainMenu.strings
===================================================================
(Binary files differ)
Modified: trunk/en.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/en.lproj/MainMenu.strings
===================================================================
(Binary files differ)
Modified: trunk/es.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/es.lproj/MainMenu.strings
===================================================================
(Binary files differ)
Modified: trunk/fr.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/fr.lproj/MainMenu.strings
===================================================================
(Binary files differ)
Modified: trunk/it.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/it.lproj/MainMenu.strings
===================================================================
(Binary files differ)
Modified: trunk/ja.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/ja.lproj/MainMenu.strings
===================================================================
(Binary files differ)
Modified: trunk/nl.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/nl.lproj/MainMenu.strings
===================================================================
(Binary files differ)
Modified: trunk/pl.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/pl.lproj/MainMenu.strings
===================================================================
(Binary files differ)
Modified: trunk/ru.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/ru.lproj/MainMenu.strings
===================================================================
(Binary files differ)
Modified: trunk/tr.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/tr.lproj/MainMenu.strings
===================================================================
(Binary files differ)
Modified: trunk/zh_CN.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/zh_CN.lproj/MainMenu.strings
===================================================================
(Binary files differ)
Modified: trunk/zh_TW.lproj/Localizable.strings
===================================================================
(Binary files differ)
Modified: trunk/zh_TW.lproj/MainMenu.strings
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit