From b1dd09b2ad84f2f5f183ec59840f2044a9ab0aeb Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 22 Nov 2017 14:01:08 +0100 Subject: [PATCH] fix context menu --- img/contextmenu/btnHole.png | Bin 0 -> 16411 bytes img/contextmenu/btnSolid.png | Bin 0 -> 16463 bytes src/components/SketcherToolbars.js | 30 +++++++++++++++++------------ src/reducer/contextReducer.js | 3 ++- 4 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 img/contextmenu/btnHole.png create mode 100644 img/contextmenu/btnSolid.png diff --git a/img/contextmenu/btnHole.png b/img/contextmenu/btnHole.png new file mode 100644 index 0000000000000000000000000000000000000000..5143479f06192a0904df3245331cdc880a6dfc18 GIT binary patch literal 16411 zcmeI3du$ZP9mm&(HrUj~KpGxN$#TRYEm`mGz4mrFAGLipHt`u_Ux-N`cyD*kUbwqG z?$+FyieO=+s8JfCf)#Lh6%eJN;!!mvDFK=Q3Xr4}QUXdNL_wuMNK>i26PnK6+vD@Z zk@82S?#aHr-~8tH{mp#lwfo2Ztf_HkN%6#Df*?xj>)g%oS_S``M|=~0pI=@Wg_ojm z-8^_5IadEKAo|vgCkW?Z#oMa2dKv^t4VH_t>I3ERU>Mehz8UebC@lmU=>zRbsKWH= zzJn%GktvT25^*clg~KoDpm84m_RQ6XMoO6Usk zw_Z$}$V3%wVTGwuPe`_Un#gK30!UlAosw9KgXH*f*2X)`*2hUR!`f+vr&%k-umZyi z3`?dyCRZ{1<&4OFq1j!VN(Ze9Q-`L71)7ed6s$o-yF!{6 zr$W&wNs+XU8$_ju64n$oMC!VtPwmtyOeQ^1=9B7IFzoSUQiY-^dXOU>7sE7L&d|Xi zoi8$~HG^y;^F~I!U12~sgQ(gWkpQedCBIP3V%WM=Z-*dMvlxW5yi#z?@Iv|W%TgvL z+!+ZZK+6&h0w4(UL?Htn?=A}3M|u(FismwXgwb=Vzt zzsx!8oRc0@COfNAsd7>z*Nm)6Fii%CV72;WiE;20%dlpOWjPxMOXq|S zkamNJvKYv<5jB`tLSZoy1^RTZFs0{nX3eEICl-XD3~W=C-NDyzHH_6>$*^pVy^7(gXJIY14z9*Y4+zb+2Z}qBZb%Uwxs)>dWy(3BS>-f_oURU>Hg!r=QzKnD4!uG8 zrqTiy^)F330?H7HWw^ohFNl)9UAdwnq^<+WDa$rF8KEaiR>%XJH}jI8lg*T!1q@|n zc?acVWs!3DI2l+No8RoSruB2e2hS1f03jFLzd1NjDYMzjS_B&_SS-`@jhsnKC29>W z5>@?LOpJiacDVFh$pfP)y?>C^)%pR!k&k&qNeStj%J@`V zM@N(p^(o?X8~+&!2pCvQ5tJx=1~}17D_< zsDo!>jPI^FDwgJidt@I658^d&Awck^feX(E z@fx@gAb8Wjh3A8K4O|EiylLRV^Fh1@E(8ePG;rbhAYKC(0t9awxbS=suYn5zf;SCZ zcs_{Nz=Z(8n+7gCAH-|mLV(~+0~ekT;x%v~K=7u43(p7f8n_T3c+1LA(Yo1PI>5;wsL*nhZkledHK?@p!c5!g2W0GAY$HdkA7l89{XS5X7A?;PnbY zbTR~SwT&QzH3TtE{l)wvwFFUkvff?kjemHp@7|&dOzDx0p;O(vhR-hwy-8i36`nPs z?8Pzb#xxXd8{WLUrEvA`JBOy7eZOw_?zdii`BxK0jX(C=>#J^FRKljh2hNWhT{^sS zD1V<{HksZj-!!^yYWIlU<2F^?EYS)Zp5}`FyjIu~Y&p1aneXnTmJ_SjEGsHqMeHYf ztCW%z`-z`?{KmP1Yl>nMO4r|+^x@vZZ}HtL2^06ri(B7Q>B6JE4la=*ce+;W-{zh)dCnwu`>5}` zmhHWMLjKe14{vNTAKCT+Ib!*1GjD%1^W4&QTdhfWevbE;^1|FLP4S&C@x3p351+jG zx6ev%y!t@f#)+fWJ@~}2@Q%_4EoX1=i@@;JhfTA3Upf0w+2jL{6u(_?bOD{M!ajwnNu1xX0 z-?2H^H@&-P@$~U6#f`fT9I=`nZh3p^)3@wD|L3~n)?r0Gqx>h=&)IqA+R@#^?mqEu zA+h1POP^S}c99!SSc6*k!JdnUuU+ZcwB&#y(E*EG6!R<$kvFAaVoO8@`> literal 0 HcmV?d00001 diff --git a/img/contextmenu/btnSolid.png b/img/contextmenu/btnSolid.png new file mode 100644 index 0000000000000000000000000000000000000000..47e33dbe58155cf2652b59d6b067bd0775beca79 GIT binary patch literal 16463 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 abCCAUrb^@ZDchw-{+(qD9B= 2; +function filterMenus(activeTool, numSelectedObjects, numFilledObjects, numSolidObjects, menus) { + const showUnion = activeTool === d2Tools.TRANSFORM && numFilledObjects && numSelectedObjects >= 2; const showIntersect = activeTool === d2Tools.TRANSFORM && numSelectedObjects >= 1; return { ...menus, @@ -166,9 +166,11 @@ function filterMenus(numSelectedObjects, allObjectsAreFilled, activeTool, menus) case contextTools.DUPLICATE: case contextTools.DELETE: - case contextTools.FILL_TOGGLE: return numSelectedObjects > 0; + case contextTools.FILL_TOGGLE: + return numSelectedObjects > 0 && numSolidObjects === numSelectedObjects; + case contextTools.ALIGN: return numSelectedObjects > 1; @@ -183,11 +185,14 @@ function filterMenus(numSelectedObjects, allObjectsAreFilled, activeTool, menus) case contextTools.BRUSH_SIZE: return activeTool === d2Tools.BRUSH; + case contextTools.HOLE_TOGGLE: + return numSelectedObjects > 0 && numFilledObjects === numSelectedObjects; + default: return true; } }).map(child => { - return filterMenus(numSelectedObjects, allObjectsAreFilled, activeTool, child); + return filterMenus(activeTool, numSelectedObjects, numFilledObjects, numSolidObjects, child); }) }; } @@ -206,13 +211,14 @@ function nestChildren(menus, target) { const getMenus = createSelector([ state => state.sketcher.present.menus, + state => state.sketcher.present.d2.tool, state => state.sketcher.present.selection.objects.length, - state => state.sketcher.present.selection.objects.every(({ id }) => state.sketcher.present.objectsById[id].fill), - state => state.sketcher.present.d2.tool -], (menus, numSelectedObjects, allObjectsAreFilled, activeTool) => ({ - toolbar2d: filterMenus(numSelectedObjects, allObjectsAreFilled, activeTool, nestChildren(menus, menus[TOOLBAR2D])), - toolbar3d: filterMenus(numSelectedObjects, allObjectsAreFilled, activeTool, nestChildren(menus, menus[TOOLBAR3D])), - context: filterMenus(numSelectedObjects, allObjectsAreFilled, activeTool, nestChildren(menus, menus[CONTEXT])) + state => state.sketcher.present.selection.objects.filter(({ id }) => state.sketcher.present.objectsById[id].fill).length, + state => state.sketcher.present.selection.objects.filter(({ id }) => state.sketcher.present.objectsById[id].solid).length +], (menus, activeTool, numSelectedObjects, numFilledObjects, numSolidObjects) => ({ + toolbar2d: filterMenus(activeTool, numSelectedObjects, numFilledObjects, numSolidObjects, nestChildren(menus, menus[TOOLBAR2D])), + toolbar3d: filterMenus(activeTool, numSelectedObjects, numFilledObjects, numSolidObjects, nestChildren(menus, menus[TOOLBAR3D])), + context: filterMenus(activeTool, numSelectedObjects, numFilledObjects, numSolidObjects, nestChildren(menus, menus[CONTEXT])) })); const style = document.createElement('style'); @@ -404,13 +410,13 @@ style.innerHTML = ` height: 41px; } #hole-toggle-solid, #hole-toggle-solid-menu { - background-image: url('../img/contextmenu/btnShapeFill.png'); + background-image: url('../img/contextmenu/btnSolid.png'); background-size: 33px auto; width: 33px; height: 41px; } #hole-toggle-hole, #hole-toggle-hole-menu { - background-image: url('../img/contextmenu/btnShapeOutline.png'); + background-image: url('../img/contextmenu/btnHole.png'); background-size: 33px auto; width: 33px; height: 41px; diff --git a/src/reducer/contextReducer.js b/src/reducer/contextReducer.js index 95519f5..08f73e9 100644 --- a/src/reducer/contextReducer.js +++ b/src/reducer/contextReducer.js @@ -114,7 +114,8 @@ export default function (state, action) { return update(state, { objectsById: state.selection.objects.reduce((updateObject, { id }) => { - updateObject[id] = { solid: { $set: solid } }; + const { fill } = state.objectsById[id]; + if (fill) updateObject[id] = { solid: { $set: solid } }; return updateObject; }, {}) });