2024-12-04 08:10:45 +01:00

45 lines
1.2 KiB
Swift

import Foundation
extension NSSize {
/// Scales the current size to fit within the target size while maintaining the aspect ratio.
/// - Parameter targetSize: The size to fit into.
/// - Returns: A new `NSSize` that fits within the `targetSize`.
func scaledToFit(in targetSize: NSSize) -> NSSize {
guard self.width > 0 && self.height > 0 else {
return .zero // Avoid division by zero if the size is invalid.
}
let widthScale = targetSize.width / self.width
let heightScale = targetSize.height / self.height
let scale = min(widthScale, heightScale)
return NSSize(width: self.width * scale, height: self.height * scale)
}
func scaledDown(to desiredWidth: CGFloat) -> NSSize {
if width == desiredWidth {
return self
}
if width < desiredWidth {
// Don't scale larger
return self
}
let height = (height * desiredWidth / width).rounded(.down)
return NSSize(width: desiredWidth, height: height)
}
}
extension NSSize {
var ratio: CGFloat {
guard height != 0 else {
return 0
}
return width / height
}
}