Skip to content

Commit b5425d1

Browse files
committed
Merge pull request #35 from romanroibu/master
Implement basic geometry functions
2 parents 49d5f4c + 974cd86 commit b5425d1

File tree

1 file changed

+82
-27
lines changed

1 file changed

+82
-27
lines changed

Foundation/NSGeometry.swift

Lines changed: 82 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ public struct CGFloat {
2727
public var native: NativeType
2828
}
2929

30+
extension CGFloat: Comparable { }
31+
32+
public func ==(lhs: CGFloat, rhs: CGFloat) -> Bool {
33+
return lhs.native == rhs.native
34+
}
35+
36+
public func <(lhs: CGFloat, rhs: CGFloat) -> Bool {
37+
return lhs.native < rhs.native
38+
}
39+
3040
public struct CGPoint {
3141
public var x: CGFloat
3242
public var y: CGFloat
@@ -40,6 +50,12 @@ public struct CGPoint {
4050
}
4151
}
4252

53+
extension CGPoint: Equatable { }
54+
55+
public func ==(lhs: CGPoint, rhs: CGPoint) -> Bool {
56+
return (lhs.x == rhs.x) && (lhs.y == rhs.y)
57+
}
58+
4359
public struct CGSize {
4460
public var width: CGFloat
4561
public var height: CGFloat
@@ -53,6 +69,12 @@ public struct CGSize {
5369
}
5470
}
5571

72+
extension CGSize: Equatable { }
73+
74+
public func ==(lhs: CGSize, rhs: CGSize) -> Bool {
75+
return (lhs.width == rhs.width) && (lhs.height == rhs.height)
76+
}
77+
5678
public struct CGRect {
5779
public var origin: CGPoint
5880
public var size: CGSize
@@ -66,6 +88,12 @@ public struct CGRect {
6688
}
6789
}
6890

91+
extension CGRect: Equatable { }
92+
93+
public func ==(lhs: CGRect, rhs: CGRect) -> Bool {
94+
return (lhs.origin == rhs.origin) && (lhs.size == rhs.size)
95+
}
96+
6997
public typealias NSPoint = CGPoint
7098

7199
public typealias NSPointPointer = UnsafeMutablePointer<NSPoint>
@@ -98,16 +126,35 @@ public enum CGRectEdge : UInt32 {
98126
}
99127

100128
extension NSRectEdge {
101-
public init(rectEdge: CGRectEdge) { NSUnimplemented() }
129+
public init(rectEdge: CGRectEdge) {
130+
switch rectEdge {
131+
case .MinXEdge: self = .MinX
132+
case .MinYEdge: self = .MinY
133+
case .MaxXEdge: self = .MaxX
134+
case .MaxYEdge: self = .MaxY
135+
}
136+
}
102137
}
103138

104139
public struct NSEdgeInsets {
105140
public var top: CGFloat
106141
public var left: CGFloat
107142
public var bottom: CGFloat
108143
public var right: CGFloat
109-
public init() { NSUnimplemented() }
110-
public init(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) { NSUnimplemented() }
144+
145+
public init() {
146+
self.top = CGFloat()
147+
self.left = CGFloat()
148+
self.bottom = CGFloat()
149+
self.right = CGFloat()
150+
}
151+
152+
public init(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) {
153+
self.top = top
154+
self.left = left
155+
self.bottom = bottom
156+
self.right = right
157+
}
111158
}
112159

113160
public struct NSAlignmentOptions : OptionSetType {
@@ -148,49 +195,57 @@ public let NSZeroSize: NSSize = NSSize()
148195
public let NSZeroRect: NSRect = NSRect()
149196
public let NSEdgeInsetsZero: NSEdgeInsets = NSEdgeInsets()
150197

151-
public func NSMakePoint(x: CGFloat, _ y: CGFloat) -> NSPoint { NSUnimplemented() }
198+
public func NSMakePoint(x: CGFloat, _ y: CGFloat) -> NSPoint { return NSPoint(x: x, y: y) }
199+
200+
public func NSMakeSize(w: CGFloat, _ h: CGFloat) -> NSSize { return NSSize(width: w, height: h) }
152201

153-
public func NSMakeSize(w: CGFloat, _ h: CGFloat) -> NSSize { NSUnimplemented() }
202+
public func NSMakeRect(x: CGFloat, _ y: CGFloat, _ w: CGFloat, _ h: CGFloat) -> NSRect { return NSRect(origin: NSPoint(x: x, y: y), size: NSSize(width: w, height: h)) }
154203

155-
public func NSMakeRect(x: CGFloat, _ y: CGFloat, _ w: CGFloat, _ h: CGFloat) -> NSRect { NSUnimplemented() }
204+
public func NSMaxX(aRect: NSRect) -> CGFloat { return CGFloat(aRect.origin.x.native + aRect.size.width.native) }
156205

157-
public func NSMaxX(aRect: NSRect) -> CGFloat { NSUnimplemented() }
206+
public func NSMaxY(aRect: NSRect) -> CGFloat { return CGFloat(aRect.origin.y.native + aRect.size.height.native) }
158207

159-
public func NSMaxY(aRect: NSRect) -> CGFloat { NSUnimplemented() }
208+
public func NSMidX(aRect: NSRect) -> CGFloat { return CGFloat(aRect.origin.x.native + (aRect.size.width.native / 2)) }
160209

161-
public func NSMidX(aRect: NSRect) -> CGFloat { NSUnimplemented() }
210+
public func NSMidY(aRect: NSRect) -> CGFloat { return CGFloat(aRect.origin.y.native + (aRect.size.height.native / 2)) }
162211

163-
public func NSMidY(aRect: NSRect) -> CGFloat { NSUnimplemented() }
212+
public func NSMinX(aRect: NSRect) -> CGFloat { return aRect.origin.x }
164213

165-
public func NSMinX(aRect: NSRect) -> CGFloat { NSUnimplemented() }
214+
public func NSMinY(aRect: NSRect) -> CGFloat { return aRect.origin.y }
166215

167-
public func NSMinY(aRect: NSRect) -> CGFloat { NSUnimplemented() }
216+
public func NSWidth(aRect: NSRect) -> CGFloat { return aRect.size.width }
168217

169-
public func NSWidth(aRect: NSRect) -> CGFloat { NSUnimplemented() }
218+
public func NSHeight(aRect: NSRect) -> CGFloat { return aRect.size.height }
170219

171-
public func NSHeight(aRect: NSRect) -> CGFloat { NSUnimplemented() }
220+
public func NSRectFromCGRect(cgrect: CGRect) -> NSRect { return cgrect }
172221

173-
public func NSRectFromCGRect(cgrect: CGRect) -> NSRect { NSUnimplemented() }
222+
public func NSRectToCGRect(nsrect: NSRect) -> CGRect { return nsrect }
174223

175-
public func NSRectToCGRect(nsrect: NSRect) -> CGRect { NSUnimplemented() }
224+
public func NSPointFromCGPoint(cgpoint: CGPoint) -> NSPoint { return cgpoint }
176225

177-
public func NSPointFromCGPoint(cgpoint: CGPoint) -> NSPoint { NSUnimplemented() }
226+
public func NSPointToCGPoint(nspoint: NSPoint) -> CGPoint { return nspoint }
178227

179-
public func NSPointToCGPoint(nspoint: NSPoint) -> CGPoint { NSUnimplemented() }
228+
public func NSSizeFromCGSize(cgsize: CGSize) -> NSSize { return cgsize }
180229

181-
public func NSSizeFromCGSize(cgsize: CGSize) -> NSSize { NSUnimplemented() }
230+
public func NSSizeToCGSize(nssize: NSSize) -> CGSize { return nssize }
182231

183-
public func NSSizeToCGSize(nssize: NSSize) -> CGSize { NSUnimplemented() }
232+
public func NSEdgeInsetsMake(top: CGFloat, _ left: CGFloat, _ bottom: CGFloat, _ right: CGFloat) -> NSEdgeInsets { return NSEdgeInsets(top: top, left: left, bottom: bottom, right: right) }
184233

185-
public func NSEdgeInsetsMake(top: CGFloat, _ left: CGFloat, _ bottom: CGFloat, _ right: CGFloat) -> NSEdgeInsets { NSUnimplemented() }
234+
public func NSEqualPoints(aPoint: NSPoint, _ bPoint: NSPoint) -> Bool { return aPoint == bPoint }
235+
public func NSEqualSizes(aSize: NSSize, _ bSize: NSSize) -> Bool { return aSize == bSize }
236+
public func NSEqualRects(aRect: NSRect, _ bRect: NSRect) -> Bool { return aRect == bRect }
237+
public func NSIsEmptyRect(aRect: NSRect) -> Bool { return (aRect.size.width.native <= 0) || (aRect.size.height.native <= 0) }
238+
public func NSEdgeInsetsEqual(aInsets: NSEdgeInsets, _ bInsets: NSEdgeInsets) -> Bool { return (aInsets.top == bInsets.top) && (aInsets.left == bInsets.left) && (aInsets.bottom == bInsets.bottom) && (aInsets.right == bInsets.right) }
186239

187-
public func NSEqualPoints(aPoint: NSPoint, _ bPoint: NSPoint) -> Bool { NSUnimplemented() }
188-
public func NSEqualSizes(aSize: NSSize, _ bSize: NSSize) -> Bool { NSUnimplemented() }
189-
public func NSEqualRects(aRect: NSRect, _ bRect: NSRect) -> Bool { NSUnimplemented() }
190-
public func NSIsEmptyRect(aRect: NSRect) -> Bool { NSUnimplemented() }
191-
public func NSEdgeInsetsEqual(aInsets: NSEdgeInsets, _ bInsets: NSEdgeInsets) -> Bool { NSUnimplemented() }
240+
public func NSInsetRect(aRect: NSRect, _ dX: CGFloat, _ dY: CGFloat) -> NSRect {
241+
let x = CGFloat(aRect.origin.x.native + dX.native)
242+
let y = CGFloat(aRect.origin.y.native + dY.native)
243+
let w = CGFloat(aRect.size.width.native - (dX.native * 2))
244+
let h = CGFloat(aRect.size.height.native - (dY.native * 2))
245+
246+
return NSMakeRect(x, y, w, h)
247+
}
192248

193-
public func NSInsetRect(aRect: NSRect, _ dX: CGFloat, _ dY: CGFloat) -> NSRect { NSUnimplemented() }
194249
public func NSIntegralRect(aRect: NSRect) -> NSRect { NSUnimplemented() }
195250
public func NSIntegralRectWithOptions(aRect: NSRect, _ opts: NSAlignmentOptions) -> NSRect { NSUnimplemented() }
196251

0 commit comments

Comments
 (0)