mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Swift
		
	
| // Copyright © 2024 Rangeproof Pty Ltd. All rights reserved.
 | |
| 
 | |
| import Foundation
 | |
| 
 | |
| public extension CGPoint {
 | |
|     var length: CGFloat { sqrt(x * x + y * y) }
 | |
|     
 | |
|     func adding(_ other: CGPoint) -> CGPoint {
 | |
|         return CGPoint(x: x + other.x, y: y + other.y)
 | |
|     }
 | |
|     
 | |
|     func subtracting(_ other: CGPoint) -> CGPoint {
 | |
|         return CGPoint(x: x - other.x, y: y - other.y)
 | |
|     }
 | |
|     
 | |
|     func multiplying(by value: CGFloat) -> CGPoint {
 | |
|         return CGPoint(x: x * value, y: y * value)
 | |
|     }
 | |
|     
 | |
|     func scaled(by factor: CGFloat) -> CGPoint {
 | |
|         return CGPoint(x: x * factor, y: y * factor)
 | |
|     }
 | |
|     
 | |
|     func distance(to other: CGPoint) -> CGFloat {
 | |
|         let delta: CGPoint = CGPoint(x: x - other.x, y: y - other.y)
 | |
|         
 | |
|         return sqrt((delta.x * delta.x) + (delta.y * delta.y))
 | |
|     }
 | |
|     
 | |
|     func inverted() -> CGPoint {
 | |
|         return CGPoint(x: -x, y: -y)
 | |
|     }
 | |
|     
 | |
|     func clamp01() -> CGPoint {
 | |
|         return CGPoint(x: x.clamp01(), y: y.clamp01())
 | |
|     }
 | |
|     
 | |
|     func clamp(to rect: CGRect) -> CGPoint {
 | |
|         return CGPoint(
 | |
|             x: x.clamp(rect.minX, rect.maxX),
 | |
|             y: y.clamp(rect.minY, rect.maxY)
 | |
|         )
 | |
|     }
 | |
|     
 | |
|     func min(_ value: CGPoint) -> CGPoint {
 | |
|         // We use "Swift" to disambiguate the global function min() from this method.
 | |
|         return CGPoint(x: Swift.min(x, value.x),
 | |
|                        y: Swift.min(y, value.y))
 | |
|     }
 | |
| 
 | |
|     func max(_ value: CGPoint) -> CGPoint {
 | |
|         // We use "Swift" to disambiguate the global function max() from this method.
 | |
|         return CGPoint(x: Swift.max(x, value.x),
 | |
|                        y: Swift.max(y, value.y))
 | |
|     }
 | |
|     
 | |
|     func toUnitCoordinates(viewBounds: CGRect, shouldClamp: Bool) -> CGPoint {
 | |
|         return CGPoint(
 | |
|             x: CGFloat(x - viewBounds.origin.x).inverseLerp(0, viewBounds.width, shouldClamp: shouldClamp),
 | |
|             y: CGFloat(y - viewBounds.origin.y).inverseLerp(0, viewBounds.height, shouldClamp: shouldClamp))
 | |
|     }
 | |
| 
 | |
|     func toUnitCoordinates(viewSize: CGSize, shouldClamp: Bool) -> CGPoint {
 | |
|         return toUnitCoordinates(viewBounds: CGRect(origin: .zero, size: viewSize), shouldClamp: shouldClamp)
 | |
|     }
 | |
| 
 | |
|     func fromUnitCoordinates(viewBounds: CGRect) -> CGPoint {
 | |
|         return CGPoint(
 | |
|             x: viewBounds.origin.x + x.lerp(0, viewBounds.size.width),
 | |
|             y: viewBounds.origin.y + y.lerp(0, viewBounds.size.height)
 | |
|         )
 | |
|     }
 | |
| 
 | |
|     func fromUnitCoordinates(viewSize: CGSize) -> CGPoint {
 | |
|         return fromUnitCoordinates(viewBounds: CGRect(origin: .zero, size: viewSize))
 | |
|     }
 | |
|     
 | |
|     func fuzzyEquals(_ other: CGPoint, tolerance: CGFloat = 0.001) -> Bool {
 | |
|         return (
 | |
|             x.fuzzyEquals(other.x, tolerance: tolerance) &&
 | |
|             y.fuzzyEquals(other.y, tolerance: tolerance)
 | |
|         )
 | |
|     }
 | |
| }
 |