From bbe27ec671d83a98ead5058215388bef33389e72 Mon Sep 17 00:00:00 2001 From: Ronan Le Tiec Date: Sun, 22 Nov 2020 12:45:38 +0100 Subject: [PATCH] Nicer rotate cursor --- src/app/puzzle/share/resources/puzzleicon.qrc | 2 +- .../puzzleicon/64x64/cursorRotate.png | Bin 1635 -> 1452 bytes .../puzzleicon/64x64/cursorRotate@2x.png | Bin 2938 -> 2838 bytes .../puzzleicon/svg/cursor_rotate.svg | 79 +++++++++--------- src/app/puzzle/vpgraphicspiece.cpp | 46 +++++----- src/app/puzzle/vpgraphicspiece.h | 3 + 6 files changed, 70 insertions(+), 60 deletions(-) diff --git a/src/app/puzzle/share/resources/puzzleicon.qrc b/src/app/puzzle/share/resources/puzzleicon.qrc index 83dde8c8e..cf7527f52 100644 --- a/src/app/puzzle/share/resources/puzzleicon.qrc +++ b/src/app/puzzle/share/resources/puzzleicon.qrc @@ -9,12 +9,12 @@ puzzleicon/64x64/iconPortrait.png puzzleicon/64x64/iconGrainlineVertical.png puzzleicon/64x64/iconGrainlineHorizontal.png - puzzleicon/64x64/cursorRotate.png puzzleicon/64x64/iconProperties.png puzzleicon/svg/icon_scissors.svg puzzleicon/svg/icon_scissors_vertical.svg puzzleicon/svg/icon_scissors_horizontal.svg puzzleicon/16x16/roll.png puzzleicon/16x16/template.png + puzzleicon/svg/cursor_rotate.svg diff --git a/src/app/puzzle/share/resources/puzzleicon/64x64/cursorRotate.png b/src/app/puzzle/share/resources/puzzleicon/64x64/cursorRotate.png index a9ade2aee24b7949c0e842cd8722883b286671cd..831f77ed0f64e814e97bf13e33879215764ab62a 100644 GIT binary patch delta 1397 zcmV-*1&aFP46F-~BoYa5NLh0L00&_J00&_KmBYBUkwz$gIY~r8RCt`_n_X-bMHGO) zmKH?BOR=F9siK4cBGMpH6Qc>*Xs8jRiP6L#g3;hh#h9SR7augBJ{TkVpu|7?i4hY` z>Vrg!KZ#ai5F|pY5v@XqNU23ikrsM=IJbJ;?wvWacW1VgFF9$_yXVX~v$Hd2cFw{n zPDKW7Rs$D*0rfylLCz@r)(i9jdw>q$fNy6)biipqGq40$3^W%0r=bUE2igj z1$c$9fk$N@aEtFi<7h%=>@0&XmY2{^uw}Cn81x)}P!ib&oU08Y$ud|0tN|WLpgYVU z@I9~>S^Il|2}nLr56q>!nSKv&EzqgC_+m%nFOuxeYzH1ia)I%RcBTQhBJ)d zP!rH*WNp=qhQ}P87yw=c=4l);a5}I8xudR=<4l|JrwbQv0_qIc-Q(E!M&NvhAT?A1 z%YprW4t{h3Q%y#1D!TZ0>w3af^qEId+TYyRF$K=dy=x$bjbDZ*Gg<_oaqF81E@+`U=HiBw&&rwwF z@)k-mCZOAqUK6MMxk522{lJ$<&)<&h&$D>VR?L;yAB7L&6rZ#xX{8656rTW=0cWQk zqMdgwJ`N(O_W!uiqLf6sfmOgbA5j`uh5-h)1qXO9h8_|Ga`pQO%Z%)AT0b(n)60&0^OZUP$8@zE%A%)B|-$mS^gJfVCP! zIp9Iymxyvd=9A>CiQCUa#kiZzA$QrdHGamA?`6|~RGXTD-)1vX4g6*?avZoUb@$6> zBlf$0ug1`7g`r&ptjbbw2X>$LqTJR`LW&)121mSB%7}TuU)cR!u+-OmmjkMYL=Un>mfkvGGCS#SFP-6mJko3A8`Ksg(q=ujy$v!6|v-+HZ{YIoZ)Rp5%@NXpa(aL1tBiu(q2d`oT8@^WGdvV0vb{Ov*xEjp3J>sVkvPaXaNhQ8i3KwVJC00000NkvXXu0mjf Dr(~8| delta 1582 zcmV+}2GRMf3*!usBq9WJLP=Bz2nYy#2xN!=000SaNLh0L00&|K00&|LIC`1ekv1rQ z;7LS5RCt`#+i8p?RTaST-}E$eGn$rV7#tMB<_t#JL=c@$j0=#kg(W5gFzP46e1Nb= z68)etCIl1xKoE(78WW8stcj99SQ8f6A|Vh+7$-9#1_o%RyWi{So`w(SJ*R2vR#&~M zdhhv9ZaPy_b?!N*?mczyx#z9Ye>UKM3>=4zI27x!fcHCpr|}A&z;k%M^Y8y#PQcCh z59Tlrf2!2uY{xvz!QcpZ<6=)P4rU^n)`;T?Hjz)79!t5=ZQWfm{tTx{>bj-EIY zZ^{pHGo5>WfTK#t9>tgOv(EF=!XYaK%D3^wYGxH8Ad(NuZXD*|7O3b}1CA!0Z@z4hPp6v8Jo9KIKjJcqJ{t*Eu6|iP;rSUa6v@%{p#whAfvcNdP*$f zEwSgQ%tg}Po)e$1L2 z3JTdMK7m=R!9OZ0*(A4riNLpN0-2W${onJoI2d8t6^OyQ`a4md1veYeQ<4?8a>uCFQTfQiKQIkC$c zcDBlnVdJCt1wOOvKX!^J+2zv-!3+32z9m+J-7IhSM5iSjG~cU#<_$AWEMa>+yqFix znp)C!ij~#^-VvGNLGvRq0~qQ%u3LWd8vI+e zsW6N64H{IIi$!36&WcedXFc#Wy-$T{k(eAN?w0*RTXItOw@GJL^8(+ic|r%kI_a1B zVBUihVux480WEyB0VAq#gY1~L6Bn-Z@EMAag0@IM4HNszPvR8H3I0hjCk$KQBVI_B z?sH<{SBU+^S$m%GGq}1&#p~ca`6on2lo57rj<7|Ma2Te4YORf8h^I#CFMAPshioUb z@%73obBv5dNe>(%D#udi7gP8|FM<#BQLoP7u8IneiSn1-xVNIL!|d7jr>5%nt8{Ro z4@cFObe^CHlVStbJ!!7ufK$Z_N*UkA-_=kQ_BVSlFzIYHA8u8 zin|NQIS^OiHN^@l+c>kNuC?=Bdvc6<%HEmr?5L=16 z`$b4rn-@mEj%%=Q^CspqF1EruH8TQsi6!p5NNwMQP1400rK#&PI3Y^nuk6U|r8Is) z7~2+qE4;0ERs_{2#9JSF4#3Za5qTBdS?%`&(6=!T!R^ZZT<-P(=-D_&i%m|E&*N_g zq+?$=2@lBssmpH$rd=P|gr{Y%6mK1%UVZ1A;uLAABZjHix-YC2xrH}Ge7I$>>I{y( gahV=V*sJmZ)e=K|IZy?J00000NkvXXu0mh|g5jPV8~^|S diff --git a/src/app/puzzle/share/resources/puzzleicon/64x64/cursorRotate@2x.png b/src/app/puzzle/share/resources/puzzleicon/64x64/cursorRotate@2x.png index 0bde89ddb33bdafa5bc1c313903123bea9199419..4cb07973bd0b4ac100d9d6dc3456abf7dac3e6b1 100644 GIT binary patch delta 2794 zcmV7t3{D?X zF-;VvGv#3E`bEgM3L+-3EFi=#yX?FDao(M!b$6fpJont^^ZsVe>-%OLo1#klJF<>Sz184?DI?(f9WFb5aJXMxm4)k~er~u9YZUbIKzLh-*NC|iz zxE(ml>4-f5oCe$t>>!y550Xv50$`#m2NaPJ!1cg?8j_!2Q|Sg)1J{=A_e7u`m=EkE z`3bd=UBFF1t*(3W%V^+E;2_CQo{NQ0r{}7CQ3HGjdHqUyvRq0l@Lix<$8GuG65th* zpPV>lE%NGGXx7g!umxBRyAW5KkWG-+7eV;9eVoU>O z@%cY7aKgeT3_l-6c4GF+lVzr(|EACdoD;>E&4voz1kO9=bH|~-t-BFl}YFxepwktc@+`>N@DU`k*!vboMzUHrOXba{BMeiO{Eh! zH;j=5;5;OMLBqcr2@xB(T}f#e`F04$6p4lC`Pew8aJHgS6Inq%i&SV(#o!_Ou<|^H zejZDF37fm|4}C#2BDoG4{=US2ROu!qg+Vemq%(@jb?Er}AEpYIC@D0Nt-x~RIp7@p zx%q*pKqgPa-!n`UepN|X6gdjKj6@~pBa1>U`7y&ZqZ4p@$VAx(6clO7VWa}reZV!? zXDekDjTE~!48Bm6r2p8~0c26!4}6|tY#cSBvwi#-6J@Iv6vZV6fghlMm&}@GevZAr zR+uQdO+k@sDFMGmPU;keldz8v9>HM4?NUo6u4N7IQDe8|i{D`Hzb^(U8ACEho`Pg2 z5jgY{TGK*&~)pv}7ePIi!>F&QGxS z>*+yCzM`PSMp}rN+*kmA&c@!q-waaHte_-{>_MV{DkooaN+ps+W8>%LCQ9~ODhVT< zNMNTvl1qxm3hey7*+j`-EtQzcO5`2aW6pf+eBO;gBaK@vl?2HK;Ns{$C^Q;-HfIJY zxmZETK(Yrp*YEH1(Wyk**4WI$=Yo`sMmHeTiEK$0HTPee7qOdvj~@m_)b=A8LK-{{ zd>F|$XjQsq(J^|E8-ga2km}QxN;V>U3l|{C9v(exznqOO7r;K?2IOJo&k?WT8Jew@ zpEs(sGL7)B7t8P&zi|*$*C9w=HBnNDc`g6Pkt*Pxc$kIV0x*6S3##{5sQGr((qegR~cbFn`nx6Uts>@v&p z^M~-afJ`&X^7H=&di(;&CZjPp+ZVt;q1eZ)v&`k#r_?{CVTdOgY)@>JuxKz975{6a z!+7k=#JtpdG1rq)fg~>e9cf76vFEec|NO7gFk~o(BMqEirf=14z~>U!QiXYMr=et~ zD+BA0Q>#0F22p&GE5!xjD(ol!4IG@woCMrWaDmAuwG|hL3Z$Wy?E<({)2NRlT`}hfu1^@KXh2dN8biUGHHjI{v;-%b=6dsTxuOKB;9? zPPr1D$?rtDsJ3m1vR>H@OwcqeM@&JlOy6Q{qt& zK^CFwyB^>daSi|^L_AmyfQ>vze%ry-A`_+UvrQz_T4y>Eanc@83lbE`6Q>|~dD_0} zz&>5viUk80r6GGU?0A_0u0dYUT=;2TjN=%8kV@b$xEWjzl6(?-Io4n&(?Y3X3Ob1+L&;VoW{}qN2Gzjz=*CF~k{!Ur zn8p-}=}5yzmxJ#?%F)jyJ=IEUkTVe5a6k5a$i`f1nS)Nta}(JG+yi_tmXW=avw#PG zkO$T{#@mj={C-V7MSP2(SJoo+ji=+TFHtp8q~TWNS18W$bpoH(7(`szxtAlY-m7EM zcPwql(XuVvI#%`yC{IKS?g+ zAaEDZpyjZ<(uABOj$>yr4mkk)2&JRiMWO+?1^0Odu4EUoar7>2#}thb$O)oV=p9gX zB}ahYA;;j8*a*u#3$P&_Aa~_86**!X(h@2=|ifo+3Iq5rr<-ixnSUcT3 zSLDefPtt+_V*_u3#50?zZQu< wjG`}R{|J)a)e7uEatF4R|J~#9cyhr100sCRohJsulK=n!07*qoM6N<$g87{|{{R30 delta 2895 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 - - - - + viewBox="0 0 128 128" + sodipodi:docname="cursor_rotate.svg" + inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)" + inkscape:export-filename="/home/ronan/Workspace_cpp/valentina/src/app/puzzle/share/resources/puzzleicon/64x64/cursorRotate@2x.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> + id="metadata899"> @@ -52,16 +29,38 @@ + + + inkscape:label="Image" + id="g901"> + id="path1502" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16.112;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1" + d="M 67.494019,3 C 45.635979,3 26.4721,14.832798 15.842825,32.458789 L 0,20.886257 10.290418,67.03627 50.234036,44.059307 30.104959,39.845618 c 7.88695,-12.507886 21.673605,-20.733626 37.38906,-20.733626 24.548563,0 44.393991,20.068893 44.393991,45.180711 0,25.111817 -19.845428,45.178617 -44.393991,45.178617 -18.793455,0 -34.829896,-11.76047 -41.31635,-28.542147 -12.799702,5.691961 -3.295568,1.770075 -14.669238,6.556583 C 20.55829,109.77568 42.229103,125.58331 67.494019,125.58331 100.88055,125.58331 128,97.98361 128,64.292703 128,30.601797 100.88055,3 67.494019,3 Z" + sodipodi:nodetypes="scccccsssccsss" /> diff --git a/src/app/puzzle/vpgraphicspiece.cpp b/src/app/puzzle/vpgraphicspiece.cpp index fda68e039..c0973ce34 100644 --- a/src/app/puzzle/vpgraphicspiece.cpp +++ b/src/app/puzzle/vpgraphicspiece.cpp @@ -31,13 +31,13 @@ #include #include #include -#include #include #include #include #include #include #include +#include #include "vppiece.h" #include "vppiecelist.h" @@ -61,8 +61,13 @@ VPGraphicsPiece::VPGraphicsPiece(VPPiece *piece, QGraphicsItem *parent) : m_internalPaths(QVector()), m_internalPathsPenStyle(QVector()), m_placeLabels(QVector()), - m_rotationStartPoint(QPointF()) + m_rotationStartPoint(QPointF()), + m_rotateCursor(QCursor()) { + + QPixmap cursor_pixmap = QIcon("://puzzleicon/svg/cursor_rotate.svg").pixmap(QSize(32,32)); + m_rotateCursor= QCursor(cursor_pixmap, 16, 16); + Init(); } @@ -276,11 +281,24 @@ void VPGraphicsPiece::mousePressEvent(QGraphicsSceneMouseEvent *event) //perform the default behaviour QGraphicsItem::mousePressEvent(event); - // change the cursor when clicking left button + // change the cursor when clicking the left button + if((event->button() == Qt::LeftButton)) + { + if(event->modifiers() & Qt::AltModifier) + { + setCursor(m_rotateCursor); + } + else + { + setCursor(Qt::ClosedHandCursor); + } + } + + + // change the selected state when clicking left button if (event->button() == Qt::LeftButton) { setSelected(true); - setCursor(Qt::ClosedHandCursor); if (event->modifiers() & Qt::ControlModifier) { @@ -295,12 +313,6 @@ void VPGraphicsPiece::mousePressEvent(QGraphicsSceneMouseEvent *event) if((event->button() == Qt::LeftButton) && (event->modifiers() & Qt::AltModifier)) { m_rotationStartPoint = event->scenePos(); - - QPixmap cursor_pixmap = QPixmap(":/cursor_rotate"); - cursor_pixmap = cursor_pixmap.scaledToWidth(32); - QCursor cursor_rotate = QCursor(cursor_pixmap, 16, 16); - - setCursor(cursor_rotate); } } @@ -309,6 +321,8 @@ void VPGraphicsPiece::mouseMoveEvent(QGraphicsSceneMouseEvent * event) { if((event->buttons() == Qt::LeftButton) && (event->modifiers() & Qt::AltModifier)) { + //FIXME: it flickers between the arrow cursor and the rotate cursor + setCursor(m_rotateCursor); QPointF rotationNewPoint = event->scenePos(); QPointF rotationCenter = sceneBoundingRect().center(); @@ -365,20 +379,14 @@ void VPGraphicsPiece::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void VPGraphicsPiece::hoverMoveEvent(QGraphicsSceneHoverEvent *event) { - if(event->modifiers() & Qt::AltModifier) { - // TODO FIXME: find a more efficient way - - QPixmap cursor_pixmap = QPixmap(":/cursor_rotate"); - cursor_pixmap = cursor_pixmap.scaledToWidth(32); - QCursor cursor_rotate = QCursor(cursor_pixmap, 16, 16); - - setCursor(cursor_rotate); + //FIXME: it flickers between the arrow cursor and the rotate cursor + setCursor(m_rotateCursor); } else { - setCursor(QCursor(Qt::OpenHandCursor)); + setCursor(Qt::OpenHandCursor); } } diff --git a/src/app/puzzle/vpgraphicspiece.h b/src/app/puzzle/vpgraphicspiece.h index aefcca155..f7238a759 100644 --- a/src/app/puzzle/vpgraphicspiece.h +++ b/src/app/puzzle/vpgraphicspiece.h @@ -30,6 +30,7 @@ #define VPGRAPHICSPIECE_H #include +#include class VPPiece; @@ -105,6 +106,8 @@ private: QVector m_placeLabels; QPointF m_rotationStartPoint; + + QCursor m_rotateCursor; }; #endif // VPGRAPHICSPIECE_H