Browse Source

added option to switch between square and rect format

nayooti 5 years ago
parent
commit
2ed49b9039
1 changed files with 33 additions and 11 deletions
  1. 33 11
      deltachat-ios/Controller/GalleryViewController.swift

+ 33 - 11
deltachat-ios/Controller/GalleryViewController.swift

@@ -16,6 +16,7 @@ class GalleryViewController: UIViewController {
         let layout = GridCollectionViewFlowLayout()
         let layout = GridCollectionViewFlowLayout()
         layout.minimumLineSpacing = 10
         layout.minimumLineSpacing = 10
         layout.minimumInteritemSpacing = 10
         layout.minimumInteritemSpacing = 10
+        layout.format = .square
         return layout
         return layout
     }()
     }()
 
 
@@ -52,6 +53,7 @@ class GalleryViewController: UIViewController {
     override func viewDidLoad() {
     override func viewDidLoad() {
         super.viewDidLoad()
         super.viewDidLoad()
         setupSubviews()
         setupSubviews()
+        title = String.localized("gallery")
     }
     }
 
 
     override func viewWillAppear(_ animated: Bool) {
     override func viewWillAppear(_ animated: Bool) {
@@ -67,7 +69,6 @@ class GalleryViewController: UIViewController {
     private func setupSubviews() {
     private func setupSubviews() {
         view.addSubview(grid)
         view.addSubview(grid)
         grid.translatesAutoresizingMaskIntoConstraints = false
         grid.translatesAutoresizingMaskIntoConstraints = false
-
         grid.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
         grid.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
         grid.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
         grid.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
         grid.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
         grid.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
@@ -131,7 +132,7 @@ extension GalleryViewController {
         let deviceType = UIDevice.current.userInterfaceIdiom
         let deviceType = UIDevice.current.userInterfaceIdiom
 
 
 
 
-        var gridDisplay: CollectionDisplay?
+        var gridDisplay: GridDisplay?
         if deviceType == .phone {
         if deviceType == .phone {
             if orientation.isPortrait {
             if orientation.isPortrait {
                 gridDisplay = .grid(columns: phonePortrait)
                 gridDisplay = .grid(columns: phonePortrait)
@@ -157,14 +158,19 @@ extension GalleryViewController {
  }
  }
 
 
 
 
-enum CollectionDisplay {
+enum GridDisplay {
     case list
     case list
     case grid(columns: Int)
     case grid(columns: Int)
 }
 }
 
 
-extension CollectionDisplay: Equatable {
+enum GridItemFormat {
+    case square
+    case rect(ratio: CGFloat)
+}
+
+extension GridDisplay: Equatable {
 
 
-    public static func == (lhs: CollectionDisplay, rhs: CollectionDisplay) -> Bool {
+    public static func == (lhs: GridDisplay, rhs: GridDisplay) -> Bool {
 
 
         switch (lhs, rhs) {
         switch (lhs, rhs) {
         case (.list, .list):
         case (.list, .list):
@@ -180,7 +186,7 @@ extension CollectionDisplay: Equatable {
 
 
 class GridCollectionViewFlowLayout: UICollectionViewFlowLayout {
 class GridCollectionViewFlowLayout: UICollectionViewFlowLayout {
 
 
-    var display: CollectionDisplay = .list {
+    var display: GridDisplay = .list {
         didSet {
         didSet {
             if display != oldValue {
             if display != oldValue {
                 self.invalidateLayout()
                 self.invalidateLayout()
@@ -196,10 +202,17 @@ class GridCollectionViewFlowLayout: UICollectionViewFlowLayout {
         }
         }
     }
     }
 
 
-    convenience init(display: CollectionDisplay, containerWidth: CGFloat) {
+    var format: GridItemFormat = .square {
+        didSet {
+            self.invalidateLayout()
+        }
+    }
+
+    convenience init(display: GridDisplay, containerWidth: CGFloat, format: GridItemFormat) {
         self.init()
         self.init()
         self.display = display
         self.display = display
         self.containerWidth = containerWidth
         self.containerWidth = containerWidth
+        self.format = format
         self.configLayout()
         self.configLayout()
     }
     }
 
 
@@ -209,10 +222,21 @@ class GridCollectionViewFlowLayout: UICollectionViewFlowLayout {
             self.scrollDirection = .vertical
             self.scrollDirection = .vertical
             let spacing = CGFloat(column - 1) * minimumLineSpacing
             let spacing = CGFloat(column - 1) * minimumLineSpacing
             let optimisedWidth = (containerWidth - spacing) / CGFloat(column)
             let optimisedWidth = (containerWidth - spacing) / CGFloat(column)
-            self.itemSize = CGSize(width: optimisedWidth, height: optimisedWidth) // keep as square
+            let height = calculateHeight(width: optimisedWidth)
+            self.itemSize = CGSize(width: optimisedWidth, height: height) // keep as square
         case .list:
         case .list:
             self.scrollDirection = .vertical
             self.scrollDirection = .vertical
-            self.itemSize = CGSize(width: containerWidth, height: containerWidth)
+            let height = calculateHeight(width: containerWidth)
+            self.itemSize = CGSize(width: containerWidth, height: height)
+        }
+    }
+
+    private func calculateHeight(width: CGFloat) -> CGFloat {
+        switch format {
+        case .square:
+            return width
+        case .rect(let ratio):
+            return width * ratio
         }
         }
     }
     }
 
 
@@ -221,5 +245,3 @@ class GridCollectionViewFlowLayout: UICollectionViewFlowLayout {
         self.configLayout()
         self.configLayout()
     }
     }
 }
 }
-
-