Browse Source

Update NCSectionHeaderMenu.swift

Marino Faggiana 1 year ago
parent
commit
768d7d37e9
1 changed files with 60 additions and 1 deletions
  1. 60 1
      iOSClient/Main/Section Header Footer/NCSectionHeaderMenu.swift

+ 60 - 1
iOSClient/Main/Section Header Footer/NCSectionHeaderMenu.swift

@@ -91,6 +91,7 @@ class NCSectionHeaderMenu: UICollectionReusableView, UIGestureRecognizerDelegate
         labelSection.text = ""
         viewSectionHeightConstraint.constant = 0
 
+        buttonTransfer.backgroundColor = .clear
         buttonTransfer.setImage(nil, for: .normal)
         buttonTransfer.layer.cornerRadius = 6
         buttonTransfer.layer.masksToBounds = true
@@ -203,9 +204,12 @@ class NCSectionHeaderMenu: UICollectionReusableView, UIGestureRecognizerDelegate
             var image: UIImage?
             if let ocId = ocId,
                let metadata = NCManageDatabase.shared.getMetadataFromOcId(ocId) {
-                image = NCUtility.shared.createFilePreviewImage(ocId: metadata.ocId, etag: metadata.etag, fileNameView: metadata.fileNameView, classFile: metadata.classFile, status: metadata.status, createPreviewMedia: true)
+                image = NCUtility.shared.createFilePreviewImage(ocId: metadata.ocId, etag: metadata.etag, fileNameView: metadata.fileNameView, classFile: metadata.classFile, status: metadata.status, createPreviewMedia: true)?.darken()
                 if image == nil {
                     image = UIImage(named: metadata.iconName)
+                    buttonTransfer.backgroundColor = .lightGray
+                } else {
+                    buttonTransfer.backgroundColor = .clear
                 }
                 buttonTransfer.setImage(image, for: .normal)
             }
@@ -385,3 +389,58 @@ protocol NCSectionFooterDelegate: AnyObject {
 extension NCSectionFooterDelegate {
     func tapButtonSection(_ sender: Any, metadataForSection: NCMetadataForSection?) {}
 }
+
+// https://stackoverflow.com/questions/16278463/darken-an-uiimage
+public extension UIImage {
+
+    private enum BlendMode {
+        case multiply // This results in colors that are at least as dark as either of the two contributing sample colors
+        case screen // This results in colors that are at least as light as either of the two contributing sample colors
+    }
+
+    // A level of zero yeilds the original image, a level of 1 results in black
+    func darken(level: CGFloat = 0.5) -> UIImage? {
+        return blend(mode: .multiply, level: level)
+    }
+
+    // A level of zero yeilds the original image, a level of 1 results in white
+    func lighten(level: CGFloat = 0.5) -> UIImage? {
+        return blend(mode: .screen, level: level)
+    }
+
+    private func blend(mode: BlendMode, level: CGFloat) -> UIImage? {
+        let context = CIContext(options: nil)
+
+        var level = level
+        if level < 0 {
+            level = 0
+        } else if level > 1 {
+            level = 1
+        }
+
+        let filterName: String
+        switch mode {
+        case .multiply: // As the level increases we get less white
+            level = abs(level - 1.0)
+            filterName = "CIMultiplyBlendMode"
+        case .screen: // As the level increases we get more white
+            filterName = "CIScreenBlendMode"
+        }
+
+        let blender = CIFilter(name: filterName)!
+        let backgroundColor = CIColor(color: UIColor(white: level, alpha: 1))
+
+        guard let inputImage = CIImage(image: self) else { return nil }
+        blender.setValue(inputImage, forKey: kCIInputImageKey)
+
+        guard let backgroundImageGenerator = CIFilter(name: "CIConstantColorGenerator") else { return nil }
+        backgroundImageGenerator.setValue(backgroundColor, forKey: kCIInputColorKey)
+        guard let backgroundImage = backgroundImageGenerator.outputImage?.cropped(to: CGRect(origin: CGPoint.zero, size: self.size)) else { return nil }
+        blender.setValue(backgroundImage, forKey: kCIInputBackgroundImageKey)
+
+        guard let blendedImage = blender.outputImage else { return nil }
+
+        guard let cgImage = context.createCGImage(blendedImage, from: blendedImage.extent) else { return nil }
+        return UIImage(cgImage: cgImage)
+    }
+}