mirror of
https://github.com/openstf/stf
synced 2025-10-05 02:29:26 +02:00
119 lines
No EOL
2.8 KiB
JavaScript
119 lines
No EOL
2.8 KiB
JavaScript
module.exports = function ScalingServiceFactory() {
|
|
var scalingService = {
|
|
}
|
|
|
|
scalingService.coordinator = function (realWidth, realHeight) {
|
|
var realRatio = realWidth / realHeight
|
|
|
|
return {
|
|
coords: function (width, height, x, y) {
|
|
var ratio = width / height
|
|
, scaledValue
|
|
|
|
if (realRatio > ratio) {
|
|
// covers the area horizontally
|
|
scaledValue = width / realRatio;
|
|
|
|
// adjust y to start from the scaled top edge
|
|
y -= (height - scaledValue) / 2
|
|
|
|
// not touching the screen, but we want to trigger certain events
|
|
// (like touchup) anyway, so let's do it on the edges.
|
|
if (y < 0) {
|
|
y = 0
|
|
}
|
|
else if (y > scaledValue) {
|
|
y = scaledValue
|
|
}
|
|
|
|
// make sure x is within bounds too
|
|
if (x < 0) {
|
|
x = 0
|
|
}
|
|
else if (x > width) {
|
|
x = width
|
|
}
|
|
|
|
height = scaledValue
|
|
}
|
|
else {
|
|
// covers the area vertically
|
|
scaledValue = height * realRatio
|
|
|
|
// adjust x to start from the scaled left edge
|
|
x -= (width - scaledValue) / 2
|
|
|
|
// not touching the screen, but we want to trigger certain events
|
|
// (like touchup) anyway, so let's do it on the edges.
|
|
if (x < 0) {
|
|
x = 0
|
|
}
|
|
else if (x > scaledValue) {
|
|
x = scaledValue
|
|
}
|
|
|
|
// make sure y is within bounds too
|
|
if (y < 0) {
|
|
y = 0
|
|
}
|
|
else if (y > height) {
|
|
y = height
|
|
}
|
|
|
|
width = scaledValue
|
|
}
|
|
|
|
return {
|
|
xP: x / width, yP: y / height
|
|
}
|
|
}, size: function (width, height) {
|
|
var ratio = width / height
|
|
|
|
if (realRatio > ratio) {
|
|
// covers the area horizontally
|
|
|
|
if (width >= realWidth) {
|
|
// don't go over max size
|
|
width = realWidth
|
|
height = realHeight
|
|
}
|
|
else {
|
|
height = Math.floor(width / realRatio)
|
|
}
|
|
}
|
|
else {
|
|
// covers the area vertically
|
|
|
|
if (height >= realHeight) {
|
|
// don't go over max size
|
|
height = realHeight
|
|
width = realWidth
|
|
}
|
|
else {
|
|
width = Math.floor(height * realRatio)
|
|
}
|
|
}
|
|
|
|
return {
|
|
width: width, height: height
|
|
}
|
|
}, projectedSize: function (width, height) {
|
|
var ratio = width / height
|
|
|
|
if (realRatio > ratio) {
|
|
// covers the area horizontally
|
|
height = Math.floor(width / realRatio)
|
|
}
|
|
else {
|
|
width = Math.floor(height * realRatio)
|
|
}
|
|
|
|
return {
|
|
width: width, height: height
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return scalingService
|
|
} |