-
-
Save mrdekk/89536e7845ce50311581649415f4c9e5 to your computer and use it in GitHub Desktop.
missing operators for CGPoint, CGSize and CGRect
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// MARK: CGPoint op point/size/float | |
// | |
func -(l: CGPoint, r: CGPoint) -> CGPoint { return CGPoint(x: l.x - r.x, y: l.y - r.y) } | |
func +(l: CGPoint, r: CGPoint) -> CGPoint { return CGPoint(x: l.x + r.x, y: l.y + r.y) } | |
func *(l: CGPoint, r: CGPoint) -> CGPoint { return CGPoint(x: l.x * r.x, y: l.y * r.y) } | |
func /(l: CGPoint, r: CGPoint) -> CGPoint { return CGPoint(x: l.x / r.x, y: l.y / r.y) } | |
func -(l: CGPoint, r: CGSize) -> CGPoint { return CGPoint(x: l.x - r.width, y: l.y - r.height) } | |
func +(l: CGPoint, r: CGSize) -> CGPoint { return CGPoint(x: l.x + r.width, y: l.y + r.height) } | |
func *(l: CGPoint, r: CGSize) -> CGPoint { return CGPoint(x: l.x * r.width, y: l.y * r.height) } | |
func /(l: CGPoint, r: CGSize) -> CGPoint { return CGPoint(x: l.x / r.width, y: l.y / r.height) } | |
func -(l: CGPoint, r: CGFloat) -> CGPoint { return CGPoint(x: l.x - r, y: l.y - r) } | |
func +(l: CGPoint, r: CGFloat) -> CGPoint { return CGPoint(x: l.x + r, y: l.y + r) } | |
func *(l: CGPoint, r: CGFloat) -> CGPoint { return CGPoint(x: l.x * r, y: l.y * r) } | |
func /(l: CGPoint, r: CGFloat) -> CGPoint { return CGPoint(x: l.x / r, y: l.y / r) } | |
func -=(inout l: CGPoint, r: CGPoint) { l = l - r } | |
func +=(inout l: CGPoint, r: CGPoint) { l = l + r } | |
func *=(inout l: CGPoint, r: CGPoint) { l = l * r } | |
func /=(inout l: CGPoint, r: CGPoint) { l = l / r } | |
func -=(inout l: CGPoint, r: CGSize) { l = l - r } | |
func +=(inout l: CGPoint, r: CGSize) { l = l + r } | |
func *=(inout l: CGPoint, r: CGSize) { l = l * r } | |
func /=(inout l: CGPoint, r: CGSize) { l = l / r } | |
func -=(inout l: CGPoint, r: CGFloat) { l = l - r } | |
func +=(inout l: CGPoint, r: CGFloat) { l = l + r } | |
func *=(inout l: CGPoint, r: CGFloat) { l = l * r } | |
func /=(inout l: CGPoint, r: CGFloat) { l = l / r } | |
extension CGPoint { | |
init(x: CGFloat) { | |
self.x = x | |
self.y = 0 | |
} | |
init(y: CGFloat) { | |
self.x = 0 | |
self.y = y | |
} | |
func with(#x: CGFloat) -> CGPoint { | |
return CGPoint(x: x, y: y) | |
} | |
func with(#y: CGFloat) -> CGPoint { | |
return CGPoint(x: x, y: y) | |
} | |
func ceil() -> CGPoint { | |
return CGPoint(x: CoreGraphics.ceil(x), y: CoreGraphics.ceil(y)) | |
} | |
func floor() -> CGPoint { | |
return CGPoint(x: CoreGraphics.floor(x), y: CoreGraphics.floor(y)) | |
} | |
func round() -> CGPoint { | |
return CGPoint(x: CoreGraphics.round(x), y: CoreGraphics.round(y)) | |
} | |
func size() -> CGSize { | |
return CGSize(width: x, height: y) | |
} | |
func toInts() -> (x: Int, y: Int) { | |
return (x: Int(x), y: Int(y)) | |
} | |
} | |
// | |
// MARK: CGSize op size/float | |
// | |
func -(l: CGSize, r: CGSize) -> CGSize { return CGSize(width: l.width - r.width, height: l.height - r.height) } | |
func +(l: CGSize, r: CGSize) -> CGSize { return CGSize(width: l.width + r.width, height: l.height + r.height) } | |
func *(l: CGSize, r: CGSize) -> CGSize { return CGSize(width: l.width * r.width, height: l.height * r.height) } | |
func /(l: CGSize, r: CGSize) -> CGSize { return CGSize(width: l.width / r.width, height: l.height / r.height) } | |
func -(l: CGSize, r: CGFloat) -> CGSize { return CGSize(width: l.width - r, height: l.height - r) } | |
func +(l: CGSize, r: CGFloat) -> CGSize { return CGSize(width: l.width + r, height: l.height + r) } | |
func *(l: CGSize, r: CGFloat) -> CGSize { return CGSize(width: l.width * r, height: l.height * r) } | |
func /(l: CGSize, r: CGFloat) -> CGSize { return CGSize(width: l.width / r, height: l.height / r) } | |
func -=(inout l: CGSize, r: CGSize) { l = l - r } | |
func +=(inout l: CGSize, r: CGSize) { l = l + r } | |
func *=(inout l: CGSize, r: CGSize) { l = l * r } | |
func /=(inout l: CGSize, r: CGSize) { l = l / r } | |
func -=(inout l: CGSize, r: CGFloat) { l = l - r } | |
func +=(inout l: CGSize, r: CGFloat) { l = l + r } | |
func *=(inout l: CGSize, r: CGFloat) { l = l * r } | |
func /=(inout l: CGSize, r: CGFloat) { l = l / r } | |
extension CGSize { | |
init(width: CGFloat) { | |
self.width = width | |
self.height = 0 | |
} | |
init(height: CGFloat) { | |
self.width = 0 | |
self.height = height | |
} | |
func with(#width: CGFloat) -> CGSize { return CGSize(width: width, height: height) } | |
func with(#height: CGFloat) -> CGSize { return CGSize(width: width, height: height) } | |
func ceil() -> CGSize { return CGSize(width: CoreGraphics.ceil(width), height: CoreGraphics.ceil(height)) } | |
func floor() -> CGSize { return CGSize(width: CoreGraphics.floor(width), height: CoreGraphics.floor(height)) } | |
func round() -> CGSize { return CGSize(width: CoreGraphics.round(width), height: CoreGraphics.round(height)) } | |
func point() -> CGPoint { | |
return CGPoint(x: width, y: height) | |
} | |
func toInts() -> (width: Int, height: Int) { | |
return (width: Int(width), height: Int(height)) | |
} | |
} | |
// | |
// MARK: CGRect accessors | |
// | |
extension CGRect { | |
init(origin: CGPoint) { | |
self.origin = origin | |
self.size = CGSize() | |
} | |
init(size: CGSize) { | |
self.origin = CGPoint() | |
self.size = size | |
} | |
init(x: CGFloat, y: CGFloat) { | |
self.origin = CGPoint(x: x, y: y) | |
self.size = CGSize() | |
} | |
init(x: CGFloat, y: CGFloat, size: CGSize) { | |
self.origin = CGPoint(x: x, y: y) | |
self.size = size | |
} | |
init(width: CGFloat, height: CGFloat) { | |
self.origin = CGPoint() | |
self.size = CGSize(width: width, height: height) | |
} | |
init(origin: CGPoint, width: CGFloat, height: CGFloat) { | |
self.origin = origin | |
self.size = CGSize(width: width, height: height) | |
} | |
func with(#x: CGFloat) -> CGRect { return CGRect(x: x, y: y, width: width, height: height) } | |
func with(#y: CGFloat) -> CGRect { return CGRect(x: x, y: y, width: width, height: height) } | |
func with(#width: CGFloat) -> CGRect { return CGRect(x: x, y: y, width: width, height: height) } | |
func with(#height: CGFloat) -> CGRect { return CGRect(x: x, y: y, width: width, height: height) } | |
var x: CGFloat { | |
get { return origin.x } | |
set { origin.x = newValue } | |
} | |
var y: CGFloat { | |
get { return origin.y } | |
set { origin.y = newValue } | |
} | |
var width: CGFloat { | |
get { return size.width } | |
set { size.width = newValue } | |
} | |
var height: CGFloat { | |
get { return size.height } | |
set { size.height = newValue } | |
} | |
var centerX: CGFloat { | |
get { return x + width / 2 } | |
set { x = newValue - width / 2 } | |
} | |
var centerY: CGFloat { | |
get { return y + height / 2 } | |
set { y = newValue - height / 2 } | |
} | |
var center: CGPoint { | |
get { return CGPoint(x: centerX, y: centerY) } | |
set { | |
centerX = newValue.x | |
centerY = newValue.y | |
} | |
} | |
var left: CGFloat { | |
get { return x } | |
set { x = newValue } | |
} | |
var top: CGFloat { | |
get { return y } | |
set { y = newValue } | |
} | |
var right: CGFloat { | |
get { return x + width } | |
set { x = newValue - width } | |
} | |
var bottom: CGFloat { | |
get { return y + height } | |
set { y = newValue - height } | |
} | |
} | |
// | |
// MARK: CGRect helpers | |
// | |
extension CGRect { | |
func rectByInsetting(#size: CGSize) -> CGRect { | |
return rectByInsetting(dx: size.width, dy: size.height) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment