mirror of
https://github.com/overte-org/overte.git
synced 2025-04-27 01:36:29 +02:00
91 lines
2.5 KiB
QML
91 lines
2.5 KiB
QML
import QtQuick 2.5
|
|
|
|
import "../controls"
|
|
import "../js/Utils.js" as Utils
|
|
|
|
Item {
|
|
id: frame
|
|
// Frames always fill their parents, but their decorations may extend
|
|
// beyond the window via negative margin sizes
|
|
anchors.fill: parent
|
|
|
|
// Convenience accessor for the window
|
|
property alias window: frame.parent
|
|
readonly property int iconSize: 24
|
|
default property var decoration;
|
|
|
|
children: [
|
|
decoration,
|
|
sizeOutline,
|
|
debugZ,
|
|
sizeDrag,
|
|
]
|
|
|
|
Text {
|
|
id: debugZ
|
|
visible: DebugQML
|
|
text: window ? "Z: " + window.z : ""
|
|
y: window ? window.height + 4 : 0
|
|
}
|
|
|
|
function deltaSize(dx, dy) {
|
|
var newSize = Qt.vector2d(window.width + dx, window.height + dy);
|
|
newSize = Utils.clampVector(newSize, window.minSize, window.maxSize);
|
|
window.width = newSize.x
|
|
window.height = newSize.y
|
|
}
|
|
|
|
Rectangle {
|
|
id: sizeOutline
|
|
width: window ? window.width : 0
|
|
height: window ? window.height : 0
|
|
color: "#00000000"
|
|
border.width: 4
|
|
radius: 10
|
|
visible: window ? !window.content.visible : false
|
|
}
|
|
|
|
MouseArea {
|
|
id: sizeDrag
|
|
width: iconSize
|
|
height: iconSize
|
|
enabled: window ? window.resizable : false
|
|
x: window ? window.width : 0
|
|
y: window ? window.height : 0
|
|
property vector2d pressOrigin
|
|
property vector2d sizeOrigin
|
|
property bool hid: false
|
|
onPressed: {
|
|
console.log("Pressed on size")
|
|
pressOrigin = Qt.vector2d(mouseX, mouseY)
|
|
sizeOrigin = Qt.vector2d(window.content.width, window.content.height)
|
|
hid = false;
|
|
}
|
|
onReleased: {
|
|
if (hid) {
|
|
window.content.visible = true
|
|
hid = false;
|
|
}
|
|
}
|
|
onPositionChanged: {
|
|
if (pressed) {
|
|
if (window.content.visible) {
|
|
window.content.visible = false;
|
|
hid = true;
|
|
}
|
|
var delta = Qt.vector2d(mouseX, mouseY).minus(pressOrigin);
|
|
frame.deltaSize(delta.x, delta.y)
|
|
}
|
|
}
|
|
FontAwesome {
|
|
visible: sizeDrag.enabled
|
|
rotation: -45
|
|
anchors { centerIn: parent }
|
|
horizontalAlignment: Text.AlignHCenter
|
|
text: "\uf07d"
|
|
size: iconSize / 3 * 2
|
|
style: Text.Outline; styleColor: "white"
|
|
}
|
|
}
|
|
|
|
}
|