diff --git a/ChangeLog b/ChangeLog index 452ab6b50..ebe6830f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2011-06-15 Eric Wasylishen + + * Headers/AppKit/NSImageCell.h: + * Source/NSImageCell.m: Add support for NSImageScaleProportionallyUpOrDown + 2011-06-14 Eric Wasylishen * Source/NSImage.m: Use -bestRepresentationForRect:context:hints: in diff --git a/Headers/AppKit/NSImageCell.h b/Headers/AppKit/NSImageCell.h index 29feb0dce..56329d003 100644 --- a/Headers/AppKit/NSImageCell.h +++ b/Headers/AppKit/NSImageCell.h @@ -47,9 +47,13 @@ * or down) to fit exactly in the cell size.

*/ typedef enum { - NSScaleProportionally = 0, - NSScaleToFit, - NSScaleNone + NSScaleProportionally = 0, + NSScaleToFit = 1, + NSScaleNone = 2, + NSImageScaleProportionallyDown = 0, + NSImageScaleAxesIndependently = 1, + NSImageScaleNone = 2, + NSImageScaleProportionallyUpOrDown = 3 } NSImageScaling; /** diff --git a/Source/NSImageCell.m b/Source/NSImageCell.m index 37139bfa7..132f407db 100644 --- a/Source/NSImageCell.m +++ b/Source/NSImageCell.m @@ -172,7 +172,7 @@ yBottomInRect(NSSize innerSize, NSRect outerRect, BOOL flipped) } static inline NSSize -scaleProportionally(NSSize imageSize, NSRect canvasRect) +scaleProportionally(NSSize imageSize, NSRect canvasRect, BOOL scaleUpOrDown) { float ratio; @@ -180,11 +180,8 @@ scaleProportionally(NSSize imageSize, NSRect canvasRect) ratio = MIN(NSWidth(canvasRect) / imageSize.width, NSHeight(canvasRect) / imageSize.height); - /* According to the API (see NSScaleProportionally), we should never - * scale images up; we only scale them down. If you want your image - * to scale both up and down, you should use NSScaleToFit. - */ - if (ratio < 1.0) + /* Only scale down, unless scaleUpOrDown is YES */ + if (ratio < 1.0 || scaleUpOrDown) { imageSize.width *= ratio; imageSize.height *= ratio; @@ -215,7 +212,7 @@ scaleProportionally(NSSize imageSize, NSRect canvasRect) case NSScaleProportionally: { NSDebugLLog(@"NSImageCell", @"NSScaleProportionally"); - imageSize = scaleProportionally (realImageSize, cellFrame); + imageSize = scaleProportionally (realImageSize, cellFrame, NO); break; } case NSScaleToFit: @@ -231,6 +228,12 @@ scaleProportionally(NSSize imageSize, NSRect canvasRect) imageSize = realImageSize; break; } + case NSImageScaleProportionallyUpOrDown: + { + NSDebugLLog(@"NSImageCell", @"NSImageScaleProportionallyUpOrDown"); + imageSize = scaleProportionally (realImageSize, cellFrame, YES); + break; + } } switch (_imageAlignment)