From 1b5fc0cbdfcb4718fc63175343bdeb8eead17496 Mon Sep 17 00:00:00 2001 From: Thomas Geymayer <tomgey@gmail.com> Date: Wed, 11 Jun 2014 00:00:55 +0200 Subject: [PATCH] canvas.gui: allow disabling widgets. --- Nasal/canvas/gui/Widget.nas | 15 ++++++++++++ Nasal/canvas/gui/styles/DefaultStyle.nas | 22 ++++++++++++------ Nasal/canvas/gui/widgets/Button.nas | 6 ++--- Nasal/canvas/gui/widgets/ScrollArea.nas | 18 +++++++++++--- gui/styles/AmbianceClassic/style.xml | 6 +++++ .../backdrop-button-active-disabled.png | Bin 0 -> 748 bytes .../widgets/backdrop-button-disabled.png | Bin 0 -> 448 bytes .../widgets/button-active-disabled.png | Bin 0 -> 769 bytes .../widgets/button-disabled.png | Bin 0 -> 459 bytes 9 files changed, 54 insertions(+), 13 deletions(-) create mode 100644 gui/styles/AmbianceClassic/widgets/backdrop-button-active-disabled.png create mode 100644 gui/styles/AmbianceClassic/widgets/backdrop-button-disabled.png create mode 100644 gui/styles/AmbianceClassic/widgets/button-active-disabled.png create mode 100644 gui/styles/AmbianceClassic/widgets/button-disabled.png diff --git a/Nasal/canvas/gui/Widget.nas b/Nasal/canvas/gui/Widget.nas index 81051b5da..e3a19b824 100644 --- a/Nasal/canvas/gui/Widget.nas +++ b/Nasal/canvas/gui/Widget.nas @@ -13,6 +13,7 @@ gui.Widget = { _focused: 0, _focus_policy: gui.Widget.NoFocus, _hover: 0, + _enabled: 1, _view: nil, _pos: [0, 0], _size: [32, 32] @@ -32,6 +33,17 @@ gui.Widget = { me.setSizeHint([x, y]); me.setMaximumSize([x, y]); }, + setEnabled: func(enabled) + { + if( me._enabled == enabled ) + return me; + + me._enabled = enabled; + me.clearFocus(); + + me._onStateChange(); + return me; + }, # Move the widget to the given position (relative to its parent) move: func(x, y) { @@ -72,6 +84,9 @@ gui.Widget = { if( canvas._focused_widget != nil ) canvas._focused_widget.clearFocus(); + if( !me._enabled ) + return me; + me._focused = 1; canvas._focused_widget = me; diff --git a/Nasal/canvas/gui/styles/DefaultStyle.nas b/Nasal/canvas/gui/styles/DefaultStyle.nas index 0e20a714e..887997428 100644 --- a/Nasal/canvas/gui/styles/DefaultStyle.nas +++ b/Nasal/canvas/gui/styles/DefaultStyle.nas @@ -79,16 +79,24 @@ DefaultStyle.widgets.button = { me._label.setTranslation(w / 2, h / 2 + 5); - if( model._focused and !backdrop ) - file ~= "-focused"; - - if( model._hover and !model._down ) + if( model._enabled ) { - file ~= "-hover"; - me._bg.set("fill", me._style.getColor("button_bg_color_hover")); + if( model._focused and !backdrop ) + file ~= "-focused"; + + if( model._hover and !model._down ) + { + file ~= "-hover"; + me._bg.set("fill", me._style.getColor("button_bg_color_hover")); + } + else + me._bg.set("fill", me._style.getColor("button_bg_color")); } else - me._bg.set("fill", me._style.getColor("button_bg_color")); + { + file ~= "-disabled"; + me._bg.set("fill", me._style.getColor("button_bg_color_insensitive")); + } me._border.set("src", file ~ ".png"); } diff --git a/Nasal/canvas/gui/widgets/Button.nas b/Nasal/canvas/gui/widgets/Button.nas index 5da879a95..769ec43ac 100644 --- a/Nasal/canvas/gui/widgets/Button.nas +++ b/Nasal/canvas/gui/widgets/Button.nas @@ -62,9 +62,9 @@ gui.widgets.Button = { _setView: func(view) { var el = view._root; - el.addEventListener("mousedown", func me.setDown(1)); - el.addEventListener("mouseup", func me.setDown(0)); - el.addEventListener("click", func me.toggle()); + el.addEventListener("mousedown", func if( me._enabled ) me.setDown(1)); + el.addEventListener("mouseup", func if( me._enabled ) me.setDown(0)); + el.addEventListener("click", func if( me._enabled ) me.toggle()); el.addEventListener("mouseleave",func me.setDown(0)); el.addEventListener("drag", func(e) e.stopPropagation()); diff --git a/Nasal/canvas/gui/widgets/ScrollArea.nas b/Nasal/canvas/gui/widgets/ScrollArea.nas index cc434f6ba..64528525c 100644 --- a/Nasal/canvas/gui/widgets/ScrollArea.nas +++ b/Nasal/canvas/gui/widgets/ScrollArea.nas @@ -126,18 +126,30 @@ gui.widgets.ScrollArea = { view.vert.addEventListener ( "drag", - func(e) me.moveTo(me._scroll_pos[0], me._drag_offsetY + e.clientY) + func(e) + { + if( me._enabled ) + me.moveTo(me._scroll_pos[0], me._drag_offsetY + e.clientY); + } ); view.horiz.addEventListener ( "drag", - func(e) me.moveTo(me._drag_offsetX + e.clientX, me._scroll_pos[1]) + func(e) + { + if( me._enabled ) + me.moveTo(me._drag_offsetX + e.clientX, me._scroll_pos[1]); + } ); view._root.addEventListener ( "wheel", - func(e) me.moveTo(me._scroll_pos[0], me._scroll_pos[1] - e.deltaY) + func(e) + { + if( me._enabled ) + me.moveTo(me._scroll_pos[0], me._scroll_pos[1] - e.deltaY); + } ); call(gui.Widget._setView, [view], me); diff --git a/gui/styles/AmbianceClassic/style.xml b/gui/styles/AmbianceClassic/style.xml index 6ec09432d..42ef16fa8 100644 --- a/gui/styles/AmbianceClassic/style.xml +++ b/gui/styles/AmbianceClassic/style.xml @@ -78,6 +78,12 @@ <blue type="float">0.988</blue> </button_bg_color_hover> + <button_bg_color_insensitive> + <red type="float">0.89</red> + <green type="float">0.89</green> + <blue type="float">0.89</blue> + </button_bg_color_insensitive> + </colors> </PropertyList> diff --git a/gui/styles/AmbianceClassic/widgets/backdrop-button-active-disabled.png b/gui/styles/AmbianceClassic/widgets/backdrop-button-active-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed947c2eca39eb650e776c923ae582a1f70d129 GIT binary patch literal 748 zcmV<I0u%j-P)<h;3K|Lk000e1NJLTq000>P000#T1^@s6vnxdy0008BNkl<Zc-pO% z-)mA~9LA5+ZMvjw^h2_6!?x8;gBXi03cRSRf-Zt0h}eCQqrbq5yod&_kYNQ4^~MV? z0udbwQ`8H8v8hwhg{(=iF4lB`MXl_4#&MhpwTsSy&pGFP-|zc8=X>5?!fvy1h<3ZJ zkdnz{dh7MNMoO_*>|@*C=+=~q_ms=!iF`i4n9Jqjg+if<_Z`rd@DqF&pTEI3&;Xx7 z9esk}2|i+sdQuY_sL*I#U0q$rm%oifA`hHS=cL2o7`Ip~2D90$o0^&$6a+yFj`3+U z8V6a=cE&M28jar1X0r}_WDTb8sJm}M$7;1|MCI<>+}sER`hg1c07VA|cOz{V<5lbr zV?Fem$mkCBY0`@<EXd#m1K9b0!PS>cCZDaXtvRVr6E#ed;c)mi8kI7cD3_L&ZbCN> z{eGGZpil}1gV&j|OeQ@(pYIBE^VFw_7XNS4>-A2`Xrget-4|f8Nqw3O!sLtHZXaQz zTqahlRmZ`H{&AWNqwr&9W@d;1a-rAj2cWwL{SyLjTxf9D$Z3L0&4t@)wa(Jy6brMn zv$AG_#oNi`w7?q*TP~N&AlI0X`T2Q{NrOr3n_$sY{C@u>IS1b3@l0TLeLOIMV|sac z`I?+l7>j$lfa|~n@1aB@aZAp{7>mVj;19(+CMU7Qzrhatk{g^%CaRT{mFL{MI#YOH zV`Jkkepw4!f#K*K_~@M&tNjf0zSe5Bd(hW(PQr7@<`o(~AtP5hoqiMwg)U>0yBG)r zM%ig$VPV*0GN~cb%csp|8)7}%8OQikD)kT<Eb;(@-fQX}I<$bH*=$Z%DwW4b^F3JS z?BMhUJD>&jKpXsGne~X-65~FUN+loqKi%HmzDhlyq<;7Lt_C_WU=*AO<NsicF(O9x e6Z>nWx_<zy)=bUWga_FG0000<MNUMnLSTaVTx-t& literal 0 HcmV?d00001 diff --git a/gui/styles/AmbianceClassic/widgets/backdrop-button-disabled.png b/gui/styles/AmbianceClassic/widgets/backdrop-button-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..27285e28c1650c67494481c8df29abe45635f42b GIT binary patch literal 448 zcmV;x0YCnUP)<h;3K|Lk000e1NJLTq000>P000#T1^@s6vnxdy0004pNkl<Zc-p;{ zJ4?e*6o3U41w{o#2VaYiMRe57pI|3(a&{0L99;Ydf{WdBQgG<%qzD05i)q@X0V@P6 z_<~}LLn5{6cZSGSIw;;`__#eu&-rq>kJIEod%wmoj272*+q2nh>tFJ|1-5OE6bgkE z%d(F0`FsT)z=Htl@CG5&;2i?+;1O=%gxodij5U<-a!U#$*@eYiE;qqA%vbl3)G4!2 z6Em4iGdUgdo^ePDlb?b#T=8sQm55+YzL3I$691QSx!gs)sz|>i1ly37-@2gQCLF3W zku_M*DWT>pHP6+VoWZ<i$s}ufsY<M3u{fhsf?z;)rz*KFl}e*JB`kg$bzfD9$5!mt zD2eI@a(JU4lpqF)XPRbD6!=NZ<Tmy-k*$`*?z%|goEWj6c#P{w++F=Vc#*4Jhd_2J z^`4?zST%2e3kOJ-5l*wm$E8=OJw@#$j^p%3y@YWJmS9i%l8g;Iqa^T$9XJIG?w|%A qKd3_pK2+fzDsT*|(Q!~EvGWPqklz_w`kYAs0000<MNUMnLSTYh-NqUK literal 0 HcmV?d00001 diff --git a/gui/styles/AmbianceClassic/widgets/button-active-disabled.png b/gui/styles/AmbianceClassic/widgets/button-active-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc66703683047faba6b99e0196c2de29cd6b6f2 GIT binary patch literal 769 zcmV+c1OEJpP)<h;3K|Lk000e1NJLTq000>P000#T1^@s6vnxdy0008WNkl<Zc-pO% zPiT^19LLqUxm+--!IqGVRZjXN#HffCENT_iVFeLE#10<n)Fr%Tph+ZbUL^A%CU_XK zO%EzajA?6AhnubuWOlFxc1c}gQ7ij?2aXpH?a(WHczNF6@A-ax-sgFKKgoKfyhXiU zmo~Gyy4tq5xTqA8%jFb^$plE75$X!XTeI1$E}2Za!Rv*Eh4-KY>H>Zx5{Vytf<NFp zD1$HH6JilOA7nC_e(1@mD>P9+_{seId@dG?xx(S_ZI{cXx7+Q9OeT}YU@&wK3=DKi zB$Az=gU`OczD~YpoO#R-g+jOD@%VG-e1w^sx|=3+%;)o3yj(Y%&Akv%06CBWX#*xV zBaAbj^ElsVG^(LjSzcbgL4BHZ;5$E_ot=Hg1Wx{6@N1iynK9$*c%iSPNhb!0U@&+M z!4{EBS|%qahq<@Zr%4wE@201x&vMBknaCz4CQd?k1^Rnv(t}e`@cDdt5ly5Hhohgm z)TfCCoAlLYv-L74mWjn;>4r%K`uk{d046_2Mn+Uj5DT?ht%U9d^bgXcpBD}8JH#}> zubmgSTCM77a+rhB(NR%Xg3H@j$q||yg-OxrbZW%f6EZ$N&OIq}5t}BgQ#f+R#N2p~ z$D`%x+A_g;PN7~6ig|=_xlg20skd7uC@Zg`(dbn%FJmMUxd4+l4HF$ovuAE@&dvfS zl8GF8PnVXKe9+g@q-$+$?LPLUhJDd&UxBx;#9ps=FZ8|@3Wa;n-`!|fr_r!pAn+Og z;3X>Z-9R94-0%16rlzL$bCT6+-8D2c)DDqWKF7w!RD91k^O%obbO-a@Y+%r1KRHGH zM$>8sXKJ<Db+p@u>2x}X@A(1A1yBSfPy-vF4t{ft(^CRPP+&ghh0&THmCNOu&>L(t zt>zxD0(u&PbKoMl@((V9OJEqB2NdS~9-;1ER_{e-)gQ3R00000NkvXXu0mjfz({G- literal 0 HcmV?d00001 diff --git a/gui/styles/AmbianceClassic/widgets/button-disabled.png b/gui/styles/AmbianceClassic/widgets/button-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..6dde0945111b79e76bb1b61e2f06bd3fa1670406 GIT binary patch literal 459 zcmV;+0W|)JP)<h;3K|Lk000e1NJLTq000>P000#T1^@s6vnxdy0004!Nkl<Zc-p;{ z&nrYx6vvejMJQrnu<>IfmhAiqtYl?vp)4$H{0GX09V^P>ZPgU1S88V7kICz8CnZl| z)Z`fpGzOoe8C}yX$bE0|dFP&c-Z|g<?vHnyN{`{MF-<c8ZMj^o<u7?Z9Fm7@+g{FQ zvqzR?1yFzxo}mJ7#9y#wc(3+{^xb2x;RIGQnaoH-5rUf#kg$u$0(Q)CoI!+p8GQ#N z)I`HDntk7ImpFMzDNN2h?H%j|c3%|{ff*SgFAj+RU#Qm!MG^fLVdPsf0%_}lnj6$S zR7GSB<}`~;Q`1$a>x`+I)hXh-?l^Vxs)*10P3aV&W<M0v>AFg%)5AJNQmIrcBCqO~ zglxqwY3oGJksRJHN4Bpx5r~AI=XKYdQsiHPa}&p!<Rjl*2%N`pPRuw?{95GyE*8Cy zjwkuG>kyEgO1+2LUszRMCvXV|1edUrFbYZaPEqd?-s`E|C9J^&?M3SBVFR%ZZ$?QV zxDBVYeYk}(eAH2?-jF3I!W{%~O#e##agaykd;+3k&CMP-h0y>2002ovPDHLkV1i@^ B&Ex<8 literal 0 HcmV?d00001