diff --git a/ChangeLog b/ChangeLog index a2f553adf..3426d5dc7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,14 +1,22 @@ +2007-04-10 Fred Kiefer + + * Source/NSClipView.m (-setBoundsOrigin:): Use NSView method + scrollRect:by:. + * Source/NSPrintOperation.m (NSView + -_displayPageInRect:atPlacement:withInfo:): Release the temporary matrixes. + * Source/GSEPSPrintOperation.m (_print): Call endPage on the view. + 2007-04-05 Xavier Glattard - * Headers/AppKit/NSAnimation.h - * Source/NSAnimation.m - * Headers/Additions/GNUstepGUI/GSAnimator.h - * Source/GSAnimator.m - Implementation of NSAnimation and NSViewAnimation classes : - - only NSAnimationNonBlocking mode is implemented - - runLoopModesForAnimating is not used - GSAnimator class is in alpha stage : interface may be changed - See gnustep-examples/GSTest for demos. + * Headers/AppKit/NSAnimation.h + * Source/NSAnimation.m + * Headers/Additions/GNUstepGUI/GSAnimator.h + * Source/GSAnimator.m + Implementation of NSAnimation and NSViewAnimation classes : + - only NSAnimationNonBlocking mode is implemented + - runLoopModesForAnimating is not used + GSAnimator class is in alpha stage : interface may be changed + See gnustep-examples/GSTest for demos. 2007-04-04 Fred Kiefer diff --git a/Source/GSEPSPrintOperation.m b/Source/GSEPSPrintOperation.m index c0330d70a..b48d74c36 100644 --- a/Source/GSEPSPrintOperation.m +++ b/Source/GSEPSPrintOperation.m @@ -102,11 +102,12 @@ forKey: @"NSPrintSheetBounds"]; [_view beginDocument]; - [_view beginPageInRect: _rect atPlacement: NSMakePoint(0,0)]; [_view displayRectIgnoringOpacity: _rect]; + + [_view endPage]; [_view endDocument]; } @@ -123,7 +124,7 @@ eps = [NSString stringWithContentsOfFile: _path]; - [_data setData: [eps dataUsingEncoding:NSASCIIStringEncoding]]; + [_data setData: [eps dataUsingEncoding: NSASCIIStringEncoding]]; } return YES; diff --git a/Source/NSClipView.m b/Source/NSClipView.m index bbc411102..f02ae3f03 100644 --- a/Source/NSClipView.m +++ b/Source/NSClipView.m @@ -248,8 +248,8 @@ static inline NSRect integralRect (NSRect rect, NSView *view) if (_copiesOnScroll && _window && [_window gState]) { /* Copy the portion of the view that is common before and after - scrolling. Then, document view needs to redraw the remaining - areas. */ + scrolling. Then, document view needs to redraw the remaining + areas. */ @@ -258,110 +258,99 @@ static inline NSRect integralRect (NSRect rect, NSView *view) intersection = NSIntersectionRect (originalBounds, newBounds); /* but we must make sure we only copy from visible rect - we - can't copy bits which have been clipped (ie discarded) */ + can't copy bits which have been clipped (ie discarded) */ intersection = NSIntersectionRect (intersection, [self visibleRect]); /* Copying is done in device space so we only can copy by - integral rects in device space - adjust our copy rect */ + integral rects in device space - adjust our copy rect */ intersection = integralRect (intersection, self); /* At this point, intersection is the rectangle containing the - image we can recycle from the old to the new situation. We - must not make any assumption on its position/size, because it - has been intersected with visible rect, which is an arbitrary - rectangle as far as we know. */ + image we can recycle from the old to the new situation. We + must not make any assumption on its position/size, because it + has been intersected with visible rect, which is an arbitrary + rectangle as far as we know. */ if (NSEqualRects (intersection, NSZeroRect)) - { - // no recyclable part -- docview should redraw everything - // from scratch - [super setBoundsOrigin: newBounds.origin]; - [_documentView setNeedsDisplayInRect: - [self documentVisibleRect]]; - } + { + // no recyclable part -- docview should redraw everything + // from scratch + [super setBoundsOrigin: newBounds.origin]; + [_documentView setNeedsDisplayInRect: + [self documentVisibleRect]]; + } else - { - /* Copy the intersection to the new position */ - NSPoint destPoint = intersection.origin; - float dx = newBounds.origin.x - originalBounds.origin.x; - float dy = newBounds.origin.y - originalBounds.origin.y; - NSRect redrawRect; - - /* It is assumed these dx and dy will be integer in device - space because they are the difference of the bounds - origins, both of which should be integers in device space - because of the code at the end of - constrainScrollPoint:. */ - destPoint.x -= dx; - destPoint.y -= dy; + { + /* It is assumed these dx and dy will be integer in device + space because they are the difference of the bounds + origins, both of which should be integers in device space + because of the code at the end of + constrainScrollPoint:. */ + float dx = newBounds.origin.x - originalBounds.origin.x; + float dy = newBounds.origin.y - originalBounds.origin.y; + NSRect redrawRect; + + /* Copy the intersection to the new position */ + [self scrollRect: intersection by: NSMakeSize(dx, dy)]; - /* Now copy ! */ - [self lockFocus]; - /* NB: Because of all the previous comments, we are sure the - following is copying an integer rectangle by an integer - amount (`integer' in device space) - which should cause - no problems */ - NSCopyBits (0, intersection, destPoint); - [self unlockFocus]; - - /* Change coordinate system to the new one */ - [super setBoundsOrigin: newBounds.origin]; - - /* Get the rectangle representing intersection in the new + /* Change coordinate system to the new one */ + [super setBoundsOrigin: newBounds.origin]; + + /* Get the rectangle representing intersection in the new bounds (mainly to keep code readable) */ - intersection.origin.x = destPoint.x; - intersection.origin.y = destPoint.y; - // intersection.size is the same - - /* Now mark everything which is outside intersection as + intersection.origin.x -= dx; + intersection.origin.y -= dy; + // intersection.size is the same + + /* Now mark everything which is outside intersection as needing to be redrawn by hand. NB: During simple usage - scrolling in a single direction (left/rigth/up/down) - and a normal visible rect, only one of the following rects will be non-empty. */ - - /* To the left of intersection */ - redrawRect = NSMakeRect (NSMinX (_bounds), _bounds.origin.y, - NSMinX (intersection) - NSMinX (_bounds), - _bounds.size.height); - if (NSIsEmptyRect (redrawRect) == NO) - { - [_documentView setNeedsDisplayInRect: - [self convertRect: redrawRect - toView: _documentView]]; - } - - /* Right */ - redrawRect = NSMakeRect (NSMaxX (intersection), _bounds.origin.y, - NSMaxX (_bounds) - NSMaxX (intersection), - _bounds.size.height); - if (NSIsEmptyRect (redrawRect) == NO) - { - [_documentView setNeedsDisplayInRect: - [self convertRect: redrawRect - toView: _documentView]]; - } - - /* Up (or Down according to whether it's flipped or not) */ - redrawRect = NSMakeRect (_bounds.origin.x, NSMinY (_bounds), - _bounds.size.width, - NSMinY (intersection) - NSMinY (_bounds)); - if (NSIsEmptyRect (redrawRect) == NO) - { - [_documentView setNeedsDisplayInRect: - [self convertRect: redrawRect - toView: _documentView]]; - } - - /* Down (or Up) */ - redrawRect = NSMakeRect (_bounds.origin.x, NSMaxY (intersection), - _bounds.size.width, - NSMaxY (_bounds) - NSMaxY (intersection)); - if (NSIsEmptyRect (redrawRect) == NO) - { - [_documentView setNeedsDisplayInRect: - [self convertRect: redrawRect - toView: _documentView]]; - } - } + + /* To the left of intersection */ + redrawRect = NSMakeRect(NSMinX(_bounds), _bounds.origin.y, + NSMinX(intersection) - NSMinX(_bounds), + _bounds.size.height); + if (NSIsEmptyRect(redrawRect) == NO) + { + [_documentView setNeedsDisplayInRect: + [self convertRect: redrawRect + toView: _documentView]]; + } + + /* Right */ + redrawRect = NSMakeRect(NSMaxX(intersection), _bounds.origin.y, + NSMaxX(_bounds) - NSMaxX(intersection), + _bounds.size.height); + if (NSIsEmptyRect(redrawRect) == NO) + { + [_documentView setNeedsDisplayInRect: + [self convertRect: redrawRect + toView: _documentView]]; + } + + /* Up (or Down according to whether it's flipped or not) */ + redrawRect = NSMakeRect(_bounds.origin.x, NSMinY(_bounds), + _bounds.size.width, + NSMinY(intersection) - NSMinY(_bounds)); + if (NSIsEmptyRect(redrawRect) == NO) + { + [_documentView setNeedsDisplayInRect: + [self convertRect: redrawRect + toView: _documentView]]; + } + + /* Down (or Up) */ + redrawRect = NSMakeRect(_bounds.origin.x, NSMaxY(intersection), + _bounds.size.width, + NSMaxY(_bounds) - NSMaxY(intersection)); + if (NSIsEmptyRect(redrawRect) == NO) + { + [_documentView setNeedsDisplayInRect: + [self convertRect: redrawRect + toView: _documentView]]; + } + } } else { diff --git a/Source/NSPrintOperation.m b/Source/NSPrintOperation.m index a79ccd377..a5b4d1f7f 100644 --- a/Source/NSPrintOperation.m +++ b/Source/NSPrintOperation.m @@ -1098,9 +1098,9 @@ scaleRect(NSRect rect, double scale) { NSAffineTransformStruct ats = { 1, 0, 0, -1, 0, NSHeight(_bounds) }; NSAffineTransform *matrix, *flip; + flip = [NSAffineTransform new]; matrix = [NSAffineTransform new]; - [matrix makeIdentityMatrix]; [matrix prependTransform: _boundsMatrix]; /* * The flipping process must result in a coordinate system that @@ -1110,6 +1110,8 @@ scaleRect(NSRect rect, double scale) [flip setTransformStruct: ats]; [matrix prependTransform: flip]; [matrix concat]; + RELEASE(flip); + RELEASE(matrix); yoffset = NSHeight(_frame) - NSMaxY(pageRect); } else