Source: resize.js

/**
 * @module engine/resize
 */
let pRatio = 1.0, cRatio = 1.0;

/**
 * Calculate how to scale a content to fill its container in `outer-box` mode.
 * @param  {Vector} containerSize Size of container.
 * @param  {Vector} contentSize   Size of the content.
 * @return {object} { left , top , scale }
 */
module.exports.outerBoxResize = function(containerSize, contentSize) {
  pRatio = containerSize.x / containerSize.y;
  cRatio = contentSize.x / contentSize.y;

  let result = { left: 0, top: 0, scale: 1 };
  if (pRatio > cRatio) {
    result.scale = containerSize.y / contentSize.y;
    result.left = (containerSize.x - contentSize.x * result.scale) * 0.5;
  }
  else {
    result.scale = containerSize.x / contentSize.x;
    result.top = (containerSize.y - contentSize.y * result.scale) * 0.5;
  }

  return result;
};

/**
 * Calculate how to scale a content to fill its container in `inner-box` mode.
 * @param  {Vector} containerSize Size of container.
 * @param  {Vector} contentSize   Size of the content.
 * @return {object} { left , top , scale }
 */
module.exports.innerBoxResize = function(containerSize, contentSize) {
  pRatio = containerSize.x / containerSize.y;
  cRatio = contentSize.x / contentSize.y;

  let result = { left: 0, top: 0, scale: 1 };
  if (pRatio < cRatio) {
    result.scale = containerSize.y / contentSize.y;
    result.left = (containerSize.x - contentSize.x * result.scale) * 0.5;
  }
  else {
    result.scale = containerSize.x / contentSize.x;
    result.top = (containerSize.y - contentSize.y * result.scale) * 0.5;
  }

  return result;
};