0001    //  Copyright (c) 2016 Indragie Karunaratne. All rights reserved.
0002    //  Licensed under the MIT license, see LICENSE file for more info.
0003    
0004    #if os(OSX)
0005        import AppKit
0006        public typealias View
SwiftAutoLayout.swift:21
extension View: LayoutRegion {}
SwiftAutoLayout.swift:110
public extension View {
= NSView 0007 public typealias LayoutPriority
SwiftAutoLayout.swift:151
public func ~(lhs: NSLayoutConstraint, rhs: LayoutPriority) -> NSLayoutConstraint {
= NSLayoutPriority 0008 0009 @available(OSX 10.11, *) 0010 public typealias LayoutGuide
SwiftAutoLayout.swift:24
extension LayoutGuide: LayoutRegion {}
= NSLayoutGuide 0011 #elseif os(iOS) || os(tvOS) 0012 import UIKit 0013 public typealias View = UIView 0014 public typealias LayoutPriority = UILayoutPriority 0015 0016 @available(iOS 9.0, *) 0017 public typealias LayoutGuide = UILayoutGuide 0018 #endif 0019 0020 public protocol LayoutRegion
SwiftAutoLayout.swift:21
extension View: LayoutRegion {}
SwiftAutoLayout.swift:24
extension LayoutGuide: LayoutRegion {}
SwiftAutoLayout.swift:97
public extension LayoutRegion {
: AnyObject {} 0021 extension View: LayoutRegion {} 0022 0023 @available(iOS 9.0, OSX 10.11, *) 0024 extension LayoutGuide: LayoutRegion {} 0025 0026 public struct XAxis
SwiftAutoLayout.swift:98
    public var left: LayoutItem<XAxis> { return layoutItem(self, .Left) }
SwiftAutoLayout.swift:99
    public var right: LayoutItem<XAxis> { return layoutItem(self, .Right) }
SwiftAutoLayout.swift:102
    public var leading: LayoutItem<XAxis> { return layoutItem(self, .Leading) }
SwiftAutoLayout.swift:103
    public var trailing: LayoutItem<XAxis> { return layoutItem(self, .Trailing) }
SwiftAutoLayout.swift:106
    public var centerX: LayoutItem<XAxis> { return layoutItem(self, .CenterX) }
{} 0027 public struct YAxis
SwiftAutoLayout.swift:100
    public var top: LayoutItem<YAxis> { return layoutItem(self, .Top) }
SwiftAutoLayout.swift:101
    public var bottom: LayoutItem<YAxis> { return layoutItem(self, .Bottom) }
SwiftAutoLayout.swift:107
    public var centerY: LayoutItem<YAxis> { return layoutItem(self, .CenterY) }
SwiftAutoLayout.swift:111
    public var baseline: LayoutItem<YAxis> { return layoutItem(self, .Baseline) }
SwiftAutoLayout.swift:114
    public var firstBaseline: LayoutItem<YAxis> { return layoutItem(self, .FirstBaseline) }
SwiftAutoLayout.swift:115
    public var lastBaseline: LayoutItem<YAxis> { return layoutItem(self, .LastBaseline) }
{} 0028 public struct Dimension
SwiftAutoLayout.swift:73
public func ==(lhs: LayoutItem<Dimension>, rhs: CGFloat) -> NSLayoutConstraint {
SwiftAutoLayout.swift:81
public func >=(lhs: LayoutItem<Dimension>, rhs: CGFloat) -> NSLayoutConstraint {
SwiftAutoLayout.swift:89
public func <=(lhs: LayoutItem<Dimension>, rhs: CGFloat) -> NSLayoutConstraint {
SwiftAutoLayout.swift:104
    public var width: LayoutItem<Dimension> { return layoutItem(self, .Width) }
SwiftAutoLayout.swift:105
    public var height: LayoutItem<Dimension> { return layoutItem(self, .Height) }
{} 0029 0030 public struct LayoutItem
SwiftAutoLayout.swift:36
    private func constrain(secondItem: LayoutItem, relation: NSLayoutRelation) -> NSLayoutConstraint {
SwiftAutoLayout.swift:44
    private func itemWithMultiplier(multiplier: CGFloat) -> LayoutItem {
SwiftAutoLayout.swift:45
        return LayoutItem(item: self.item, attribute: self.attribute, multiplier: multiplier, constant: self.constant)
SwiftAutoLayout.swift:48
    private func itemWithConstant(constant: CGFloat) -> LayoutItem {
SwiftAutoLayout.swift:49
        return LayoutItem(item: self.item, attribute: self.attribute, multiplier: self.multiplier, constant: constant)
SwiftAutoLayout.swift:53
public func *<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> {
SwiftAutoLayout.swift:53
public func *<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> {
SwiftAutoLayout.swift:57
public func /<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> {
SwiftAutoLayout.swift:57
public func /<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> {
SwiftAutoLayout.swift:61
public func +<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> {
SwiftAutoLayout.swift:61
public func +<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> {
SwiftAutoLayout.swift:65
public func -<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> {
SwiftAutoLayout.swift:65
public func -<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> {
SwiftAutoLayout.swift:69
public func ==<C>(lhs: LayoutItem<C>, rhs: LayoutItem<C>) -> NSLayoutConstraint {
SwiftAutoLayout.swift:69
public func ==<C>(lhs: LayoutItem<C>, rhs: LayoutItem<C>) -> NSLayoutConstraint {
SwiftAutoLayout.swift:73
public func ==(lhs: LayoutItem<Dimension>, rhs: CGFloat) -> NSLayoutConstraint {
SwiftAutoLayout.swift:77
public func >=<C>(lhs: LayoutItem<C>, rhs: LayoutItem<C>) -> NSLayoutConstraint {
SwiftAutoLayout.swift:77
public func >=<C>(lhs: LayoutItem<C>, rhs: LayoutItem<C>) -> NSLayoutConstraint {
SwiftAutoLayout.swift:81
public func >=(lhs: LayoutItem<Dimension>, rhs: CGFloat) -> NSLayoutConstraint {
SwiftAutoLayout.swift:85
public func <=<C>(lhs: LayoutItem<C>, rhs: LayoutItem<C>) -> NSLayoutConstraint {
SwiftAutoLayout.swift:85
public func <=<C>(lhs: LayoutItem<C>, rhs: LayoutItem<C>) -> NSLayoutConstraint {
SwiftAutoLayout.swift:89
public func <=(lhs: LayoutItem<Dimension>, rhs: CGFloat) -> NSLayoutConstraint {
SwiftAutoLayout.swift:93
private func layoutItem<C>(item: AnyObject, _ attribute: NSLayoutAttribute) -> LayoutItem<C> {
SwiftAutoLayout.swift:94
    return LayoutItem(item: item, attribute: attribute, multiplier: 1.0, constant: 0.0)
SwiftAutoLayout.swift:98
    public var left: LayoutItem<XAxis> { return layoutItem(self, .Left) }
SwiftAutoLayout.swift:99
    public var right: LayoutItem<XAxis> { return layoutItem(self, .Right) }
SwiftAutoLayout.swift:100
    public var top: LayoutItem<YAxis> { return layoutItem(self, .Top) }
SwiftAutoLayout.swift:101
    public var bottom: LayoutItem<YAxis> { return layoutItem(self, .Bottom) }
SwiftAutoLayout.swift:102
    public var leading: LayoutItem<XAxis> { return layoutItem(self, .Leading) }
SwiftAutoLayout.swift:103
    public var trailing: LayoutItem<XAxis> { return layoutItem(self, .Trailing) }
SwiftAutoLayout.swift:104
    public var width: LayoutItem<Dimension> { return layoutItem(self, .Width) }
SwiftAutoLayout.swift:105
    public var height: LayoutItem<Dimension> { return layoutItem(self, .Height) }
SwiftAutoLayout.swift:106
    public var centerX: LayoutItem<XAxis> { return layoutItem(self, .CenterX) }
SwiftAutoLayout.swift:107
    public var centerY: LayoutItem<YAxis> { return layoutItem(self, .CenterY) }
SwiftAutoLayout.swift:111
    public var baseline: LayoutItem<YAxis> { return layoutItem(self, .Baseline) }
SwiftAutoLayout.swift:114
    public var firstBaseline: LayoutItem<YAxis> { return layoutItem(self, .FirstBaseline) }
SwiftAutoLayout.swift:115
    public var lastBaseline: LayoutItem<YAxis> { return layoutItem(self, .LastBaseline) }
<C> { 0031 public let item
SwiftAutoLayout.swift:37
        return NSLayoutConstraint(item: item, attribute: attribute, relatedBy: relation, toItem: secondItem.item, attribute: secondItem.attribute, multiplier: secondItem.multiplier, constant: secondItem.constant)
SwiftAutoLayout.swift:37
        return NSLayoutConstraint(item: item, attribute: attribute, relatedBy: relation, toItem: secondItem.item, attribute: secondItem.attribute, multiplier: secondItem.multiplier, constant: secondItem.constant)
SwiftAutoLayout.swift:41
        return NSLayoutConstraint(item: item, attribute: attribute, relatedBy: relation, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: constant)
SwiftAutoLayout.swift:45
        return LayoutItem(item: self.item, attribute: self.attribute, multiplier: multiplier, constant: self.constant)
SwiftAutoLayout.swift:49
        return LayoutItem(item: self.item, attribute: self.attribute, multiplier: self.multiplier, constant: constant)
: AnyObject 0032 public let attribute
SwiftAutoLayout.swift:37
        return NSLayoutConstraint(item: item, attribute: attribute, relatedBy: relation, toItem: secondItem.item, attribute: secondItem.attribute, multiplier: secondItem.multiplier, constant: secondItem.constant)
SwiftAutoLayout.swift:37
        return NSLayoutConstraint(item: item, attribute: attribute, relatedBy: relation, toItem: secondItem.item, attribute: secondItem.attribute, multiplier: secondItem.multiplier, constant: secondItem.constant)
SwiftAutoLayout.swift:41
        return NSLayoutConstraint(item: item, attribute: attribute, relatedBy: relation, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: constant)
SwiftAutoLayout.swift:45
        return LayoutItem(item: self.item, attribute: self.attribute, multiplier: multiplier, constant: self.constant)
SwiftAutoLayout.swift:49
        return LayoutItem(item: self.item, attribute: self.attribute, multiplier: self.multiplier, constant: constant)
: NSLayoutAttribute 0033 public let multiplier
SwiftAutoLayout.swift:37
        return NSLayoutConstraint(item: item, attribute: attribute, relatedBy: relation, toItem: secondItem.item, attribute: secondItem.attribute, multiplier: secondItem.multiplier, constant: secondItem.constant)
SwiftAutoLayout.swift:49
        return LayoutItem(item: self.item, attribute: self.attribute, multiplier: self.multiplier, constant: constant)
SwiftAutoLayout.swift:54
    return lhs.itemWithMultiplier(lhs.multiplier * rhs)
SwiftAutoLayout.swift:58
    return lhs.itemWithMultiplier(lhs.multiplier / rhs)
: CGFloat 0034 public let constant
SwiftAutoLayout.swift:37
        return NSLayoutConstraint(item: item, attribute: attribute, relatedBy: relation, toItem: secondItem.item, attribute: secondItem.attribute, multiplier: secondItem.multiplier, constant: secondItem.constant)
SwiftAutoLayout.swift:45
        return LayoutItem(item: self.item, attribute: self.attribute, multiplier: multiplier, constant: self.constant)
SwiftAutoLayout.swift:62
    return lhs.itemWithConstant(lhs.constant + rhs)
SwiftAutoLayout.swift:66
    return lhs.itemWithConstant(lhs.constant - rhs)
: CGFloat 0035 0036 private func constrain
SwiftAutoLayout.swift:70
    return lhs.constrain(rhs, relation: .Equal)
SwiftAutoLayout.swift:78
    return lhs.constrain(rhs, relation: .GreaterThanOrEqual)
SwiftAutoLayout.swift:86
    return lhs.constrain(rhs, relation: .LessThanOrEqual)
(secondItem: LayoutItem, relation: NSLayoutRelation) -> NSLayoutConstraint { 0037 return NSLayoutConstraint(item: item, attribute: attribute, relatedBy: relation, toItem: secondItem.item, attribute: secondItem.attribute, multiplier: secondItem.multiplier, constant: secondItem.constant) 0038 } 0039 0040 private func constrain
SwiftAutoLayout.swift:74
    return lhs.constrain(rhs, relation: .Equal)
SwiftAutoLayout.swift:82
    return lhs.constrain(rhs, relation: .GreaterThanOrEqual)
SwiftAutoLayout.swift:90
    return lhs.constrain(rhs, relation: .LessThanOrEqual)
(constant: CGFloat, relation: NSLayoutRelation) -> NSLayoutConstraint { 0041 return NSLayoutConstraint(item: item, attribute: attribute, relatedBy: relation, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: constant) 0042 } 0043 0044 private func itemWithMultiplier
SwiftAutoLayout.swift:54
    return lhs.itemWithMultiplier(lhs.multiplier * rhs)
SwiftAutoLayout.swift:58
    return lhs.itemWithMultiplier(lhs.multiplier / rhs)
(multiplier: CGFloat) -> LayoutItem { 0045 return LayoutItem(item: self.item, attribute: self.attribute, multiplier: multiplier, constant: self.constant) 0046 } 0047 0048 private func itemWithConstant
SwiftAutoLayout.swift:62
    return lhs.itemWithConstant(lhs.constant + rhs)
SwiftAutoLayout.swift:66
    return lhs.itemWithConstant(lhs.constant - rhs)
(constant: CGFloat) -> LayoutItem { 0049 return LayoutItem(item: self.item, attribute: self.attribute, multiplier: self.multiplier, constant: constant) 0050 } 0051 } 0052 0053 public func *<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> { 0054 return lhs.itemWithMultiplier(lhs.multiplier * rhs) 0055 } 0056 0057 public func /<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> { 0058 return lhs.itemWithMultiplier(lhs.multiplier / rhs) 0059 } 0060 0061 public func +<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> { 0062 return lhs.itemWithConstant(lhs.constant + rhs) 0063 } 0064 0065 public func -<C>(lhs: LayoutItem<C>, rhs: CGFloat) -> LayoutItem<C> { 0066 return lhs.itemWithConstant(lhs.constant - rhs) 0067 } 0068 0069 public func ==<C>(lhs: LayoutItem<C>, rhs: LayoutItem<C>) -> NSLayoutConstraint { 0070 return lhs.constrain(rhs, relation: .Equal) 0071 } 0072 0073 public func ==(lhs: LayoutItem<Dimension>, rhs: CGFloat) -> NSLayoutConstraint { 0074 return lhs.constrain(rhs, relation: .Equal) 0075 } 0076 0077 public func >=<C>(lhs: LayoutItem<C>, rhs: LayoutItem<C>) -> NSLayoutConstraint { 0078 return lhs.constrain(rhs, relation: .GreaterThanOrEqual) 0079 } 0080 0081 public func >=(lhs: LayoutItem<Dimension>, rhs: CGFloat) -> NSLayoutConstraint { 0082 return lhs.constrain(rhs, relation: .GreaterThanOrEqual) 0083 } 0084 0085 public func <=<C>(lhs: LayoutItem<C>, rhs: LayoutItem<C>) -> NSLayoutConstraint { 0086 return lhs.constrain(rhs, relation: .LessThanOrEqual) 0087 } 0088 0089 public func <=(lhs: LayoutItem<Dimension>, rhs: CGFloat) -> NSLayoutConstraint { 0090 return lhs.constrain(rhs, relation: .LessThanOrEqual) 0091 } 0092 0093 private func layoutItem
SwiftAutoLayout.swift:98
    public var left: LayoutItem<XAxis> { return layoutItem(self, .Left) }
SwiftAutoLayout.swift:99
    public var right: LayoutItem<XAxis> { return layoutItem(self, .Right) }
SwiftAutoLayout.swift:100
    public var top: LayoutItem<YAxis> { return layoutItem(self, .Top) }
SwiftAutoLayout.swift:101
    public var bottom: LayoutItem<YAxis> { return layoutItem(self, .Bottom) }
SwiftAutoLayout.swift:102
    public var leading: LayoutItem<XAxis> { return layoutItem(self, .Leading) }
SwiftAutoLayout.swift:103
    public var trailing: LayoutItem<XAxis> { return layoutItem(self, .Trailing) }
SwiftAutoLayout.swift:104
    public var width: LayoutItem<Dimension> { return layoutItem(self, .Width) }
SwiftAutoLayout.swift:105
    public var height: LayoutItem<Dimension> { return layoutItem(self, .Height) }
SwiftAutoLayout.swift:106
    public var centerX: LayoutItem<XAxis> { return layoutItem(self, .CenterX) }
SwiftAutoLayout.swift:107
    public var centerY: LayoutItem<YAxis> { return layoutItem(self, .CenterY) }
SwiftAutoLayout.swift:111
    public var baseline: LayoutItem<YAxis> { return layoutItem(self, .Baseline) }
SwiftAutoLayout.swift:114
    public var firstBaseline: LayoutItem<YAxis> { return layoutItem(self, .FirstBaseline) }
SwiftAutoLayout.swift:115
    public var lastBaseline: LayoutItem<YAxis> { return layoutItem(self, .LastBaseline) }
<C>(item: AnyObject, _ attribute: NSLayoutAttribute) -> LayoutItem<C> { 0094 return LayoutItem(item: item, attribute: attribute, multiplier: 1.0, constant: 0.0) 0095 } 0096 0097 public extension LayoutRegion { 0098 public var left: LayoutItem<XAxis> { return layoutItem(self, .Left) } 0099 public var right: LayoutItem<XAxis> { return layoutItem(self, .Right) } 0100 public var top: LayoutItem<YAxis> { return layoutItem(self, .Top) } 0101 public var bottom: LayoutItem<YAxis> { return layoutItem(self, .Bottom) } 0102 public var leading: LayoutItem<XAxis> { return layoutItem(self, .Leading) } 0103 public var trailing: LayoutItem<XAxis> { return layoutItem(self, .Trailing) } 0104 public var width: LayoutItem<Dimension> { return layoutItem(self, .Width) } 0105 public var height: LayoutItem<Dimension> { return layoutItem(self, .Height) } 0106 public var centerX: LayoutItem<XAxis> { return layoutItem(self, .CenterX) } 0107 public var centerY: LayoutItem<YAxis> { return layoutItem(self, .CenterY) } 0108 } 0109 0110 public extension View { 0111 public var baseline: LayoutItem<YAxis> { return layoutItem(self, .Baseline) } 0112 0113 @available(iOS 8.0, OSX 10.11, *) 0114 public var firstBaseline: LayoutItem<YAxis> { return layoutItem(self, .FirstBaseline) } 0115 public var lastBaseline: LayoutItem<YAxis> { return layoutItem(self, .LastBaseline) } 0116 } 0117 0118 #if os(iOS) || os(tvOS) 0119 public extension UIViewController { 0120 public var topLayoutGuideTop: LayoutItem<YAxis> { 0121 return layoutItem(topLayoutGuide, .Top) 0122 } 0123 0124 public var topLayoutGuideBottom: LayoutItem<YAxis> { 0125 return layoutItem(topLayoutGuide, .Bottom) 0126 } 0127 0128 public var bottomLayoutGuideTop: LayoutItem<YAxis> { 0129 return layoutItem(bottomLayoutGuide, .Top) 0130 } 0131 0132 public var bottomLayoutGuideBottom: LayoutItem<YAxis> { 0133 return layoutItem(bottomLayoutGuide, .Bottom) 0134 } 0135 } 0136 0137 public extension UIView { 0138 public var leftMargin: LayoutItem<XAxis> { return layoutItem(self, .LeftMargin) } 0139 public var rightMargin: LayoutItem<XAxis> { return layoutItem(self, .RightMargin) } 0140 public var topMargin: LayoutItem<YAxis> { return layoutItem(self, .TopMargin) } 0141 public var bottomMargin: LayoutItem<YAxis> { return layoutItem(self, .BottomMargin) } 0142 public var leadingMargin: LayoutItem<XAxis> { return layoutItem(self, .LeadingMargin) } 0143 public var trailingMargin: LayoutItem<XAxis> { return layoutItem(self, .TrailingMargin) } 0144 public var centerXWithinMargins: LayoutItem<XAxis> { return layoutItem(self, .CenterXWithinMargins) } 0145 public var centerYWithinMargins: LayoutItem<YAxis> { return layoutItem(self, .CenterYWithinMargins) } 0146 } 0147 #endif 0148 0149 infix operator ~ { associativity left precedence 120 } 0150 0151 public func ~(lhs: NSLayoutConstraint, rhs: LayoutPriority) -> NSLayoutConstraint { 0152 let newConstraint = NSLayoutConstraint(item: lhs.firstItem, attribute: lhs.firstAttribute, relatedBy: lhs.relation, toItem: lhs.secondItem, attribute: lhs.secondAttribute, multiplier: lhs.multiplier, constant: lhs.constant) 0153 newConstraint.priority = rhs 0154 return newConstraint 0155 } 0156