diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/AreaLightHandle.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/AreaLightHandle.qml
new file mode 100644
index 00000000000..64c827dbcf4
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/AreaLightHandle.qml
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick3D 1.15
+
+DirectionalDraggable {
+ id: handleRoot
+
+ property string currentLabel
+ property point currentMousePos
+ property string propName
+ property real propValue: 0
+ property real newValue: 0
+ property real baseScale: 5
+
+ scale: autoScaler.getScale(Qt.vector3d(baseScale, baseScale, baseScale))
+ length: 3
+ offset: -1.5
+
+ Model {
+ id: handle
+ source: "#Sphere"
+ materials: [ handleRoot.material ]
+ scale: Qt.vector3d(0.02, 0.02, 0.02)
+ }
+
+ AutoScaleHelper {
+ id: autoScaler
+ active: handleRoot.active
+ view3D: handleRoot.view3D
+ }
+
+ property real _startValue
+ property real _startScale
+
+ signal valueCommit()
+ signal valueChange()
+
+ function updateValue(relativeDistance, screenPos)
+ {
+ handleRoot.newValue = Math.round(Math.min(999999, Math.max(0, _startValue + (relativeDistance * _startScale))));
+ var l = Qt.locale();
+ handleRoot.currentLabel = propName + qsTr(": ") + Number(newValue).toLocaleString(l, 'f', 0);
+ handleRoot.currentMousePos = screenPos;
+ }
+
+ onPressed: {
+ _startScale = autoScaler.relativeScale * baseScale;
+ _startValue = propValue;
+ updateValue(0, screenPos);
+ }
+
+ onDragged: {
+ updateValue(relativeDistance, screenPos);
+ handleRoot.valueChange();
+ }
+
+ onReleased: {
+ updateValue(relativeDistance, screenPos);
+ handleRoot.valueCommit();
+ }
+}
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml
index 8ac93a85762..a2c8667370a 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml
@@ -59,6 +59,9 @@ Node {
|| spotLightHandle.dragging
|| spotLightInnerHandle.dragging
|| spotLightFadeHandle.dragging
+ || areaHeightHandle.dragging
+ || areaWidthHandle.dragging
+
property point currentMousePos
property string currentLabel
@@ -200,16 +203,64 @@ Node {
}
}
- LightModel {
- id: areaModel
- geometryName: "Edit 3D AreaLight"
- geometryType: LightGeometry.Area
- material: lightMaterial
+ Node {
+ id: areaParts
visible: lightGizmo.targetNode instanceof AreaLight
- scale: visible ? Qt.vector3d(lightGizmo.targetNode.width / 2,
- lightGizmo.targetNode.height / 2, 1)
- .times(lightGizmo.targetNode.scale)
- : Qt.vector3d(1, 1, 1)
+
+ LightModel {
+ id: areaModel
+ geometryName: "Edit 3D AreaLight"
+ geometryType: LightGeometry.Area
+ material: lightMaterial
+ scale: areaParts.visible ? Qt.vector3d(lightGizmo.targetNode.width / 2,
+ lightGizmo.targetNode.height / 2, 1)
+ .times(lightGizmo.targetNode.scale)
+ : Qt.vector3d(1, 1, 1)
+ }
+
+ AreaLightHandle {
+ id: areaWidthHandle
+ view3D: lightGizmo.view3D
+ color: (hovering || dragging) ? Qt.rgba(1, 1, 1, 1) : lightGizmo.color
+ position: lightGizmo.targetNode instanceof AreaLight ? Qt.vector3d(-areaModel.scale.x, 0, 0)
+ : Qt.vector3d(0, 0, 0)
+ eulerRotation: Qt.vector3d(0, 0, 90)
+ targetNode: lightGizmo.targetNode instanceof AreaLight ? lightGizmo.targetNode : null
+ active: lightGizmo.targetNode instanceof AreaLight
+ dragHelper: lightGizmo.dragHelper
+ propName: "width"
+ propValue: lightGizmo.targetNode instanceof AreaLight ? targetNode.width : 0
+
+ onNewValueChanged: targetNode.width = newValue
+ onCurrentMousePosChanged: {
+ lightGizmo.currentMousePos = currentMousePos;
+ lightGizmo.currentLabel = currentLabel;
+ }
+ onValueChange: lightGizmo.propertyValueChange(propName)
+ onValueCommit: lightGizmo.propertyValueCommit(propName)
+ }
+
+ AreaLightHandle {
+ id: areaHeightHandle
+ view3D: lightGizmo.view3D
+ color: (hovering || dragging) ? Qt.rgba(1, 1, 1, 1) : lightGizmo.color
+ position: lightGizmo.targetNode instanceof AreaLight ? Qt.vector3d(0, -areaModel.scale.y, 0)
+ : Qt.vector3d(0, 0, 0)
+ eulerRotation: Qt.vector3d(0, 0, 180)
+ targetNode: lightGizmo.targetNode instanceof AreaLight ? lightGizmo.targetNode : null
+ active: lightGizmo.targetNode instanceof AreaLight
+ dragHelper: lightGizmo.dragHelper
+ propName: "height"
+ propValue: lightGizmo.targetNode instanceof AreaLight ? targetNode.height : 0
+
+ onNewValueChanged: targetNode.height = newValue
+ onCurrentMousePosChanged: {
+ lightGizmo.currentMousePos = currentMousePos;
+ lightGizmo.currentLabel = currentLabel;
+ }
+ onValueChange: lightGizmo.propertyValueChange(propName)
+ onValueCommit: lightGizmo.propertyValueCommit(propName)
+ }
}
LightModel {
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc b/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc
index 0519e2e82a0..f1af244e384 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc
@@ -18,8 +18,10 @@
mockfiles/LightModel.qml
mockfiles/LightIconGizmo.qml
mockfiles/LightGizmo.qml
- mockfiles/SpotLightHandle.qml
mockfiles/AdjustableArrow.qml
+ mockfiles/FadeHandle.qml
+ mockfiles/AreaLightHandle.qml
+ mockfiles/SpotLightHandle.qml
mockfiles/IconGizmo.qml
mockfiles/Overlay2D.qml
mockfiles/HelperGrid.qml
@@ -53,6 +55,5 @@
mockfiles/images/point@2x.png
mockfiles/images/spot.png
mockfiles/images/spot@2x.png
- mockfiles/FadeHandle.qml