From 29c7894993b16909729f00d57aff599f435e2d82 Mon Sep 17 00:00:00 2001 From: Vesa Date: Thu, 19 Jun 2014 17:58:38 +0300 Subject: [PATCH 1/3] FxMixer GUI updates: graphics Also fixed size of whatsthis --- data/themes/default/fader_background.png | Bin 1618 -> 1391 bytes data/themes/default/mixer_send_off.png | Bin 916 -> 1022 bytes data/themes/default/mixer_send_on.png | Bin 1207 -> 1578 bytes data/themes/default/new_channel.png | Bin 0 -> 479 bytes data/themes/default/whatsthis.png | Bin 1416 -> 1321 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/themes/default/new_channel.png diff --git a/data/themes/default/fader_background.png b/data/themes/default/fader_background.png index 2c0d0dd49380fa41d119604ead0c8b9002d7202f..682ff4c92815efe638b9adfd9b7ef723639ccd3d 100644 GIT binary patch delta 1366 zcmV-c1*!Vd4DSk%Dt`a~0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G` z2i^t~3k(Ag7S}=R1H80RL|MzQ?)0R)6QW&VJPMzs2E?)64ix zSU^Hx78EN`Rj6iMFK_<<_#^)Kp8!6_>HLjZz|2ULpqgRXkTv7|cCF`u9Te-|8u?S_ zf3JW2WgJ1wU~)8NF0ian%ecI~{ZPm0dFiHN{xX7@9lZ#O z8B7(bip%8=@_*^v&L<*h&h7l|)*rdoP>4~AA)7&S#`O;JaXN!VAVf%skWKx6r1=2k z!~zkoW3d9$jI6qeT$n*DNR(iz$XQ|ik&k2RaT0Fbl1*{F)92&)456i4yx!jH2lTlJ zh!`xj=1)v$-7Q&RrqFyy&DoI)Gi)x`E-5-6M3Jf1T}@_3{}JJcIk-xH2PNbUuB{U+d)p`tW}vvV=KOQt@&v+ zq0EFb&y5!^mpjO(*T%PL7@%rxLOUaW86oTw$IO_EdGGEp5wXw2kO&%QgZ;Zs=;RX@ zTX8l=u75lGoGbEATTyYlUOLyDgFlG{b19De!EW)ICuc2FXx8pEAD1mhf_W~;F?Cx^ zLMNZj*cY|trg^8&rPW+xgZgf{9I#tN7(}jeRrR6bVs@2l=DOvW z-BOWAFj2M)%R9S87(&iO*|fcB|2`)YFh{q{(SI#@r&}btWvEPKu>Oi`4EC>{s95L_ z-Bw)eot5f7w_yM7Te0>yvxIJWQY*%U)?R<_?}@@yFp2xn;KWUR9-Nzo)I6x>-fr#` zKD170DXwxKZAF$^bDvJt-ZgjK;+?|Guu@#P>UOsfyCSBFJlx+A$X9Nzl%`zwIFv)5 zSAX4dgyLHC`DgaGZQa83nf+^OaZKJKF`=bELyK&4sGoIDlv~|9PiWL!BDY#R(e^&C z8#Ix3OOCqtX8*}2wB;?<+`^u-;F?;*M)V22bnX_C*ey+QWti^xP_Ayy9kjc@BlfvO zI_GY#_-&$OIvA_K(DEJ1L4cP03w|+7Y?pI)$dC&uvHLRxO{>;^z9N z(5F@2BH=7l?V&zrj^tmLyrr*$UiSHl{g)fAjihL`TY^9P@AHbhvj1!)lAlMnEq{z* z#r_8%uXl6oXgojn3}rjxBA@D^djBKt=G=!$bHz13e|*~_Z9-KQxqE7HiaU!srKR3k zsN#Ajg&wEZaDVIjP_O&@LHgX$FNx^3gJxQ#bM4OJsQXZN3ydP`pMSWPaYd@Ur*cVF8JFe*k|O6&YFcrQ)IxVsi#pMs z{JU0Ev+f)^x!PK*T+PVYHg}6i+$yeBZvR`w*yj|zYi0f)T5&*D3)OXqCz2)OD#f7L zyjwQE5)rUa>vKJ*&&QVfllV<;O@H=N=$cyOmi`}bXYoa!n}wU(%yI+yN>87w9>M++ z`&?Ms7Yom1x&FmMi_@%07*qoM6N<$g5>4JXaE2J delta 1595 zcmV-B2E_UA3epUaDu4d~{{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G` z2i^e@3@I1?sxAEh00rMkL_t(&-tAhgcHCAF{*n{0nwh``d$sG3fRGTQvXa8Wp29vr zpDDPoq^!uq#2_TGw0;NQnJdc^i@zyE;0{``!efB6mV*DtvK=kLAu62HaAPgkhl zfAELj-dy9|yB{FD1POsz5G_Jgp&D>|bB+4_hw^~in`_joHJAm=jEX9#23RnJ-u-U? z!1Mw4n}?%c*MIZ@ZS!zkTL55L*C1vvc{Q<%u%J*2XzuR5`-iLb8cYHbMzyH?EiJ%Q zv1!}K56?e1_S*Lghbv#!U}mpg1kntp3ROkZ?5TXUF85bN&=AV~o6TotV7)8hU1S%31Jx0B~w1Vjv$-18$gG-FFpm?<>O z(DP{xXX*L3DLr3-nLr|7V#Mfku4ZWV zJZQDP1b-9xoL3dp6cz$h4Vz7~+w*2(&nHxVQ9CO7pUgx7Hc~l}vsPvzO{jRk+w=R$ zcs{lAw4uy|*mZ>$n`TettINW-)nWlvD;xUs%9|;bFKY<<#xXOxXg<3mOhoKEv8V`| z?hP7nzq_IL&&ovg$~P{dVrO2tj^H`x${(SkVt>=_&UxEBAD&+*5!h>5)Cg2keOStuxaUM9MzSH7JIFLKXK!^oUV z>A5BZb!=&NH?(=aInUT4!XR>$tEvYT7qhEeGuJJ%V9N<}?v+SlqF@0QMzBQ~Le50N zw12$mxv`}Nk$^c(OP8i4j7*E9X<1|@GT0o7YdR`2rRrUuTk7MW;$okyD&x5&_J1lW zPEuSK%eu@svn1Veq*hEDnrHp#(=uJcUrRIDsC>uqFl!~l#@Qs zx@8u{)lTD=8ZZcehBi;mAD)8cwwlFIdTZXP#x3M%Hx9TksMxpPJFll>8hzZDA~W?EeCl=d(HXYCJ#p3}rauBH!vo z_Wm=S&9##`G%*YH^7F%|EmAgART09u_4!3Qv&dT-^O=Pz+C8Cgy}C^9uYZ3Y>V2Of zDLP4?d-dBybl5>N_0qX=W^rx@ozFwvEihtdj?V}5xd@|LkoSA8^U&rLH<#UlC;xUt z3QZ~b4`tS0Vnco7O2(B^NLdEOwZP`0XeY5x@QJ^E4O}<@;X)z{gKl t-#wszef)Ga`g!-k`R`x-|7FO1*MFxSPe^5#ijM#Q002ovPDHLkV1lZ9B@O@p diff --git a/data/themes/default/mixer_send_off.png b/data/themes/default/mixer_send_off.png index 0adafe29633cc0224c6b91bf07be427a4c262448..1be1ad54f20a570b743b38e04939c58705777d5d 100644 GIT binary patch delta 999 zcmVz6!r1wU)B}+^+F1p?AZ}2bi z&P(q|%)D}jq!<>>NFbzuS%B39yC$uz&?*Fv14_?1uNSA3)=@6z<(}l^JkN8^`+VQ; z^9x=T5uL{EPw##8_x_)wQ6~~bNTd)ny(WK7G>X^sh{xjuzK?G$f#;#L!S|XN6CoOn zA|&{pPqZ(Fk_v4MhtHp*oxZ2D-+cY$DUR+0{j2uJsMg9p`|a2FP8yAbR1(p;my|7C z0G6{iHq?Ev1c1aR02^AL-@E_46N`;@;>a%EHi+(2N*T{;|`oH=1nkR|t*RGRDBp4eTd+EAu zZ*NnrR(Z1VBmrz*2&$AKnM{&Sr~g;8jE|3_wPs^u0~^-i{PbEZNXg{nB#lOc*>7ig z^z$Q(F)S}Hlbz3!ozLR?K1)kW936ihVT_?tsbGxZ!FLbH&Sxo=N*o^_GchrNP>LX+ zH)s$9C?U{V^KkAVw{F~G=EE7Z*6i)?k(thL^Ttga$Dv-YQz#UWQnIkHfYur(;xKe& zh)ShGxm-qTjS>PSyN0AYy^)B6>$>Fgd1|{g78e(pdVdOlot+(OwHmJL0$*fD<^ra^-_|o9WGIzOEG;j!eUBF(lgs5e zJUj$o?ANHdTN@rU)IhpGM%BnzrSs#QYnNGY;A3w z+eoK!blm98v{TCEGHdH=TupypZToVoxi-_&G!G9CbJ9Ekz;#_#S69j9atsU(bd=5X zW-5fhS|}EajEszsOeWjkWdjPXbDVr9oioO%o(8p@O=bhEwPDa!(^)K*pyi_l94>roEw?}ZBo}ca$32<$4-7r~ z=U{I%J$Y^O%3E)5Ub_4`N_TI{m=ifSoyLU!IT1rF8X+Ew0)lwFFIKMBp7Kh{zn$S? VDU}6j-~a#s07*qoM6LruV1k>M&0qik delta 892 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 JPDHLkV1nQq>aqX; delta 1185 zcmV;S1YY~947UkeiBL{Q4GJ0x0000DNk~Le0000N0000G2nGNE0R1oI7ytkO24YJ` zL;!IB{{Wy>zvTr0000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^l84HgZ-%dp>( zTPJ@6A4x<(R5;6BluL+}WdMes@Am)aKXcAF zXy-jM({+MyB&``~ONpdfB27x@#GtiCX@O800mKMCM51>%=WsDBB}$bNDv@ZDB#hR_>F?`fa=6Zw{5O9AXzyCV|D$7wL>~ywaaU&t49A$E(#>B1Ld>HdE@p=oi}qrJ6gp_%HfGcz>7$dz7_%%IZ*ofwqTC@B$2AP~eD zi6Ig~zxi-g>vQj0bkWfW2>gi;6* zAqqn9gy8YTq7g&ku+|a^PjG>Co42C0Mt3Y*#>DtIm9}=;?ruFNEmzP+Bb8jVp^_wN zf{@~0#9~;SMhZdni~2R%kZJ`;N~M(P=_&pOKmQv%zwc&x00000NkvXXu0mjfK@}vf diff --git a/data/themes/default/new_channel.png b/data/themes/default/new_channel.png new file mode 100644 index 0000000000000000000000000000000000000000..8a27695df8ef862d618eec3247a9896465d68264 GIT binary patch literal 479 zcmV<50U-W~P)48)Q+Ibi zME4AJa1eqzh=QUaJPCPSnwY0HX{nT+DeuoY_q@xw5v?`%#KT?H{#;N*Mz(El9miQX zjpLK3#keriBL{Q4GJ0x0000DNk~Le0000K0000K2nGNE0F8+q4Ur)ne+}0F z01ejxLMWSf00007bV*G`2i^t~3JDPC?)23F00g#4L_t(I%XO7&Xk1kg$A9PCyLUIc zo84|qvN1|(qXw!dNVG+5sfyMYh^Y8NrM~b(K`K_z4=O&2s8y;|#QOSBZLL-tMHIB6 z7T=H7N7WMJM$>M(**rG8+3enXf6qDh_@SoM*TBHQFf;#|`7^iqK-$kq? zg|!i?(O{-rqFye&?^mm9cMoj-2ncgMy|OY=hz=$^Bw2p(&9^?3>FT~de|uyPfr(75 zQi+1u8IjE7NVK%rRNRx+T4%brmzn+hHh%g1`a6NqT+aeo85xemA!zfbt-Ry4-2C39 zPCRadT9rNz(Z8^dwrrM>{UwI?kMZqzmDY|Lt7;=*N1 z5dJKY)`ZQvNVaznOQ-KbIC0l)Nv4vS%%Z80;V9MKDG`7LAq4sEZj9D6>ov3$q>?Vl zR2pd`jPGNFgEmG)*6NnF!%l7M>+6=T=k>0+{WfMN%C=rEp#y~u6)Fg5*6S$0Nra@W zG0lB9UW@B_JiYlGD)GwW50h?9vuWE~ys+a-WJ?OP`fINi>Bf+;*nEk#0$}xuYvfsr`>BoY!>`Yv zRfvuvRB4o#9=r!H5ohzjTddi#4eP}Z_?1Gd5EX_(g(1f1e}pt)Fb*K4?v^8v-`~G{ z!-fraFTe5{v2&<^+nUuJ4cyq#@s2#wjbSZVqtT5zx>nt-XKGLSW5qXs$wX(j z@XMoi4xtOot!~MxRjW=}w{G2Uz@(eb)MPAnB97aOwH`(lB4c)$dc9z6RQsofK*Ybec}NL@c& zN^uZHX?mlLf?c(aOA^QSI2T`Mf5!IQ&z!UOIhzODiPN}cOTU-B*7~&8(%NeazWj)$ z)b5t%2e)BrzE_)5-G@Wb zXw-PFXvU`_V$%_|3Hb`46g8#5wuK#zM52xHzDPsUU^LNQT%Nr8Ibb%xCxC0)pEz=~ zbJyNi8ao~s1f;1s9O>@le@EYVjHeGC;OPDV9_#C2Ftv@SuerUrgtu0(2-i2XOI!8_ zmb_V-y>)#9{J0g3_VgY(eyXuEbr_5cd>>1D9PN9MLqmgHolY})K51E@W~Y$*sFu$cEZ|Tqk^FXB->#=3jg67OfA19e}Ml^PP0(15(ELp7$GdHD^PlNb!Ku@3MpgXfA++| z!tBkMsyX;dt;zREmmEI0F;7+nXalaWxHOq&ZgGjG#zs*CHIN-xY32 z_DZ`hmW)Os;+JPmQ=FfrvYbPE-u-eM9_>nU^2p<~wzTlxrT;K;J&pGLd;CNwoQO2V z`=pSv-WVf(eBygNvS$~o>FX%Bc2DNot?}sg4u1N~Qw$C4f8p)-Kjbgx{>75x-mPX` z#soHqq%_8004XKEed$*SttrgjLVF7BDU|2Y-5BH4w~o@kb0=?|zrdgW{!h}YMYPg) z{5H$io+SgVD`I`9dv|<|7fwG@%A(PE<@zXID@ea~GHf&h>Jwr%tKS6=4W$sbZ#S|FNe;~y7Cn7TdB)Z9F-5nsL!jWJGsWva50 znU)w+l~Vef?Ry{Y=jYF#q`I_#Dwo*b)6KDiLmYUhe}};H?#}ub&{ES z*p{U?gEP4t7(;73j+8Ay|xYS_84IJ z`~`mZ+FuDZ#Ra7c$tOQ)k^kn>wBFI@V_S}CMJN` z*x1-l#>dC6oPFbsQI*TI)Iy;|sHtU#42Kg!RY-dsr~}u{>zXs=my7SzmNI8i)vJK_ zRbSH?pbeM=MyRVZRyg*M9josXf_A_%evs2nWy*J}Q@HLt;A}N{{{yNm6M^7dhrj>; N002ovPDHLkV1f^@xnKYQ From 4bcbb1abcc693b4acf4e3d5ea192bb61e9dae314 Mon Sep 17 00:00:00 2001 From: Vesa Date: Thu, 19 Jun 2014 17:59:15 +0300 Subject: [PATCH 2/3] FxMixer GUI updates: code --- data/themes/default/style.css | 13 +++++ include/FxLine.h | 5 ++ include/FxMixerView.h | 4 +- include/SendButtonIndicator.h | 25 ++++----- include/fader.h | 20 +++++--- src/gui/FxMixerView.cpp | 11 ++-- src/gui/widgets/FxLine.cpp | 40 ++++++++------- src/gui/widgets/SendButtonIndicator.cpp | 20 ++++++-- src/gui/widgets/fader.cpp | 67 +++++++++++++++++++------ 9 files changed, 141 insertions(+), 64 deletions(-) diff --git a/data/themes/default/style.css b/data/themes/default/style.css index 82e72ec6a..ccd666189 100644 --- a/data/themes/default/style.css +++ b/data/themes/default/style.css @@ -482,6 +482,19 @@ FxMixerView QPushButton, EffectRackView QPushButton, ControllerRackView QPushBut font-size: 10px; } +FxLine { + background: #5b6571; + color: #e0e0e0; + qproperty-backgroundActive: qlineargradient(spread:reflect, x1:0, y1:0, x2:1, y2:0, + stop:0 #7b838d, stop:1 #6b7581 ); +} + +/* persistent peak markers for fx peak meters */ +fader { + qproperty-peakGreen: rgb( 74, 253, 133); + qproperty-peakRed: rgb( 255, 100, 100); +} + timeLine { font-size: 8px; } diff --git a/include/FxLine.h b/include/FxLine.h index 5ee4d2ec2..6fbe8161e 100644 --- a/include/FxLine.h +++ b/include/FxLine.h @@ -40,6 +40,7 @@ class FxLine : public QWidget { Q_OBJECT public: + Q_PROPERTY( QBrush backgroundActive READ backgroundActive WRITE setBackgroundActive ) FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex); ~FxLine(); @@ -54,10 +55,14 @@ public: knob * m_sendKnob; SendButtonIndicator * m_sendBtn; + QBrush backgroundActive() const; + void setBackgroundActive( const QBrush & c ); + private: FxMixerView * m_mv; LcdWidget* m_lcd; int m_channelIndex; + QBrush m_backgroundActive; private slots: void renameChannel(); diff --git a/include/FxMixerView.h b/include/FxMixerView.h index 6449a0306..c81d257d5 100644 --- a/include/FxMixerView.h +++ b/include/FxMixerView.h @@ -22,8 +22,8 @@ * */ -#ifndef _FX_MIXER_VIEW_H -#define _FX_MIXER_VIEW_H +#ifndef FX_MIXER_VIEW_H +#define FX_MIXER_VIEW_H #include #include diff --git a/include/SendButtonIndicator.h b/include/SendButtonIndicator.h index 2b0819791..8615bc392 100644 --- a/include/SendButtonIndicator.h +++ b/include/SendButtonIndicator.h @@ -11,22 +11,23 @@ class FxLine; class FxMixerView; -class SendButtonIndicator : public QLabel { - public: - SendButtonIndicator( QWidget * _parent, FxLine * _owner, - FxMixerView * _mv); +class SendButtonIndicator : public QLabel +{ +public: + SendButtonIndicator( QWidget * _parent, FxLine * _owner, + FxMixerView * _mv); - virtual void mousePressEvent( QMouseEvent * e ); - void updateLightStatus(); + virtual void mousePressEvent( QMouseEvent * e ); + void updateLightStatus(); - private: +private: - FxLine * m_parent; - FxMixerView * m_mv; - QPixmap qpmOn; - QPixmap qpmOff; + FxLine * m_parent; + FxMixerView * m_mv; + static QPixmap * s_qpmOn; + static QPixmap * s_qpmOff; - FloatModel * getSendModel(); + FloatModel * getSendModel(); }; #endif // SENDBUTTONINDICATOR_H diff --git a/include/fader.h b/include/fader.h index 02bc475c2..500c5e49d 100644 --- a/include/fader.h +++ b/include/fader.h @@ -45,8 +45,8 @@ */ -#ifndef _FADER_H -#define _FADER_H +#ifndef FADER_H +#define FADER_H #include #include @@ -61,6 +61,8 @@ class fader : public QWidget, public FloatModelView { Q_OBJECT public: + Q_PROPERTY( QColor peakGreen READ peakGreen WRITE setPeakGreen ) + Q_PROPERTY( QColor peakRed READ peakRed WRITE setPeakRed ) fader( FloatModel * _model, const QString & _name, QWidget * _parent ); virtual ~fader(); @@ -70,6 +72,10 @@ public: void setPeak_R( float fPeak ); float getPeak_R() { return m_fPeakValue_R; } + QColor peakGreen() const; + QColor peakRed() const; + void setPeakGreen( const QColor & c ); + void setPeakRed( const QColor & c ); private: virtual void contextMenuEvent( QContextMenuEvent * _me ); @@ -85,7 +91,7 @@ private: float fRange = m_model->maxValue() - m_model->minValue(); float realVal = m_model->value() - m_model->minValue(); - return height() - ( ( height() - m_knob.height() ) * ( realVal / fRange ) ); + return height() - ( ( height() - ( *s_knob ).height() ) * ( realVal / fRange ) ); } FloatModel * m_model; @@ -103,9 +109,9 @@ private: QTime m_lastPeakTime_L; QTime m_lastPeakTime_R; - QPixmap m_back; - QPixmap m_leds; - QPixmap m_knob; + static QPixmap * s_back; + static QPixmap * s_leds; + static QPixmap * s_knob; int m_moveStartPoint; float m_startValue; @@ -113,6 +119,8 @@ private: static textFloat * s_textFloat; void updateTextFloat(); + QColor m_peakGreen; + QColor m_peakRed; } ; diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp index 466807c4b..25332a64d 100644 --- a/src/gui/FxMixerView.cpp +++ b/src/gui/FxMixerView.cpp @@ -48,7 +48,6 @@ #include "song.h" #include "bb_track_container.h" - FxMixerView::FxMixerView() : QWidget(), ModelView( NULL, this ), @@ -118,10 +117,10 @@ FxMixerView::FxMixerView() : ml->addWidget(channelArea); // show the add new effect channel button - QPushButton * newChannelBtn = new QPushButton("new", this ); - newChannelBtn->setFont(QFont("sans-serif", 10, 1, false)); - newChannelBtn->setFixedSize(fxLineSize); - connect( newChannelBtn, SIGNAL(clicked()), this, SLOT(addNewChannel())); + QPushButton * newChannelBtn = new QPushButton( embed::getIconPixmap( "new_channel" ), QString::null, this ); + newChannelBtn->setObjectName( "newChannelBtn" ); + newChannelBtn->setFixedSize( fxLineSize ); + connect( newChannelBtn, SIGNAL( clicked() ), this, SLOT( addNewChannel() ) ); ml->addWidget( newChannelBtn, 0, Qt::AlignTop ); @@ -257,7 +256,7 @@ FxMixerView::FxChannelView::FxChannelView(QWidget * _parent, FxMixerView * _mv, FxMixer * m = engine::fxMixer(); m_fader = new fader( &m->effectChannel(_chIndex)->m_volumeModel, tr( "FX Fader %1" ).arg( _chIndex ), m_fxLine ); - m_fader->move( 15-m_fader->width()/2, + m_fader->move( 16-m_fader->width()/2, m_fxLine->height()- m_fader->height()-5 ); diff --git a/src/gui/widgets/FxLine.cpp b/src/gui/widgets/FxLine.cpp index c200c1001..a8e30f45e 100644 --- a/src/gui/widgets/FxLine.cpp +++ b/src/gui/widgets/FxLine.cpp @@ -45,19 +45,18 @@ FxLine::FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex) : m_mv( _mv ), m_channelIndex( _channelIndex ) { - setFixedSize( 32, 287 ); + setFixedSize( 33, 287 ); setAttribute( Qt::WA_OpaquePaintEvent, true ); setCursor( QCursor( embed::getIconPixmap( "hand" ), 0, 0 ) ); // mixer sends knob m_sendKnob = new knob( knobBright_26, this, tr("Channel send amount") ); - m_sendKnob->move(3, 22); + m_sendKnob->move( 3, 22 ); m_sendKnob->setVisible(false); // send button indicator - m_sendBtn = new SendButtonIndicator(this, this, m_mv); - m_sendBtn->setPixmap(embed::getIconPixmap("mixer_send_off", 23, 16)); - m_sendBtn->move(4,4); + m_sendBtn = new SendButtonIndicator( this, this, m_mv ); + m_sendBtn->move( 2, 2 ); // channel number m_lcd = new LcdWidget( 2, this ); @@ -97,37 +96,34 @@ void FxLine::setChannelIndex(int index) { } -static void drawFxLine( QPainter* p, const QWidget *fxLine, const QString& name, bool isActive, bool sendToThis ) +static void drawFxLine( QPainter* p, const FxLine *fxLine, const QString& name, bool isActive, bool sendToThis ) { int width = fxLine->rect().width(); int height = fxLine->rect().height(); - QColor bg_color = QApplication::palette().color( QPalette::Active, - QPalette::Background ); QColor sh_color = QApplication::palette().color( QPalette::Active, QPalette::Shadow ); - QColor te_color = QApplication::palette().color( QPalette::Active, - QPalette::Text ); + QColor te_color = p->pen().brush().color(); QColor bt_color = QApplication::palette().color( QPalette::Active, QPalette::BrightText ); - p->fillRect( fxLine->rect(), isActive ? bg_color.lighter(130) : bg_color ); + p->fillRect( fxLine->rect(), isActive ? fxLine->backgroundActive() : p->background() ); - p->setPen( bg_color.darker(130) ); + p->setPen( QColor( 0, 0, 0, 75 ) ); p->drawRect( 0, 0, width-2, height-2 ); - p->setPen( bg_color.lighter(150) ); - p->drawRect( 1, 1, width-2, height-2 ); + p->setPen( QColor( 255, 255, 255, 75 ) ); + p->drawRect( 1, 1, width-3, height-3 ); - p->setPen( isActive ? sh_color : bg_color.darker(130) ); + p->setPen( isActive ? sh_color : QColor( 0, 0, 0, 50 ) ); p->drawRect( 0, 0, width-1, height-1 ); // draw the mixer send background if( sendToThis ) { - p->drawPixmap(2, 0, 28, 56, - embed::getIconPixmap("send_bg_arrow", 28, 56)); + p->drawPixmap( 3, 0, 28, 56, + embed::getIconPixmap("send_bg_arrow", 28, 56 ) ); } // draw the channel name @@ -241,5 +237,15 @@ void FxLine::displayHelp() whatsThis() ); } +QBrush FxLine::backgroundActive() const +{ + return m_backgroundActive; +} + +void FxLine::setBackgroundActive( const QBrush & c ) +{ + m_backgroundActive = c; +} + #include "moc_FxLine.cxx" diff --git a/src/gui/widgets/SendButtonIndicator.cpp b/src/gui/widgets/SendButtonIndicator.cpp index a932f136a..e77c0e965 100644 --- a/src/gui/widgets/SendButtonIndicator.cpp +++ b/src/gui/widgets/SendButtonIndicator.cpp @@ -4,19 +4,29 @@ #include "FxMixer.h" #include "Model.h" +QPixmap * SendButtonIndicator::s_qpmOff = NULL; +QPixmap * SendButtonIndicator::s_qpmOn = NULL; + SendButtonIndicator:: SendButtonIndicator( QWidget * _parent, FxLine * _owner, FxMixerView * _mv) : QLabel( _parent ), m_parent( _owner ), m_mv( _mv ) { - qpmOff = embed::getIconPixmap("mixer_send_off", 23, 16); - qpmOn = embed::getIconPixmap("mixer_send_on", 23, 16); - + if( ! s_qpmOff ) + { + s_qpmOff = new QPixmap( embed::getIconPixmap( "mixer_send_off", 29, 20 ) ); + } + + if( ! s_qpmOn ) + { + s_qpmOn = new QPixmap( embed::getIconPixmap( "mixer_send_on", 29, 20 ) ); + } + // don't do any initializing yet, because the FxMixerView and FxLine // that were passed to this constructor are not done with their constructors // yet. - + setPixmap( *s_qpmOff ); } void SendButtonIndicator::mousePressEvent( QMouseEvent * e ) @@ -49,5 +59,5 @@ FloatModel * SendButtonIndicator::getSendModel() void SendButtonIndicator::updateLightStatus() { - setPixmap( getSendModel() == NULL ? qpmOff : qpmOn ); + setPixmap( getSendModel() == NULL ? *s_qpmOff : *s_qpmOn ); } diff --git a/src/gui/widgets/fader.cpp b/src/gui/widgets/fader.cpp index f2dc4c5fd..d12112f82 100644 --- a/src/gui/widgets/fader.cpp +++ b/src/gui/widgets/fader.cpp @@ -60,7 +60,9 @@ textFloat * fader::s_textFloat = NULL; - +QPixmap * fader::s_back = NULL; +QPixmap * fader::s_leds = NULL; +QPixmap * fader::s_knob = NULL; fader::fader( FloatModel * _model, const QString & _name, QWidget * _parent ) : QWidget( _parent ), @@ -72,18 +74,30 @@ fader::fader( FloatModel * _model, const QString & _name, QWidget * _parent ) : m_persistentPeak_R( 0.0 ), m_fMinPeak( 0.01f ), m_fMaxPeak( 1.1 ), - m_back( embed::getIconPixmap( "fader_background" ) ), - m_leds( embed::getIconPixmap( "fader_leds" ) ), - m_knob( embed::getIconPixmap( "fader_knob" ) ), m_moveStartPoint( -1 ), - m_startValue( 0 ) + m_startValue( 0 ), + m_peakGreen( 0, 0, 0 ), + m_peakRed( 0, 0, 0 ) { if( s_textFloat == NULL ) { s_textFloat = new textFloat; } + if( ! s_back ) + { + s_back = new QPixmap( embed::getIconPixmap( "fader_background" ) ); + } + if( ! s_leds ) + { + s_leds = new QPixmap( embed::getIconPixmap( "fader_leds" ) ); + } + if( ! s_knob ) + { + s_knob = new QPixmap( embed::getIconPixmap( "fader_knob" ) ); + } + setWindowTitle( _name ); - setAttribute( Qt::WA_OpaquePaintEvent, true ); + setAttribute( Qt::WA_OpaquePaintEvent, false ); setMinimumSize( 23, 116 ); setMaximumSize( 23, 116); resize( 23, 116 ); @@ -116,7 +130,7 @@ void fader::mouseMoveEvent( QMouseEvent *mouseEvent ) { int dy = m_moveStartPoint - mouseEvent->globalY(); - float delta = dy * ( m_model->maxValue() - m_model->minValue() ) / (float) ( height() - m_knob.height() ); + float delta = dy * ( m_model->maxValue() - m_model->minValue() ) / (float) ( height() - ( *s_knob ).height() ); model()->setValue( m_startValue + delta ); @@ -132,7 +146,7 @@ void fader::mousePressEvent( QMouseEvent* mouseEvent ) if( mouseEvent->button() == Qt::LeftButton && ! ( mouseEvent->modifiers() & Qt::ControlModifier ) ) { - if( mouseEvent->y() >= knobPosY() - m_knob.height() && mouseEvent->y() < knobPosY() ) + if( mouseEvent->y() >= knobPosY() - ( *s_knob ).height() && mouseEvent->y() < knobPosY() ) { updateTextFloat(); s_textFloat->show(); @@ -260,7 +274,7 @@ void fader::updateTextFloat() { s_textFloat->setText( QString("Volume: %1 %").arg( m_model->value() * 100 ) ); } - s_textFloat->moveGlobal( this, QPoint( width() - m_knob.width() - 5, knobPosY() - 46 ) ); + s_textFloat->moveGlobal( this, QPoint( width() - ( *s_knob ).width() - 5, knobPosY() - 46 ) ); } @@ -277,8 +291,7 @@ void fader::paintEvent( QPaintEvent * ev) QPainter painter(this); // background -// painter.drawPixmap( rect(), m_back, QRect( 0, 0, 23, 116 ) ); - painter.drawPixmap( ev->rect(), m_back, ev->rect() ); + painter.drawPixmap( ev->rect(), *s_back, ev->rect() ); // peak leds @@ -286,28 +299,50 @@ void fader::paintEvent( QPaintEvent * ev) int peak_L = calculateDisplayPeak( m_fPeakValue_L - m_fMinPeak ); int persistentPeak_L = qMax( 3, calculateDisplayPeak( m_persistentPeak_L - m_fMinPeak ) ); - painter.drawPixmap( QRect( 0, peak_L, 11, 116 - peak_L ), m_leds, QRect( 0, peak_L, 11, 116 - peak_L ) ); + painter.drawPixmap( QRect( 0, peak_L, 11, 116 - peak_L ), *s_leds, QRect( 0, peak_L, 11, 116 - peak_L ) ); if( m_persistentPeak_L > 0.05 ) { - painter.fillRect( QRect( 2, persistentPeak_L, 7, 1 ), (m_persistentPeak_L < 1.0 )? QColor( 74, 253, 133) : QColor( 255, 100, 100)); + painter.fillRect( QRect( 2, persistentPeak_L, 7, 1 ), ( m_persistentPeak_L < 1.0 ) + ? peakGreen() + : peakRed() ); } int peak_R = calculateDisplayPeak( m_fPeakValue_R - m_fMinPeak ); int persistentPeak_R = qMax( 3, calculateDisplayPeak( m_persistentPeak_R - m_fMinPeak ) ); - painter.drawPixmap( QRect( 11, peak_R, 11, 116 - peak_R ), m_leds, QRect( 11, peak_R, 11, 116 - peak_R ) ); + painter.drawPixmap( QRect( 11, peak_R, 11, 116 - peak_R ), *s_leds, QRect( 11, peak_R, 11, 116 - peak_R ) ); if( m_persistentPeak_R > 0.05 ) { - painter.fillRect( QRect( 14, persistentPeak_R, 7, 1 ), (m_persistentPeak_R < 1.0 )? QColor( 74, 253, 133) : QColor( 255, 100, 100)); + painter.fillRect( QRect( 14, persistentPeak_R, 7, 1 ), ( m_persistentPeak_R < 1.0 ) + ? peakGreen() + : peakRed() ); } // knob - painter.drawPixmap( 0, knobPosY() - m_knob.height(), m_knob ); + painter.drawPixmap( 0, knobPosY() - ( *s_knob ).height(), *s_knob ); } +QColor fader::peakGreen() const +{ + return m_peakGreen; +} +QColor fader::peakRed() const +{ + return m_peakRed; +} + +void fader::setPeakGreen( const QColor & c ) +{ + m_peakGreen = c; +} + +void fader::setPeakRed( const QColor & c ) +{ + m_peakRed = c; +} #include "moc_fader.cxx" From 83cc446807790bf3c7089c7dcad8a734cbcefde8 Mon Sep 17 00:00:00 2001 From: Vesa Date: Thu, 19 Jun 2014 22:17:59 +0300 Subject: [PATCH 3/3] FxMixerView: fix disappearing effects --- include/FxLine.h | 2 ++ include/FxMixerView.h | 9 +++++++-- src/gui/FxMixerView.cpp | 37 ++++++++++++++++++++++++++----------- src/gui/widgets/FxLine.cpp | 3 ++- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/include/FxLine.h b/include/FxLine.h index 6fbe8161e..2445e2aac 100644 --- a/include/FxLine.h +++ b/include/FxLine.h @@ -58,6 +58,8 @@ public: QBrush backgroundActive() const; void setBackgroundActive( const QBrush & c ); + static const int FxLineHeight; + private: FxMixerView * m_mv; LcdWidget* m_lcd; diff --git a/include/FxMixerView.h b/include/FxMixerView.h index c81d257d5..8e96797c6 100644 --- a/include/FxMixerView.h +++ b/include/FxMixerView.h @@ -27,6 +27,7 @@ #include #include +#include #include #include "FxLine.h" @@ -54,6 +55,7 @@ public: FxLine * m_fxLine; pixmapButton * m_muteBtn; fader * m_fader; + EffectRackView * m_rackView; }; @@ -94,7 +96,7 @@ public: // make sure the display syncs up with the fx mixer. // useful for loading projects void refreshDisplay(); - + private slots: void updateFaders(); void addNewChannel(); @@ -108,9 +110,12 @@ private: QScrollArea * channelArea; QHBoxLayout * chLayout; QWidget * m_channelAreaWidget; - EffectRackView * m_rackView; + QStackedLayout * m_racksLayout; + QWidget * m_racksWidget; void updateMaxChannelSelector(); + + friend class FxChannelView; } ; #endif diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp index 25332a64d..f55112e26 100644 --- a/src/gui/FxMixerView.cpp +++ b/src/gui/FxMixerView.cpp @@ -33,7 +33,6 @@ #include #include #include -#include #include #include #include @@ -76,10 +75,18 @@ FxMixerView::FxMixerView() : chLayout->setMargin( 0 ); m_channelAreaWidget->setLayout(chLayout); + // create rack layout before creating the first channel + m_racksWidget = new QWidget; + m_racksLayout = new QStackedLayout( m_racksWidget ); + m_racksLayout->setContentsMargins( 0, 0, 0, 0 ); + m_racksWidget->setLayout( m_racksLayout ); + // add master channel m_fxChannelViews.resize( m->numChannels() ); m_fxChannelViews[0] = new FxChannelView( this, this, 0 ); + m_racksLayout->addWidget( m_fxChannelViews[0]->m_rackView ); + FxChannelView * masterView = m_fxChannelViews[0]; ml->addWidget( masterView->m_fxLine, 0, Qt::AlignTop ); @@ -124,10 +131,8 @@ FxMixerView::FxMixerView() : ml->addWidget( newChannelBtn, 0, Qt::AlignTop ); - // Create EffectRack and set initial index to master channel - m_rackView = new EffectRackView( &m->m_fxChannels[0]->m_fxChain, this ); - m_rackView->setFixedSize( 245, fxLineSize.height() ); - ml->addWidget( m_rackView, 0, Qt::AlignTop ); + // add the stacked layout for the effect racks of fx channels + ml->addWidget( m_racksWidget, 0, Qt::AlignTop ); setCurrentFxLine( m_fxChannelViews[0]->m_fxLine ); @@ -169,7 +174,8 @@ void FxMixerView::addNewChannel() int newChannelIndex = mix->createChannel(); m_fxChannelViews.push_back(new FxChannelView(m_channelAreaWidget, this, newChannelIndex)); - chLayout->addWidget(m_fxChannelViews[newChannelIndex]->m_fxLine); + chLayout->addWidget( m_fxChannelViews[newChannelIndex]->m_fxLine ); + m_racksLayout->addWidget( m_fxChannelViews[newChannelIndex]->m_rackView ); updateFxLine(newChannelIndex); @@ -187,6 +193,7 @@ void FxMixerView::refreshDisplay() delete m_fxChannelViews[i]->m_muteBtn; delete m_fxChannelViews[i]->m_fxLine; delete m_fxChannelViews[i]; + m_racksLayout->removeWidget( m_fxChannelViews[i]->m_rackView ); } m_channelAreaWidget->adjustSize(); @@ -196,6 +203,7 @@ void FxMixerView::refreshDisplay() { m_fxChannelViews[i] = new FxChannelView(m_channelAreaWidget, this, i); chLayout->addWidget(m_fxChannelViews[i]->m_fxLine); + m_racksLayout->addWidget( m_fxChannelViews[i]->m_rackView ); } // set selected fx line to 0 @@ -269,6 +277,10 @@ FxMixerView::FxChannelView::FxChannelView(QWidget * _parent, FxMixerView * _mv, m_muteBtn->setCheckable( true ); m_muteBtn->move( 9, m_fader->y()-16); toolTip::add( m_muteBtn, tr( "Mute this FX channel" ) ); + + // Create EffectRack for the channel + m_rackView = new EffectRackView( &m->effectChannel(_chIndex)->m_fxChain, _mv->m_racksWidget ); + m_rackView->setFixedSize( 245, FxLine::FxLineHeight ); } @@ -276,7 +288,7 @@ void FxMixerView::setCurrentFxLine( FxLine * _line ) { // select m_currentFxLine = _line; - m_rackView->setModel( &engine::fxMixer()->m_fxChannels[_line->channelIndex()]->m_fxChain ); + m_racksLayout->setCurrentWidget( m_fxChannelViews[ _line->channelIndex() ]->m_rackView ); // set up send knob for(int i = 0; i < m_fxChannelViews.size(); ++i) @@ -332,6 +344,9 @@ void FxMixerView::deleteChannel(int index) delete m_fxChannelViews[index]; m_channelAreaWidget->adjustSize(); + // delete the fx rack + m_racksLayout->removeWidget( m_fxChannelViews[index]->m_rackView ); + // make sure every channel knows what index it is for(int i=0; im_muteBtn; delete m_fxChannelViews[i]->m_fxLine; delete m_fxChannelViews[i]; + m_racksLayout->removeWidget( m_fxChannelViews[i]->m_rackView ); // add it again - m_fxChannelViews[i] = new FxChannelView(m_channelAreaWidget, this, i); - chLayout->insertWidget(replaceIndex, m_fxChannelViews[i]->m_fxLine); + m_fxChannelViews[i] = new FxChannelView( m_channelAreaWidget, this, i ); + chLayout->insertWidget( replaceIndex, m_fxChannelViews[i]->m_fxLine ); + m_racksLayout->insertWidget( replaceIndex, m_fxChannelViews[i]->m_rackView ); } // keep selected channel @@ -448,8 +465,6 @@ void FxMixerView::setCurrentFxLine( int _line ) void FxMixerView::clear() { - m_rackView->clearViews(); - engine::fxMixer()->clear(); refreshDisplay(); diff --git a/src/gui/widgets/FxLine.cpp b/src/gui/widgets/FxLine.cpp index a8e30f45e..ac051d799 100644 --- a/src/gui/widgets/FxLine.cpp +++ b/src/gui/widgets/FxLine.cpp @@ -39,13 +39,14 @@ #include "gui_templates.h" #include "caption_menu.h" +const int FxLine::FxLineHeight = 287; FxLine::FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex) : QWidget( _parent ), m_mv( _mv ), m_channelIndex( _channelIndex ) { - setFixedSize( 33, 287 ); + setFixedSize( 33, FxLineHeight ); setAttribute( Qt::WA_OpaquePaintEvent, true ); setCursor( QCursor( embed::getIconPixmap( "hand" ), 0, 0 ) );