Skip to content

Implement basic geometry functions #35

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Dec 7, 2015
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 82 additions & 27 deletions Foundation/NSGeometry.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,16 @@ public struct CGFloat {
public var native: NativeType
}

extension CGFloat: Comparable { }

public func ==(lhs: CGFloat, rhs: CGFloat) -> Bool {
return lhs.native == rhs.native
}

public func <(lhs: CGFloat, rhs: CGFloat) -> Bool {
return lhs.native < rhs.native
}

public struct CGPoint {
public var x: CGFloat
public var y: CGFloat
Expand All @@ -40,6 +50,12 @@ public struct CGPoint {
}
}

extension CGPoint: Equatable { }

public func ==(lhs: CGPoint, rhs: CGPoint) -> Bool {
return (lhs.x == rhs.x) && (lhs.y == rhs.y)
}

public struct CGSize {
public var width: CGFloat
public var height: CGFloat
Expand All @@ -53,6 +69,12 @@ public struct CGSize {
}
}

extension CGSize: Equatable { }

public func ==(lhs: CGSize, rhs: CGSize) -> Bool {
return (lhs.width == rhs.width) && (lhs.height == rhs.height)
}

public struct CGRect {
public var origin: CGPoint
public var size: CGSize
Expand All @@ -66,6 +88,12 @@ public struct CGRect {
}
}

extension CGRect: Equatable { }

public func ==(lhs: CGRect, rhs: CGRect) -> Bool {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This functionality on Darwin actually lives in CoreGraphics not in Foundation

return (lhs.origin == rhs.origin) && (lhs.size == rhs.size)
}

public typealias NSPoint = CGPoint

public typealias NSPointPointer = UnsafeMutablePointer<NSPoint>
Expand Down Expand Up @@ -98,16 +126,35 @@ public enum CGRectEdge : UInt32 {
}

extension NSRectEdge {
public init(rectEdge: CGRectEdge) { NSUnimplemented() }
public init(rectEdge: CGRectEdge) {
switch rectEdge {
case .MinXEdge: self = .MinX
case .MinYEdge: self = .MinY
case .MaxXEdge: self = .MaxX
case .MaxYEdge: self = .MaxY
}
}
}

public struct NSEdgeInsets {
public var top: CGFloat
public var left: CGFloat
public var bottom: CGFloat
public var right: CGFloat
public init() { NSUnimplemented() }
public init(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) { NSUnimplemented() }

public init() {
self.top = CGFloat()
self.left = CGFloat()
self.bottom = CGFloat()
self.right = CGFloat()
}

public init(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) {
self.top = top
self.left = left
self.bottom = bottom
self.right = right
}
}

public struct NSAlignmentOptions : OptionSetType {
Expand Down Expand Up @@ -148,49 +195,57 @@ public let NSZeroSize: NSSize = NSSize()
public let NSZeroRect: NSRect = NSRect()
public let NSEdgeInsetsZero: NSEdgeInsets = NSEdgeInsets()

public func NSMakePoint(x: CGFloat, _ y: CGFloat) -> NSPoint { NSUnimplemented() }
public func NSMakePoint(x: CGFloat, _ y: CGFloat) -> NSPoint { return NSPoint(x: x, y: y) }

public func NSMakeSize(w: CGFloat, _ h: CGFloat) -> NSSize { return NSSize(width: w, height: h) }

public func NSMakeSize(w: CGFloat, _ h: CGFloat) -> NSSize { NSUnimplemented() }
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)) }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

public func NSEdgeInsetsMake(top: CGFloat, _ left: CGFloat, _ bottom: CGFloat, _ right: CGFloat) -> NSEdgeInsets { NSUnimplemented() }
public func NSEqualPoints(aPoint: NSPoint, _ bPoint: NSPoint) -> Bool { return aPoint == bPoint }
public func NSEqualSizes(aSize: NSSize, _ bSize: NSSize) -> Bool { return aSize == bSize }
public func NSEqualRects(aRect: NSRect, _ bRect: NSRect) -> Bool { return aRect == bRect }
public func NSIsEmptyRect(aRect: NSRect) -> Bool { return (aRect.size.width.native <= 0) || (aRect.size.height.native <= 0) }
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) }

public func NSEqualPoints(aPoint: NSPoint, _ bPoint: NSPoint) -> Bool { NSUnimplemented() }
public func NSEqualSizes(aSize: NSSize, _ bSize: NSSize) -> Bool { NSUnimplemented() }
public func NSEqualRects(aRect: NSRect, _ bRect: NSRect) -> Bool { NSUnimplemented() }
public func NSIsEmptyRect(aRect: NSRect) -> Bool { NSUnimplemented() }
public func NSEdgeInsetsEqual(aInsets: NSEdgeInsets, _ bInsets: NSEdgeInsets) -> Bool { NSUnimplemented() }
public func NSInsetRect(aRect: NSRect, _ dX: CGFloat, _ dY: CGFloat) -> NSRect {
let x = CGFloat(aRect.origin.x.native + dX.native)
let y = CGFloat(aRect.origin.y.native + dY.native)
let w = CGFloat(aRect.size.width.native - (dX.native * 2))
let h = CGFloat(aRect.size.height.native - (dY.native * 2))

return NSMakeRect(x, y, w, h)
}

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

Expand Down