js/CoreGraphics/CGSize.js
'use strict'
/**
* A structure that contains width and height values.
* @access public
* @see https://developer.apple.com/documentation/coregraphics/cgsize
*/
export default class CGSize {
/**
* @access private
* @param {Buffer} data -
* @param {number} [offset = 0] -
* @param {boolean} [bigEndian = false] -
* @returns {CGSize} -
*/
static _initWithData(data, offset = 0, bigEndian = false) {
throw new Error('not implemented')
}
// Initializers
/**
* Creates a size with dimensions specified as floating-point values.
* @access public
* @constructor
* @param {number} width -
* @param {number} height -
* @see https://developer.apple.com/documentation/coregraphics/cgsize/1454915-init
*/
constructor(width, height) {
// Geometric Properties
this.width = width
this.height = height
}
// Geometric Properties
// Special Values
/**
* The size whose width and height are both zero.
* @type {CGSize}
* @desc
* @see https://developer.apple.com/documentation/coregraphics/cgsize/1455512-zero
*/
static get zero() {
return new CGSize(0, 0)
}
// Transforming Sizes
/**
* Returns the height and width resulting from a transformation of an existing height and width.
* @access public
* @param {CGAffineTransform} t - The affine transform to apply.
* @returns {CGSize} -
* @see https://developer.apple.com/documentation/coregraphics/cgsize/1454806-applying
*/
applying(t) {
return null
}
// Alternate Representations
/**
* Creates a size from a canonical dictionary representation.
* @access public
* @param {Map} dict - A dictionary containing width and height values for the size to create, in the format used by the dictionaryRepresentation property.
* @returns {void}
* @see https://developer.apple.com/documentation/coregraphics/cgsize/2427155-init
*/
static sizeWithDictionaryRepresentation(dict) {
return new CGSize(dict.get('width'), dict.get('height'))
}
/**
* Returns a dictionary representation of the specified size.
* @type {Map}
* @desc
* @see https://developer.apple.com/documentation/coregraphics/cgsize/1455274-dictionaryrepresentation
*/
get dictionaryRepresentation() {
const map = new Map()
map.set('width', this.width)
map.set('height', this.height)
return map
}
/**
* A textual representation of the size's dimensions.
* @type {string}
* @desc
* @see https://developer.apple.com/documentation/coregraphics/cgsize/1645822-debugdescription
*/
get debugDescription() {
return `{width: ${this.width}, height: ${this.height}}`
}
/**
* A representation of the size's structure and display style for use in debugging.
* @type {Mirror}
* @desc
* @see https://developer.apple.com/documentation/coregraphics/cgsize/1645828-custommirror
*/
get customMirror() {
return null
}
/**
* A representation of the size for use in Playgrounds.
* @type {PlaygroundQuickLook}
* @desc
* @see https://developer.apple.com/documentation/coregraphics/cgsize/1645830-customplaygroundquicklook
*/
get customPlaygroundQuickLook() {
return null
}
// Comparing Sizes
/**
* Returns whether two sizes are equal.
* @access public
* @param {CGSize} size2 -
* @returns {boolean} -
* @see https://developer.apple.com/documentation/coregraphics/cgsize/1455176-equalto
*/
equalTo(size2) {
const epsilon = 0.00001
return Math.abs(this.width - size2.width) < epsilon
&& Math.abs(this.height - size2.height) < epsilon
}
zero() {
return new CGSize(0, 0)
}
add(size2) {
return new CGSize(this.width + size2.width, this.height + size2.height)
}
sub(size2) {
return new CGSize(this.width - size2.width, this.height - size2.height)
}
/**
* @access public
* @param {CGSize} s -
* @param {number} rate -
* @returns {CGSize} -
*/
lerp(s, rate) {
const w = this.width + rate * (s.width - this.width)
const h = this.height + rate * (s.height - this.height)
return new CGSize(w, h)
}
copy() {
return new CGSize(this.width, this.height)
}
}