Revision: 15185
http://sourceforge.net/p/skim-app/code/15185
Author: hofman
Date: 2025-05-11 14:59:46 +0000 (Sun, 11 May 2025)
Log Message:
-----------
There shouldbe no need to clip the bitmaps to the pages. Pass intersectied rect
and forward flag to animation block.
Modified Paths:
--------------
trunk/SKPresentationView.m
trunk/SKTransitionController.h
trunk/SKTransitionController.m
Modified: trunk/SKPresentationView.m
===================================================================
--- trunk/SKPresentationView.m 2025-05-11 14:14:19 UTC (rev 15184)
+++ trunk/SKPresentationView.m 2025-05-11 14:59:46 UTC (rev 15185)
@@ -164,7 +164,7 @@
if (([aPage 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;
- return NSInsetRect(bounds, 0.5 * (NSWidth(bounds) - scale *
NSWidth(pageRect)), 0.5 * (NSHeight(bounds) - scale * NSHeight(pageRect)));
+ return NSInsetRect(bounds, 0.5 * fmax(0.0, NSWidth(bounds) - scale *
NSWidth(pageRect)), 0.5 * fmax(0.0, NSHeight(bounds) - scale *
NSHeight(pageRect)));
}
static inline BOOL equalStrings(NSString *s1, NSString *s2) {
@@ -174,9 +174,10 @@
- (BOOL)animateTransitionAtIndex:(NSUInteger)idx forward:(BOOL)forward
toPage:(PDFPage *)toPage {
if ([transitionController pageTransitions] ||
([[transitionController transition] style] != SKNoTransition &&
equalStrings([page label], [toPage label]) == NO)) {
- SKTransitionAnimation animation = [transitionController
animationAtIndex:idx forView:self fromRect:[self pageRect:page] toRect:[self
pageRect:toPage] forward:forward];
+ SKTransitionAnimation animation = [transitionController
animationAtIndex:idx forView:self];
if (animation) {
- [self setPage:toPage completionHandler:^{ animation(nil); }];
+ NSRect rect = NSUnionRect([self pageRect:page], [self
pageRect:toPage]);
+ [self setPage:toPage completionHandler:^{ animation(rect, forward,
nil); }];
return YES;
}
}
@@ -188,8 +189,13 @@
NSUInteger idx = [page pageIndex];
if (idx + 1 < [pdfDoc pageCount]) {
PDFPage *toPage = [pdfDoc pageAtIndex:idx + 1];
- SKTransitionAnimation animation = [transitionController
animationAtIndex:idx forView:self fromRect:[self pageRect:page] toRect:[self
pageRect:toPage] forward:YES];
- [self setPage:toPage completionHandler:animation ? ^{
animation(completionHandler); } : completionHandler];
+ SKTransitionAnimation animation = [transitionController
animationAtIndex:idx forView:self];
+ if (animation) {
+ NSRect rect = NSUnionRect([self pageRect:page], [self
pageRect:toPage]);
+ [self setPage:toPage completionHandler:^{ animation(rect, YES,
completionHandler); }];
+ } else {
+ [self setPage:toPage completionHandler:completionHandler];
+ }
} else {
completionHandler();
}
Modified: trunk/SKTransitionController.h
===================================================================
--- trunk/SKTransitionController.h 2025-05-11 14:14:19 UTC (rev 15184)
+++ trunk/SKTransitionController.h 2025-05-11 14:59:46 UTC (rev 15185)
@@ -40,7 +40,7 @@
NS_ASSUME_NONNULL_BEGIN
-typedef void (^SKTransitionAnimation)(void (^ _Nullable
completionHandler)(void));
+typedef void (^SKTransitionAnimation)(NSRect rect, BOOL forward, void (^
_Nullable completionHandler)(void));
@class SKTransitionView, SKTransitionInfo;
@@ -58,7 +58,7 @@
@property (nonatomic) BOOL shouldScale;
-- (nullable SKTransitionAnimation)animationAtIndex:(NSUInteger)anIndex
forView:(NSView *)view fromRect:(NSRect)rect toRect:(NSRect)toRect
forward:(BOOL)forward;
+- (nullable SKTransitionAnimation)animationAtIndex:(NSUInteger)anIndex
forView:(NSView *)view;
@end
Modified: trunk/SKTransitionController.m
===================================================================
--- trunk/SKTransitionController.m 2025-05-11 14:14:19 UTC (rev 15184)
+++ trunk/SKTransitionController.m 2025-05-11 14:59:46 UTC (rev 15185)
@@ -154,12 +154,10 @@
return transitionFilter;
}
-- (CIImage *)currentImageForRect:(NSRect)rect inView:(NSView *)view
scale:(CGFloat *)scalePtr {
+- (CIImage *)currentImageForView:(NSView *)view scale:(CGFloat *)scalePtr {
NSRect bounds = [view bounds];
NSBitmapImageRep *contentBitmap = [view bitmapImageRepCachingDisplay];
- CIImage *tmpImage = [[CIImage alloc] initWithBitmapImageRep:contentBitmap];
- CGFloat scale = CGRectGetWidth([tmpImage extent]) / NSWidth(bounds);
- CIImage *image = [tmpImage
imageByCroppingToRect:CGRectIntegral(scaleRect(NSIntersectionRect(rect,
bounds), scale))];
+ CIImage *image = [[CIImage alloc] initWithBitmapImageRep:contentBitmap];
NSArray *colorFilters = SKColorEffectFilters();
if ([colorFilters count] > 0) {
for (CIFilter *filter in colorFilters) {
@@ -167,11 +165,11 @@
image = [filter outputImage];
}
}
- if (scalePtr) *scalePtr = scale;
+ if (scalePtr) *scalePtr = CGRectGetWidth([image extent]) / NSWidth(bounds);
return image;
}
-- (SKTransitionAnimation)animationAtIndex:(NSUInteger)idx forView:(NSView
*)view fromRect:(NSRect)rect toRect:(NSRect)toRect forward:(BOOL)forward {
+- (SKTransitionAnimation)animationAtIndex:(NSUInteger)idx forView:(NSView
*)view {
if (animating)
return nil;
@@ -184,14 +182,14 @@
animating = YES;
- CIImage *initialImage = [self currentImageForRect:rect inView:view
scale:NULL];
+ CIImage *initialImage = [self currentImageForView:view scale:NULL];
- return ^(void (^completionHandler)(void)){
+ return ^(NSRect rect, BOOL forward, void (^completionHandler)(void)){
NSRect bounds = [view bounds];
CGFloat imageScale = 1.0;
- CIImage *finalImage = [self currentImageForRect:toRect inView:view
scale:&imageScale];
- CGRect cgRect =
CGRectIntegral(scaleRect(NSIntersectionRect(NSUnionRect(rect, toRect), bounds),
imageScale));
+ CIImage *finalImage = [self currentImageForView:view
scale:&imageScale];
+ CGRect cgRect = CGRectIntegral(scaleRect(rect, imageScale));
CGRect cgBounds = scaleRect(bounds, imageScale);
CGRect extent = [currentTransition shouldRestrict] ? cgRect : cgBounds;
NSString *filterName = [currentTransition styleName];
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