From db549197980bc696badb18ed13118646803eaa41 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 13 Nov 2019 13:42:43 +0200 Subject: [PATCH] QmlDesigner: Finalize camera visualization in edit 3D view Added the UX approved camera icons, which will now turn transparent and ignore mouse events when camera is selected so they do not interfere with transform gizmos. Frustum visualization also changes color according to selection state. Change-Id: Id77066d9abb2b54696fae833201236afa238486a Fixes: QDS-1208 Reviewed-by: Mahmoud Badri Reviewed-by: Thomas Hartmann --- .../qml/qmlpuppet/mockfiles/CameraGizmo.qml | 4 ++-- .../qml/qmlpuppet/mockfiles/EditView3D.qml | 11 ++++++---- .../qml/qmlpuppet/mockfiles/IconGizmo.qml | 20 ++++++++++++------ .../mockfiles/images/camera-pick-icon.png | Bin 206 -> 0 bytes .../mockfiles/images/camera-pick-icon@2x.png | Bin 279 -> 0 bytes .../mockfiles/images/editor_camera.png | Bin 0 -> 981 bytes .../mockfiles/images/editor_camera@2x.png | Bin 0 -> 1742 bytes share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc | 4 ++-- 8 files changed, 24 insertions(+), 15 deletions(-) delete mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/camera-pick-icon.png delete mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/camera-pick-icon@2x.png create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/editor_camera.png create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/editor_camera@2x.png diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml index 6a2a7b3a763..e158128a5fd 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml @@ -30,7 +30,7 @@ import CameraGeometry 1.0 IconGizmo { id: cameraGizmo - iconSource: "qrc:///qtquickplugin/mockfiles/images/camera-pick-icon.png" + iconSource: "qrc:///qtquickplugin/mockfiles/images/editor_camera.png" gizmoModel.geometry: cameraGeometry property alias geometryName: cameraGeometry.name // Name must be unique for each geometry property alias viewPortRect: cameraGeometry.viewPortRect @@ -43,7 +43,7 @@ IconGizmo { gizmoModel.materials: [ DefaultMaterial { id: defaultMaterial - emissiveColor: "blue" + emissiveColor: cameraGizmo.targetNode === cameraGizmo.selectedNode ? "#FF0000" : "#555555" lighting: DefaultMaterial.NoLighting cullingMode: Material.DisableCulling } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml index 2c908755229..5ca9ab8f9fb 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml @@ -66,9 +66,11 @@ Window { var component = Qt.createComponent("LightGizmo.qml"); if (component.status === Component.Ready) { var gizmo = component.createObject(overlayScene, - {"view3D": overlayView, "targetNode": obj}); + {"view3D": overlayView, "targetNode": obj, + "selectedNode": selectedNode}); lightGizmos[lightGizmos.length] = gizmo; - gizmo.selected.connect(emitObjectClicked); + gizmo.clicked.connect(emitObjectClicked); + gizmo.selectedNode = Qt.binding(function() {return selectedNode;}); } } @@ -80,10 +82,11 @@ Window { var gizmo = component.createObject( overlayScene, {"view3D": overlayView, "targetNode": obj, "geometryName": geometryName, - "viewPortRect": viewPortRect}); + "viewPortRect": viewPortRect, "selectedNode": selectedNode}); cameraGizmos[cameraGizmos.length] = gizmo; - gizmo.selected.connect(emitObjectClicked); + gizmo.clicked.connect(emitObjectClicked); gizmo.viewPortRect = Qt.binding(function() {return viewPortRect;}); + gizmo.selectedNode = Qt.binding(function() {return selectedNode;}); } } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml index 6fbf17367e0..8623b87a840 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml @@ -32,12 +32,13 @@ Node { property View3D view3D property bool highlightOnHover: true property Node targetNode: null + property Node selectedNode: null property alias gizmoModel: gizmoModel property alias iconSource: iconImage.source signal positionCommit() - signal selected(Node node) + signal clicked(Node node) position: targetNode ? targetNode.scenePosition : Qt.vector3d(0, 0, 0) rotation: targetNode ? targetNode.sceneRotation : Qt.vector3d(0, 0, 0) @@ -57,22 +58,27 @@ Node { parent: view3D Rectangle { - width: 24 - height: 24 + width: iconImage.width + height: iconImage.height x: -width / 2 y: -height color: "transparent" border.color: "#7777ff" - border.width: highlightOnHover && iconMouseArea.containsMouse ? 2 : 0 + border.width: iconGizmo.selectedNode === iconGizmo.targetNode + || (iconGizmo.highlightOnHover && iconMouseArea.containsMouse) ? 2 : 0 radius: 5 + opacity: iconGizmo.selectedNode === iconGizmo.targetNode ? 0.3 : 1 Image { id: iconImage - anchors.fill: parent + fillMode: Image.Pad MouseArea { id: iconMouseArea anchors.fill: parent - onClicked: selected(targetNode) - hoverEnabled: highlightOnHover + onClicked: iconGizmo.clicked(iconGizmo.targetNode) + hoverEnabled: iconGizmo.highlightOnHover + && iconGizmo.selectedNode !== iconGizmo.targetNode + acceptedButtons: iconGizmo.selectedNode !== iconGizmo.targetNode + ? Qt.LeftButton : Qt.NoButton } } } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/camera-pick-icon.png b/share/qtcreator/qml/qmlpuppet/mockfiles/images/camera-pick-icon.png deleted file mode 100644 index 47610f545019763e6dff750a23274f400c5e5dea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@1_3@Ht_%zet5*GAwd()E zRo`Zcgzn?`N(8p;@aw%v|-}chiht3=9nXB|(0{49q;z z2A)2-lQy4!{N(eW*FD$$7#JArJY5_^B*K#u7U(71{V&fUAt52%Ad@E`ed6LDh9@7K zEzZ22XkqtXP-fe2k2$;k@37D~6~NOV)tjW*RlI_e;pEL=@0C}LEEyOW7(8A5T-G@y GGywoX@m3%J diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/camera-pick-icon@2x.png b/share/qtcreator/qml/qmlpuppet/mockfiles/images/camera-pick-icon@2x.png deleted file mode 100644 index 769934ae01c6e1134b5ffae203a7c3fa6d97c884..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_%mREuTp1V`R;~KKYSsUR ztG>-%`)$^$_p?@inzj1ltkv<^NQaSACed>ix{s?`MG-5OT9kbrAytgJ4OJUoZnR zkF<<|Pwu2;o6kRa_V)81%kSHz7#JApJzX3_JdVGeVlC95z~jRFgOR25eSIXiuFK3G z>#XCeKeI(l>M)VIf2p-c`Z?3%)4wDGSf#mRnMw}&KCPToy3l_*H&;kvgahYeE;oaH zlV&R2;P5IC)>!Djpv89H^FxB?`_Y a8P5spPED2EEx^FQz~JfX=d#Wzp$P!I$atp! diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/editor_camera.png b/share/qtcreator/qml/qmlpuppet/mockfiles/images/editor_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..4b2bf93d414a03c4e988ff5bb9917a9f6332a6ae GIT binary patch literal 981 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F6|A6De?2E5btG9$ivaR`?+}M0zg;1n)8Dq& zmoVMPy7qH%Be&8&z72d5yfrLWm>xIEH?SXgexUO8pDSL{9lw~b{Va48xZu3&gwf)w zi+lEPS@4`;kYf_=2@5|RrnluMzsLOh+K*&6Xn5Bg$avZqdBAgl`G)08yY35IZhgj( z+_3w=rEf+e%aO-Al*~L+#8d7t(h5n^HggZ+nUeCE`RnPC|P`U=aJoO4`?P#uz4jI7$5Gby=}!( z_K!)P+f|Q#-o@W8mhWNnOJ&i%iIe^b2X52IWL8%BtE~M0edp_+f?v;0{!-#{bI}ss zKkAw5d;Zi4U)Nsqx!LH`)&o}ZVJ}%P)qdMPz0u8cddidkW`%c!Ez;($*A49~-8bKd zBauhOAS$*~Fng|i&fNQ{bM5D)Ca4RD&27E*Q}^0W{-p`MrFEKBd$s02Jj>FcK%NmzY{o!HC+j91zo25g?vRQ0$(re8a539QLTdnkvstB~q zeSc)NUdonTsav9y*wgB_eO2~k-Zr&n>a(C~&E! zh`O8q*7({_ffPMvGu3UI&Sq>>e%%xCy!!OC(y4QrRQ^XiHxD>qW$*IsO6%m0-%mR* uzOJ!2_S5i8jN9tQxz3?}ettFw{tG1kGBHVg_LqTyfx*+&&t;ucLK6T2-qG3s literal 0 HcmV?d00001 diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/editor_camera@2x.png b/share/qtcreator/qml/qmlpuppet/mockfiles/images/editor_camera@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1c690433c2b54f457ba338aa8b5518233d031d9f GIT binary patch literal 1742 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4rT@hhO2JvTnr3MwgEmNt_%zeGgrMEMWZ1= zMhJYc5nj!}z_70*$S;_Ik%^gwjh%y&i<^g+UqDbuSVUAzTtZSxR!%`tNm)frLsLsf zS5M!-(AdP(%+lJ%&fd|<+0EU<)63h(*Uvv7BrGB-HZDFPIVCkMJtH$GH!r`Su&AW0 zqOz*4zM-+DwXMCgr?;`A>maW^i@7%R} z@4o#94jwvs?8M1aXU<=^c=^h;>o;!Rx_#&F{RfX8KY9A>`HPpY-@JYI;p3;zU%q|+ z@$=X3KY#x{%X}Tgz`)$(>EalYaqsQS>+!;oA`ScsN=l0sC6!F=L8d-7~a zLGwEWkF7gDN}raieBk``*QCBl42iY zw^x5jEGRp{sc?PAPlgRgA06Mn(r?T5^^Km#?rJye*ZEj|o#ljYuif2C$9L4udfHmW z_~7U-My0!AVcWQU)c#vMm?ru!slnU!wtk|c!-Rx8_M9uW?0U7@s-cyE$LQUB?m3$e z__Nn6w(3h>&6p;&UyyEbMzyBwqu|??ymrRiGW@hfv%pc$89yo3n#kesDXR z;~rbC9MACmI)e@W%!=+=jQ6LU`_M4!^-rD!CcZ8zcHeCe=-lLga975}uxe_I{CIQgFB86XXYx63J(_l;(<3MF z!Gg6#;eOX9mHvLu!nb#I@5irPk5@lB@>_Q4v#oDWvMSEb-ZA%|Z$+rV^C`9UEh_Wir}W!7^{6AZkvRO3gBz#gR){XPzL$IS|ylV|LT>zlBifBJ_C zX_j{1k7k@bAGdK#`Xuf9Dv;YxY>(Mmcik5{F^$>wU%?OY zsjPnwcE;XI&=ByH%duo@y;JY6^Cv@NgXSf#Kj*kyj{SMO!6D^bY&+{E)!$1uGfk9p zl}l$;V*bzYr_XNQoPc-t-`XuHJ>2`>yM|52vte(?vZ*o*3=9mOu6{1-oD!Mmockfiles/meshes/scalerod.mesh mockfiles/meshes/ring.mesh mockfiles/meshes/ringselect.mesh - mockfiles/images/camera-pick-icon.png - mockfiles/images/camera-pick-icon@2x.png + mockfiles/images/editor_camera.png + mockfiles/images/editor_camera@2x.png mockfiles/images/light-pick-icon.png mockfiles/images/light-pick-icon@2x.png mockfiles/images/item_selection_active.png