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.
		
		
		
		
		
			
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Swift
		
	
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
 | 
						|
 | 
						|
import UIKit.UIColor
 | 
						|
import SessionUtilitiesKit
 | 
						|
 | 
						|
public extension UIColor {
 | 
						|
    func toImage() -> UIImage {
 | 
						|
        let bounds: CGRect = CGRect(x: 0, y: 0, width: 1, height: 1)
 | 
						|
        let renderer: UIGraphicsImageRenderer = UIGraphicsImageRenderer(bounds: bounds)
 | 
						|
 | 
						|
        return renderer.image { rendererContext in
 | 
						|
            rendererContext.cgContext.setFillColor(self.cgColor)
 | 
						|
            rendererContext.cgContext.fill(bounds)
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    func blend(with otherColor: UIColor, alpha: CGFloat) -> UIColor {
 | 
						|
        var r0: CGFloat = 0
 | 
						|
        var g0: CGFloat = 0
 | 
						|
        var b0: CGFloat = 0
 | 
						|
        var a0: CGFloat = 0
 | 
						|
        self.getRed(&r0, green: &g0, blue: &b0, alpha: &a0)
 | 
						|
        
 | 
						|
        var r1: CGFloat = 0
 | 
						|
        var g1: CGFloat = 0
 | 
						|
        var b1: CGFloat = 0
 | 
						|
        var a1: CGFloat = 0
 | 
						|
        self.getRed(&r1, green: &g1, blue: &b1, alpha: &a1)
 | 
						|
        
 | 
						|
        let finalAlpha: CGFloat = CGFloatClamp01(alpha)
 | 
						|
        
 | 
						|
        return UIColor(
 | 
						|
            red: CGFloatLerp(r0, r1, finalAlpha),
 | 
						|
            green: CGFloatLerp(g0, g1, finalAlpha),
 | 
						|
            blue: CGFloatLerp(b0, b1, finalAlpha),
 | 
						|
            alpha: CGFloatLerp(a0, a1, finalAlpha)
 | 
						|
        )
 | 
						|
    }
 | 
						|
    
 | 
						|
    func brighten(by percentage: CGFloat) -> UIColor {
 | 
						|
        guard percentage != 0 else { return self }
 | 
						|
        
 | 
						|
        var hue: CGFloat = 0
 | 
						|
        var saturation: CGFloat = 0
 | 
						|
        var brightness: CGFloat = 0
 | 
						|
        var alpha: CGFloat = 0
 | 
						|
 | 
						|
        // Note: Looks like as of iOS 10 devices use the kCGColorSpaceExtendedGray color
 | 
						|
        // space for grayscale colors which seems to be compatible with the RGB color space
 | 
						|
        // meaning we don't need to check 'getWhite:alpha:' if the below method fails, for
 | 
						|
        // more info see: https://developer.apple.com/documentation/uikit/uicolor#overview
 | 
						|
        guard self.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha) else {
 | 
						|
            return self
 | 
						|
        }
 | 
						|
 | 
						|
        return UIColor(
 | 
						|
            hue: hue,
 | 
						|
            saturation: saturation,
 | 
						|
            brightness: (brightness + percentage),
 | 
						|
            alpha: alpha
 | 
						|
        )
 | 
						|
    }
 | 
						|
}
 | 
						|
 |