UNPKG

alloy

Version:

TiDev Titanium MVC Framework

111 lines (107 loc) 4.52 kB
/** * @class Alloy.builtins.measurement * A collection of utilities for converting between different display units. * These functions are only useful on the Android platform to support devices with different * screen densities and resolutions. * * To use the measurement builtin library, * require it with the `alloy` root directory in your `require` call. For example: * * var measurement = require('alloy/measurement'); * console.log('----- iOS -----'); * Ti.API.info('Ti.Platform.displayCaps.density: ' + Ti.Platform.displayCaps.density); * Ti.API.info('Ti.Platform.displayCaps.dpi: ' + Ti.Platform.displayCaps.dpi); * Ti.API.info('Ti.Platform.displayCaps.platformHeight: ' + Ti.Platform.displayCaps.platformHeight); * Ti.API.info('Ti.Platform.displayCaps.platformWidth: ' + Ti.Platform.displayCaps.platformWidth); * if (Ti.Platform.osname === 'android'){ * Ti.API.info('Ti.Platform.displayCaps.xdpi: ' + Ti.Platform.displayCaps.xdpi); * Ti.API.info('Ti.Platform.displayCaps.ydpi: ' + Ti.Platform.displayCaps.ydpi); * Ti.API.info('Ti.Platform.displayCaps.logicalDensityFactor: ' + Ti.Platform.displayCaps.logicalDensityFactor); * } * console.log('dpToPX: ' + measurement.dpToPX(130)); * console.log('dpToSystem: ' + measurement.dpToSystem(130)); * console.log('pxToDP: ' + measurement.pxToDP(130)); * console.log('pxToSystem: ' + measurement.pxToSystem(130)); * console.log('systemToPX: ' + measurement.systemToPX(130)); * console.log('systemToDP: ' + measurement.systemToDP(130)); * console.log('convertUnitToPX: ' + measurement.convertUnitToPX('130dp')); * console.log('convertUnitToDP: ' + measurement.convertUnitToDP('130dp')); * console.log('convertUnitToSystem: ' + measurement.convertUnitToSystem('130dp')); * console.log('-----'); * * result sample: * * [INFO] : ----- iPhone OS ----- * [INFO] : Ti.Platform.displayCaps.density: high * [INFO] : Ti.Platform.displayCaps.dpi: 320 * [INFO] : Ti.Platform.displayCaps.platformHeight: 568 * [INFO] : Ti.Platform.displayCaps.platformWidth: 320 * [INFO] : dpToPX: 260 * [INFO] : dpToSystem: 130 * [INFO] : pxToDP: 65 * [INFO] : pxToSystem: 65 * [INFO] : systemToPX: 260 * [INFO] : systemToDP: 130 * [INFO] : convertUnitToPX: 260 * [INFO] : convertUnitToDP: 130 * [INFO] : convertUnitToSystem: 130 * [INFO] : ----- * [INFO] : ----- android ----- * [INFO] : Ti.Platform.displayCaps.density: xhigh * [INFO] : Ti.Platform.displayCaps.dpi: 320 * [INFO] : Ti.Platform.displayCaps.platformHeight: 1280 * [INFO] : Ti.Platform.displayCaps.platformWidth: 720 * [INFO] : Ti.Platform.displayCaps.xdpi: 345.0566101074219 * [INFO] : Ti.Platform.displayCaps.ydpi: 342.2315673828125 * [INFO] : Ti.Platform.displayCaps.logicalDensityFactor: 2 * [INFO] : dpToPX: 260 * [INFO] : dpToSystem: 260 * [INFO] : pxToDP: 65 * [INFO] : pxToSystem: 130 * [INFO] : systemToPX: 130 * [INFO] : systemToDP: 65 * [INFO] : convertUnitToPX: 260 * [INFO] : convertUnitToDP: 130 * [INFO] : convertUnitToSystem: 260 * [INFO] : ----- */ var currentUnit = Ti.App.Properties.getString('ti.ui.defaultunit', 'system'); currentUnit = (currentUnit === 'system') ? (OS_IOS) ? Ti.UI.UNIT_DIP : Ti.UI.UNIT_PX : currentUnit; function convert(val, fromUnit, toUnit) { return Ti.UI.convertUnits('' + parseInt(val) + fromUnit, toUnit); } module.exports = exports = { dpToPX: function(val) { return convert(val, Ti.UI.UNIT_DIP, Ti.UI.UNIT_PX); }, dpToSystem: function(val) { return convert(val, Ti.UI.UNIT_DIP, currentUnit); }, pxToDP: function(val) { return convert(val, Ti.UI.UNIT_PX, Ti.UI.UNIT_DIP); }, pxToSystem: function(val) { return convert(val, Ti.UI.UNIT_PX, currentUnit); }, systemToPX: function(val) { return convert(val, currentUnit, Ti.UI.UNIT_PX); }, systemToDP: function(val) { return convert(val, currentUnit, Ti.UI.UNIT_DIP); }, convertUnitToPX: function(valStr) { return Ti.UI.convertUnits(valStr, Ti.UI.UNIT_PX); }, convertUnitToDP: function(valStr) { return Ti.UI.convertUnits(valStr, Ti.UI.UNIT_DIP); }, convertUnitToSystem: function(valStr) { return Ti.UI.convertUnits(valStr, currentUnit); }, pointPXToDP: function(pt) { return { x: this.pxToDP(pt.x), y: this.pxToDP(pt.y) }; } };