55 lines
2 KiB
Swift
55 lines
2 KiB
Swift
//
|
|
// Copyright 2022 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import SignalServiceKit
|
|
|
|
public extension UIEdgeInsets {
|
|
|
|
func inverted() -> UIEdgeInsets {
|
|
return UIEdgeInsets(top: -top, left: -left, bottom: -bottom, right: -right)
|
|
}
|
|
}
|
|
|
|
public extension CGSize {
|
|
|
|
func roundedForScreenScale() -> CGSize {
|
|
let screenScale = UIScreen.main.scale
|
|
guard screenScale > 1 else { return self }
|
|
return CGSize(
|
|
width: (width * screenScale).rounded(.up) / screenScale,
|
|
height: (height * screenScale).rounded(.up) / screenScale
|
|
)
|
|
}
|
|
}
|
|
|
|
public extension CGFloat {
|
|
|
|
static let hairlineWidth: CGFloat = 1 / UIScreen.main.scale
|
|
|
|
static func hairlineWidthFraction(_ fraction: CGFloat) -> CGFloat {
|
|
fraction * .hairlineWidth
|
|
}
|
|
|
|
private static let iPhone5ScreenWidth: CGFloat = 320
|
|
|
|
private static let iPhone7PlusScreenWidth: CGFloat = 414
|
|
|
|
// A convenience method for doing responsive layout. Scales between two
|
|
// reference values (for iPhone 5 and iPhone 7 Plus) to the current device
|
|
// based on screen width, linearly interpolating.
|
|
static func scaleFromIPhone5To7Plus(_ iPhone5Value: CGFloat, _ iPhone7PlusValue: CGFloat) -> CGFloat {
|
|
let shortDimension = CurrentAppContext().frame.size.smallerAxis
|
|
let alpha = CGFloat.clamp01(CGFloat.inverseLerp(shortDimension, min: iPhone5ScreenWidth, max: iPhone7PlusScreenWidth))
|
|
return CGFloat.lerp(left: iPhone5Value, right: iPhone7PlusValue, alpha: alpha).rounded()
|
|
}
|
|
|
|
// A convenience method for doing responsive layout. Scales a reference
|
|
// value (for iPhone 5) to the current device based on screen width,
|
|
// linearly interpolating through the origin.
|
|
static func scaleFromIPhone5(_ iPhone5Value: CGFloat) -> CGFloat {
|
|
let shortDimension = CurrentAppContext().frame.size.smallerAxis
|
|
return (iPhone5Value * shortDimension / iPhone5ScreenWidth).rounded()
|
|
}
|
|
}
|