taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

Environment+EdgeInsets.swift (2004B)


      1 //  MIT License
      2 //  Copyright 2021 alexis https://github.com/alexis-ag/swiftui_classic-tabview_show-hide
      3 //
      4 //  Permission is hereby granted, free of charge, to any person obtaining a copy of this software
      5 //  and associated documentation files (the "Software"), to deal in the Software without restriction,
      6 //  including without limitation the rights to use, copy, modify, merge, publish, distribute,
      7 //  sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
      8 //  furnished to do so, subject to the following conditions:
      9 //
     10 //  The above copyright notice and this permission notice shall be included in all copies or
     11 //  substantial portions of the Software.
     12 //
     13 //  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
     14 //  BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     15 //  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
     16 //  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     17 //  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     18 //
     19 import SwiftUI
     20 
     21 struct SafeAreaEdgeInsetsKey: EnvironmentKey {
     22     static var defaultValue: EdgeInsets {
     23         // TODO: see UIScreen+screenSize for keyWindow
     24         let keyWindows = UIApplication.shared.windows.filter { $0.isKeyWindow }.first ??
     25                 UIApplication.shared.windows[0]
     26 
     27         return keyWindows.safeAreaEdgeInsets
     28     }
     29 }
     30 
     31 extension EnvironmentValues {
     32     ///Should only be used once UIApplication is instantiated by the system
     33     var safeAreaEdgeInsets: EdgeInsets {
     34         self[SafeAreaEdgeInsetsKey.self]
     35     }
     36 }
     37 
     38 extension UIEdgeInsets {
     39     var insets: EdgeInsets {    // TODO: right-to-left!!!
     40         EdgeInsets(top: top, leading: left, bottom: bottom, trailing: right)
     41     }
     42 }
     43 
     44 extension UIWindow {
     45     var safeAreaEdgeInsets: EdgeInsets {
     46         safeAreaInsets.insets
     47     }
     48 }