From 3dd5e089b10c89446f34b01a0f535aa936719cb7 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 18 Nov 2019 15:02:07 +0200 Subject: [PATCH] QmlDesigner: Add UX approved light icons for 3D editview Light icons have a color overlay that indicates light color. Change-Id: I5f6d80f63d0916dd7cb7b2d5345d586aacd550ef Fixes: QDS-1209 Reviewed-by: Mahmoud Badri Reviewed-by: Thomas Hartmann --- .../qml/qmlpuppet/mockfiles/CameraGizmo.qml | 25 +++++++++++------- .../qml/qmlpuppet/mockfiles/IconGizmo.qml | 21 ++++++++++----- .../qml/qmlpuppet/mockfiles/LightGizmo.qml | 17 +++++------- .../mockfiles/images/area_light_gradient.png | Bin 0 -> 1054 bytes .../images/area_light_gradient@2x.png | Bin 0 -> 1268 bytes .../images/directional_light_gradient.png | Bin 0 -> 1420 bytes .../images/directional_light_gradient@2x.png | Bin 0 -> 3367 bytes .../mockfiles/images/point_light_gradient.png | Bin 0 -> 1177 bytes .../images/point_light_gradient@2x.png | Bin 0 -> 2634 bytes share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc | 6 +++++ 10 files changed, 42 insertions(+), 27 deletions(-) create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/area_light_gradient.png create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/area_light_gradient@2x.png create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/directional_light_gradient.png create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/directional_light_gradient@2x.png create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/point_light_gradient.png create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/point_light_gradient@2x.png diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml index e158128a5fd..3b6badbb281 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml @@ -31,21 +31,26 @@ IconGizmo { id: cameraGizmo 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 + Model { + id: gizmoModel + geometry: cameraGeometry + visible: cameraGizmo.visible + materials: [ + DefaultMaterial { + id: defaultMaterial + emissiveColor: cameraGizmo.targetNode === cameraGizmo.selectedNode ? "#FF0000" + : "#555555" + lighting: DefaultMaterial.NoLighting + cullingMode: Material.DisableCulling + } + ] + } + CameraGeometry { id: cameraGeometry camera: cameraGizmo.targetNode } - - gizmoModel.materials: [ - DefaultMaterial { - id: defaultMaterial - emissiveColor: cameraGizmo.targetNode === cameraGizmo.selectedNode ? "#FF0000" : "#555555" - lighting: DefaultMaterial.NoLighting - cullingMode: Material.DisableCulling - } - ] } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml index f41fbad0be2..ea6c17a1c3e 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml @@ -25,6 +25,7 @@ import QtQuick 2.0 import QtQuick3D 1.0 +import QtGraphicalEffects 1.12 Node { id: iconGizmo @@ -34,8 +35,8 @@ Node { property Node targetNode: null property Node selectedNode: null - property alias gizmoModel: gizmoModel property alias iconSource: iconImage.source + property alias overlayColor: colorOverlay.color signal positionCommit() signal clicked(Node node) @@ -44,13 +45,9 @@ Node { rotation: targetNode ? targetNode.sceneRotation : Qt.vector3d(0, 0, 0) visible: targetNode ? targetNode.visible : false - Model { - id: gizmoModel - visible: iconGizmo.visible - } Overlay2D { - id: gizmoLabel - targetNode: gizmoModel + id: iconOverlay + targetNode: iconGizmo targetView: view3D offsetX: 0 offsetY: 0 @@ -58,6 +55,7 @@ Node { parent: view3D Rectangle { + id: iconRect width: iconImage.width height: iconImage.height x: -width / 2 @@ -81,6 +79,15 @@ Node { ? Qt.LeftButton : Qt.NoButton } } + ColorOverlay { + id: colorOverlay + anchors.fill: parent + cached: true + source: iconImage + color: transparent + opacity: 0.6 + } + } } } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml index 888b2fce5cd..de6deefb943 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml @@ -29,14 +29,11 @@ import QtQuick3D 1.0 IconGizmo { id: lightGizmo - iconSource: "qrc:///qtquickplugin/mockfiles/images/light-pick-icon.png" - gizmoModel.source: "#Sphere" - gizmoModel.scale: Qt.vector3d(0.10, 0.10, 0.10) - gizmoModel.materials: [ - DefaultMaterial { - id: defaultMaterial - emissiveColor: "yellow" - lighting: DefaultMaterial.NoLighting - } - ] + iconSource: targetNode instanceof DirectionalLight + ? "qrc:///qtquickplugin/mockfiles/images/directional_light_gradient.png" + : targetNode instanceof AreaLight + ? "qrc:///qtquickplugin/mockfiles/images/area_light_gradient.png" + : "qrc:///qtquickplugin/mockfiles/images/point_light_gradient.png" + + overlayColor: targetNode.color } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/area_light_gradient.png b/share/qtcreator/qml/qmlpuppet/mockfiles/images/area_light_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..bd6404a36c9dda12ce6e212617a6d08e2930a281 GIT binary patch literal 1054 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F9ehxU}5hx&Z^?`~=bL5p?xh3rr=ACJuP!wdcX_v9(V_hA?w`vlS9h}=wOc2?V zqF~Wuz?b}>Ss}$ZIg-P&`OMsv+Rq=R{JuT!Mj_AT;xB({uIH^?{(1BMt=FyY+f~>9 zmZ^CY@yYPz`Sa)RD=fX^?ZT)utIKV1`*hVtz33@ZrmRt1RO_ySlnUUA9DX2pY`)qBeWk)r%Ql4DGfw7Fg_=)3NES;=*~K%-9eA(r4IuS-m@J z!OE4IQ#~+q_wL=Zv#gyIz?_?#tLgHkS2K*ab1sA3cgM=jTeog4 zf7aR}`QpWk9Ud-A8N!SL|M4qW{C*Uq_UZeDn>Tk#I#@2QXf@W=)%|~V-wXj}hAf69 z2A}?NJ(zZtw~RS9Hufe1pFz;RF#S9gA;UF!o1|X6dlwd*Fk`atfu+x$Jxkm@`;O!Z z)(y=Q-**}r#50>Q+uGWm7JGGuxl2k~TKzfq<1-G54ZS@z+oh$Xs>HI6BrVv!y_~h7 zSSCg-j=|#X62)+~ko46vcZf87{rc5Vowru{#p~D6xm%rn9mr=;@;hv4B*3&`j^~~L z{k+)NxliZhv&OUi`u+Q=_wTv#eUUq2f`dP|&t}*!xgt%6V?NW0BIzeL4;(nqu<9v) zW$*R_A6Knf6`t4pC#7L?%8ua3$e-QQ9sJqY*x5rjZaeM0hBc1K;;HG4t&Iy8E?kADxAh<3hs1mK6(F8W~twt=i`~ zt)PVCL0)F&%kw@leZ~u>{RnCMr^YZR=1P;K4zf=P{0 zZT~synJgkAB5u5xoX+>m)WFVeAOC?m`9Jl{7OVC>6&De?^I83>)V8GsI%3gEOV`9I z+~X5YTUo2Cuiu}#tuU9tL9QWJ?`MeRodrjpKYOQ7mv zox1w-pGh3^+hWzopr02%Dy>;M1& literal 0 HcmV?d00001 diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/area_light_gradient@2x.png b/share/qtcreator/qml/qmlpuppet/mockfiles/images/area_light_gradient@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..463f3ac481ef022c6b806f9cf6d7e12924524fd0 GIT binary patch literal 1268 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4i*Lm29JsRH#0D>?DlkV45_&F_U3=@yQLz> zKW>jNx~rDD>6GdAj0;JZ6OMKyNVBb#*qG|)Vlr{h?v5EVGN$pK?VLH&%5c9z^7YP{ z!p5=Xi*C3c`I45l?8IHYduQ_A`T5*^`)vE|ulHWBj{lXo@$8o>i}~kSlg;gNQc?QHXaB(P;VOqz7pK%ey%tB5*e-TB zsVLcfYWOf^?n(8@UBdN2Yc(e}RNP@SaCtMKu%a!#D&p49EB~fkO;J%4)VjmUF*&tj z+xeZ!k&!d+r>$9{%)8R#U@gP+RIz#Qr;5*-J*(LCb`@Xb2^Y3&tY_TcPV%j~_|GZy z;M6}eZJsEx-@GC4AXl%|TPm+Zj=4I$}9?oW3eLf^KOyX2vTaZZd zWrpfAnmE3G;ihCzoo0U20T{E+MwECIPLw{ z{JR$?U0stKmFdF#Dv(|1fOgOJ{IeO3#1(MsfF+xJu7e7+ALAfWVrwG z>c{R$4$QBgUzWVe7}TKpvhdiSb?jF4ifk&I?(Kg)*KYz-$;mnE_g~xpnm?#PS+(Ws zzgv6sCNSA0o_)`ENpB)kop0y|rd3-NSoa*8b-#GQZBMR@q<=4Od@eQTV7&H4;o6^j z)2ke~Jd*a+zb{|X@ZNY&HpdB! zb9T1R{Ma0u6*-d-dmnkGGWDqcFTBq12ccN0gsDBN}OO2zww#3`iq&- zfwM{Vbq!JcMh9lU`T1CpOu|xFefK^7;86jQ%;WN$7ol z$nGNL$Wjn0lX!mqm$?R$811G%IA3m5$>hRNeD&~~pKAY4N*W!I}H_SN-UR|j@=#;m)F7aR+!+jnZp-;CDCBDAJ#;|MQVyAi0FE%}@XE1j= z)EcwBB8l-e)0yOS_uACi``>J}*u!@qt0I2AK+(NV(cL@v52WeH)rXv@HrxO7WHnRF zBf>VpcEikZz}DllqNG`X95w85fT8Gaq~YJ|)`_UA!tX z{-I}a%%;cj4OeHS26CLA^?JeK%y!<>+m23Zb$D1=oGG(m{Y^dn_rmimWQq?Ko|V(G lDb*;H6~BFZUi5GF3DR-1-kHcqF)%PNc)I$ztaD0e0suf8T8jVx literal 0 HcmV?d00001 diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/directional_light_gradient.png b/share/qtcreator/qml/qmlpuppet/mockfiles/images/directional_light_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..f3c013e157d2b87df24b6356c3160b52728f58ab GIT binary patch literal 1420 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 PFfe$!`njxgN@xNAF`{Ws literal 0 HcmV?d00001 diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/point_light_gradient.png b/share/qtcreator/qml/qmlpuppet/mockfiles/images/point_light_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..5136b39fc2f37b80177f3d2b6d5d99b374298af8 GIT binary patch literal 1177 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4i*LmhQHi~JPZsh37#&FArXhy&dAP?2^Bg1 z-}v{bH2J%36MkhZ_2_t8ep%m6OG1l7jAi1fB(JmVoldvvZuUPC&#YM*m6a2?#%W*1 zCXxB8ul|bY4sy-i+Ld`JEJtVUi?s4G_1U#m?~=>Z4zuN#J(trf{(ffX^YU{$&5g?! zIWPU1D6;;c_L)ceF~{;PIz4TcnF#;-9~IN@Y|(xA$p^nLkJ;|D+%DjkQ-8oJbD;Dt z)3=B0HlBW!mmfS{)H#3l#6#v4ONt$u7S%LbUKem;DGXZkc+!HxmJ*g%#|>rP@Ju)m zsMWnp*+=iO%CzD_(OCvx7><2NQ*RLeC~)Dh?9F#`lkUD`l#8|PzRK`>WAtJp7s1Du zUqxa zA=|27&WE!aaush$@(8xYt|()Ol*v1p*0N2L(TSPq!I?vQCqG*IS9$Ssp*xFMIPOTe z2>5kGa9Xnq?iby=f&1c|2WqAcN(XwP1;Q9s`&?7%ei6NN;^(L-8%{8?v3J;5Jjwd{(sbWsZT3^4 z59>PJ&)>N%X~1$i$y4c+`##(4ZU_2jeyUdb6~sLuzmrv?Q>QN8?#98LD{79c>AJPP z=l;y*i0-A^{hnJf{Q1-Qv$E4Y)1zUt3+uY4-}PrsmX(t|`*@MXyB}|5Di)@ldt$|M z##c;#Cu4VBLuA$B?!)E&fsVJ>KH|gN(WVX7F5Bl3udaLJ&J;5<8IqgG4 zQB8@BW!?23y6v8u56@ojb9`YnbFIZ4?^@>G(AiQ6eD9TFz4e#(ev!X2J=15F<$H$D z6=FB%Z&Kf6eDnIs`3np)pY7GT_;yBzZ_eBu$&cz@MQ8d*RqSCCwEB^EMBpn+@7`GE z2hJ*IQ}ikgf7*SO>Ggc9nIIP28hqI~`S$l5dFfepp)-_vud6Ql@5}RErm`~Sxk0au rzF>Cuj!pk=t-bzh-35=Gf7#znmtqs1mDj|;z`)??>gTe~DWM4f9}_6A literal 0 HcmV?d00001 diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/point_light_gradient@2x.png b/share/qtcreator/qml/qmlpuppet/mockfiles/images/point_light_gradient@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ccbfb1c8466ae4c95ee4f551786c5bfdf9d6eb1d GIT binary patch literal 2634 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 b|M*Q0i|su+`_yIz1_lOCS3j3^P6mockfiles/images/scale_active@2x.png mockfiles/images/scale_selected.png mockfiles/images/scale_selected@2x.png + mockfiles/images/directional_light_gradient.png + mockfiles/images/directional_light_gradient@2x.png + mockfiles/images/point_light_gradient.png + mockfiles/images/point_light_gradient@2x.png + mockfiles/images/area_light_gradient.png + mockfiles/images/area_light_gradient@2x.png