overte-JulianGro/interface/resources/qml/hifi/overlays/ImageOverlay.qml
2016-01-28 16:03:26 -08:00

78 lines
2.7 KiB
QML

import QtQuick 2.3
import QtQuick.Controls 1.2
import "."
Overlay {
id: root
Image {
id: image
property bool scaleFix: true;
property real xOffset: 0
property real yOffset: 0
property real imageScale: 1.0
property var resizer: Timer {
interval: 50
repeat: false
running: false
onTriggered: {
var targetAspect = root.width / root.height;
var sourceAspect = image.sourceSize.width / image.sourceSize.height;
if (sourceAspect <= targetAspect) {
if (root.width === image.sourceSize.width) {
return;
}
image.imageScale = root.width / image.sourceSize.width;
} else if (sourceAspect > targetAspect){
if (root.height === image.sourceSize.height) {
return;
}
image.imageScale = root.height / image.sourceSize.height;
}
image.sourceSize = Qt.size(image.sourceSize.width * image.imageScale, image.sourceSize.height * image.imageScale);
}
}
x: -1 * xOffset * imageScale
y: -1 * yOffset * imageScale
onSourceSizeChanged: {
if (sourceSize.width !== 0 && sourceSize.height !== 0 && progress === 1.0 && scaleFix) {
scaleFix = false;
resizer.start();
}
}
}
function updateSubImage(subImage) {
var keys = Object.keys(subImage);
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
var value = subImage[key];
switch (key) {
case "x": image.xOffset = value; break;
case "y": image.yOffset = value; break;
}
}
}
function updatePropertiesFromScript(properties) {
var keys = Object.keys(properties);
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
var value = properties[key];
switch (key) {
case "height": root.height = value; break;
case "width": root.width = value; break;
case "x": root.x = value; break;
case "y": root.y = value; break;
case "visible": root.visible = value; break;
case "alpha": root.opacity = value; break;
case "imageURL": image.source = value; break;
case "subImage": updateSubImage(value); break;
default: console.log("OVERLAY Unhandled image property " + key);
}
}
}
}