6p^Z4o8uaFcLh=>3S9-lpq%LfR!m#;+g>J3=Bycx?jj$l>i2wL}ELErU9
zI6?}lkD(w=3dd{b4&hkyGPqI|V&R?Gfk+BpZt`SUr4++VN=S>_Gh{;xm4
z?H6z3(c`ypc<(ASms*e#t%HJ{M1G^4F+1Y7rC~y2*tA
zI2(H_=Rrkt_vM9Wh(GbKd`p~K_2dN#1X@(cPj^FSl?87+yn~NE`3U##-^Y`8A7k^H
zBow6+Yp2X%)H+}|m%)A-Z4}XEByh4H6+I@IAmo}vigfafmQ)6t2@;1W5Z0429<>s3
zxH<^WWl8xH8yd(1zC|A|sork)pXfc=|EKTp@c0OfYNc?s6A_;@iw5KEYw+>CmvLdw
z7zWz9v331MRL-4)!Vn{}!~9TR(}JO{Zj?n^G0&vK&Z60HqFf{Je-Ga49py3@bSx4h
zTu@VB!p`n8eD%#Y_|^Nr!iOJ!h!<}j!;<+PLY3m<=70-?V$CF9C&^MzUS32QZg&BL
z3VJ_Dfn7^-mV_}FrDOeM;B|CeCmCH%Rh7Nx=|qy&WzNRWFQ39UpM63x{4YHF;eTNJ
z;d?y$?pu8O=g;vz1!rG%F-&UWL%dnk{9F?)Zg}hZ8GQQi9v&P!gx^1WfJc`u;r#9)
z4A+!kL9hu?R5dM5PQvc47UWp;$P4fgJY0}iCs>#6q;e)M?&XB^cn_>A^}=fppU2n#
z{u=Ln^d7$Y`YUXv@`1+#4PBc=7LI4dh^Basq!CVV7DXM-P#P&TdgJ91NRufO#L`s}
zO0p?k@!u+o7Fk3ni4MWV)=HwqoAJ`_Ex5j=2@R=MxKTkP%uJBaOyoD#OOI8V$!K4g
zf=^$*jVDv5@Qce6czXRLu6EWU#aoL|s#J5r15q1Kk#A5698M_dsfEvnu>?xGuU5mt
z+hjz10u?ZEv51Y2MI`mf_$rN`9bYB#b>shi?fq{dxlMQ{6qkINDU=p+C9M@$s3hjO
zHxF6mxNkcDR*!{cw98haaM%Vh>ed&XiNkg+#R5#B%}$@K;hy@
zeB6Q1SPs5G7W5%!7-HyD<4Yu3A#NBd7=%eIA^OH95VNobeo2+kXw3WyAF%}f
zkwGND!yo>NBj0|3E8qSBuYL0|KKlL(Y&wt{M|WXL4R!m41PwTBwdM&UX}97ol(L^#ghz~AhP{mb^?
z)VBRNv1JS=n@6yJ?`90_*@838W7xmC4+pMn!S>n?bS`a0Ur`qpMdl&aH<2u)fSjK|
z;=FwH>^qIHtVZ~Tr(vd_f#TYc?;Eg);2&d{<%_9*zmK=S{|fbAKEMlKzlU>wd>N0v
zd5Xn*il7Zr!Xur8j3BESDBrrtprOi1N|D2VpYO@Y6c%b?s=!F-oNEKvx}9*cHj{O0
z?BYnWhdsFkU%?
ztyM$}!mF^Xx|}dH6$z#U_-p-z0^fnZiL2HFZ9P3$y}1*?(X&yUL;g#hR+&u8dpQd$
z!#L7(?XILG7~c4+5&ZJo&(Z(Khsb}t6Sw~Q1pOaP;MS)v!BC@tv%eFZiCsC*P|!j$
zB^PQlIcjCoE-8gMqz9~%Rj?SVA(I?WJRfXJ6MTH5LwE$2nmY!27b2T
z)*#%zdjb2~N3o}27)K6{;(Yy4>}edPvSS4O`P;E7w+?IC8(Q@RPB
zGDpxm_y%+4pLojNFA4eq`@rNR#*ROS+zboWZ0f||xoaq_tff||
zp5m9*+AEUbn(GdIjUM`iE{Jc9K-+K&PP{aQimlB!e)Syo9U4W};w3n8`ZOFUsoAkz
zq3|O>qePNih8dmXw7*~!0d>1+8S)UkqTeP^96&5pvYIW!U@H$&@H8W-={!tv<77Vy
zfH*(wd2t9e$?Z5$F^)$&Z{m03kMY^zcQ8^jf>3=lqP-GuYVaJAJu+aOVWnVFBFr@&
zE>3Q=8%6I^#qT2WA1hEa;#hH8qMyaL2V$6|Sb3+_!tW6Sz19DC^@
z?mT`Bt*Z`3KQF8~wi(Xu&V=q7sEAqdaHsNiKuT6TM$S!8IaZ4Gz1`>-+(n~LfF8T}
ztg9E;nhA)bdk}E&4z%%yFf;cPC|n2OpZyVuKMG~W8L-Mb1duD}^AzODPAnceN!E9Q
zr<)n88(XpV;A&JZufpb>E%@Nd+xW|!Ut+Li3mS_X@$$$u>a-m~Zb&g!q}1Z^#V7da
z`iBS)3Ww(mFHb!8>f3nm?j&yA3d6{rcvRQq;*;Nc;^c@C_g)Ah0u=+3*^0V#t*EIf
zM|fBWN|rB&+2RAOyDPHj`r0k^v}{6*h8n4UGXvm3M1oIJNkqIx4(vlAEle$|S%szz
z>;8}U3Zpla3kKknya&2@$6<&)47bp3IB173BjPqB#uA846|~W&ow9v917;M}wWb=myuH&ow%
zj;w%8A)R{i@HcxwKE}?U$DXmxI6u`V^bFp3dp{n%wH06fJ{ILwb1^SxJ{qd5C|DFj
z`Ie=|8=nBBwBD>nSxXtR3bWC$z6GU~rC3y0Ku~4JXP(zpR#swOHcf`QPQ@i<0_@nW
zuk`eTCUhq}5>LWA^*OMCBx(nNTYNoK?&Huc?*f~<4APo@Fwt#<6IEb>yCK_sL72Xh
zRU*ZIF8tgApm#DL+>>S)osGebJ^1YYQ@pwBGF}|JiZ>44L$X&Qw5%2eM+02wd%WZV
zH*=$XD&A(G~5SrLQX#a3nEBE
zV?&WsoP%g$cx~-%aBy<4cclX?L9?)FpbrBhd&qM(At5J~Ji-ooN-qoC!w*2^+773p
zonV($6TQrUys`;meLZ~Z&%w2-1&Xi?u!+rJBAdXBT!M(uf}c3gHgm$WP##;34BA?d
z=#_#camD!R$rt$Y)I(fo8KrRo*V@nF)}AR`J9-)CI*wvuXacTkSG(X0Z$mNdWf91X
zBlR<>Asga{lBz1a`?L)|d-s>P{l-a@*DgYIVlqr#0slvE7Z(?#WTaBAXh2?m0pam<
z^FE-ox)ys5AErGt0kEdeLiw3!EIn)$Ca!e%fLll(rLmnbt$Q78&T>kR8PIiHhqKpq
z7$eR>;n4?W=@B?stHJi|qjg^+<$IogFwkrC=*j88g^>%G8a$7K)q8NLd=M{C3cR`L
zES^rjfvY{2upw;|76#>`Cb|YAONbaP9~FXy?jh7OED{)ory$hwans?%^*gxz&WE`6
z#uF5lRnd~0Q8>q6&AV_}MFlbz%!iM^Khm-@kV?QN<+lM%pYNyLQ7T%m;FtTn!bmZj
ze6jvf9^B0{pbrW`{I)~Thp&K}sRf3`gM{$=Fmuse1ZF&ji+ML3G?evc_k!slv865o
zrIir{=I^gl8E|Fj3T_{I5d*osXinaM`snpkY&W1er4>7i2k<7L{)>H6SUrC&f?R^A
zv~+`)#*1jJ1K+0RyBjRO45mPAYR)2*)ioeCc{ZYH7`%9wvTN5(?}nt5Btc}pTK1yW
z?4t5?>Ffwwa;bEyJKIjyA0
zbqLeNqByhy`zv?iz1#0%ck6Bhr~;@C;mb&Y5>tzf$0Z>+sko*JkQbj{*5vn23WsI9
zMfsIVt(NvnlG{4c;;M$+St!Ou{ABnmgtaBA3G6_pGJqI2Z=@{K0i5ES}@TQW#tQKHQiF<=1bKtQBpCL*ZiERR++AC
z#r))W;ic4ju|JjnBqs>5Z<6J2DxrzlZehML3D~0>$kZrh-XCtXpkW{r5X>Fa*7|rm=SO8UY8W^>X
zR6_hatr+TDLQT&ANG!21*9;?gJ!R73dO@HWyf7(Av9ui&9Vw7
zB|Pca3`+=Rm;+$+4u*F?7|a1w;fKf34Ojy9Sd31+fU*s=#I&sw#j9g6E7qPr3aYbV
zHfw}sD52-zZ8Uo$D=iK4msF!{=L90s@)0zD6_T5eLp!SvjJ6nzB8o80LfMQ!M$DHH
zd_u8{t8z6E+sZ_AXd;SxchgqPViX-n@A*`OHK}Y#RK-6N$(8!ARN1K+P6UFJJihSYWaQ
zAb@NvC$w;*hDXQFVH|t;P2@FnP<^uuaT)engTHr43l(eAi(f+5$D4I@M`p)45?ge9T4
zYZ!Su4nv!mkD~G02-tcQNh24r>ZK<*_Q$VKHTeM6p{q2m3tJ|PD%vx#zM~h($;lWT
z9E907072o@C9)=ySSj%EHp7cV^!5paCCEz0;z$*-0`l=4Bfr1^TzusbZC~07v2F>Z
z-pvROw-Dc)c675R!gF&3aJP%hN17(O6ZywpNBPJVRE$m`Z0Hhnm7~zEI)>=+C&)kd
z0lf0}LZTy!JEwq=@f&4%McP{jA&IFdY41mIa}SckQn7f|IxOnji9`U`w3_QJRA6#O?`LTu#@r1eiBbLbBAiQDWp
zmj}^Z>;c1wWk{x71;xZ|7A{?lXzH+}EGb9VqjwQnw-#Y#P4Fvdgm=zLm=~{sIlBsF
zyC&dH0juX5g$+F;=<4o9YU&(>goGoWw78ylXJ{yO2+8i|fSH0TN6yZpt?siCL0iqO
zBs}lhyt7FZ0bo;(Lmsjdir7)oW`YpC0@#ZJa+V69Vi%alQdXV<*02m&9ak{^*MFev
z{ePk2l~17RyAOTW8wja6iHOFd2WIYUOR?qT
zBr-CWA$#d^Bo`JTVbuoYtnR=|KYxN-uf2xr4NC3WS*u{xR`m7n
zL|j4~q9S6^H!uJz)f7SDlx8jd@C%ASSWG4|Xt_6gK@PzdHG2tk>;e;eQHO&~ze<$)
zIGmz~A#=>I+f(dF9gK`st>E`53F3P*3~iT{%^`QqhAf~1d+xl08$W)Jz0bbKnb#j7
zV8sEb)h!6m??vLCn@HXN2!_m)b}N&>PHHW*vFT7ais2S%q)z4nEIxD%#q?W*^xQn;
ztRFxH^(fwW{WV;?au%m(5#Y-8DLi=PCBhvy+I&S*SyH|h{k!*LR=5?jXQ!jHvy;m6
zOqj?Sd0~Al;q)2~b8tMWR#ai;tSFenqV1VYD$#^PnRx@wNvFVu3{x*L+}@lPTdBs)
zT~iH}PG!HA#3iSc#)DC%LLJ@#OZIu3_{-nX|Lu3U^U>Eh^4>SJ$LAhg*?MTA+7Y_z
zE;9DN2AQdi)XRexCFA)GaP*rAxtAN1g{=g3$C28;8z}`vDC-_Y%it)k-I~Oi$>X>|
z>l$Y-ox+7{7hv)v`|@~N-`3^eoywI7>*>`~+m)^P$STOZGhhhcKQjPYdiPrf%`lo?VE{oQK%CK2Q<4us2(X
zinFm~wF25ve+UD={5_`r`2TSA?%y!=;y*F|=AWs}b{|d-8^HQ^VA)H5K-}^ds04Qx
zL>4)!p{d*jX>csnCV9};9YEUTLnLkNLw@HVwv8Ue)mxXbc1s634j;teiKCdjb%R9q
zB9RGBR<7NOgD<>^RfK+rPM$|H?OKRWNQ7@hDtu?gl6axy-m%CpS&5Z(l*;DiA|Zn+
z4BB(ci!67KgLA=suo;t(F1So0TkQ@^wcPjf$ev4_<}A(+oXJ>kHP%
zMC1?!+A{ha4xe}qv9Ym8O(U;{ilzQIwj1V&;>&1Te7Gb)wzQc$yr+6s1G6R|E(
z*1rKZ{~@I9x2T0k36&;B!7G9rLtEkaPw5Nw$XcEVXXA2eH1JcWd?WINLZ1yWk4!Gv
z2wHX?m%jN9d*A;nwqN)YcAWbf7XL4>F#GrLnDGg5?h5#%?}r1Wc7ZWEGvrJjEBl}+
zYJ)S4c*;bfJ$=aS*o9N)E@0!nVWh37!IB-j5Ki-+c<>r2&;WOSN-`=X%-$Ai1zp3|
zz8y%-DMcb>`;z7%6s;Me9m*MG_;{=tIEgyirW6_+j1EevTH3KEXr36Sbo~)X*F6R^
z^%Wedzn2O515Uj48eppsRm
z_zG<|Kf~CgKOuYDS2%U!U-0pLo349{#w2EhbwF+K|Bvt#r&3RE1oT~jJ9XJp$Ic;Y
z`wq;fHt3DJ_i+BkCDeDdqo}?P&t1QY3s2vJlS*y>c9^SLjlo0Dp}Frc+DERVb8Hel
zM{lCIVLR$JA4PfdFbY?-VehG{^urF~(Zdta8F)6#`y9!oqyp{2n_%Ag9^zB)KxAnk
zSyCVu6QLlP`Rf#FX9Bi7NSta2@*<|cOR|f}0m%4_lv;w!7c=&C476+`CSKu*1y
zYVlblE3Yqp@N%mt?n!PjKS*|26r9Yf;ONy1nRz1uvQE$sJ|3ZLSnJI9US#kj?k)%!jpz2
zhP>Ba%*kotMIxDAB&IkN7SU<*9mB{eG+k(@$@26R?{GpbciKqoM?W+Pg()6j*{tert4!fc~0_BP_Q6@O+)
zOz9+sE9GQGEAW{oF>d^7mQ1-&ST4MxS}4vyaj!sT>C33`tx_&{`7Q9IzhfO6Yf@S0
z?Sy7cBttzqLKgcAd*$ZcO!mgKjI(XmPG0V7WU5)qq+UZoZV^7om4uh|(pHkogn0H`
zeKnfqXNjyDB)XGL&1^-5?#d-8&YK0T1#ecD-{+t*tjf3
zZtacCF$RU&56gKgnLR%dxylQfN5WJ4tyPxfrbTgRxSsl=Xo7v`kslk#kzLTgD1B+Hyvoxic^nx;U&8=){){#-wL-N*>PwfvE
zw(izTRHaL_=1ZL1Bx8qu79I`~QGpUANpiFODx<%x>^zBVID}urMHcB!5!v)2G0iU!
zR65DrpgfUV4w$l2ZEK?@D8QS=3%yt#>Pz0r5OkRl6s-&-;2C>XhI+7Bm&!m>IuXHM
zC}+=N;NLkE-7v=Fa6eNWI#MeP#5ayHzNwnGUn=H>ee0>Lt0sJXHiIgQ0LzNOO1q$p$JW`g*FytyIj+LlPmMD#v@NksOt4%!p
z(%T6#T*l64EzS`YI7HUsxul5H!As0bY(^$mnZKT6tW6(p51#9+Wqh!efvzgXdMX%c
z&O@6XLYSX3YvO|$>n>$`?|RDe6L6fXHr4aL=|<|evboDZU742f>Oq#*jndKG#rwOm
zc<^cp_uk5+xuu?@4F-lgT4=7UAanN_bJ3||MVMj&WyCI$OsN+pLb@hWxFAbnj-b0L
z%v@57pOJX6OQJqgXpM1iYne=r%GQy9^iD#$uAp{XiBnWP4$E~o_~qiAGe$)3Tg+LQ
zAxi9N(WosfEC>t=A}%qJB}+mm%}%1PX#>6bLUNOr(p{g=V7rFmvtMSk4#9uo?M(Z%||DuJz-(Sm(z1ciCoy+OTJd*1A2`k%7c#4*kt;fw=-R9fL
z&}Yb)C8R1VO5z!3qby29E|e%wlcN@)Uoc;Ub+yE~0g240rxIsjiJgl#?tv>#T#lEk1NEh;>>FyQr979S
z)iI28ih!gnQ1wEIh
zi^*-jGrLRsH7HV+TbR8?gvSCe4=KSb*?@Cw6TT}-8GPjyyD$C*N7t~QYSq?4wC1qjh1AuoqqU`$bvX%?
zrbV)9*+N#X2%)W^oT7|)Vne*}_jbYE#R+4!8`(Z%yo71{Syk1Gp`whsre?}pHxZv#
zM|wpU#XaNHP8^`~;0yE(3-Wgq
zFo?x0JF%neX-XOeYI#%?%_F+Y-ng9EG&fF5)G|e#%LNEqjvKsy1o%S
zynRH9h<e$y&O^s%QaK<3TCogkk-*#Rc>*4v$BEJn<47EDe
zj6QF!UhB*i5(P05d)q8cROhNCd|hSa#mEWvmPCwYIM~Vv@-XMRiKTUqG%rejHX(vZE*GWBO*4A{{Ak8x^-wW6Yz0!B0AKc
z(SZhz9iJpJJ|6c4{-~_1OkpukX~`vomv1J%eS$2*DCOn#RF$qLx~vD??xS?;s_Cw&
zWMfr1%~~z1OB+e<=rdEC?cpS&e3isT%`CQ7o7;=OpqLbFo+eF{BsVcr4jcVBOOl)8
zV__SH!Y170X-RI+R^wYMwY4QhYa=;zWD7^9`)OFWiU1Es)QLxCKvU2h&YVr0D
zz)GdWbAcauRrO?Rs|X4WMWs@it(-QJQ&@}Feue(Z
zMXAb-cjgbCJ~6#Bx$~Ow`7z_gCe+%On7NC|c8R1bAd3r`8~Ngex8b9QaPM>e>&$zc
z*9_1Tm_>zO3i%5X$o5HK=T8u+PT^=h6F87q!~NkyeD~WA_~H*YxpHEVnGkyK6fTwa@#xe=`1;TM@WWsE`q3wR@yB2B*1=W=3+&jG
z>&WfnoqYS+HGbE&lj#)wOo*|t0=_(WmQUaN8K2y{Wm^7^uP(tir-A?A%F&Gs720z^
z=fYnf+~CJc*SJLP!KhHix6jORnPWGko`0hr2{4|fRep|!;+#O*@u{|GM
z9_ODt;mPeQe9$&D6XHyUo_mLOGu7b3rO8PC{Qdx3E#muIseCXR$sdm`=lV@n&Hg_YO~Ru)~`VFK&V__VDCvERQavad$MD5671B{qG0)?$O8G
zI9|s$H_mdWv3(}Qyz;52>*OHh99pd^S3us`P=O#e*EeK?!B>v
z8%Oi_{=IWtuUbD7;`O{jzP@sbW1Eurmnvpl>r&7D(Kyx20I
zKm2l>A8x3;!vnVl&B
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/button_disabled.tga b/ElvUI_AddOnSkins/Media/wim/icons/button_disabled.tga
new file mode 100644
index 0000000000000000000000000000000000000000..f9514a8eca465cddfef7bdc473d5afbb8fb7eca5
GIT binary patch
literal 428
zcmZQz;9`IQ0R{mE1&)3gm!a|h|Njh(ATEf}2x7E@SP0OBsiF;4MKh*~R=5hVkyuo;
zz*RJX?82e~EChB(Gl&Em2{sMvBCtdYssz|G2nnz=!8#aWmVq^ZJqWQCq!?iw!U}||
v!RoMi2ka<>FAy$k1sRHPd^f5ch@c0GhXjSXhIs~i`upidxOw`x>M;NSnu2^8
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/button_frame.tga b/ElvUI_AddOnSkins/Media/wim/icons/button_frame.tga
new file mode 100644
index 0000000000000000000000000000000000000000..9fabe89c37e11eeec0597d7f6b559514c90fbedd
GIT binary patch
literal 124
rcmZQz;9`IQ0R{mE1&)3Ymx=_;^pK!X*D%juPk%q%2sck3S3L#*yMqoc
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/button_highlight.tga b/ElvUI_AddOnSkins/Media/wim/icons/button_highlight.tga
new file mode 100644
index 0000000000000000000000000000000000000000..9439602f8bd29fcdce263daa15cc54c0574821c2
GIT binary patch
literal 533
zcmaKpJr2S!3`X5dh^ZqZ7l2z7DG~ySKXIKl6eh&kI8o?xlvE`F50M?e*qxdoL9aa9W&RuSfzVvdhU^nRGcBu3}9?VFIi`hgOkJ3PyG6
z1?d^pQB-G8${?l;-AO4#i?3;^@&GV+Sze#1PSU@2rn9M_f2(p-m~JS|tSx$g=~7hf
Z_@CjA!3H}W&dtRh?S8kqZtS*M%LmP))hPe~
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/button_pushed.tga b/ElvUI_AddOnSkins/Media/wim/icons/button_pushed.tga
new file mode 100644
index 0000000000000000000000000000000000000000..89d0c416976931bf48ebf29a0beb5f1526931b9f
GIT binary patch
literal 470
zcmZvZOAf*?3`Cu-5UU=63&1Uk6bXUEPaLNo3M<5s)6PR}2q6p0^}LSl#B6EPDXp~C
z;$7EuFojnL!N>@$KAm7Cjgm)7bUD$d#62e{(V$RM_|f{07bQqHkxW4kGDb{^R&z$8
zndg~3AlL*CCqn)y@Km{wS*Cxrmi}`o>=&oNnt;&hk9Y+L?Ac3*8zaOA`8<-4@tlvB
Q>grGauwUP{ephX50QsWO>Hq)$
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/chatting.tga b/ElvUI_AddOnSkins/Media/wim/icons/chatting.tga
new file mode 100644
index 0000000000000000000000000000000000000000..fe92032323def20a491a2ed5271324894f811f6b
GIT binary patch
literal 1068
zcmZQzU}As)0R{mE1r8W*lpfk4@E;10eL<`kNDr}Uv8hA0bCf+aLm(t5)HTdA*wf!n
MH^R-+$5oF3008eb1^@s6
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/close.tga b/ElvUI_AddOnSkins/Media/wim/icons/close.tga
new file mode 100644
index 0000000000000000000000000000000000000000..ccb57ce6f9f9cbea0a07c8d2255b4221de8ee089
GIT binary patch
literal 487
zcmZQz;9`IQ0R{mE1&)3o_diJJf3L8xFoZ<}w;80EZPlt(|3M%$H1t16puD^s%m;}#
zp&AF#proYq|1VIcj<1*D$^WKf)5?CI~P8{y{ZQ!A61I2qqv3
zK_-L1zkmP0G{{733K;|i1^+jJlz>^-l&~OM22u&)V^i1&l4Jte4D$z?DlnG~W*o>b
l$e{!hM++rl;{XzC(3lJf3Uv+h4EFT*(~WTR^l{Z=003i%_Spac
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/friend.tga b/ElvUI_AddOnSkins/Media/wim/icons/friend.tga
new file mode 100644
index 0000000000000000000000000000000000000000..16c1b46d46d052f4553c3893896945386f954998
GIT binary patch
literal 964
zcmYMzaY&SR7{KwDac!rYc9e^79*Pqy*qP>e+}+Y$a_W2S^*qnh-rYPq<#x!$hU;!a
z+!S}M>vlOyy`+}ASy(Kw%>`*28PZ(IP;f%A7Ax46&={}7-NBlf4hM_+dky|V|s$w!A*WNx@g1vb23W?jCBrc_32ZY8s-
zhnLE$F09yNgv^71f_Z(yI@tbsx
z-zGPFjc5GdknI^DeS0fUiwOkRAQ?5vULHTA?&UBWorl@v8750kDwh!oLPI2`R*;fE
zvDwv!P~4_8oYN6-+96dH3I75AncW=#
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/hide.tga b/ElvUI_AddOnSkins/Media/wim/icons/hide.tga
new file mode 100644
index 0000000000000000000000000000000000000000..8d8a9460526af6d1f7ed2215ba8f082e8eaa250b
GIT binary patch
literal 288
zcmZQz;9`IQ0R{mE1&)3o_diJJf3L8xFocDl%Lq~oQrrC>2pFNd{u2~-aBx7V#%~4f
cWZ~WgSrHNx>Kf)5?CI~P8{y{Z&t(KD2C41-4+M-L7D$Aku!DmGLN$IX
dXeSHtE;I;2fVRlX9}Y7gL`7uN#yVF5fco!6hx_4Ogjb?m}~=hjZO}2Iqa;QNy&}p5%D-
zSG-+yo#pHqfE$4jJW49Ed=lf0##x}Bn$7C!IjqolTx!zZdTKyz%H
zy6H^{O({z52Ke^2jhY(|O1oycW21T&W
z^$XW$Wk#3RFfJ}pd1IWH+^GzZGnVGa&HGfF6hhGlhcWADs7*IhDwE>R1CFwR7Z
zZ-y-7R@L!ZYi|ZPIPwP{EhL%RPBSL}he+jYWD{q219j&C3-N7Mc6V9-{SkH7ZgNy)
z;AC@82FPyMLK999`TI|{9{+_mk-!~}VQ~A#(&oJQj@}tX-cFe|irdb9&3igdSO%}&fK;9(JeE2H|
zYqrS!!bY3A#%wIXPjUdWy26-m1;afBOJG&Zqqy$J(KKi?K-TjGWEU@UpwvaKM$ffa
z8abXMu$4p=CA^e+fD(@r6s7Fj5$obH&$e{#0efFk+-0wwDl5;gC_GtsqU7b%1%<`=
HuSov_r}I>0
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/history_highlight.tga b/ElvUI_AddOnSkins/Media/wim/icons/history_highlight.tga
new file mode 100644
index 0000000000000000000000000000000000000000..da9e3132b3838b599913d820c3370b4cd0fbf940
GIT binary patch
literal 964
zcmYk*-A|iU9Ki9%JHm~NbBW0=Br)>>Up9>wYK%b*Bp_jo4P2xqICYqeASz~yOkUPN
z$_5kIq{vuN=*ob$&=;WX3VST=L;FymEsO#!P3?xumc1nY179CWwrA(!oSc*2`Q)7Q
z`yD~Z7M`>{!X6({9EC7%Dk8xSSVUNv*%jE?e#^Her>qB+;isV)NpbAGPN5wzDP
z_@w$r-mm(O{rQ#befwjc0`}D{j8crgX_3LX1q`!(uFeL~dxMOHB82bUXCfS>u4{l3
zod)*jRgjZ+Oa*+~8RYaoc%pH2yH|@QY)HZV9aFq%)
z$G51P+Mv*!rsPJDU#{7yxoo6q+`$k1CeB@-LObf#B1lwqzaMLhkqtEN7-Qq%j<0d1a6>5!+XMod_2(Om$LUBJ8p*ZH{
zHF})0G@0ylIYl~bUOF6JdR;!O(RI!%*l|lh1+qRkjd0)$?-;|hxg<>CHS|hwuSa4)
z3D+;?j)B$kHmNg+(eakMWu(tpYit8D76~i)xF6b0f)+DDQ6UnV#d4Tcp>m)IuP82wyUZClbf#@uO2RaMmzF>-ZFHRu|1fleCT5s8PnJ
zl_(VXdH2r@)ygTp3Z?koJk4*)-F0Kr^m}~#?hc?EwR6EdL%&zTv7VsG>U;*so8Y<6
z{$^jzCb=i=w92c@#FP9X2C>M?jQW=`-juKgSCn}S_pJn)2Av9Iy<9+c@e(hVy2;fT
zxERkMCQ<}9Q^-mQFQ#uJB@%>`Quc2v>&jz(+tRTM?0(57zw}sHd45IV(Za(eZyYZu
JEY5#Z_z%*ge+>Wt
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/history_pushed.tga b/ElvUI_AddOnSkins/Media/wim/icons/history_pushed.tga
new file mode 100644
index 0000000000000000000000000000000000000000..ea9ae599aafe6b7e703588b69f7670e88a570ba7
GIT binary patch
literal 964
zcmYk*-%pcQ7{Kw@JHm}-&MPk@S=leZVuozPg1`iqSVMGB~$@Vb;&h*#LTPkg-sN@PkK8grn4T4REH@
zz`?u$j6j&EZd*Gi0Wagkxq9On5Tfm8~AI>Y)im>EdoLxmjT}Bvr2^Xc
z7Ijk_6q?hN+zImIEju;WjWmrrIM;9D((Nf)Mjf2(9;Vqe#jqr!>C~%$Ft~(pw1fSh
z+9+E{(I*CIG+LEl8|@Qr8is82dHu9oT&+%ZD|(&SeEVZ3(DA*1P8s4qxC+W0*FVgekm+UJ35?NDL^!
zdiU>Kn-LjVTE(=mNagi0Uh$+=AZIkgt2gdZZIN(pBpDLr-Hkodb6j(a^tzQ=2u5%v
z)BG@KCAX@MH(GjB;K1--d@`S6ax25E0yvda&O|qGMb?qG?=zp+VtHqWwTF+WyLyA8
zN(N49yHy~&VG~UxN%Wt;*?jy2Uowd&636KAqf;_)(J(^m_!Mnc7uumo+Qw|uDC4tA
z6pH-3^;?E&HA2D1R2T7ZwkqAR;2(KmII~X5c%I_jte0?|t9z_mm2%
z<n>#$|wc
z9o6{-W!*=$OrqAlz_Yx{vnGoA|ZYs8xd!R6;qoP=(J;0N)NFK9{WDAx~)u
z&!Gnlti(FHyF5~p)9^75W0%4$1x%XF?%;L=M)`jmr!t>WR+9e
z&tw$9nm<`6Ixg`}M%lkT86SRtR^gjcGH4v}j2#IA)FIKKi=fwQuhCu;sdW$rT_BmWW&
zWe7(Tq>@?8c!Rd;NA@jzB@%fecaucZrPRxJptM<;WU&h8@aAq}rDt#x1!D1yB-_eF
z;se;(Mfxtkz{>whn^VFmUTOji-=Rh79}W+autzC)6F8QKZF^KIbyDtD`iG8)wZj-|
zwvovnCph!62~hY4<(-yh=_lb-qyj|@qeyPU2wtyvFO1Wb-$Qv|THpty!Rlzee>DNz
zSE%q|Y2kiCAy0ftcC(LsZYSGEW|(fAre0rQZ0sl-ay6pH9{i=hn*ixY5}X$mrBqqc
z&K7#Qt85u=Fg1CC#l;KE9y-PN_&knNB@r*9^*w0t<8
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/invite.tga b/ElvUI_AddOnSkins/Media/wim/icons/invite.tga
new file mode 100644
index 0000000000000000000000000000000000000000..9014ade960b76b8253cfbf2656495d4322300ab6
GIT binary patch
literal 795
zcmYk4%Wo1<6viiXW}J>No!+5937wFEAO%E9j3rpHp@4-VO`%qb#t=28Hbxs`)R@MA
zuUHdmVj9!b$I`f9)s=~H$
z4iZUlxyTr&+k@arNsVmU{1@_zNFJ&Y0$$7yn5Q0a)Mx^Ud>!`l8AScUQsHVYM`F5du4p)!Y^
z*BGU5#@X-=v*}2-Z-ZDN9&>PkD06TSo`@$9ueErXyAJ2(d6)#IP<{6qvzzx3ZQUGZ
zExk7SM=VloBhaDR~
zL#t)3{K*-RU<4xF1AAoIyW4P$lL1brV`cJ4UukokkK4@5A#?o>q8C>os?MY1wsIvD
zX{C}jhUroT)0Jh&I^ir|LP3%^qi6UrMXTnVtKRkJeS)?!J=?iw_ipENzW3a7HJS#^Uu)DfYV-$R*R~w3FTS}oe2?DX
zo=y{w-Ng}^C9u57jn&V{>pM)Wd_;S;mwr*ErPG2>Ez;D~#6N&s{(@57CR}(%^;HG?
zki_)rH(lND-sZcIF&hs*%ch>
z65dP&Z(*Z$HqXFR7Ka$!3kau67=5=e`=%K6j}sCE&Iu7Ns*C775juwFXfZBe31=_`
z;|RfhfQus%(w%v9J(qFx4N#0mF*-&uNeb4{2^vnvINVaJe&;DxxqvI8>{Xy`I>yvu
z758`yOOKWLn-QdIK}N2L^!a4kg%Sr2y~G+Tf<#Nf@+>U_>X>J5X%O(xgAa$Kw3eTB|e9hZ#V*bF)h+LKfg3h#1hJT^P+
zZC$i=n$X(?x<{vRsSAYjFFD?PY8Oyf&}FiaOy^N#h0H{VXEB9^+cM&SwdPJt?XBo^
zI&^0`&|CUxuEqKs)Lg@Iop5+uO*1Hl$i@>j4JwtHIAb0U%4~sDu|zVnOf;TCl!BOz
z=KblN{dU4LInKLBcvr}WfVbJ$?JDA89;BD7%2V`jJo~Pc@(A>|lrs$|9yf
z3L#rYegBwgETI#%%)0HZq?6^}hpE9ay3XB+-sVq8TL7
zhDD+UB+-gRq7@|3LW%@Vqi|Y|)4A9@h%;OuK?e=akf2c4FwbC5e?Q#_H%}i|Jq7^z
Cu$$5V
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/prev.tga b/ElvUI_AddOnSkins/Media/wim/icons/prev.tga
new file mode 100644
index 0000000000000000000000000000000000000000..9fce14b5edd079bf73732c7ca01a78f66c4fa83d
GIT binary patch
literal 364
zcmZQz;9`IQ0R{mE1&)3o_diJJf3L8xFocDT+YXX#WIX-re>1AOHW0T7i$p6(q8W=s
z3rL~`iv-x@R#GHz8imtxoX*ARL7d?N4?0kIg#?AVhIs~i`upidxOw`x>M;NSFnn&(
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/prev_highlight.tga b/ElvUI_AddOnSkins/Media/wim/icons/prev_highlight.tga
new file mode 100644
index 0000000000000000000000000000000000000000..b779f1d22ee6f993b92100be46991679cdd9f0cc
GIT binary patch
literal 364
zcmZQz;9`IQ0R{mE1&;oU%@Y3^Kt!*wurP#$joS{AZDc(C>whzlw1&ajO#%%}5HZq?6^}iWaT^oqoghiqiB+-mT
zq6H+;f<*#saw{nkIE}(-IZo%|^dQb~fdm~iI75O$UBf(sJ^lT3BiuZFT=f_L`rMn+
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/resize.tga b/ElvUI_AddOnSkins/Media/wim/icons/resize.tga
new file mode 100644
index 0000000000000000000000000000000000000000..2a96f51ea7ed2fe219be7c23da14d07b21f3786f
GIT binary patch
literal 509
zcmZut$qm9V5Zs_hLA+7|4Zt%U1j!NtiA$6~1LmI-BxnHlY+CdUv7DA#CB+&_y0JDgYAk#AtahW673)fFbg5k2$JXoNq|{INRa6xNRU8-DI_S=HOw>E)89`w!p+mi
HRgVDxKW>NS
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/scroll_up.tga b/ElvUI_AddOnSkins/Media/wim/icons/scroll_up.tga
new file mode 100644
index 0000000000000000000000000000000000000000..6cb4e30ecc14cc02e9124b0bc76de964e86a704e
GIT binary patch
literal 324
zcmZQz;9`IQ0R{mE1&)3o_diJJf3L8xFoZ=qw-KbblkxPg|6mr_05E}5q6ws<9i#)y
zLg;7)Nwk6_z$}DB3rM0FBmrh2Bw9fdjUWjy3n4+KkKjQ9GASe|)HTdA*wf!nH^R-+
I$5oF30QoFh<^TWy
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/scroll_up_highlight.tga b/ElvUI_AddOnSkins/Media/wim/icons/scroll_up_highlight.tga
new file mode 100644
index 0000000000000000000000000000000000000000..b159d24db4c648b1b4993c39fab2c169a7c5b2d9
GIT binary patch
literal 324
zcmZQz;9`IQ0R{mE1&;oU%@Y3^Kt!*wurP#0I=2y|x0CVoum4~c*Z?qrQ=$o^qaCCJ
z%tGjB21&GnB)}|$L<>lw86*K_AtYKs5{)1UFbg3;rjH;&0u82+pitK^&tOk~Kivp7
JPaju31^~{&g^mCK
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/scroll_up_pushed.tga b/ElvUI_AddOnSkins/Media/wim/icons/scroll_up_pushed.tga
new file mode 100644
index 0000000000000000000000000000000000000000..b83cda13cf6132d15cbdcf378eebe0e5e696f371
GIT binary patch
literal 324
zcmZQz;9`IQ0R{mE1&;oPhKBzPAfi`TSQx@0o!bb~+sSzP*MBezYyg10{}m6hvonP
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/icons/w2w.tga b/ElvUI_AddOnSkins/Media/wim/icons/w2w.tga
new file mode 100644
index 0000000000000000000000000000000000000000..6df483bd80af4e3d48aa94338564d36c1bb61f7b
GIT binary patch
literal 1068
zcmZQzU}As)0R{mE1r8W*u+#t1054CWpf4HHME
z@yQ{p!^NglKQ43WAr5mpj3(7ikUm23i_c7I=!dx-MB}q-Fv^7lg}R1$27CJZ=|;GD
J`nc*b000=Jp=JO8
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/message_window.tga b/ElvUI_AddOnSkins/Media/wim/message_window.tga
new file mode 100644
index 0000000000000000000000000000000000000000..544da612ad5409a247636d5d8e4fe70738e10b1d
GIT binary patch
literal 6206
zcmeHLOA5j;5S_RZSAkx@3+OE>1Vq6fUPt#X#Cy5%Fd{|9zR@OHsI=SivKTU-N8vSZ
z(vHYT;&S4~LoHo3gSe{q{`!P5w=s4=iNPL#nVS&F)hx^O4rAGrsJX2BW<1eEUV6(*
zqk7tEkag|*6}ci;xTtsz$N|s6`(un+pcbeFYN5Oq?Qe|zfc=2|fLdTbuy)v&p6H#$r*_Ome0r}6@{{}T%U
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/tab_flash.tga b/ElvUI_AddOnSkins/Media/wim/tab_flash.tga
new file mode 100644
index 0000000000000000000000000000000000000000..038b0979769b18ac1507561d2bb66ba0f3cf6469
GIT binary patch
literal 730
zcmZQz;9`IQ2L=TO1r8AJ|K5wu692(0G%h1Z79_bF#9)Lf`#&l?8Ya|F5NK%+jk_OY
aAxI1aLV`kF!#smM{rz+!+&q0;^%wvsa03$n
literal 0
HcmV?d00001
diff --git a/ElvUI_AddOnSkins/Media/wim/tab_normal.tga b/ElvUI_AddOnSkins/Media/wim/tab_normal.tga
new file mode 100644
index 0000000000000000000000000000000000000000..74a2e5068029775d95ad825193d5f7eb5e0eb590
GIT binary patch
literal 804
zcmZQz;9`IQ2L=TO1&$^VcP9}42eZHgNa+7|VPWC_VAiMvC>TbA1RMrKHZdU5_TbA1RMrKHZdU5_
+
+
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Modules/embed.lua b/ElvUI_AddOnSkins/Modules/embed.lua
new file mode 100644
index 0000000..2ac7c5b
--- /dev/null
+++ b/ElvUI_AddOnSkins/Modules/embed.lua
@@ -0,0 +1,569 @@
+local E, L, V, P, G = unpack(ElvUI)
+local EMB = E:NewModule("EmbedSystem")
+local AS = E:GetModule("AddOnSkins")
+
+local _G = _G
+local pairs = pairs
+local floor = math.floor
+local lower, match = string.lower, string.match
+local tinsert = table.insert
+
+local hooksecurefunc = hooksecurefunc
+local NUM_CHAT_WINDOWS = NUM_CHAT_WINDOWS
+
+function EMB:GetChatWindowInfo()
+ local chatTabInfo = {["NONE"] = "NONE"}
+ for i = 1, NUM_CHAT_WINDOWS do
+ chatTabInfo["ChatFrame"..i] = _G["ChatFrame"..i.."Tab"]:GetText()
+ end
+ return chatTabInfo
+end
+
+function EMB:ToggleChatFrame(hide)
+ local chatFrame = E.db.addOnSkins.embed.hideChat
+ if chatFrame == "NONE" then return end
+
+ if hide then
+ _G[chatFrame].originalParent = _G[chatFrame]:GetParent()
+ _G[chatFrame]:SetParent(E.HiddenFrame)
+
+ _G[chatFrame.."Tab"].originalParent = _G[chatFrame.."Tab"]:GetParent()
+ _G[chatFrame.."Tab"]:SetParent(E.HiddenFrame)
+ else
+ if _G[chatFrame].originalParent then
+ _G[chatFrame]:SetParent(_G[chatFrame].originalParent)
+ _G[chatFrame.."Tab"]:SetParent(_G[chatFrame.."Tab"].originalParent)
+ end
+ end
+end
+
+function EMB:EmbedShow()
+ if _G[self.leftFrame.frameName] then
+ _G[self.leftFrame.frameName]:Show()
+ end
+
+ if E.db.addOnSkins.embed.embedType == "DOUBLE" then
+ if _G[self.rightFrame.frameName] then
+ _G[self.rightFrame.frameName]:Show()
+ end
+ end
+
+ self:ToggleChatFrame(true)
+ self.switchButton:SetAlpha(1)
+end
+
+function EMB:EmbedHide()
+ if _G[self.leftFrame.frameName] then
+ _G[self.leftFrame.frameName]:Hide()
+ end
+
+ if E.db.addOnSkins.embed.embedType == "DOUBLE" then
+ if _G[self.rightFrame.frameName] then
+ _G[self.rightFrame.frameName]:Hide()
+ end
+ end
+
+ self:ToggleChatFrame(false)
+ self.switchButton:SetAlpha(0.6)
+end
+
+function EMB:CheckEmbed(addon)
+ local db = E.db.addOnSkins.embed
+ local left, right, embed = lower(db.leftWindow), lower(db.rightWindow), lower(addon)
+
+ if AS:IsAddonEnabled(addon) and ((db.embedType == "SINGLE" and match(left, embed)) or db.embedType == "DOUBLE" and (match(left, embed) or match(right, embed))) then
+ return true
+ else
+ return false
+ end
+end
+
+function EMB:EmbedUpdate()
+ if E.db.addOnSkins.embed.embedType == "DISABLE" then return end
+
+ if not self.embedCreated then
+ self:EmbedCreate()
+ end
+
+ self:WindowResize()
+
+ if self:CheckEmbed("Omen") then self:EmbedOmen() end
+ if self:CheckEmbed("Recount") then self:EmbedRecount() end
+ if self:CheckEmbed("Skada") then self:EmbedSkada() end
+ if self:CheckEmbed("Details") then self:EmbedDetails() end
+end
+
+function EMB:SetHooks()
+ hooksecurefunc(E:GetModule("Chat"), "PositionChat", function(self, override)
+ if override then
+ EMB:EmbedUpdate()
+ end
+ end)
+ hooksecurefunc(E:GetModule("Layout"), "ToggleChatPanels", function() EMB:EmbedUpdate() end)
+
+ hooksecurefunc(LeftChatPanel, "fadeFunc", function()
+ LeftChatPanel:Hide()
+ if not E.db.addOnSkins.embed.rightChatPanel then
+ EMB.switchButton:Hide()
+ end
+ end)
+ hooksecurefunc(RightChatPanel, "fadeFunc", function()
+ RightChatPanel:Hide()
+ if E.db.addOnSkins.embed.rightChatPanel then
+ EMB.switchButton:Hide()
+ end
+ end)
+
+ local rightChatToggleOnClickOriginal = RightChatToggleButton:GetScript("OnClick")
+ RightChatToggleButton:RegisterForClicks("AnyDown")
+ RightChatToggleButton:SetScript("OnClick", function(self, btn)
+ if btn == "RightButton" then
+ if E.db.addOnSkins.embed.rightChatPanel then
+ if EMB.mainFrame:IsShown() then
+ EMB.mainFrame:Hide()
+ else
+ EMB.mainFrame:Show()
+ end
+ end
+ else
+ rightChatToggleOnClickOriginal(self, btn)
+ end
+ EMB:UpdateSwitchButton()
+ end)
+
+ RightChatToggleButton:HookScript("OnEnter", function()
+ if E.db.addOnSkins.embed.rightChatPanel then
+ GameTooltip:AddDoubleLine(L["Right Click:"], L["Toggle Embedded Addon"], 1, 1, 1)
+ GameTooltip:Show()
+ EMB:UpdateSwitchButton()
+ end
+ end)
+
+ local leftChatToggleOnClickOriginal = LeftChatToggleButton:GetScript("OnClick")
+ LeftChatToggleButton:RegisterForClicks("AnyDown")
+ LeftChatToggleButton:SetScript("OnClick", function(self, btn)
+ if btn == "RightButton" then
+ if not E.db.addOnSkins.embed.rightChatPanel then
+ if EMB.mainFrame:IsShown() then
+ EMB.mainFrame:Hide()
+ else
+ EMB.mainFrame:Show()
+ end
+ end
+ else
+ leftChatToggleOnClickOriginal(self, btn)
+ end
+ EMB:UpdateSwitchButton()
+ end)
+
+ LeftChatToggleButton:HookScript("OnEnter", function()
+ if not E.db.addOnSkins.embed.rightChatPanel then
+ GameTooltip:AddDoubleLine(L["Right Click:"], L["Toggle Embedded Addon"], 1, 1, 1)
+ GameTooltip:Show()
+ EMB:UpdateSwitchButton()
+ end
+ end)
+end
+
+function EMB:WindowResize()
+ if not self.embedCreated then return end
+
+ local db = E.db.addOnSkins.embed
+ local SPACING = E.Border + E.Spacing
+ local chatPanel = db.rightChatPanel and RightChatPanel or LeftChatPanel
+ local chatTab = db.rightChatPanel and RightChatTab or LeftChatTab
+ local chatData = db.rightChatPanel and RightChatDataPanel or LeftChatToggleButton
+ local topRight = chatData == RightChatDataPanel and (E.db.datatexts.rightChatPanel and "TOPLEFT" or "BOTTOMLEFT") or chatData == LeftChatToggleButton and (E.db.datatexts.leftChatPanel and "TOPLEFT" or "BOTTOMLEFT")
+ local yOffset = (chatData == RightChatDataPanel and E.db.datatexts.rightChatPanel and SPACING) or (chatData == LeftChatToggleButton and E.db.datatexts.leftChatPanel and SPACING) or 0
+ local xOffset = (E.db.chat.panelBackdrop == "RIGHT" and db.rightChatPanel and 0) or (E.db.chat.panelBackdrop == "LEFT" and not db.rightChatPanel and 0) or (E.db.chat.panelBackdrop == "SHOWBOTH" and 0) or E.Border*3 - E.Spacing
+ local isDouble = db.embedType == "DOUBLE"
+
+ self.mainFrame:SetParent(chatPanel)
+ self.mainFrame:ClearAllPoints()
+
+ self.mainFrame:Point("BOTTOMLEFT", chatData, topRight, 0, yOffset)
+ self.mainFrame:Point("TOPRIGHT", chatTab, db.belowTopTab and "BOTTOMRIGHT" or "TOPRIGHT", xOffset, db.belowTopTab and -SPACING or 0)
+
+ if isDouble then
+ self.leftFrame:ClearAllPoints()
+ self.leftFrame:Point("TOPLEFT", self.mainFrame)
+ self.leftFrame:Point("BOTTOMRIGHT", self.mainFrame, "BOTTOMRIGHT", -(self.mainFrame:GetWidth() - db.leftWindowWidth + SPACING), 0)
+
+ self.rightFrame:ClearAllPoints()
+ self.rightFrame:Point("TOPLEFT", self.leftFrame, "TOPRIGHT", SPACING, 0)
+ self.rightFrame:Point("BOTTOMRIGHT", self.mainFrame)
+ else
+ self.leftFrame:ClearAllPoints()
+ self.leftFrame:Point("TOPLEFT", self.mainFrame)
+ self.leftFrame:Point("BOTTOMRIGHT", self.mainFrame)
+ end
+
+ self:UpdateSwitchButton()
+
+ if IsAddOnLoaded("ElvUI_Config") then
+ E.Options.args.addOnSkins.args.embed.args.leftWindowWidth.min = floor(chatPanel:GetWidth() * .25)
+ E.Options.args.addOnSkins.args.embed.args.leftWindowWidth.max = floor(chatPanel:GetWidth() * .75)
+ end
+end
+
+function EMB:UpdateSwitchButton()
+ local db = E.db.addOnSkins.embed
+ local chatPanel = db.rightChatPanel and RightChatPanel or LeftChatPanel
+ local chatTab = db.rightChatPanel and RightChatTab or LeftChatTab
+ local isDouble = db.embedType == "DOUBLE"
+
+ self.switchButton:SetParent(chatPanel)
+
+ if db.belowTopTab and chatPanel:IsShown() then
+ self.switchButton:Show()
+ self.switchButton.text:SetText(isDouble and db.leftWindow.." / "..db.rightWindow or db.leftWindow)
+ self.switchButton:ClearAllPoints()
+
+ if E.Chat.RightChatWindowID and _G["ChatFrame"..E.Chat.RightChatWindowID.."Tab"]:IsVisible() then
+ self.switchButton:Point("LEFT", _G["ChatFrame"..E.Chat.RightChatWindowID.."Tab"], "RIGHT", 0, 0)
+ else
+ self.switchButton:Point(db.rightChatPanel and "LEFT" or "RIGHT", chatTab, 5, 4)
+ end
+ elseif self.switchButton:IsShown() then
+ self.switchButton:Hide()
+ end
+end
+
+function EMB:EmbedCreate()
+ if self.embedCreated then return end
+
+ self.mainFrame = CreateFrame("Frame", "ElvUI_AddOnSkins_Embed_MainWindow", UIParent)
+ self.leftFrame = CreateFrame("Frame", "ElvUI_AddOnSkins_Embed_LeftWindow", self.mainFrame)
+ self.rightFrame = CreateFrame("Frame", "ElvUI_AddOnSkins_Embed_RightWindow", self.mainFrame)
+
+ self.switchButton = CreateFrame("Button", "ElvUI_AddOnSkins_Embed_SwitchButton", UIParent)
+ self.switchButton:Size(120, 32)
+ self.switchButton:RegisterForClicks("AnyUp")
+
+ self.switchButton.text = self.switchButton:CreateFontString(nil, "OVERLAY")
+ self.switchButton.text:FontTemplate(E.LSM:Fetch("font", E.db.chat.tabFont), E.db.chat.tabFontSize, E.db.chat.tabFontOutline)
+ self.switchButton.text:SetTextColor(unpack(E["media"].rgbvaluecolor))
+ self.switchButton.text:SetPoint("LEFT", 16, -5)
+
+ self.switchButton:SetScript("OnClick", function(self, button)
+ if EMB.mainFrame:IsShown() then
+ EMB.mainFrame:Hide()
+ self:SetAlpha(0.6)
+ else
+ EMB.mainFrame:Show()
+ self:SetAlpha(1)
+ end
+ EMB:UpdateSwitchButton()
+ end)
+
+ self.switchButton:SetScript("OnMouseDown", function(self) self.text:Point("LEFT", 18, -7) end)
+ self.switchButton:SetScript("OnMouseUp", function(self) self.text:Point("LEFT", 16, -5) end)
+
+ self.mainFrame:SetScript("OnShow", function() EMB:EmbedShow() end)
+ self.mainFrame:SetScript("OnHide", function() EMB:EmbedHide() end)
+
+ self.embedCreated = true
+
+ self:SetHooks()
+ self:ToggleChatFrame(false)
+ self:EmbedUpdate()
+end
+
+if AS:IsAddonLODorEnabled("Recount") then
+ function EMB:EmbedRecount()
+ local parent = self.leftFrame
+ if E.db.addOnSkins.embed.embedType == "DOUBLE" then
+ parent = E.db.addOnSkins.embed.rightWindow == "Recount" and self.rightFrame or self.leftFrame
+ end
+ parent.frameName = "Recount_MainWindow"
+
+ Recount_MainWindow:SetParent(parent)
+ Recount_MainWindow:ClearAllPoints()
+ Recount_MainWindow:SetPoint("TOPLEFT", parent, "TOPLEFT", E.PixelMode and -1 or 0, E.PixelMode and 8 or 7)
+ Recount_MainWindow:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", E.PixelMode and 1 or 0, E.PixelMode and -1 or 0)
+
+ Recount.db.profile.Locked = true
+ Recount.db.profile.Scaling = 1
+ Recount.db.profile.ClampToScreen = true
+ Recount.db.profile.FrameStrata = "2-LOW"
+ Recount:SetStrataAndClamp()
+ Recount:LockWindows(true)
+
+ Recount_MainWindow:StartSizing("BOTTOMLEFT")
+ Recount_MainWindow:StopMovingOrSizing()
+ Recount:ResizeMainWindow()
+ end
+end
+
+if AS:IsAddonLODorEnabled("Omen") then
+ function EMB:EmbedOmen()
+ local parent = self.leftFrame
+ if E.db.addOnSkins.embed.embedType == "DOUBLE" then
+ parent = E.db.addOnSkins.embed.rightWindow == "Omen" and self.rightFrame or self.leftFrame
+ end
+ parent.frameName = "OmenAnchor"
+
+ local db = Omen.db
+ db.profile.Scale = 1
+ db.profile.Bar.Spacing = 1
+ db.profile.Background.EdgeSize = 1
+ db.profile.Background.BarInset = 1
+-- db.profile.TitleBar.Height = 22
+ db.profile.TitleBar.UseSameBG = true
+ db.profile.ShowWith.UseShowWith = false
+ db.profile.Locked = true
+ db.profile.TitleBar.ShowTitleBar = true
+ db.profile.FrameStrata = "2-LOW"
+
+ OmenAnchor:SetParent(parent)
+ OmenAnchor:ClearAllPoints()
+ OmenAnchor:SetAllPoints()
+
+ if not self.omenHooked then
+ hooksecurefunc(Omen, "SetAnchors", function(self, useDB)
+ if useDB then
+ self.Anchor:SetParent(parent)
+ self.Anchor:SetInside(parent, 0, 0)
+ end
+ end)
+
+ self.omenHooked = true
+ end
+
+ Omen:UpdateBackdrop()
+ end
+end
+
+if AS:IsAddonLODorEnabled("Skada") then
+ EMB.skadaWindows = {}
+
+ local function EmbedWindow(window, width, height, point, relativeFrame, relativePoint, ofsx, ofsy)
+ if not window then return end
+ local barmod = Skada.displays["bar"]
+
+ window.db.barwidth = width
+
+ window.db.spark = false
+ window.db.barslocked = true
+ window.db.enablebackground = true
+
+ window.bargroup:SetParent(relativeFrame)
+ window.bargroup:SetFrameStrata("LOW")
+
+ if Skada.revisited then
+ local offsety = window.db.reversegrowth and -E.Border or E.Border
+
+ window.db.scale = 1
+ window.db.background.height = height - (E.Border * 2)
+
+ window.bargroup.ClearAllPoints = nil
+ window.bargroup:ClearAllPoints()
+ window.bargroup.ClearAllPoints = E.noop
+
+ window.bargroup.SetPoint = nil
+ window.bargroup:SetPoint(point, relativeFrame, relativePoint, ofsx, -offsety)
+ window.bargroup.SetPoint = E.noop
+
+ if window.bargroup.backdrop then
+ window.bargroup.backdrop:SetFrameStrata("LOW")
+ window.bargroup.backdrop:SetFrameLevel(window.bargroup:GetFrameLevel() - 1)
+ end
+ else
+ window.db.background.height = height - (window.db.enabletitle and window.db.barheight or -(E.Border + E.Spacing)) - (E.Border + E.Spacing)
+ window.db.enablebackground = true
+
+ window.bargroup:ClearAllPoints()
+ window.bargroup:SetPoint(point, relativeFrame, relativePoint, ofsx, window.db.reversegrowth and ofsy or -ofsy)
+
+ window.bargroup.bgframe:SetFrameStrata("LOW")
+ window.bargroup.bgframe:SetFrameLevel(window.bargroup:GetFrameLevel() - 1)
+ end
+
+ barmod.ApplySettings(barmod, window)
+
+ if Skada.revisited then
+ window:Toggle()
+ end
+ end
+
+ function EMB:EmbedSkada()
+ wipe(self.skadaWindows)
+ for _, window in ipairs(Skada:GetWindows()) do
+ tinsert(self.skadaWindows, window)
+ end
+
+ local db = E.db.addOnSkins.embed
+ local numberToEmbed = 0
+
+ if db.embedType == "SINGLE" then
+ numberToEmbed = 1
+ elseif db.embedType == "DOUBLE" then
+ if db.rightWindow == "Skada" then numberToEmbed = numberToEmbed + 1 end
+ if db.leftWindow == "Skada" then numberToEmbed = numberToEmbed + 1 end
+ end
+
+ local point
+ if numberToEmbed == 1 then
+ local parent = self.leftFrame
+ if db.embedType == "DOUBLE" then
+ parent = db.rightWindow == "Skada" and self.rightFrame or self.leftFrame
+ end
+
+ point = self.skadaWindows[1].db.reversegrowth and "BOTTOMLEFT" or "TOPLEFT"
+ EmbedWindow(self.skadaWindows[1], parent:GetWidth() -(E.Border*2), parent:GetHeight(), point, parent, point, E.Border, E.Border)
+ elseif numberToEmbed == 2 then
+ point = self.skadaWindows[1].db.reversegrowth and "BOTTOMLEFT" or "TOPLEFT"
+ EmbedWindow(self.skadaWindows[1], self.leftFrame:GetWidth() -(E.Border*2), self.leftFrame:GetHeight(), point, self.leftFrame, point, E.Border, E.Border)
+
+ if not self.skadaWindows[2] then
+ E:Print("Please Create Skada Windows 2")
+ return
+ end
+
+ point = self.skadaWindows[2].db.reversegrowth and "BOTTOMRIGHT" or "TOPRIGHT"
+ EmbedWindow(self.skadaWindows[2], self.rightFrame:GetWidth() -(E.Border*2), self.rightFrame:GetHeight(), point, self.rightFrame, point, -E.Border, E.Border)
+ end
+ end
+end
+
+if AS:IsAddonLODorEnabled("Details") then
+ local Details = _G._details or _G._detalhes
+
+ local numberToEmbed = 0
+
+ EMB.DetailsInstances = {}
+
+ local listener = Details:CreateEventListener()
+ listener:RegisterEvent("DETAILS_INSTANCE_OPEN")
+ listener:RegisterEvent("DETAILS_INSTANCE_CLOSE")
+
+ function listener:OnDetailsEvent(event, instance)
+ if event == "DETAILS_INSTANCE_CLOSE" then
+ if instance._ElvUIEmbed and _G.DetailsOptionsWindow and _G.DetailsOptionsWindow:IsShown() then
+ Details:Msg("You just closed a window Embed on ElvUI, if wasn't intended click on Reopen.") --> need localization
+ end
+ elseif event == "DETAILS_INSTANCE_OPEN" then
+ if instance._ElvUIEmbed then
+ if #EMB.DetailsInstances >= 2 then
+ EMB.DetailsInstances[1]:UngroupInstance()
+ EMB.DetailsInstances[2]:UngroupInstance()
+
+ EMB.DetailsInstances[1].baseframe:ClearAllPoints()
+ EMB.DetailsInstances[2].baseframe:ClearAllPoints()
+
+ EMB.DetailsInstances[1]:RestoreMainWindowPosition()
+ EMB.DetailsInstances[2]:RestoreMainWindowPosition()
+ end
+ end
+ end
+ end
+
+ local function EmbedWindow(window, width, height, point, relativeFrame, relativePoint, ofsx, ofsy)
+ if not window then return end
+
+ if not window:IsEnabled() then
+ window:EnableInstance()
+ end
+
+ window._ElvUIEmbed = true
+
+ if window.bars_grow_direction == 2 then
+ ofsy = -2
+ else
+ ofsy = -20
+ end
+
+ window:UngroupInstance()
+
+ window.baseframe:ClearAllPoints()
+ window.baseframe:SetParent(relativeFrame)
+ window.baseframe:SetFrameStrata(relativeFrame:GetFrameStrata())
+ window.baseframe:SetFrameLevel(relativeFrame:GetFrameLevel())
+
+ ofsx = ofsx - 1
+
+ if window.show_statusbar then
+ height = height - 13
+ end
+
+ window:SetSize(width, height - 20)
+
+ window.baseframe:SetPoint(point, relativeFrame, relativePoint, ofsx, ofsy)
+ window:SaveMainWindowPosition()
+ window:RestoreMainWindowPosition()
+
+ window:LockInstance(true)
+
+ if window:GetId() == 1 then
+ DetailsRowFrame1:SetParent(DetailsBaseFrame1)
+ DetailsRowFrame1:SetFrameLevel(DetailsBaseFrame1:GetFrameLevel() + 1)
+ elseif window:GetId() == 2 then
+ DetailsRowFrame2:SetParent(DetailsBaseFrame2)
+ DetailsRowFrame2:SetFrameLevel(DetailsBaseFrame2:GetFrameLevel() + 1)
+ end
+
+ if window:GetSegment() ~= 0 then
+ window:SetDisplay(0)
+ end
+ end
+
+ function EMB:EmbedDetails()
+ wipe(self.DetailsInstances)
+
+ for _, instance in Details:ListInstances() do
+ tinsert(self.DetailsInstances, instance)
+ end
+
+ local db = E.db.addOnSkins.embed
+ numberToEmbed = 0
+ if db.embedType == "SINGLE" then
+ numberToEmbed = 1
+ end
+
+ if db.embedType == "DOUBLE" then
+ if db.rightWindow == "Details" then numberToEmbed = numberToEmbed + 1 end
+ if db.leftWindow == "Details" then numberToEmbed = numberToEmbed + 1 end
+ end
+
+ if Details:GetMaxInstancesAmount() < numberToEmbed then
+ Details:SetMaxInstancesAmount(numberToEmbed)
+ end
+
+ local instances_amount = Details:GetNumInstancesAmount()
+
+ for i = instances_amount + 1, numberToEmbed do
+ local new_instance = Details:CreateInstance(i)
+
+ if type(new_instance) == "table" then
+ tinsert(self.DetailsInstances, new_instance)
+ end
+ end
+
+ if numberToEmbed == 1 then
+ local parent = self.leftFrame
+ if db.embedType == "DOUBLE" then
+ parent = db.rightWindow == "Details" and self.rightFrame or self.leftFrame
+ end
+ EmbedWindow(self.DetailsInstances[1], parent:GetWidth() - (E.Border*2), parent:GetHeight(), "TOPLEFT", parent, "TOPLEFT", 2, 0)
+
+ if self.DetailsInstances[2] then
+ self.DetailsInstances[2]._ElvUIEmbed = nil
+ end
+ elseif numberToEmbed == 2 then
+ EmbedWindow(self.DetailsInstances[1], self.leftFrame:GetWidth() - (E.Border*2), self.leftFrame:GetHeight(), "TOPLEFT", self.leftFrame, "TOPLEFT", E.Border, E.Border)
+ EmbedWindow(self.DetailsInstances[2], self.rightFrame:GetWidth() - (E.Border*2), self.rightFrame:GetHeight(), "TOPRIGHT", self.rightFrame, "TOPRIGHT", -E.Border, E.Border)
+ end
+ end
+end
+
+function EMB:Initialize()
+ if E.db.addOnSkins.embed.embedType == "DISABLE" then return end
+
+ self:EmbedCreate()
+end
+
+local function InitializeCallback()
+ EMB:Initialize()
+end
+
+E:RegisterModule(EMB:GetName(), InitializeCallback)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Settings/Load_Settings.xml b/ElvUI_AddOnSkins/Settings/Load_Settings.xml
new file mode 100644
index 0000000..66f924c
--- /dev/null
+++ b/ElvUI_AddOnSkins/Settings/Load_Settings.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Settings/Profile.lua b/ElvUI_AddOnSkins/Settings/Profile.lua
new file mode 100644
index 0000000..1fb205a
--- /dev/null
+++ b/ElvUI_AddOnSkins/Settings/Profile.lua
@@ -0,0 +1,49 @@
+local E, L, V, P, G = unpack(ElvUI)
+
+P.addOnSkins = {
+ skadaTemplate = "Default",
+ skadaTemplateGloss = false,
+ skadaTitleTemplate = "Default",
+ skadaTitleTemplateGloss = true,
+
+ recountTemplate = "Transparent",
+ recountTemplateGloss = false,
+ recountTitleTemplate = "Default",
+ recountTitleTemplateGloss = true,
+
+ omenTemplate = "Transparent",
+ omenTemplateGloss = false,
+ omenTitleTemplate = "Default",
+ omenTitleTemplateGloss = true,
+
+ dbmBarHeight = 22,
+ dbmFont = "PT Sans Narrow",
+ dbmFontSize = 12,
+ dbmFontOutline = "OUTLINE",
+ dbmIconSize = 1,
+ dbmTemplate = "Default",
+ DBMSkinHalf = false,
+
+ weakAuraAuraBar = true,
+ weakAuraIconCooldown = true,
+
+ chatBarSize = 16,
+ chatBarSpacing = 1,
+ chatBarTextPoint = "CENTER",
+ chatBarTextXOffset = -1,
+ chatBarTextYOffset = 0,
+
+ bigwigsBarHeight = 14,
+ bigwigsFontSize = 10,
+ bigwigsFontOutline = "NONE",
+
+ embed = {
+ embedType = "DISABLE",
+ leftWindow = "Omen",
+ rightWindow = "Recount",
+ rightChatPanel = true,
+ leftWindowWidth = 203,
+ belowTopTab = false,
+ hideChat = "NONE",
+ }
+}
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/ArkInventory.lua b/ElvUI_AddOnSkins/Skins/Addons/ArkInventory.lua
new file mode 100644
index 0000000..52f7f1c
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/ArkInventory.lua
@@ -0,0 +1,258 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("ArkInventory") then return end
+
+local _G = _G
+local ipairs = ipairs
+local unpack = unpack
+local format = string.format
+
+-- ArkInventory 3.02.54
+-- https://www.wowace.com/projects/ark-inventory/files/458795
+
+S:AddCallbackForAddon("ArkInventory", "ArkInventory", function()
+ if not E.private.addOnSkins.ArkInventory then return end
+
+ local function skinIcon(frame)
+ if frame.isSkinned then return end
+
+ local icon = frame:GetNormalTexture()
+
+ frame:SetTemplate("Default", true)
+ frame:StyleButton()
+
+ icon:SetInside()
+ icon:SetTexCoord(unpack(E.TexCoords))
+ icon.SetTexCoord = E.noop
+
+ frame.isSkinned = true
+ end
+
+ for i = 1, #ArkInventory.Global.Location do
+ local frameName = format("%s%d", ArkInventory.Const.Frame.Main.Name, i)
+ local frame = _G[frameName]
+
+ if frame then
+ -- Title
+ S:HandleCloseButton(_G[format("%s%s%s", frameName, ArkInventory.Const.Frame.Title.Name, "Close")])
+
+ skinIcon(_G[format("%s%s%s", frameName, ArkInventory.Const.Frame.Title.Name, "Location0")])
+ skinIcon(_G[format("%s%s%s", frameName, ArkInventory.Const.Frame.Title.Name, "ActionButton11")])
+ skinIcon(_G[format("%s%s%s", frameName, ArkInventory.Const.Frame.Title.Name, "ActionButton12")])
+ skinIcon(_G[format("%s%s%s", frameName, ArkInventory.Const.Frame.Title.Name, "ActionButton13")])
+ skinIcon(_G[format("%s%s%s", frameName, ArkInventory.Const.Frame.Title.Name, "ActionButton14")])
+ skinIcon(_G[format("%s%s%s", frameName, ArkInventory.Const.Frame.Title.Name, "ActionButton21")])
+ skinIcon(_G[format("%s%s%s", frameName, ArkInventory.Const.Frame.Title.Name, "ActionButton22")])
+ skinIcon(_G[format("%s%s%s", frameName, ArkInventory.Const.Frame.Title.Name, "ActionButton23")])
+ skinIcon(_G[format("%s%s%s", frameName, ArkInventory.Const.Frame.Title.Name, "ActionButton24")])
+
+ -- Search
+ S:HandleEditBox(_G[format("%s%s%s", frame:GetName(), ArkInventory.Const.Frame.Search.Name, "Filter")])
+ end
+ end
+
+ hooksecurefunc(ArkInventory, "Frame_Main_Anchor_Set", function(loc_id)
+ local frameName = format("%s%d", ArkInventory.Const.Frame.Main.Name, loc_id)
+
+ local anchor = ArkInventory.LocationOptionGet(loc_id, "anchor", loc_id, "point")
+
+ local title = _G[format("%s%s", frameName, ArkInventory.Const.Frame.Title.Name)]
+ local search = _G[format("%s%s", frameName, ArkInventory.Const.Frame.Search.Name)]
+ local container = _G[format("%s%s", frameName, ArkInventory.Const.Frame.Container.Name)]
+ local changer = _G[format("%s%s", frameName, ArkInventory.Const.Frame.Changer.Name)]
+ local status = _G[format("%s%s", frameName, ArkInventory.Const.Frame.Status.Name)]
+
+ if anchor == ArkInventory.Const.Anchor.BottomRight then
+ changer:Point("BOTTOMRIGHT", status, "TOPRIGHT", 0, -1)
+ container:Point("BOTTOMRIGHT", changer, "TOPRIGHT", 0, -1)
+ search:Point("BOTTOMRIGHT", container, "TOPRIGHT", 0, -1)
+ title:Point("BOTTOMRIGHT", search, "TOPRIGHT", 0, -1)
+ elseif anchor == ArkInventory.Const.Anchor.BottomLeft then
+ changer:Point("BOTTOMLEFT", status, "TOPLEFT", 0, -1)
+ container:Point("BOTTOMLEFT", changer, "TOPLEFT", 0, -1)
+ search:Point("BOTTOMLEFT", container, "TOPLEFT", 0, -1)
+ title:Point("BOTTOMLEFT", search, "TOPLEFT", 0, -1)
+ elseif anchor == ArkInventory.Const.Anchor.TopLeft then
+ search:Point("TOPLEFT", title, "BOTTOMLEFT", 0, 1)
+ container:Point("TOPLEFT", search, "BOTTOMLEFT", 0, 1)
+ changer:Point("TOPLEFT", container, "BOTTOMLEFT", 0, 1)
+ status:Point("TOPLEFT", changer, "BOTTOMLEFT", 0, 1)
+ else
+ search:Point("TOPRIGHT", title, "BOTTOMRIGHT", 0, 1)
+ container:Point("TOPRIGHT", search, "BOTTOMRIGHT", 0, 1)
+ changer:Point("TOPRIGHT", container, "BOTTOMRIGHT", 0, 1)
+ status:Point("TOPRIGHT", changer, "BOTTOMRIGHT", 0, 1)
+ end
+ end)
+
+ ArkInventory.Frame_Main_Paint = function(frame)
+ if not ArkInventory.ValidFrame(frame, true) then return end
+
+ for _, child in ipairs({frame:GetChildren()}) do
+ if not child.isSkinned then
+ child:SetTemplate("Transparent")
+
+ local frameName = child:GetName()
+ if frameName then
+ local bg = _G[format("%s%s", frameName, "Background")]
+ local border = _G[format("%s%s", frameName, "ArkBorder")]
+
+ if bg then
+ bg:Hide()
+ end
+ if border then
+ border:Hide()
+ end
+ end
+
+ child.isSkinned = true
+ end
+ end
+ end
+
+ local defaultColors = ArkInventory.Const.Slot.DefaultColour
+
+ ArkInventory.Frame_Border_Paint = function(border, slot, file, size, offset, scale, r, g, b, a)
+ if not border.parent then return end
+
+ if r == defaultColors.r and g == defaultColors.g and b == defaultColors.b then
+ r, g, b = unpack(E.media.bordercolor)
+ border.parent:SetBackdropBorderColor(r, g, b, 1)
+ else
+ border.parent:SetBackdropBorderColor(r or 0, g or 0, b or 0, a)
+ end
+ end
+
+ local TEXTURE_ITEM_QUEST_BORDER = TEXTURE_ITEM_QUEST_BORDER
+ local questColors = {
+ ["questStarter"] = {E.db.bags.colors.items.questStarter.r, E.db.bags.colors.items.questStarter.g, E.db.bags.colors.items.questStarter.b},
+ ["questItem"] = {E.db.bags.colors.items.questItem.r, E.db.bags.colors.items.questItem.g, E.db.bags.colors.items.questItem.b}
+ }
+
+ local function updateQuestIcon(self, texture)
+ if texture == TEXTURE_ITEM_QUEST_BORDER then
+ self.parent:SetBackdropBorderColor(unpack(questColors.questItem))
+ self:SetAlpha(0)
+ else
+ self.parent:SetBackdropBorderColor(unpack(questColors.questStarter))
+ self:SetAlpha(1)
+ end
+ end
+
+ local function skinItemButton(frame)
+ if frame.isSkinned then return end
+
+ local frameName = frame:GetName()
+ local icon = _G[format("%s%s", frameName, "IconTexture")]
+ local border = _G[format("%s%s", frameName, "ArkBorder")]
+ local questIcon = _G[format("%s%s", frameName, "IconQuestTexture")]
+ local cooldown = _G[format("%s%s", frameName, "Cooldown")]
+
+ frame:SetNormalTexture(nil)
+ frame:SetTemplate("Default", true)
+ frame:StyleButton()
+
+ icon:SetInside()
+ icon:SetTexCoord(unpack(E.TexCoords))
+ icon.SetTexCoord = E.noop
+
+ border:Kill()
+ border.parent = frame
+
+ if questIcon then
+ questIcon:SetInside()
+ questIcon:SetTexture(E.Media.Textures.BagQuestIcon)
+ questIcon.SetTexture = updateQuestIcon
+ questIcon.parent = frame
+ end
+
+ if cooldown then
+ cooldown.CooldownOverride = "bags"
+ E:RegisterCooldown(cooldown)
+ end
+
+ frame.isSkinned = true
+ end
+
+ hooksecurefunc(ArkInventory, "Frame_Item_Update_Border", function(frame)
+ if not ArkInventory.ValidFrame(frame, true) then return end
+ skinItemButton(frame)
+ end)
+
+ -- GuildBank
+ S:HandleButton(ARKINV_Frame4ChangerWindowPurchaseInfoPurchaseButton)
+ S:HandleButton(ARKINV_Frame4ChangerWindowDepositButton)
+ S:HandleButton(ARKINV_Frame4ChangerWindowWithdrawButton)
+
+ S:HandleNextPrevButton(ARKINV_Frame4LogScrollUp, "up")
+ S:HandleNextPrevButton(ARKINV_Frame4LogScrollDown, "down")
+
+ S:HandleButton(ARKINV_Frame4InfoSave)
+ S:HandleScrollBar(ARKINV_Frame4InfoScrollScrollBar)
+
+ -- Search Frame
+ ARKINV_SearchTitleBackground:Kill()
+ ARKINV_SearchFrameBackground:Kill()
+
+ ARKINV_SearchTitle:SetTemplate("Transparent")
+ ARKINV_SearchFrame:SetTemplate("Transparent")
+
+ ARKINV_Rules:SetHeight(570)
+ ARKINV_SearchFrame:Point("TOPLEFT", ARKINV_SearchTitle, "BOTTOMLEFT", 0, 1)
+
+ S:HandleCloseButton(ARKINV_SearchTitleClose)
+ S:HandleEditBox(ARKINV_SearchFrameViewSearchFilter)
+ S:HandleScrollBar(ARKINV_SearchFrameViewTableScrollScrollBar)
+
+ AS:SkinLibrary("ArkDewdrop-3.0")
+end)
+
+S:AddCallbackForAddon("ArkInventoryRules", "ArkInventoryRules", function()
+ if not E.private.addOnSkins.ArkInventory then return end
+
+ ArkInventoryRules.Frame_Rules_Paint_Border = E.noop
+
+ -- Rules
+ ARKINV_RulesTitleBackground:Kill()
+ ARKINV_RulesFrameBackground:Kill()
+
+ ARKINV_RulesTitle:SetTemplate("Transparent")
+ ARKINV_RulesFrame:SetTemplate("Transparent")
+
+ ARKINV_RulesFrameViewSearch:SetTemplate("Transparent")
+ ARKINV_RulesFrameViewTable:SetTemplate("Transparent")
+
+ ARKINV_RulesFrame:Point("TOPLEFT", ARKINV_RulesTitle, "BOTTOMLEFT", 0, 1)
+ ARKINV_RulesFrameViewTitle:SetPoint("TOP")
+
+ S:HandleCloseButton(ARKINV_RulesTitleClose)
+
+ S:HandleEditBox(ARKINV_RulesFrameViewSearchFilter)
+ S:HandleScrollBar(ARKINV_RulesFrameViewTableScrollScrollBar)
+
+ S:HandleButton(ARKINV_RulesFrameViewMenuAdd)
+ S:HandleButton(ARKINV_RulesFrameViewMenuEdit)
+ S:HandleButton(ARKINV_RulesFrameViewMenuRemove)
+
+ -- Add Rule
+ ARKINV_RulesFrameModifyTitle:SetPoint("TOP")
+
+ S:HandleCheckBox(ARKINV_RulesFrameModifyDataEnabled)
+
+ ARKINV_RulesFrameModifyDataOrder:Height(22)
+ S:HandleEditBox(ARKINV_RulesFrameModifyDataOrder)
+ ARKINV_RulesFrameModifyDataDescription:Height(22)
+ S:HandleEditBox(ARKINV_RulesFrameModifyDataDescription)
+
+ ARKINV_RulesFrameModifyDataScrollTextBorder:SetTemplate("Transparent")
+
+ S:HandleScrollBar(ARKINV_RulesFrameModifyDataScrollScrollBar)
+
+ ARKINV_RulesFrameModifyDataScrollScrollBar:Point("TOPLEFT", ARKINV_RulesFrameModifyDataScroll, "TOPRIGHT", 8, -13)
+ ARKINV_RulesFrameModifyDataScrollScrollBar:Point("BOTTOMLEFT", ARKINV_RulesFrameModifyDataScroll, "BOTTOMRIGHT", 8, 13)
+
+ S:HandleButton(ARKINV_RulesFrameModifyMenuOk)
+ S:HandleButton(ARKINV_RulesFrameModifyMenuCancel)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/CLCRet.lua b/ElvUI_AddOnSkins/Skins/Addons/CLCRet.lua
new file mode 100644
index 0000000..79670d0
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/CLCRet.lua
@@ -0,0 +1,88 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("CLCRet") then return end
+
+local _G = _G
+local unpack = unpack
+
+-- CLCRet 1.3.03.025
+-- https://www.curseforge.com/wow/addons/clcret/files/439502
+
+S:AddCallbackForAddon("CLCRet", "CLCRet", function()
+ if not E.private.addOnSkins.CLCRet then return end
+
+ local function styleButton(button, icon, height, width)
+ button:SetScale(1)
+ button:Size(width or height, height)
+
+ icon:SetTexCoord(unpack(E.TexCoords))
+ button.border:Hide()
+ end
+
+ S:RawHook(clcret, "CreateButton", function(self, name, size, ...)
+ local button = S.hooks[self].CreateButton(self, name, size, ...)
+
+ button:CreateBackdrop("Default")
+ button.texture:SetDrawLayer("BORDER")
+
+ styleButton(button, button.texture, size)
+
+ return button
+ end)
+
+ hooksecurefunc(clcret, "UpdateButtonLayout", function(self, button, opt)
+ styleButton(button, button.texture, opt.size)
+ end)
+
+ S:RawHook(clcret, "CreateSovBar", function(self, ...)
+ local frame = S.hooks[self].CreateSovBar(self, ...)
+
+ frame:CreateBackdrop("Default")
+ frame.icon:CreateBackdrop("Default")
+ frame.icon:SetDrawLayer("BORDER")
+ frame.icon.backdrop:Hide()
+
+ frame.bgtexture:SetTexture(nil)
+ frame.texture:SetTexture(E.media.normTex)
+ E:RegisterStatusBar(frame.texture)
+
+ styleButton(frame, frame.icon, self.db.profile.sov.height)
+
+ return frame
+ end)
+
+ local MAX_SOVBARS = 5
+
+ hooksecurefunc(clcret, "UpdateSovBarsLayout", function(self)
+ local db = self.db.profile.sov
+ local bar
+
+ for i = 1, MAX_SOVBARS do
+ bar = _G["clcretSovBar"..i]
+
+ styleButton(bar, bar.icon, db.height, db.useButtons and db.height or (db.width - db.height))
+
+ if db.useButtons then
+ bar.icon.backdrop:Hide()
+ else
+ bar.icon.backdrop:Show()
+ bar.icon:Point("RIGHT", bar, "LEFT", -1, 0)
+ end
+ end
+ end)
+
+ S:SecureHook(clcret, "InitSwingBar", function(self)
+ local frame = clcretswingBar
+
+ frame:CreateBackdrop("Default")
+
+ frame.bgtexture:SetTexture(nil)
+ frame.texture:SetTexture(E.media.normTex)
+ E:RegisterStatusBar(frame.texture)
+
+ S:Unhook(self, "InitSwingBar")
+ end)
+
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/ElvinCDs.lua b/ElvUI_AddOnSkins/Skins/Addons/ElvinCDs.lua
new file mode 100644
index 0000000..1db90e9
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/ElvinCDs.lua
@@ -0,0 +1,156 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("!ElvinCDs") then return end
+
+local format = string.format
+
+-- !ElvinCDs 0.1b
+-- https://github.com/bkader/ElvinCDs
+
+S:AddCallbackForAddon("!ElvinCDs", "!ElvinCDs", function()
+ if not E.private.addOnSkins.ElvinCDs then return end
+
+ hooksecurefunc(ElvinCDs.utils, "showHide", function(obj)
+ if not obj.isSkinned then
+ local objectType = obj:GetObjectType()
+
+ if objectType == "Frame" then
+ local objName = obj:GetName()
+ local bars = _G[format("%sBars", objName)]
+
+ if bars then
+ _G[format("%sBackground", objName)]:StripTextures()
+
+ local title = _G[format("%sTitle", objName)]
+ title:SetBackdrop(nil)
+ title:CreateBackdrop("Transparent")
+ title.backdrop:Point("TOPRIGHT", 19, -1)
+
+ bars:Point("TOPLEFT", title, "BOTTOMLEFT", 0, -1)
+ end
+ elseif objectType == "StatusBar" then
+ obj:CreateBackdrop("Transparent")
+ obj:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(obj)
+ end
+
+ obj.isSkinned = true
+ end
+ end)
+
+ -- logs
+ ElvinCDs_Logs:SetTemplate("Transparent")
+ ElvinCDs_LogsList:SetBackdrop(nil)
+
+ S:HandleCloseButton(ElvinCDs_LogsCloseButton, ElvinCDs_Logs)
+ S:HandleScrollBar(ElvinCDs_LogsListScrollFrameScrollBar)
+
+ ElvinCDs_LogsListScrollFrameScrollBar:Point("TOPLEFT", ElvinCDs_LogsListScrollFrame, "TOPRIGHT", 5, -13)
+ ElvinCDs_LogsListScrollFrameScrollBar:Point("BOTTOMLEFT", ElvinCDs_LogsListScrollFrame, "BOTTOMRIGHT", 5, 19)
+
+ -- options
+ E:GetModule("Tooltip"):HookScript(ElvinCDs_Tooltip, "OnShow", "SetStyle")
+
+ ElvinCDs_Config:SetTemplate("Transparent")
+ ElvinCDs_ConfigTitleBG:StripTextures()
+
+ ElvinCDs_Config_SpellsList:SetTemplate("Transparent")
+
+ S:HandleTab(ElvinCDs_ConfigTab1)
+ S:HandleTab(ElvinCDs_ConfigTab2)
+
+ S:HandleButton(ElvinCDs_ConfigClose)
+ S:HandleButton(ElvinCDs_Config_GeneralDefault)
+ S:HandleButton(ElvinCDs_Config_SpellsSave)
+
+ S:HandleSliderFrame(ElvinCDs_Config_General_width)
+ S:HandleSliderFrame(ElvinCDs_Config_General_height)
+ S:HandleSliderFrame(ElvinCDs_Config_General_opacity)
+ S:HandleSliderFrame(ElvinCDs_Config_General_spacing)
+
+ S:HandleEditBox(ElvinCDs_Config_SpellsSearch)
+ S:HandleEditBox(ElvinCDs_Config_SpellsSpellId)
+ S:HandleEditBox(ElvinCDs_Config_SpellsCooldown)
+
+ S:HandleScrollBar(ElvinCDs_Config_SpellsListScrollFrameScrollBar)
+
+ local checkBoxes = {
+ ElvinCDs_Config_General_enabled,
+ ElvinCDs_Config_General_icons,
+ ElvinCDs_Config_General_strict,
+ ElvinCDs_Config_General_announce,
+ ElvinCDs_Config_General_shout,
+ ElvinCDs_Config_General_verbose,
+ ElvinCDs_Config_General_locked,
+ ElvinCDs_Config_General_sync,
+ ElvinCDs_Config_General_showInBG,
+ ElvinCDs_Config_General_showInRaid,
+ ElvinCDs_Config_General_showInParty,
+ ElvinCDs_Config_General_showWhenSolo,
+
+ ElvinCDs_Config_SpellsCustom,
+ ElvinCDs_Config_SpellsDefaults,
+ ElvinCDs_Config_SpellsDisplay,
+ ElvinCDs_Config_SpellsTrack,
+ ElvinCDs_Config_SpellsBlind,
+ ElvinCDs_Config_SpellsShout,
+ ElvinCDs_Config_SpellsWhisper,
+ ElvinCDs_Config_SpellsSpecial,
+ }
+
+ for _, checkBox in ipairs(checkBoxes) do
+ S:HandleCheckBox(checkBox)
+ end
+
+ ElvinCDs_Config_SpellsSearch:Height(22)
+ ElvinCDs_Config_SpellsSpellId:Height(22)
+ ElvinCDs_Config_SpellsCooldown:Height(22)
+
+ ElvinCDs_ConfigTab1:Point("CENTER", ElvinCDs_Config, "BOTTOMLEFT", 60, -14)
+ ElvinCDs_ConfigClose:Point("TOPRIGHT", -6, -6)
+
+ ElvinCDs_Config_SpellsListScrollFrameScrollBar:Point("TOPLEFT", ElvinCDs_Config_SpellsListScrollFrame, "TOPRIGHT", 5, -15)
+ ElvinCDs_Config_SpellsListScrollFrameScrollBar:Point("BOTTOMLEFT", ElvinCDs_Config_SpellsListScrollFrame, "BOTTOMRIGHT", 5, 14)
+
+ ElvinCDs_Config_SpellsSpellId:Point("TOPLEFT", ElvinCDs_Config_SpellsList, "BOTTOMLEFT", 8, -10)
+
+--[[
+ local options = {
+ "Display",
+ "Track",
+ "Blind",
+ "Shout",
+ "Whisper",
+ "Special",
+ }
+
+ local skinnedCheckboxes = 0
+ local function skinButtons()
+ local i = skinnedCheckboxes + 1
+ local button = _G["ElvinCDs_Config_Spells_SpellBtn_"..i]
+ while button do
+ for _, affix in ipairs(options) do
+ S:HandleCheckBox(_G["ElvinCDs_Config_Spells_SpellBtn_"..i..affix])
+ end
+ i = i + 1
+ button = _G["ElvinCDs_Config_Spells_SpellBtn_"..i]
+ end
+ skinnedCheckboxes = i - 1
+ end
+
+ local _SetChecked = ElvinCDs_Config_SpellsDefaults.SetChecked
+ ElvinCDs_Config_SpellsDefaults.SetChecked = function(self, checked, ...)
+ skinButtons()
+
+ _SetChecked(self, checked, ...)
+ self.SetChecked = _SetChecked
+ end
+
+ hooksecurefunc(ElvinCDs.Config.Spells, "save", function(self, button)
+ if not button then return end
+ skinButtons()
+ end)
+--]]
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/Examiner.lua b/ElvUI_AddOnSkins/Skins/Addons/Examiner.lua
new file mode 100644
index 0000000..7cbb3ce
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/Examiner.lua
@@ -0,0 +1,234 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Examiner") then return end
+
+local select = select
+local unpack = unpack
+
+-- Examiner 10.08.14
+-- https://www.curseforge.com/wow/addons/examiner/files/445178
+
+S:AddCallbackForAddon("Examiner", "Examiner", function()
+ if not E.private.addOnSkins.Examiner then return end
+
+ UIPanelWindows["Examiner"].width = 348
+
+ Examiner:CreateBackdrop("Transparent")
+ Examiner.backdrop:Point("TOPLEFT", 11, -12)
+ Examiner.backdrop:Point("BOTTOMRIGHT", -32, 4)
+
+ S:SetBackdropHitRect(Examiner)
+
+ Examiner.dlgTopLeft:Hide()
+ Examiner.dlgTopRight:Hide()
+ Examiner.dlgBottomLeft:Hide()
+ Examiner.dlgBottomRight:Hide()
+
+ Examiner.portrait:Hide()
+
+ S:HandleCloseButton((Examiner:GetChildren()), Examiner.backdrop)
+
+ Examiner.model:Size(325, 352)
+ Examiner.model:Point("BOTTOM", -11, 12)
+
+ do -- Talents background
+ local talantsPage
+ for _, mod in ipairs(Examiner.modules) do
+ if mod.token == "Talents" then
+ talantsPage = mod.page
+ break
+ end
+ end
+
+ local bgTextures = {
+ Examiner.bgTopLeft,
+ Examiner.bgTopRight,
+ Examiner.bgBottomLeft,
+ Examiner.bgBottomRight
+ }
+
+ for _, texture in ipairs(bgTextures) do
+ texture:SetParent(talantsPage)
+ texture.SetWidth = E.noop
+ end
+
+ Examiner.bgTopLeft:Point("TOPLEFT", Examiner, "TOPLEFT", 20, -77)
+
+ Examiner.bgTopLeft:Size(256, 256)
+ Examiner.bgTopRight:Size(67, 256)
+ Examiner.bgBottomLeft:Size(256, 112)
+ Examiner.bgBottomRight:Size(67, 112)
+ end
+
+ local dropdownArrowColor = {1, 0.8, 0}
+ local function skinAzDropdown(frame)
+ frame:SetTemplate()
+
+ S:HandleNextPrevButton(frame.button, "down", dropdownArrowColor)
+ frame.button:Point("TOPRIGHT", -2, -2)
+ frame.button:Point("BOTTOMRIGHT", -2, 2)
+ frame.button:Size(20)
+ end
+
+ local function setSlotBackdropColor(self, r, g, b)
+ self.parent:SetBackdropBorderColor(r, g, b)
+ end
+
+ local function setSlotBackdropDefault(self)
+ self.parent:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+
+ local buttonReposition
+
+ for _, mod in ipairs(Examiner.modules) do
+ if mod.page then
+ mod.page:SetTemplate("Transparent")
+
+ if mod.token == "Talents" then
+ mod.page:SetTemplate("Transparent")
+ mod.page:Point("BOTTOM", -21, 40)
+ mod.page:Size(304, 324)
+ elseif mod.showItems then
+ mod.page:Size(237, 284)
+ else
+ mod.page:Size(325, 324)
+ end
+ end
+
+ if mod.button then
+ if not buttonReposition then
+ mod.button:Point("BOTTOMLEFT", 24, 12)
+ buttonReposition = true
+ end
+
+ S:HandleButton(mod.button)
+ end
+
+ if mod.token == "ItemSlots" then
+ for i, slot in ipairs(mod.slotBtns) do
+ slot:StripTextures()
+ slot:StyleButton(false)
+ slot:SetTemplate("Default", true, true)
+
+ slot.texture:SetDrawLayer("BORDER")
+ slot.texture:SetInside()
+ slot.texture:SetTexCoord(unpack(E.TexCoords))
+
+ slot.border:Kill()
+ slot.border.parent = slot
+ slot.border.SetVertexColor = setSlotBackdropColor
+ slot.border.Hide = setSlotBackdropDefault
+
+ if i == 1 then
+ slot:SetPoint("TOPLEFT", 0, 0)
+ elseif i == 9 then
+ slot:SetPoint("TOPRIGHT", 0, 0)
+ elseif i == 17 then
+ slot:Point("BOTTOM", -42, 28)
+ elseif i <= 16 then
+ slot:Point("TOP", mod.slotBtns[i - 1], "BOTTOM", 0, -4)
+ else
+ slot:Point("LEFT", mod.slotBtns[i - 1], "RIGHT", 5, 0)
+ end
+ end
+ elseif mod.token == "Config" then
+ skinAzDropdown((mod.page:GetChildren()))
+
+ for i = 2, mod.page:GetNumChildren() do
+ local child = select(i, mod.page:GetChildren())
+ S:HandleCheckBox(child)
+ end
+ elseif mod.token == "Cache" then
+ S:HandleScrollBar(ExaminerCacheScrollScrollBar)
+ ExaminerCacheScrollScrollBar:Point("TOPLEFT", ExaminerCacheScroll, "TOPRIGHT", 3, -19)
+ ExaminerCacheScrollScrollBar:Point("BOTTOMLEFT", ExaminerCacheScroll, "BOTTOMRIGHT", 3, 19)
+ elseif mod.token == "Stats" then
+ for i = 1, 5 do
+ local child = select(i, mod.page:GetChildren())
+
+ child:Size(24)
+ child:SetTemplate("Transparent")
+
+ if i == 1 then
+ child:Point("TOPLEFT", 58, -9)
+ end
+
+ child.texture:SetInside()
+ child.texture:SetDrawLayer("ARTWORK")
+
+ if i == 3 then -- Arcane
+ -- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 32, 256, 18, 18, 8, 64
+ child.texture:SetTexCoord(0.25, 0.8125, 0.25, 0.3203125)
+ elseif i == 1 then -- Fire
+ -- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 32, 256, 18, 18, 8, 6
+ child.texture:SetTexCoord(0.25, 0.8125, 0.0234375, 0.09375)
+ elseif i == 2 then -- Nature
+ -- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 32, 256, 18, 18, 8, 35
+ child.texture:SetTexCoord(0.25, 0.8125, 0.13671875, 0.20703125)
+ elseif i == 4 then -- Frost
+ -- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 32, 256, 18, 18, 8, 94
+ child.texture:SetTexCoord(0.25, 0.8125, 0.3671875, 0.4375)
+ elseif i == 5 then -- Shadow
+ -- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 32, 256, 18, 18, 8, 122
+ child.texture:SetTexCoord(0.25, 0.8125, 0.4765625, 0.546875)
+ end
+ end
+
+ S:HandleScrollBar(ExaminerStatScrollScrollBar)
+ ExaminerStatScrollScrollBar:Point("TOPLEFT", ExaminerStatScroll, "TOPRIGHT", 10, -20)
+ ExaminerStatScrollScrollBar:Point("BOTTOMLEFT", ExaminerStatScroll, "BOTTOMRIGHT", 10, 20)
+ elseif mod.token == "PvP" then
+ for i = 2, 4 do
+ local child = select(i, mod.page:GetChildren())
+ child:SetTemplate("Transparent")
+ end
+ elseif mod.token == "Feats" then
+ skinAzDropdown((mod.page:GetChildren()))
+
+ S:HandleScrollBar(ExaminerFeatsScrollScrollBar)
+ ExaminerFeatsScrollScrollBar:Point("TOPLEFT", ExaminerFeatsScroll, "TOPRIGHT", 6, -19)
+ ExaminerFeatsScrollScrollBar:Point("BOTTOMLEFT", ExaminerFeatsScroll, "BOTTOMRIGHT", 6, 19)
+ elseif mod.token == "Talents" then
+ for i = 1, MAX_TALENT_TABS do
+ local tab = _G["ExaminerTab"..i]
+ tab:StripTextures()
+ tab:CreateBackdrop("Default", true)
+
+ tab.backdrop:Point("TOPLEFT", 2, -7)
+ tab.backdrop:Point("BOTTOMRIGHT", -1, -1)
+
+ S:SetBackdropHitRect(tab)
+ end
+
+ for i, button in ipairs({ExaminerScrollChildFrame:GetChildren()}) do
+ if i > 40 then break end
+
+ button:StripTextures()
+ button:SetTemplate("Default")
+ button:StyleButton()
+
+ button.icon:SetInside()
+ button.icon:SetTexCoord(unpack(E.TexCoords))
+ button.icon:SetDrawLayer("ARTWORK")
+
+ button.slot:Hide()
+ button.rankBorder:Hide()
+
+ button.rank:SetFont(E.LSM:Fetch("font", E.db.general.font), 12, "OUTLINE")
+ end
+
+ S:HandleScrollBar(ExaminerTalentsScrollChildScrollBar)
+ ExaminerTalentsScrollChildScrollBar:Point("TOPLEFT", ExaminerTalentsScrollChild, "TOPRIGHT", 4, -18)
+ ExaminerTalentsScrollChildScrollBar:Point("BOTTOMLEFT", ExaminerTalentsScrollChild, "BOTTOMRIGHT", 4, 17)
+
+ ExaminerTalentsScrollChild:ClearAllPoints()
+ ExaminerTalentsScrollChild:Point("TOPLEFT", 1, -1)
+ ExaminerTalentsScrollChild:Point("BOTTOMRIGHT", -1, 2)
+ end
+ end
+
+ AS:SkinLibrary("AzDialog")
+ AS:SkinLibrary("AzDropDown")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/LootCouncil_Lite.lua b/ElvUI_AddOnSkins/Skins/Addons/LootCouncil_Lite.lua
new file mode 100644
index 0000000..8f26522
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/LootCouncil_Lite.lua
@@ -0,0 +1,100 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("LootCouncil_Lite") then return end
+
+-- Loot Council Lite 1.011
+-- https://www.curseforge.com/wow/addons/lootcouncil-lite/files/457971
+
+S:AddCallbackForAddon("LootCouncil_Lite", "LootCouncil_Lite", function()
+ if not E.private.addOnSkins.LootCouncil_Lite then return end
+
+ -- Main Frame
+ MainFrame:SetTemplate("Transparent")
+
+ EntryFrame:SetTemplate("Transparent")
+
+ EmptyTexture:Kill()
+
+ local icons = {
+ CurrentItemTexture,
+ CurrentSelectionTexture,
+ DualItemTexture1,
+ DualItemTexture2,
+ }
+
+ local showBackdrop = function(self) self.backdrop:Show() end
+ local hideBackdrop = function(self) self.backdrop:Hide() end
+ for _, icon in ipairs(icons) do
+ icon:SetTexCoord(unpack(E.TexCoords))
+ icon:CreateBackdrop()
+ icon.backdrop:Hide()
+
+ hooksecurefunc(icon, "Show", showBackdrop)
+ hooksecurefunc(icon, "Hide", hideBackdrop)
+ end
+
+ DisenchantButton:Point("TOPLEFT", MainFrame, "BOTTOMLEFT", 480, 73)
+
+ if SyncButton then
+ S:HandleButton(SyncButton)
+ end
+
+ S:HandleButton(AwardButton)
+ S:HandleButton(RemoveButton)
+ S:HandleButton(DisenchantButton)
+ S:HandleButton(AbortButton)
+ S:HandleButton(ClearSelectionButton)
+ S:HandleButton(CloseButton)
+
+-- S:HandleDropDownBox(GroupLootDropDownLCL)
+
+ -- Options
+ LCOptionsFrame:SetTemplate("Transparent")
+
+ S:HandleDropDownBox(OptDropDown)
+
+ S:HandleButton(OptAcceptButton)
+ S:HandleButton(OptCancelButton)
+
+ S:HandleSliderFrame(ScaleSlider)
+
+ local checkBoxes = {
+ PrivateVoteMode,
+ SingleVoteMode,
+ SelfVoteMode,
+ DisplaySpecMode,
+ WhisperLinkMode,
+ OfficerLinkMode,
+ RaidLinkMode,
+ ConfirmEnding,
+ MasterLootIntegration,
+ GuildLinkMode,
+ }
+
+ for _, checkbox in ipairs(checkBoxes) do
+ local p1, a, p2, x, y = checkbox:GetPoint()
+ checkbox:Point(p1, a, p2, x, y - 8)
+ checkbox:Size(24)
+
+ S:HandleCheckBox(checkbox)
+ end
+
+ -- RankFrame
+ RankFrame:EnableMouse(true)
+ RankFrame:SetTemplate("Transparent")
+
+ S:HandleDropDownBox(RankDropDown)
+
+ S:HandleButton(RankAcceptButton)
+ S:HandleButton(RankCancelButton)
+
+ -- TestFrame
+ if LCTestFrame then
+ LCTestFrame:SetTemplate("Transparent")
+
+ S:HandleButton(RunTestButton)
+ S:HandleButton(TestCancelButton)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/LootWonAlert.lua b/ElvUI_AddOnSkins/Skins/Addons/LootWonAlert.lua
new file mode 100644
index 0000000..c51b744
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/LootWonAlert.lua
@@ -0,0 +1,74 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+
+local select = select
+local unpack = unpack
+
+local GetItemInfo = GetItemInfo
+local GetItemQualityColor = GetItemQualityColor
+local hooksecurefunc = hooksecurefunc
+
+-- LootWonAlert 1.3
+-- https://gitlab.com/Artur91425/LootWonAlert
+
+S:AddCallbackForAddon("LootWonAlert", "LootWonAlert", function()
+ if not E.private.addOnSkins.LootWonAlert then return end
+
+ local function skinFrame(frame)
+ if frame.isSkinned then return end
+
+ frame:Size(300, 88)
+ frame.Background:Hide()
+ frame.lootItem.IconBorder:Hide()
+
+ frame:CreateBackdrop("Transparent")
+ frame.backdrop:Point("TOPLEFT", 0, -6)
+ frame.backdrop:Point("BOTTOMRIGHT", 0, 6)
+
+ S:SetBackdropHitRect(frame)
+
+ frame.glow:Size(336, 116)
+
+ frame.shine:Size(158, 66)
+ frame.shine:Point("TOPLEFT", -10, -12)
+
+ frame.lootItem:SetTemplate("Transparent")
+ frame.lootItem:Point("TOPLEFT", 12, -18)
+
+ frame.lootItem.Icon:CreateBackdrop("Transparent")
+
+ frame.isSkinned = true
+ end
+
+ S:RawHook("LootWonAlertFrame_Create", function(self, ...)
+ local frame = S.hooks.LootWonAlertFrame_Create(self, ...)
+ skinFrame(frame)
+ return frame
+ end)
+
+ hooksecurefunc("LootWonAlertFrame_SetUp", function(self, itemLink)
+ if itemLink then
+ local quality = select(3, GetItemInfo(itemLink))
+ if quality then
+ local r, g, b = GetItemQualityColor(quality)
+ self:SetBackdropBorderColor(r, g, b)
+ -- self.backdrop:SetBackdropBorderColor(r, g, b)
+ self.lootItem.Icon.backdrop:SetBackdropBorderColor(r, g, b)
+ else
+ self:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ -- self.backdrop:SetBackdropBorderColor(r, g, b)
+ self.lootItem.Icon.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+ end
+ end)
+
+ do
+ local i = 1
+ local frame = _G["LootWonAlertFrame"..i]
+ while frame do
+ skinFrame(frame)
+ i = i + 1
+ frame = _G["LootWonAlertFrame"..i]
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/Mapster.lua b/ElvUI_AddOnSkins/Skins/Addons/Mapster.lua
new file mode 100644
index 0000000..b19fafb
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/Mapster.lua
@@ -0,0 +1,173 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Mapster") then return end
+
+-- Mapster 1.3.9
+-- https://www.wowace.com/projects/mapster/files/436697
+
+S:AddCallbackForAddon("Mapster", "Mapster", function()
+ if not E.private.addOnSkins.Mapster then return end
+
+ local Mapster = LibStub("AceAddon-3.0"):GetAddon("Mapster", true)
+ if not Mapster then return end
+
+ if not E.private.skins.blizzard.enable or not E.private.skins.blizzard.worldmap then
+ WorldMapFrame:CreateBackdrop()
+ WorldMapFrame.backdrop:Point("TOPRIGHT", WorldMapFrameCloseButton, -3, 0)
+ WorldMapFrame.backdrop:Point("BOTTOMRIGHT", WorldMapTrackQuest, 0, -3)
+
+ WorldMapFrame:DisableDrawLayer("BACKGROUND")
+ WorldMapFrame:DisableDrawLayer("ARTWORK")
+ WorldMapFrame:DisableDrawLayer("OVERLAY")
+
+ WorldMapFrameTitle:SetDrawLayer("BORDER")
+
+ WorldMapDetailFrame:CreateBackdrop()
+ WorldMapDetailFrame.backdrop:Point("TOPLEFT", -2, 2)
+ WorldMapDetailFrame.backdrop:Point("BOTTOMRIGHT", 2, -1)
+
+ WorldMapQuestDetailScrollFrame:Width(348)
+ WorldMapQuestDetailScrollFrame:Point("BOTTOMLEFT", WorldMapDetailFrame, "BOTTOMLEFT", -25, -207)
+ WorldMapQuestDetailScrollFrame:CreateBackdrop("Transparent")
+ WorldMapQuestDetailScrollFrame.backdrop:Point("TOPLEFT", 24, 2)
+ WorldMapQuestDetailScrollFrame.backdrop:Point("BOTTOMRIGHT", 23, -4)
+ WorldMapQuestDetailScrollFrame:SetHitRectInsets(24, -23, 0, -2)
+ WorldMapQuestDetailScrollFrame.backdrop:SetFrameLevel(WorldMapQuestDetailScrollFrame:GetFrameLevel())
+
+ WorldMapQuestDetailScrollFrameTrack:Kill()
+
+ WorldMapQuestRewardScrollFrame:Width(340)
+ WorldMapQuestRewardScrollFrame:Point("LEFT", WorldMapQuestDetailScrollFrame, "RIGHT", 8, 0)
+ WorldMapQuestRewardScrollFrame:CreateBackdrop("Transparent")
+ WorldMapQuestRewardScrollFrame.backdrop:Point("TOPLEFT", 20, 2)
+ WorldMapQuestRewardScrollFrame.backdrop:Point("BOTTOMRIGHT", 22, -4)
+ WorldMapQuestRewardScrollFrame:SetHitRectInsets(20, -22, 0, -2)
+ WorldMapQuestRewardScrollFrame.backdrop:SetFrameLevel(WorldMapQuestRewardScrollFrame:GetFrameLevel())
+
+ WorldMapQuestRewardScrollChildFrame:SetScale(1)
+
+ WorldMapQuestScrollFrame:CreateBackdrop("Transparent")
+ WorldMapQuestScrollFrame.backdrop:Point("TOPLEFT", 0, 2)
+ WorldMapQuestScrollFrame.backdrop:Point("BOTTOMRIGHT", 25, -3)
+ WorldMapQuestScrollFrame.backdrop:SetFrameLevel(WorldMapQuestScrollFrame:GetFrameLevel())
+
+ WorldMapQuestSelectBar:SetTexture(E.Media.Textures.Highlight)
+ WorldMapQuestSelectBar:SetAlpha(0.35)
+
+ WorldMapQuestHighlightBar:SetTexture(E.Media.Textures.Highlight)
+ WorldMapQuestHighlightBar:SetAlpha(0.35)
+
+ S:HandleScrollBar(WorldMapQuestScrollFrameScrollBar)
+ S:HandleScrollBar(WorldMapQuestDetailScrollFrameScrollBar)
+ S:HandleScrollBar(WorldMapQuestRewardScrollFrameScrollBar)
+
+ S:HandleCloseButton(WorldMapFrameCloseButton)
+
+ WorldMapFrameSizeDownButton:ClearAllPoints()
+ WorldMapFrameSizeDownButton:Point("RIGHT", WorldMapFrameCloseButton, "LEFT", 4, 0)
+ WorldMapFrameSizeDownButton.SetPoint = E.noop
+ WorldMapFrameSizeDownButton:GetHighlightTexture():Kill()
+ S:HandleNextPrevButton(WorldMapFrameSizeDownButton, nil, nil, true)
+ WorldMapFrameSizeDownButton:Size(26)
+
+ WorldMapFrameSizeUpButton:ClearAllPoints()
+ WorldMapFrameSizeUpButton:Point("RIGHT", WorldMapFrameCloseButton, "LEFT", 4, 0)
+ WorldMapFrameSizeUpButton:GetHighlightTexture():Kill()
+ S:HandleNextPrevButton(WorldMapFrameSizeUpButton, nil, nil, true)
+ WorldMapFrameSizeUpButton:Size(26)
+
+ S:HandleDropDownBox(WorldMapLevelDropDown)
+ S:HandleDropDownBox(WorldMapZoneMinimapDropDown)
+ S:HandleDropDownBox(WorldMapContinentDropDown)
+ S:HandleDropDownBox(WorldMapZoneDropDown)
+
+ S:HandleButton(WorldMapZoomOutButton)
+ WorldMapZoomOutButton:Point("LEFT", WorldMapZoneDropDown, "RIGHT", 0, 3)
+
+ S:HandleCheckBox(WorldMapTrackQuest)
+ S:HandleCheckBox(WorldMapQuestShowObjectives)
+
+ WorldMapFrameAreaLabel:FontTemplate(nil, 50, "OUTLINE")
+ WorldMapFrameAreaLabel:SetShadowOffset(2, -2)
+ WorldMapFrameAreaLabel:SetTextColor(0.90, 0.8294, 0.6407)
+
+ WorldMapFrameAreaDescription:FontTemplate(nil, 40, "OUTLINE")
+ WorldMapFrameAreaDescription:SetShadowOffset(2, -2)
+
+ WorldMapZoneInfo:FontTemplate(nil, 27, "OUTLINE")
+ WorldMapZoneInfo:SetShadowOffset(2, -2)
+ else
+ WorldMapDetailFrame.backdrop:Hide()
+ end
+
+ local function sizeDown()
+ WorldMapFrame.backdrop:Point("TOPLEFT", WorldMapDetailFrame, "TOPLEFT", -14, 27)
+ WorldMapDetailFrame.backdrop:Hide()
+ end
+ local function sizeUp()
+ WorldMapFrame.backdrop:Point("TOPLEFT", WorldMapDetailFrame, "TOPLEFT", -14, 70)
+ WorldMapDetailFrame.backdrop:Show()
+ end
+
+ S:SecureHook(Mapster, "SizeDown", sizeDown)
+ S:SecureHook(Mapster, "SizeUp", sizeUp)
+
+ if WorldMapFrame.sizedDown or WORLDMAP_SETTINGS and WORLDMAP_SETTINGS.size == WORLDMAP_WINDOWED_SIZE then
+ sizeDown()
+ else
+ sizeUp()
+ end
+
+ S:SecureHook(Mapster, "UpdateBorderVisibility", function(self)
+ if self.bordersVisible then
+ WorldMapFrame.backdrop:Show()
+ else
+ WorldMapFrame.backdrop:Hide()
+ end
+ end)
+
+ MapsterOptionsButton:Point("TOPRIGHT", WorldMapPositioningGuide, "TOPRIGHT", -50, -3)
+ MapsterOptionsButton.SetPoint = E.noop
+
+ MapsterQuestObjectivesDropDown:Point("BOTTOMRIGHT", WorldMapPositioningGuide, "BOTTOMRIGHT", -7, -4)
+
+ S:HandleButton(MapsterOptionsButton)
+ S:HandleDropDownBox(MapsterQuestObjectivesDropDown)
+
+ do -- Scaler
+ local Scale = Mapster:GetModule("Scale", true)
+ local scaler = WorldMapPositioningGuide:GetRegions()
+
+ local function updateScalerPoint(mini)
+ if mini then
+ scaler:Point("BOTTOMRIGHT", -25, -8)
+ elseif Mapster.bordersVisible then
+ scaler:Point("BOTTOMRIGHT", -1, 3)
+ end
+ end
+
+ if scaler then
+ scaler:Size(14)
+ updateScalerPoint(Mapster.miniMap)
+ else
+ if Scale then
+ S:SecureHook(Scale, "OnEnable", function(self)
+ scaler = WorldMapPositioningGuide:GetRegions()
+ scaler:Size(14)
+ updateScalerPoint(Mapster.miniMap)
+
+ S:Unhook(self, "OnEnable")
+ end)
+ end
+ end
+
+ if Scale then
+ function Scale:UpdateMapsize(mini)
+ if not scaler then return end
+ updateScalerPoint(mini)
+ end
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/QDKP2_GUI.lua b/ElvUI_AddOnSkins/Skins/Addons/QDKP2_GUI.lua
new file mode 100644
index 0000000..d31c4a4
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/QDKP2_GUI.lua
@@ -0,0 +1,185 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("QDKP2_GUI") then return end
+
+-- Quick DKP V2 - GUI v 2.6.7 and v 2.7.5
+
+S:AddCallbackForAddon("QDKP2_GUI", "QDKP2_GUI", function()
+ if not E.private.addOnSkins.QDKP2_GUI then return end
+ --Roster Frame
+ QDKP2_Frame2:StripTextures()
+ QDKP2_Frame2:CreateBackdrop("Transparent")
+ QDKP2_Frame2:Size(780, 400)
+ QDKP2_frame2_title:Size(725, 14)
+ QDKP2_frame2_scrollbar:StripTextures()
+ QDKP2_frame2_scrollbar:Point("TOPLEFT", 15, - 55)
+ QDKP2_frame2_scrollbar:Point("BOTTOMRIGHT", - 30, 41)
+ QDKP2_frame2_title_name:Size(105, 14)
+ QDKP2_frame2_title_class:Size(80, 14)
+ QDKP2_frame2_title_net:Size(60, 14)
+ QDKP2_frame2_title_total:Size(60, 14)
+ QDKP2_frame2_title_spent:Size(60, 14)
+ QDKP2_Frame2_Bid_Item:ClearAllPoints()
+ QDKP2_Frame2_Bid_Item:Point("BottomLeft", QDKP2_frame2_showRaid, "BottomLeft", - 60, - 2)
+
+ for i = 10, 29 do
+ local child = select(i, QDKP2_Frame2:GetChildren())
+ if child:IsObjectType("Button") then
+ child:StripTextures()
+ child:SetHighlightTexture("Interface\\AddOns\\ElvUI\\Media\\Textures\\Highlight.tga", "Add")
+ S:HandleButtonHighlight(child, 1, 0.8, 0.1)
+ end
+ end
+
+ for i = 1, 20 do
+ _G["QDKP2_frame2_entry" .. i]:Size(725, 14)
+ _G["QDKP2_frame2_entry" .. i .. "_name"]:Size(105, 14)
+ _G["QDKP2_frame2_entry" .. i .. "_class"]:Size(80, 14)
+ _G["QDKP2_frame2_entry" .. i .. "_net"]:Size(60, 14)
+ _G["QDKP2_frame2_entry" .. i .. "_total"]:Size(60, 14)
+ _G["QDKP2_frame2_entry" .. i .. "_spent"]:Size(60, 14)
+
+ local highlight = _G["QDKP2_frame2_entry" .. i .. "_Highlight"]
+ highlight:SetAllPoints(true)
+ highlight:SetTexture(E.Media.Textures.Highlight)
+ highlight:SetVertexColor(0.8, 0.6, 0.2, 0.5)
+ end
+
+ S:HandleScrollBar(QDKP2_frame2_scrollbarScrollBar)
+ S:HandleButton(QDKP2_Frame2_SortBtn_name)
+ S:HandleButton(QDKP2_Frame2_SortBtn_rank)
+ S:HandleButton(QDKP2_Frame2_SortBtn_class)
+ S:HandleButton(QDKP2_Frame2_SortBtn_net)
+ S:HandleButton(QDKP2_Frame2_SortBtn_total)
+ S:HandleButton(QDKP2_Frame2_SortBtn_spent)
+ S:HandleButton(QDKP2_Frame2_SortBtn_hours)
+ S:HandleButton(QDKP2_Frame2_SortBtn_deltatotal)
+ S:HandleButton(QDKP2_Frame2_SortBtn_deltaspent)
+ S:HandleButton(QDKP2_frame2_showRaid)
+ S:HandleButton(QDKP2_Frame2_Bid_Button)
+ S:HandleButton(QDKP2_Frame2_Bid_ButtonWin)
+ S:HandleButton(QDKP2_Frame2_SortBtn_roll)
+ S:HandleButton(QDKP2_Frame2_SortBtn_bid)
+ S:HandleButton(QDKP2_Frame2_SortBtn_value)
+ S:HandleEditBox(QDKP2_Frame2_Bid_Item)
+ S:HandleCheckBox(QDKP2frame2_selectList_guild)
+ if QDKP2frame2_selectList_guildOnline then
+ S:HandleCheckBox(QDKP2frame2_selectList_guildOnline)
+ elseif QDKP2frame2_selectList_Custom then
+ S:HandleCheckBox(QDKP2frame2_selectList_Custom)
+ end
+ S:HandleCheckBox(QDKP2frame2_selectList_Raid)
+ S:HandleCheckBox(QDKP2frame2_selectList_Bid)
+ S:HandleCloseButton(QDKP2_Frame2_Button1, QDKP2_Frame2)
+
+ --RaidLog Frame
+ QDKP2_Frame5:StripTextures()
+ QDKP2_Frame5:CreateBackdrop("Transparent")
+ QDKP2_frame5_scrollbar:StripTextures()
+ S:HandleCloseButton(QDKP2_Frame5_Button1, QDKP2_Frame5)
+ S:HandleScrollBar(QDKP2_frame5_scrollbarScrollBar)
+ QDKP2_frame5_intest_net:Size(40, 14)
+ QDKP2_frame5_intest_mod:Size(40, 14)
+ for i = 1, 25 do
+ _G["QDKP2_frame5_entry" .. i .. "_net"]:Size(40, 14)
+ _G["QDKP2_frame5_entry" .. i .. "_mod"]:Size(40, 14)
+ end
+ for i = 4, 28 do
+ local child = select(i, QDKP2_Frame5:GetChildren())
+ if child:IsObjectType("Button") then
+ child:StripTextures()
+ child:SetHighlightTexture("Interface\\AddOns\\ElvUI\\Media\\Textures\\Highlight.tga", "Add")
+ S:HandleButtonHighlight(child, 1, 0.8, 0.1)
+ end
+ end
+
+ --Frame 1
+ QDKP2_Frame1:StripTextures()
+ QDKP2_Frame1:CreateBackdrop("Transparent")
+ S:HandleCloseButton(QDKP2_Frame1_Button1, QDKP2_Frame1)
+ S:HandleButton(QDKP2frame1_newSession)
+ S:HandleButton(QDKP2frame1_closeSession)
+ S:HandleButton(QDKP2frame1_upload)
+ S:HandleButton(QDKP2frame1_revert)
+ S:HandleButton(QDKP2frame1_backup)
+ S:HandleButton(QDKP2frame1_restore)
+ S:HandleButton(QDKP2frame1_exportTXT)
+ S:HandleButton(QDKP2frame1_list)
+ S:HandleButton(QDKP2frame1_log)
+ S:HandleButton(QDKP2frame1_award)
+ S:HandleButton(QDKP2frame1_dkpBox_perhr)
+ S:HandleButton(QDKP2frame1_dkpBox_IM)
+ S:HandleButton(QDKP2frame1_ironman)
+ S:HandleButton(QDKP2frame1_onOff)
+ S:HandleButton(QDKP2frame1_dkpBox)
+ S:HandleNextPrevButton(QDKP2frame1_upbutton, "up")
+ S:HandleNextPrevButton(QDKP2frame1_downbutton, "down")
+ S:HandleNextPrevButton(QDKP2frame1_hourlybonus_upbutton, "up")
+ S:HandleNextPrevButton(QDKP2frame1_hourlybonus_downbutton, "down")
+ S:HandleNextPrevButton(QDKP2frame1_IMbonus_upbutton, "up")
+ S:HandleNextPrevButton(QDKP2frame1_IMbonus_downbutton, "down")
+ S:HandleCheckBox(QDKP2frame1_UseBossMod)
+ S:HandleCheckBox(QDKP2frame1_DetectBids)
+ S:HandleCheckBox(QDKP2frame1_FixedPrice)
+ QDKP2_frame1_BackupDate:Point("CENTER", 0, - 3)
+ QDKP2_Frame1_raidDKP_text:Point("LEFT", 4, 0)
+ QDKP2_Frame1_timerDKP_text:Point("LEFT", 4, 0)
+ QDKP2_Frame1_IMDKP_text:Point("LEFT", 4, 0)
+ QDKP2frame1_exportTXT:Size(60, 20)
+ QDKP2frame1_exportTXT:Point("Left", QDKP2frame1_upload, "RIGHT", 5, - 22)
+ QDKP2frame1_log:Point("CENTER", QDKP2_Frame1, "TOP", - 2, - 55)
+ QDKP2frame1_newSession:Point("RIGHT", QDKP2_Frame1, "TOP", - 2, - 103)
+ QDKP2frame1_backup:Point("RIGHT", QDKP2_frame1_BackupDate_Parent, "TOP", - 36, 5)
+ QDKP2frame1_restore:Point("LEFT", QDKP2_frame1_BackupDate_Parent, "TOP", - 35, 5)
+ QDKP2frame1_backup:Size(89, 20)
+ QDKP2frame1_restore:Size(89, 20)
+
+ --Frame 3
+ QDKP2_Frame3:StripTextures()
+ QDKP2_Frame3:CreateBackdrop("Transparent")
+ QDKP2frame3_dkpBox:Size(45, 20)
+ QDKP2frame3_reasonBox:Size(137, 20)
+ QDKP2frame3_reasonBox:Point("LEFT", QDKP2frame3_For, "RIGHT", 4, - 2)
+ QDKP2frame3_changePlayerInfo:Point("CENTER", QDKP2_Frame3, "BOTTOM", 0, 23)
+ S:HandleCloseButton(QDKP2_Frame3_Button1)
+ S:HandleEditBox(QDKP2frame3_dkpBox)
+ S:HandleEditBox(QDKP2frame3_reasonBox)
+ S:HandleButton(QDKP2frame3_award)
+ S:HandleButton(QDKP2frame3_spend)
+ S:HandleButton(QDKP2frame3_zsBtn)
+ S:HandleButton(QDKP2frame3_PopupLog)
+ S:HandleButton(QDKP2frame3_changePlayerInfo)
+
+ --Frame 4
+ QDKP2_Frame4:StripTextures()
+ QDKP2_Frame4:CreateBackdrop("Transparent")
+ S:HandleCloseButton(QDKP2_Frame4_Button1)
+ QDKP2frame4_NetBox:Size(100, 15)
+ QDKP2frame4_TotalBox:Size(100, 15)
+ QDKP2frame4_HoursBox:Size(70, 15)
+ QDKP2frame4_NetBox:Point("TopLeft", QDKP2_Frame4, "TopLeft", 70, - 31)
+ QDKP2frame4_TotalBox:Point("TopLeft", QDKP2_Frame4, "TopLeft", 70, - 51)
+ QDKP2frame4_HoursBox:Point("TopLeft", QDKP2_Frame4, "TopLeft", 70, - 71)
+ S:HandleEditBox(QDKP2frame4_NetBox)
+ S:HandleEditBox(QDKP2frame4_TotalBox)
+ S:HandleEditBox(QDKP2frame4_HoursBox)
+ S:HandleButton(QDKP2Frame4_Set)
+
+ --QDKP2_modify_log_entry
+ QDKP2_modify_log_entry:StripTextures()
+ QDKP2_modify_log_entry:CreateBackdrop("Transparent")
+ S:HandleCloseButton(QDKP2_modify_log_entry_ButtonClose)
+ QDKP2_modify_log_entry:Size(230, 160)
+ QDKP2frame6_GainedBox:Size(50, 20)
+ QDKP2frame6_SpentBox:Size(50, 20)
+ QDKP2frame6_ReasonBox:Size(160, 20)
+ QDKP2frame6_ReasonBox:Point("TOP", 19, - 70)
+ QDKP2_modify_log_entry_for:Point("TOPLEFT", 5, - 74)
+ S:HandleEditBox(QDKP2frame6_GainedBox)
+ S:HandleEditBox(QDKP2frame6_SpentBox)
+ S:HandleEditBox(QDKP2frame6_ReasonBox)
+ S:HandleButton(QDKP2_modify_log_entry_Apply)
+ S:HandleButton(QDKP2_modify_log_entry_Cancel)
+end)
diff --git a/ElvUI_AddOnSkins/Skins/Addons/QuestGuru.lua b/ElvUI_AddOnSkins/Skins/Addons/QuestGuru.lua
new file mode 100644
index 0000000..5ed588f
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/QuestGuru.lua
@@ -0,0 +1,513 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("QuestGuru") then return end
+
+local _G = _G
+local select = select
+local unpack = unpack
+
+local GetItemInfo = GetItemInfo
+local GetItemQualityColor = GetItemQualityColor
+local GetQuestLogChoiceInfo = GetQuestLogChoiceInfo
+local hooksecurefunc = hooksecurefunc
+
+-- QuestGuru 1.4.1
+
+S:AddCallbackForAddon("QuestGuru", "QuestGuru", function()
+ if not E.private.addOnSkins.QuestGuru then return end
+
+ local origCount = QUESTGURU_QUESTS_DISPLAYED
+ QUESTS_DISPLAYED = 21
+ QUESTGURU_QUESTS_DISPLAYED = 21
+
+ for i = QUESTS_DISPLAYED + 1, origCount do
+ _G["QuestGuru_QuestLogTitle"..i]:Hide()
+ _G["QuestGuru_QuestAbandonTitle"..i]:Hide()
+ end
+
+ QuestGuru_UpdateGossipFrame = E.noop
+ QuestGuru_UpdateProgressFrame = E.noop
+ QuestGuru_UpdateDetailFrame = E.noop
+ QuestGuru_QuestFrameGreetingPanel_OnShow = E.noop
+
+ QuestGuru_QuestLogFrame:Size(682, 447)
+
+ if not QuestGuru_QuestLogFrame.backdrop then
+ QuestGuru_QuestLogFrame:StripTextures()
+ QuestGuru_QuestLogFrame:CreateBackdrop("Transparent")
+ QuestGuru_QuestLogFrame.backdrop:Point("TOPLEFT", 11, -12)
+ QuestGuru_QuestLogFrame.backdrop:Point("BOTTOMRIGHT", -1, 11)
+ end
+
+ S:SetUIPanelWindowInfo(QuestGuru_QuestLogFrame, "xoffset", -50)
+
+ S:HandleCloseButton(QuestGuru_QuestLogFrameCloseButton, QuestLogFrame.backdrop)
+
+ QuestGuru_QuestLogTitleText:Point("TOP", 0, -16)
+
+ QuestGuruShowMapButton:StripTextures()
+ S:HandleButton(QuestGuruShowMapButton)
+ QuestGuruShowMapButton:Width(82)
+ QuestGuruShowMapButton:Point("TOPRIGHT", 1, 32)
+ QuestGuruShowMapButton.text:ClearAllPoints()
+ QuestGuruShowMapButton.text:SetPoint("CENTER")
+
+ QuestGuru_QuestLogCount:StripTextures()
+ QuestGuru_QuestLogCount:Point("TOPRIGHT", -118, -23)
+ QuestGuru_QuestLogCount.SetPoint = E.noop
+ QuestGuru_QuestLogCount:CreateBackdrop("Transparent")
+ QuestGuru_QuestLogCount.backdrop:Point("TOPLEFT", -1, 0)
+ QuestGuru_QuestLogCount.backdrop:Point("BOTTOMRIGHT", 1, -4)
+
+ S:HandleButton(QuestGuru_QuestFrameExpandCollapseButton)
+ QuestGuru_QuestFrameExpandCollapseButton:Point("TOPLEFT", 19, -39)
+
+ QuestGuru_QuestLogFrameTab1:StripTextures()
+ QuestGuru_QuestLogFrameTab1:SetTemplate()
+ QuestGuru_QuestLogFrameTab1:Height(24)
+ QuestGuru_QuestLogFrameTab1:Point("TOPLEFT", 40, -35)
+ QuestGuru_QuestLogFrameTab1.SetPoint = E.noop
+ QuestGuru_QuestLogFrameTab1:SetHitRectInsets(0, 0, 0, 0)
+ QuestGuru_QuestLogFrameTab1:HookScript("OnEnter", S.SetModifiedBackdrop)
+ QuestGuru_QuestLogFrameTab1:HookScript("OnLeave", S.SetOriginalBackdrop)
+
+ QuestGuru_QuestLogFrameTab2:StripTextures()
+ QuestGuru_QuestLogFrameTab2:SetTemplate()
+ QuestGuru_QuestLogFrameTab2:Height(24)
+ QuestGuru_QuestLogFrameTab2:Point("LEFT", QuestGuru_QuestLogFrameTab1, "RIGHT", 1, 0)
+ QuestGuru_QuestLogFrameTab2.SetPoint = E.noop
+ QuestGuru_QuestLogFrameTab2:SetHitRectInsets(0, 0, 0, 0)
+ QuestGuru_QuestLogFrameTab2:HookScript("OnEnter", S.SetModifiedBackdrop)
+ QuestGuru_QuestLogFrameTab2:HookScript("OnLeave", S.SetOriginalBackdrop)
+
+ QuestGuru_QuestLogTitle1:ClearAllPoints()
+ QuestGuru_QuestLogTitle1:SetPoint("TOPLEFT", QuestGuru_QuestLogListScrollFrame)
+
+ QuestGuru_QuestLogListScrollFrame:Size(305, 335)
+ QuestGuru_QuestLogListScrollFrame:ClearAllPoints()
+ QuestGuru_QuestLogListScrollFrame:Point("TOPLEFT", QuestGuru_QuestLogFrame, 19, -62)
+ QuestGuru_QuestLogListScrollFrame:CreateBackdrop("Transparent")
+ QuestGuru_QuestLogListScrollFrame.backdrop:Point("TOPLEFT", 0, 2)
+ QuestGuru_QuestLogListScrollFrame.backdrop:Point("BOTTOMRIGHT", 0, -2)
+ QuestGuru_QuestLogListScrollFrame:Show()
+ QuestGuru_QuestLogListScrollFrame.Hide = QuestGuru_QuestLogListScrollFrame.Show
+
+ S:HandleScrollBar(QuestGuru_QuestLogListScrollFrameScrollBar)
+ QuestGuru_QuestLogListScrollFrameScrollBar:Point("TOPLEFT", QuestGuru_QuestLogListScrollFrame, "TOPRIGHT", 3, -17)
+ QuestGuru_QuestLogListScrollFrameScrollBar:Point("BOTTOMLEFT", QuestGuru_QuestLogListScrollFrame, "BOTTOMRIGHT", 3, 17)
+
+ QuestGuru_QuestLogDetailScrollFrame:Size(304, 336)
+ QuestGuru_QuestLogDetailScrollFrame:ClearAllPoints()
+ QuestGuru_QuestLogDetailScrollFrame:Point("TOPRIGHT", QuestGuru_QuestLogFrame, -30, -61)
+ QuestGuru_QuestLogDetailScrollFrame:StripTextures()
+ QuestGuru_QuestLogDetailScrollFrame:CreateBackdrop("Transparent")
+ QuestGuru_QuestLogDetailScrollFrame.backdrop:Point("TOPLEFT", 0, 1)
+ QuestGuru_QuestLogDetailScrollFrame.backdrop:Point("BOTTOMRIGHT", 0, -2)
+
+ S:HandleScrollBar(QuestGuru_QuestLogDetailScrollFrameScrollBar)
+ QuestGuru_QuestLogDetailScrollFrameScrollBar:Point("TOPLEFT", QuestGuru_QuestLogDetailScrollFrame, "TOPRIGHT", 3, -18)
+ QuestGuru_QuestLogDetailScrollFrameScrollBar:Point("BOTTOMLEFT", QuestGuru_QuestLogDetailScrollFrame, "BOTTOMRIGHT", 3, 17)
+
+ S:HandleButton(QuestGuru_QuestLogFrameAbandonButton)
+ S:HandleButton(QuestGuru_QuestFramePushQuestButton)
+ S:HandleButton(QuestGuru_QuestFrameOptionsButton)
+ S:HandleButton(QuestGuru_QuestFrameExitButton)
+
+ QuestGuru_QuestLogFrameAbandonButton:Height(22)
+ QuestGuru_QuestFramePushQuestButton:Height(22)
+ QuestGuru_QuestFrameOptionsButton:Height(22)
+ QuestGuru_QuestFrameExitButton:Height(22)
+
+ QuestGuru_QuestLogFrameAbandonButton:Point("BOTTOMLEFT", QuestGuru_QuestLogFrame, "BOTTOMLEFT", 19, 19)
+ QuestGuru_QuestFramePushQuestButton:Point("LEFT", QuestGuru_QuestLogFrameAbandonButton, "RIGHT", 3, 0)
+
+ QuestGuru_QuestFrameExitButton:Point("BOTTOMRIGHT", -9, 19)
+ QuestGuru_QuestFrameOptionsButton:Point("RIGHT", QuestGuru_QuestFrameExitButton, "LEFT", -3, 0)
+
+ -- Abandoned
+ QuestGuru_QuestAbandonTitle1:ClearAllPoints()
+ QuestGuru_QuestAbandonTitle1:SetPoint("TOPLEFT", QuestGuru_QuestAbandonListScrollFrame)
+
+ QuestGuru_QuestAbandonListScrollFrame:Size(305, 335)
+ QuestGuru_QuestAbandonListScrollFrame:ClearAllPoints()
+ QuestGuru_QuestAbandonListScrollFrame:Point("TOPLEFT", QuestGuru_QuestLogFrame, 19, -62)
+ QuestGuru_QuestAbandonListScrollFrame:CreateBackdrop("Transparent")
+ QuestGuru_QuestAbandonListScrollFrame.backdrop:Point("TOPLEFT", 0, 2)
+ QuestGuru_QuestAbandonListScrollFrame.backdrop:Point("BOTTOMRIGHT", 0, -2)
+ QuestGuru_QuestAbandonListScrollFrame:Show()
+ QuestGuru_QuestAbandonListScrollFrame.Hide = QuestGuru_QuestAbandonListScrollFrame.Show
+
+ S:HandleScrollBar(QuestGuru_QuestAbandonListScrollFrameScrollBar)
+ QuestGuru_QuestAbandonListScrollFrameScrollBar:Point("TOPLEFT", QuestGuru_QuestAbandonListScrollFrame, "TOPRIGHT", 3, -17)
+ QuestGuru_QuestAbandonListScrollFrameScrollBar:Point("BOTTOMLEFT", QuestGuru_QuestAbandonListScrollFrame, "BOTTOMRIGHT", 3, 17)
+
+ QuestGuru_QuestAbandonDetailScrollFrame:Size(304, 336)
+ QuestGuru_QuestAbandonDetailScrollFrame:ClearAllPoints()
+ QuestGuru_QuestAbandonDetailScrollFrame:Point("TOPRIGHT", QuestGuru_QuestLogFrame, -30, -61)
+ QuestGuru_QuestAbandonDetailScrollFrame:StripTextures()
+ QuestGuru_QuestAbandonDetailScrollFrame:CreateBackdrop("Transparent")
+ QuestGuru_QuestAbandonDetailScrollFrame.backdrop:Point("TOPLEFT", 0, 1)
+ QuestGuru_QuestAbandonDetailScrollFrame.backdrop:Point("BOTTOMRIGHT", 0, -2)
+
+ S:HandleScrollBar(QuestGuru_QuestAbandonDetailScrollFrameScrollBar)
+ QuestGuru_QuestAbandonDetailScrollFrameScrollBar:Point("TOPLEFT", QuestGuru_QuestAbandonDetailScrollFrame, "TOPRIGHT", 3, -18)
+ QuestGuru_QuestAbandonDetailScrollFrameScrollBar:Point("BOTTOMLEFT", QuestGuru_QuestAbandonDetailScrollFrame, "BOTTOMRIGHT", 3, 17)
+
+ S:HandleEditBox(QuestGuru_QuestAbandonSearch)
+ QuestGuru_QuestAbandonSearch:Point("LEFT", QuestGuru_QuestAbandonSearchText, "RIGHT", 4, -1)
+
+ S:HandleButton(QuestGuru_QuestAbandonClearList)
+ QuestGuru_QuestAbandonClearList:Height(22)
+ QuestGuru_QuestAbandonClearList:Point("LEFT", QuestGuru_QuestAbandonSearch, "RIGHT", 8, 0)
+
+ local function skinOptions(f)
+ for i = 1, f:GetNumChildren() do
+ local child = select(i, f:GetChildren())
+ if child then
+ if child:IsObjectType("CheckButton") then
+ S:HandleCheckBox(child)
+ elseif child:IsObjectType("EditBox") then
+ S:HandleEditBox(child)
+ elseif child:IsObjectType("Button") then
+ S:HandleButton(child)
+ elseif child:IsObjectType("Frame") then
+ S:HandleDropDownBox(child, 240)
+ end
+ end
+ end
+ end
+
+ skinOptions(QuestGuru_OptionsFrameGeneral)
+ skinOptions(QuestGuru_OptionsFrameSound)
+ skinOptions(QuestGuru_AnnounceFrame)
+
+ local function skinLogEntry(questLogTitle, index)
+ questLogTitle:Width(300)
+
+ if index > 1 then
+ questLogTitle:SetPoint("TOPLEFT", _G["QuestGuru_QuestLogTitle"..(index-1)], "BOTTOMLEFT", 0, 0)
+ end
+
+ if questLogTitle.check then
+ questLogTitle.check:CreateBackdrop()
+ questLogTitle.check.backdrop:SetInside()
+ questLogTitle.check:SetNormalTexture(nil)
+ questLogTitle.check:SetPushedTexture(nil)
+ questLogTitle.check:SetHighlightTexture(nil)
+ end
+
+ S:HandleCollapseExpandButton(questLogTitle)
+ end
+
+ for i = 1, QUESTS_DISPLAYED do
+ skinLogEntry(_G["QuestGuru_QuestLogTitle"..i], i)
+ skinLogEntry(_G["QuestGuru_QuestAbandonTitle"..i], i)
+ end
+
+ -- QuestStart Tooltip
+ QuestGuru_QuestStartInfoFrame:StripTextures()
+ QuestGuru_QuestStartInfoFrame:SetTemplate("Transparent")
+
+ -- Quest items
+ local function updateItemQuality(self, texture)
+ if self.parent.link or self.parent.type == "choice" then
+ local quality
+
+ if self.parent.link then
+ quality = select(3, GetItemInfo(self.parent.link))
+ elseif self.parent.type == "choice" then
+ quality = select(4, GetQuestLogChoiceInfo(self.parent:GetID()))
+ end
+
+ if quality then
+ local r, g, b = GetItemQualityColor(quality)
+
+ self.parent:SetBackdropBorderColor(r, g, b)
+ self.parent.backdrop:SetBackdropBorderColor(r, g, b)
+
+ self.parent.text:SetTextColor(r, g, b)
+ else
+ self.parent:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ self.parent.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
+
+ self.parent.text:SetTextColor(1, 1, 1)
+ end
+ end
+ end
+
+ local items = {
+ ["QuestGuru_QuestLogItem"] = 10,
+ ["QuestGuru_QuestLogObjectiveItem"] = 10,
+ ["QuestGuru_QuestAbandonItem"] = 10,
+ }
+ for frame, numItems in pairs(items) do
+ for i = 1, numItems do
+ local item = _G[frame..i]
+ local icon = _G[frame..i.."IconTexture"]
+ local count = _G[frame..i.."Count"]
+
+ item:StripTextures()
+ item:SetTemplate("Default")
+ item:StyleButton()
+ item:Size(143, 40)
+ item:SetFrameLevel(item:GetFrameLevel() + 2)
+
+ icon:Size(E.PixelMode and 38 or 32)
+ icon:SetDrawLayer("OVERLAY")
+ icon:Point("TOPLEFT", E.PixelMode and 1 or 4, -(E.PixelMode and 1 or 4))
+ S:HandleIcon(icon)
+
+ item.text = _G[frame..i.."Name"]
+ icon.parent = item
+ hooksecurefunc(icon, "SetTexture", updateItemQuality)
+
+ count:SetParent(item.backdrop)
+ count:SetDrawLayer("OVERLAY")
+ end
+ end
+
+ do -- Fonts
+ local function fixFontColor(obj, r, g, b)
+ obj:SetTextColor(r, g, b)
+ obj.SetTextColor = E.noop
+ end
+
+ fixFontColor(QuestGuru_QuestStartInfoTitle, 1, 0.8, 0.1)
+ fixFontColor(QuestGuru_QuestStartInfoNPC, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestStartInfoPOS, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestStartInfoArea, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestStartInfoTimeLabel, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestStartInfoTime, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestStartInfoLevelLabel, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestStartInfoLevel, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogQuestTitle, 1, 0.8, 0.1)
+ fixFontColor(QuestGuru_QuestLogObjectivesText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogTimerText, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogObjective1, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogObjective2, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogObjective3, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogObjective4, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogObjective5, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogObjective6, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogObjective7, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogObjective8, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogObjective9, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogObjective10, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogRequiredMoneyText, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogSuggestedGroupNum, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogDescriptionTitle, 1, 0.8, 0.1)
+ fixFontColor(QuestGuru_QuestLogQuestDescription, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogRewardTitleText, 1, 0.8, 0.1)
+ fixFontColor(QuestGuru_QuestLogItemChooseText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogItemReceiveText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogSpellLearnText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogPlayerTitleText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogStartLabel, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogFinishLabel, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogFinishPos, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogFinishNPCName, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestLogHonorFrameReceiveText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogTalentFrameReceiveText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestLogXPFrameReceiveText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestAbandonQuestTitle, 1, 0.8, 0.1)
+ fixFontColor(QuestGuru_QuestAbandonObjectivesText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestAbandonTimerText, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonObjective1, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonObjective2, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonObjective3, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonObjective4, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonObjective5, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonObjective6, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonObjective7, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonObjective8, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonObjective9, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonObjective10, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonRequiredMoneyText, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonSuggestedGroupNum, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestAbandonDescriptionTitle, 1, 0.8, 0.1)
+ fixFontColor(QuestGuru_QuestAbandonQuestDescription, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestAbandonRewardTitleText, 1, 0.8, 0.1)
+ fixFontColor(QuestGuru_QuestAbandonItemChooseText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestAbandonItemReceiveText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestAbandonSpellLearnText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestAbandonPlayerTitleText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestAbandonStartLabel, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestAbandonFinishLabel, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestAbandonFinishPos, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonFinishNPCName, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestAbandonHonorFrameReceiveText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestAbandonTalentFrameReceiveText, 1, 1, 1)
+ end
+end)
+
+S:AddCallbackForAddon("QuestGuru_History", "QuestGuru_History", function()
+ if not E.private.addOnSkins.QuestGuru then return end
+
+ QuestGuru_QuestLogFrameTab3:StripTextures()
+ QuestGuru_QuestLogFrameTab3:SetTemplate()
+ QuestGuru_QuestLogFrameTab3:Height(24)
+ QuestGuru_QuestLogFrameTab3:Point("LEFT", QuestGuru_QuestLogFrameTab2, "RIGHT", 1, 0)
+ QuestGuru_QuestLogFrameTab3.SetPoint = E.noop
+ QuestGuru_QuestLogFrameTab3:SetHitRectInsets(0, 0, 0, 0)
+ QuestGuru_QuestLogFrameTab3:HookScript("OnEnter", S.SetModifiedBackdrop)
+ QuestGuru_QuestLogFrameTab3:HookScript("OnLeave", S.SetOriginalBackdrop)
+
+ QuestGuru_QuestLogFrameTab2.SetPoint = nil
+ QuestGuru_QuestLogFrameTab2:Point("LEFT", QuestGuru_QuestLogFrameTab1, "RIGHT", 1, 0)
+ QuestGuru_QuestLogFrameTab2.SetPoint = E.noop
+
+ QuestGuru_QuestHistoryTitle1:ClearAllPoints()
+ QuestGuru_QuestHistoryTitle1:SetPoint("TOPLEFT", QuestGuru_QuestHistoryListScrollFrame)
+
+ QuestGuru_QuestHistoryListScrollFrame:Size(305, 335)
+ QuestGuru_QuestHistoryListScrollFrame:ClearAllPoints()
+ QuestGuru_QuestHistoryListScrollFrame:Point("TOPLEFT", QuestGuru_QuestLogFrame, 19, -62)
+ QuestGuru_QuestHistoryListScrollFrame:CreateBackdrop("Transparent")
+ QuestGuru_QuestHistoryListScrollFrame.backdrop:Point("TOPLEFT", 0, 2)
+ QuestGuru_QuestHistoryListScrollFrame.backdrop:Point("BOTTOMRIGHT", 0, -2)
+ QuestGuru_QuestHistoryListScrollFrame:Show()
+ QuestGuru_QuestHistoryListScrollFrame.Hide = QuestGuru_QuestHistoryListScrollFrame.Show
+
+ S:HandleScrollBar(QuestGuru_QuestHistoryListScrollFrameScrollBar)
+ QuestGuru_QuestHistoryListScrollFrameScrollBar:Point("TOPLEFT", QuestGuru_QuestHistoryListScrollFrame, "TOPRIGHT", 3, -17)
+ QuestGuru_QuestHistoryListScrollFrameScrollBar:Point("BOTTOMLEFT", QuestGuru_QuestHistoryListScrollFrame, "BOTTOMRIGHT", 3, 17)
+
+ QuestGuru_QuestHistoryDetailScrollFrame:Size(304, 336)
+ QuestGuru_QuestHistoryDetailScrollFrame:ClearAllPoints()
+ QuestGuru_QuestHistoryDetailScrollFrame:Point("TOPRIGHT", QuestGuru_QuestLogFrame, -30, -61)
+ QuestGuru_QuestHistoryDetailScrollFrame:StripTextures()
+ QuestGuru_QuestHistoryDetailScrollFrame:CreateBackdrop("Transparent")
+ QuestGuru_QuestHistoryDetailScrollFrame.backdrop:Point("TOPLEFT", 0, 1)
+ QuestGuru_QuestHistoryDetailScrollFrame.backdrop:Point("BOTTOMRIGHT", 0, -2)
+
+ S:HandleScrollBar(QuestGuru_QuestHistoryDetailScrollFrameScrollBar)
+ QuestGuru_QuestHistoryDetailScrollFrameScrollBar:Point("TOPLEFT", QuestGuru_QuestHistoryDetailScrollFrame, "TOPRIGHT", 3, -18)
+ QuestGuru_QuestHistoryDetailScrollFrameScrollBar:Point("BOTTOMLEFT", QuestGuru_QuestHistoryDetailScrollFrame, "BOTTOMRIGHT", 3, 17)
+
+ S:HandleEditBox(QuestGuru_QuestHistorySearch)
+ QuestGuru_QuestHistorySearch:Width(143)
+ QuestGuru_QuestHistorySearch:Point("LEFT", QuestGuru_QuestHistorySearchText, "RIGHT", 4, -1)
+
+ S:HandleButton(QuestGuru_HistoryListFrameShowButton)
+ QuestGuru_HistoryListFrameShowButton:Point("LEFT", QuestGuru_QuestHistorySearch, "RIGHT", 4, 0)
+
+ local function skinLogEntry(questLogTitle, index)
+ questLogTitle:Width(300)
+
+ if index > 1 then
+ questLogTitle:SetPoint("TOPLEFT", _G["QuestGuru_QuestLogTitle"..(index-1)], "BOTTOMLEFT", 0, 0)
+ end
+
+ if questLogTitle.check then
+ questLogTitle.check:CreateBackdrop()
+ questLogTitle.check.backdrop:SetInside()
+ questLogTitle.check:SetNormalTexture(nil)
+ questLogTitle.check:SetPushedTexture(nil)
+ questLogTitle.check:SetHighlightTexture(nil)
+ end
+
+ S:HandleCollapseExpandButton(questLogTitle)
+ end
+
+ for i = 1, QUESTS_DISPLAYED do
+ skinLogEntry(_G["QuestGuru_QuestHistoryTitle"..i], i)
+ end
+
+ -- Quest items
+ local function updateItemQuality(self, texture)
+ if self.parent.link or self.parent.type == "choice" then
+ local quality
+
+ if self.parent.link then
+ quality = select(3, GetItemInfo(self.parent.link))
+ elseif self.parent.type == "choice" then
+ quality = select(4, GetQuestLogChoiceInfo(self.parent:GetID()))
+ end
+
+ if quality then
+ local r, g, b = GetItemQualityColor(quality)
+
+ self.parent:SetBackdropBorderColor(r, g, b)
+ self.parent.backdrop:SetBackdropBorderColor(r, g, b)
+
+ self.parent.text:SetTextColor(r, g, b)
+ else
+ self.parent:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ self.parent.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
+
+ self.parent.text:SetTextColor(1, 1, 1)
+ end
+ end
+ end
+
+ local items = {
+ ["QuestGuru_QuestHistoryItem"] = 10,
+ }
+ for frame, numItems in pairs(items) do
+ for i = 1, numItems do
+ local item = _G[frame..i]
+ local icon = _G[frame..i.."IconTexture"]
+ local count = _G[frame..i.."Count"]
+
+ item:StripTextures()
+ item:SetTemplate("Default")
+ item:StyleButton()
+ item:Size(143, 40)
+ item:SetFrameLevel(item:GetFrameLevel() + 2)
+
+ icon:Size(E.PixelMode and 38 or 32)
+ icon:SetDrawLayer("OVERLAY")
+ icon:Point("TOPLEFT", E.PixelMode and 1 or 4, -(E.PixelMode and 1 or 4))
+ S:HandleIcon(icon)
+
+ item.text = _G[frame..i.."Name"]
+ icon.parent = item
+ hooksecurefunc(icon, "SetTexture", updateItemQuality)
+
+ count:SetParent(item.backdrop)
+ count:SetDrawLayer("OVERLAY")
+ end
+ end
+
+ do -- Fonts
+ local function fixFontColor(obj, r, g, b)
+ obj:SetTextColor(r, g, b)
+ obj.SetTextColor = E.noop
+ end
+
+ fixFontColor(QuestGuru_QuestHistoryQuestTitle, 1, 0.8, 0.1)
+ fixFontColor(QuestGuru_QuestHistoryObjectivesText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistoryTimerText, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryObjective1, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryObjective2, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryObjective3, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryObjective4, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryObjective5, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryObjective6, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryObjective7, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryObjective8, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryObjective9, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryObjective10, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryRequiredMoneyText, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistorySuggestedGroupNum, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistoryDescriptionTitle, 1, 0.8, 0.1)
+ fixFontColor(QuestGuru_QuestHistoryQuestDescription, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistoryRewardTitleText, 1, 0.8, 0.1)
+ fixFontColor(QuestGuru_QuestHistoryItemChooseText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistoryItemReceiveText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistorySpellLearnText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistoryPlayerTitleText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistoryXPText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistoryRepText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistoryStartLabel, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistoryStartPos, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryStartNPCName, 0.4, 0.8, 1)
+ fixFontColor(QuestGuru_QuestHistoryFinishLabel, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistoryFinishPos, 0.6, 0.6, 0.6)
+ fixFontColor(QuestGuru_QuestHistoryFinishNPCName, 0.4, 0.8, 1)
+ fixFontColor(QuestGuru_QuestHistoryHonorFrameReceiveText, 1, 1, 1)
+ fixFontColor(QuestGuru_QuestHistoryTalentFrameReceiveText, 1, 1, 1)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/QuestGuruTracker.lua b/ElvUI_AddOnSkins/Skins/Addons/QuestGuruTracker.lua
new file mode 100644
index 0000000..7f5cf1f
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/QuestGuruTracker.lua
@@ -0,0 +1,445 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("QuestGuru_Tracker") then return end
+
+-- QuestGuru_Tracker 1.4.4
+
+S:AddCallbackForAddon("QuestGuru_Tracker", "QuestGuru_Tracker", function()
+ if not E.private.addOnSkins.QuestGuru_Tracker then return end
+
+ E:GetModule("Tooltip"):SetStyle(QGT_QuestWatchFrameTooltip)
+ QGT_QuestWatchFrameTooltip.SetBackdropColor = E.noop
+ QGT_QuestWatchFrameTooltip.SetBackdropBorderColor = E.noop
+
+ QGT_QuestWatchFrame:SetBackdrop(nil)
+ QGT_QuestWatchFrame:CreateBackdrop(QGT_Settings.ShowBorder and "Transparent" or "NoBackdrop")
+ QGT_QuestWatchFrame:SetHitRectInsets(0, 0, 0, 0)
+ QGT_QuestWatchFrameBackground:Hide()
+
+ QGT_AchievementWatchFrame:SetBackdrop(nil)
+ QGT_AchievementWatchFrame:CreateBackdrop(QGT_Settings.ShowBorder and "Transparent" or "NoBackdrop")
+ QGT_AchievementWatchFrame:SetHitRectInsets(0, 0, 0, 0)
+ QGT_AchievementWatchFrameBackground:Hide()
+
+ S:HandleButton(QGT_QuestWatchFrameToggle)
+ S:HandleButton(QGT_QuestWatchFrameMinimize)
+ S:HandleButton(QGT_QuestWatchFrameOptions)
+ S:HandleButton(QGT_AchievementWatchFrameToggle)
+ S:HandleButton(QGT_AchievementWatchFrameMinimize)
+ S:HandleButton(QGT_AchievementWatchFrameOptions)
+
+ QGT_QuestWatchFrameMinimize:Point("RIGHT", QGT_QuestWatchFrameOptions, "LEFT", -1, 0)
+ QGT_QuestWatchFrameToggle:Point("RIGHT", QGT_QuestWatchFrameMinimize, "LEFT", -2, 0)
+
+ QGT_AchievementWatchFrameMinimize:Point("RIGHT", QGT_AchievementWatchFrameOptions, "LEFT", -1, 0)
+ QGT_AchievementWatchFrameToggle:Point("RIGHT", QGT_AchievementWatchFrameMinimize, "LEFT", -2, 0)
+
+ local _SetPoint = QGT_QuestWatchFrameSlider.SetPoint
+ local function sliderSetPoint(self, point)
+ if point == "TOPLEFT" then
+ _SetPoint(self, "TOPLEFT", -12, -17)
+ else
+ _SetPoint(self, "TOPRIGHT", 12, -17)
+ end
+ end
+
+ S:HandleSliderFrame(QGT_QuestWatchFrameSlider)
+ QGT_QuestWatchFrameSlider.SetPoint = sliderSetPoint
+
+ S:HandleSliderFrame(QGT_AchievementWatchFrameSlider)
+ QGT_AchievementWatchFrameSlider.SetPoint = sliderSetPoint
+
+ local function skinOptions(f)
+ for i = 1, f:GetNumChildren() do
+ local child = select(i, f:GetChildren())
+ if child then
+ if child:IsObjectType("CheckButton") then
+ S:HandleCheckBox(child)
+ elseif child:IsObjectType("EditBox") then
+ S:HandleEditBox(child)
+ elseif child:IsObjectType("Button") then
+ S:HandleButton(child)
+ elseif child:IsObjectType("Slider") then
+ S:HandleSliderFrame(child)
+ end
+ end
+ end
+ end
+
+ skinOptions(QGT_OptionsFrameTracker)
+
+ for i = 1, 40 do
+ local frame = _G["QGT_AchievementWatchLine"..i]
+ local icon = _G["QGT_AchievementWatchLine"..i.."Icon"]
+
+ icon:Size(14)
+ icon:SetTexCoord(unpack(E.TexCoords))
+
+ frame.statusBar:StripTextures()
+ frame.statusBar:CreateBackdrop("Transparent")
+
+ frame.statusBar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(frame.statusBar)
+ end
+
+ do
+ local alpha = QGT_Settings.Alpha
+ local backdropR, backdropG, backdropB = unpack(E.media.backdropfadecolor, 1, 3)
+ local borderR, borderG, borderB = unpack(E.media.bordercolor, 1, 3)
+
+ QGT_QuestWatchFrame.backdrop:SetBackdropColor(backdropR, backdropG, backdropB, alpha)
+ QGT_QuestWatchFrame.backdrop:SetBackdropBorderColor(borderR, borderG, borderB, alpha)
+ QGT_AchievementWatchFrame.backdrop:SetBackdropColor(backdropR, backdropG, backdropB, alpha)
+ QGT_AchievementWatchFrame.backdrop:SetBackdropBorderColor(borderR, borderG, borderB, alpha)
+ end
+
+ QGT_SetQuestWatchBorder = function(enabled)
+ if enabled then
+ QGT_QuestWatchFrame.backdrop:SetTemplate("Transparent", nil, true)
+ else
+ QGT_QuestWatchFrame.backdrop:SetTemplate("NoBackdrop", nil, true)
+ end
+ end
+
+ QGT_SetAchievementWatchBorder = function(enabled)
+ if enabled then
+ QGT_AchievementWatchFrame.backdrop:SetTemplate("Transparent", nil, true)
+ else
+ QGT_AchievementWatchFrame.backdrop:SetTemplate("NoBackdrop", nil, true)
+ end
+ end
+
+ QGT_OptionsFrameTrackerAlpha:SetScript("OnValueChanged", function(self)
+ local alpha = self:GetValue()
+ local backdropR, backdropG, backdropB = unpack(E.media.backdropfadecolor, 1, 3)
+ local borderR, borderG, borderB = unpack(E.media.bordercolor, 1, 3)
+
+ QGT_Settings.Alpha = alpha
+
+ QGT_QuestWatchFrame.backdrop:SetBackdropColor(backdropR, backdropG, backdropB, alpha)
+ QGT_QuestWatchFrame.backdrop:SetBackdropBorderColor(borderR, borderG, borderB, alpha)
+ QGT_AchievementWatchFrame.backdrop:SetBackdropColor(backdropR, backdropG, backdropB, alpha)
+ QGT_AchievementWatchFrame.backdrop:SetBackdropBorderColor(borderR, borderG, borderB, alpha)
+
+ QGT_OptionsFrameTrackerAlphaText:SetFormattedText("%s (%d%%)", QG_OPT_TRACKER_ALPHA, math.abs(math.ceil(alpha * 100 - 0.5)))
+ end)
+
+ local skinnedButtons = 0
+ hooksecurefunc("QGT_QuestWatch_Update", function()
+ local questItemIcons = QGT_Settings.QuestItemIcons
+
+ if questItemIcons or QGT_WATCHFRAME_NUM_ITEMS > skinnedButtons then
+ local leftSide = (QGT_Settings.QuestWatch.Left * QGT_Settings.Scale) < 32
+ local sliderVisible = QGT_QuestWatchFrameSlider:GetAlpha() > 0
+ local sliderRightVisible = sliderVisible and ((QGT_Settings.QuestWatch.Left + 256) * QGT_Settings.Scale) > (UIParent:GetWidth() - 16)
+
+ for i = questItemIcons and 1 or skinnedButtons + 1, QGT_WATCHFRAME_NUM_ITEMS do
+ local button = _G["WatchFrameItem"..i]
+
+ if button then
+ if not button.isSkinned then
+ local icon = _G["WatchFrameItem"..i.."IconTexture"]
+ local normal = _G["WatchFrameItem"..i.."NormalTexture"]
+ local cooldown = _G["WatchFrameItem"..i.."Cooldown"]
+
+ button:CreateBackdrop()
+ button.backdrop:SetAllPoints()
+ button:StyleButton()
+ button:Size(25)
+
+ normal:SetAlpha(0)
+
+ icon:SetInside()
+ icon:SetTexCoord(unpack(E.TexCoords))
+
+ E:RegisterCooldown(cooldown)
+
+ button.isSkinned = true
+ end
+
+ if questItemIcons then
+ local _, watchText = button:GetPoint()
+
+ if leftSide then
+ if sliderVisible then
+ button:Point("TOPLEFT", watchText, "TOPRIGHT", 19, 0)
+ else
+ button:Point("TOPLEFT", watchText, "TOPRIGHT", 8, 0)
+ end
+ else
+ if sliderRightVisible then
+ button:Point("TOPRIGHT", watchText, "TOPLEFT", -19, 0)
+ else
+ button:Point("TOPRIGHT", watchText, "TOPLEFT", -8, 0)
+ end
+ end
+ end
+ end
+ end
+
+ skinnedButtons = QGT_WATCHFRAME_NUM_ITEMS
+ end
+ end)
+
+ do -- Fixes
+ local _G = _G
+ local tonumber = tonumber
+ local len, sub = string.len, string.sub
+
+ local ChatEdit_ChooseBoxForSend = ChatEdit_ChooseBoxForSend
+ local GetAchievementLink = GetAchievementLink
+ local GetItemInfo = GetItemInfo
+ local GetQuestLink = GetQuestLink
+ local GetQuestLogTitle = GetQuestLogTitle
+ local IsShiftKeyDown = IsShiftKeyDown
+ local QuestLog_OpenToQuest = QuestLog_OpenToQuest
+ local QuestLog_SetSelection = QuestLog_SetSelection
+ local RemoveTrackedAchievement = RemoveTrackedAchievement
+ local WatchFrame_Update = WatchFrame_Update
+
+ local function questOnClick(self, button)
+ local qID = self.qID
+
+ if button == "LeftButton" then
+ if IsShiftKeyDown() then
+ local ChatFrameEditBox = ChatEdit_ChooseBoxForSend()
+
+ -- header line
+ if not qID then
+ if ChatFrameEditBox:IsVisible() then
+ ChatFrameEditBox:Insert(self:GetText())
+ end
+ -- objective line
+ elseif not tonumber(qID) then
+ local objName = sub(self:GetText(), 3 + len(QGT_Settings.Bullet))
+ local objText
+
+ if qID == "item" then
+ local _, itemLink = GetItemInfo(objName)
+
+ if not itemLink then
+ objText = objName
+ else
+ objText = itemLink
+ end
+ else
+ objText = objName
+ end
+
+ if ChatFrameEditBox:IsVisible() then
+ ChatFrameEditBox:Insert(objText)
+ end
+ -- quest number
+ else
+ if ChatFrameEditBox:IsVisible() then
+ ChatFrameEditBox:Insert(GetQuestLink(qID))
+ end
+ end
+ else
+ -- header line
+ if not qID then
+ local headName = self:GetText()
+ if QGT_WatchHeaders[headName] then
+ QGT_WatchHeaders[headName] = false
+ else
+ QGT_WatchHeaders[headName] = true
+ end
+
+ WatchFrame_Update()
+ -- objective line
+ elseif not tonumber(qID) then
+ local objName = sub(self:GetText(), 3 + len(QGT_Settings.Bullet))
+ if qID == "item" then
+ local _, itemLink = GetItemInfo(objName)
+ if itemLink then
+ SetItemRef(itemLink, nil, button)
+ end
+ end
+ -- title line
+ else
+ QuestLog_OpenToQuest(qID)
+
+ if QuestGuru_QuestLogFrame then
+ QuestGuru_QuestLogFrame:Show()
+ end
+ end
+ end
+ elseif button == "RightButton" then
+ if IsShiftKeyDown() then
+ if qID and tonumber(qID) then
+ QuestLog_SetSelection(qID, button)
+ QuestLog_Update()
+ ToggleDropDownMenu(1, nil, QGT_QuestWatchTitleMenu, self:GetName(), 0, 0)
+ end
+ else
+ -- header line
+ if not qID then
+ local headName = self:GetText()
+ if QGT_WatchHeaders[headName] then
+ QGT_WatchHeaders[headName] = false
+ else
+ QGT_WatchHeaders[headName] = true
+ end
+
+ WatchFrame_Update()
+ -- title line
+ elseif tonumber(qID) then
+ local qName = GetQuestLogTitle(qID)
+
+ if QGT_WatchQuests[qName] then
+ QGT_WatchQuests[qName] = false
+ else
+ QGT_WatchQuests[qName] = true
+ end
+
+ WatchFrame_Update()
+ end
+ end
+ end
+
+ QGT_ShowQuestTrackerSlider(true)
+ end
+
+ local function achievementOnClick(self)
+ if self.achievementID then
+ if IsShiftKeyDown() then
+ local ChatFrameEditBox = ChatEdit_ChooseBoxForSend()
+
+ if ChatFrameEditBox:IsVisible() then
+ ChatFrameEditBox:Insert(GetAchievementLink(self.achievementID))
+ else
+ RemoveTrackedAchievement(self.achievementID)
+ end
+ else
+ if not AchievementFrame then
+ AchievementFrame_LoadUI()
+ end
+
+ if not AchievementFrame:IsShown() then
+ AchievementFrame_ToggleAchievementFrame()
+ AchievementFrame_SelectAchievement(self.achievementID)
+ elseif AchievementFrameAchievements.selection ~= self.achievementID then
+ AchievementFrame_SelectAchievement(self.achievementID)
+ else
+ AchievementFrame_ToggleAchievementFrame()
+ end
+ end
+ end
+ end
+
+ local frame1, frame2
+ for i = 1, 40 do
+ frame1 = _G["QGT_QuestWatchLine"..i]
+ frame2 = _G["QGT_AchievementWatchLine"..i]
+
+ if frame1 then
+ frame1:SetScript("OnClick", questOnClick)
+ end
+ if frame2 then
+ frame2:SetScript("OnClick", achievementOnClick)
+ end
+ end
+
+ QGT_QuestWatchButton_OnClick = questOnClick
+ end
+
+ do -- Adjustments
+ local function updateQuestHeader(flag)
+ if flag then
+ local width = 20
+
+ QGT_QuestWatchQuestName:ClearAllPoints()
+ QGT_QuestWatchNumQuests:ClearAllPoints()
+
+ if QGT_QuestWatchFrameToggle:IsShown() then
+ width = width + 60
+ QGT_QuestWatchNumQuests:Point("TOPRIGHT", -60, -6)
+ else
+ width = width + 42
+ QGT_QuestWatchNumQuests:Point("TOPRIGHT", -42, -6)
+ end
+
+ QGT_QuestWatchQuestName:Point("RIGHT", QGT_QuestWatchNumQuests, "LEFT", -12, 0)
+
+ -- width = width + QGT_QuestWatchQuestName:GetWidth() + QGT_QuestWatchNumQuests:GetWidth()
+ width = width + QGT_QuestWatchQuestName:GetWidth() + 32
+
+ QGT_QuestWatchFrame.backdrop:ClearAllPoints()
+ QGT_QuestWatchFrame.backdrop:Point("TOPRIGHT", 1, 1)
+ QGT_QuestWatchFrame.backdrop:Point("BOTTOMLEFT", QGT_QuestWatchFrame:GetWidth() - width, 1)
+ else
+ QGT_QuestWatchFrame.backdrop:ClearAllPoints()
+ QGT_QuestWatchFrame.backdrop:Point("TOPLEFT", -1, 1)
+ QGT_QuestWatchFrame.backdrop:Point("BOTTOMRIGHT", 1, -1)
+
+ QGT_QuestWatchQuestName:ClearAllPoints()
+ QGT_QuestWatchQuestName:Point("TOPLEFT", 8, -6)
+
+ QGT_QuestWatchNumQuests:ClearAllPoints()
+ QGT_QuestWatchNumQuests:Point("LEFT", QGT_QuestWatchQuestName, "RIGHT", 12, 0)
+ end
+ end
+ local function updateAchievemtHeader(flag)
+ if flag then
+ local width = 20
+
+ QGT_AchievementWatchName:ClearAllPoints()
+ QGT_AchievementWatchNum:ClearAllPoints()
+
+ if QGT_AchievementWatchFrameToggle:IsShown() then
+ width = width + 60
+ QGT_AchievementWatchNum:Point("TOPRIGHT", -60, -6)
+ else
+ width = width + 42
+ QGT_AchievementWatchNum:Point("TOPRIGHT", -42, -6)
+ end
+
+ QGT_AchievementWatchName:Point("RIGHT", QGT_AchievementWatchNum, "LEFT", -12, 0)
+
+ -- width = width + QGT_AchievementWatchName:GetWidth() + QGT_AchievementWatchNum:GetWidth()
+ width = width + QGT_AchievementWatchName:GetWidth() + 8
+
+ QGT_AchievementWatchFrame.backdrop:ClearAllPoints()
+ QGT_AchievementWatchFrame.backdrop:Point("TOPRIGHT", 1, 1)
+ QGT_AchievementWatchFrame.backdrop:Point("BOTTOMLEFT", QGT_AchievementWatchFrame:GetWidth() - width, 1)
+ else
+ QGT_AchievementWatchFrame.backdrop:ClearAllPoints()
+ QGT_AchievementWatchFrame.backdrop:Point("TOPLEFT", -1, 1)
+ QGT_AchievementWatchFrame.backdrop:Point("BOTTOMRIGHT", 1, -1)
+
+ QGT_AchievementWatchName:ClearAllPoints()
+ QGT_AchievementWatchName:Point("TOPLEFT", 8, -6)
+
+ QGT_AchievementWatchNum:ClearAllPoints()
+ QGT_AchievementWatchNum:Point("LEFT", QGT_AchievementWatchName, "RIGHT", 12, 0)
+ end
+ end
+
+ QGT_QuestWatchFrameToggle:HookScript("OnClick", function()
+ updateAchievemtHeader(QGT_Settings.AchievementWatch.Minimized)
+ end)
+ QGT_AchievementWatchFrameToggle:HookScript("OnClick", function()
+ updateQuestHeader(QGT_Settings.QuestWatch.Minimized)
+ end)
+
+ QGT_QuestWatchFrameMinimize:HookScript("OnClick", function(self, button)
+ if button == "LeftButton" then
+ updateQuestHeader(QGT_Settings.QuestWatch.Minimized)
+ end
+ end)
+ QGT_AchievementWatchFrameMinimize:HookScript("OnClick", function(self, button)
+ if button == "LeftButton" then
+ updateAchievemtHeader(QGT_Settings.AchievementWatch.Minimized)
+ end
+ end)
+
+ if QGT_Settings.QuestWatch.Minimized then
+ updateQuestHeader(true)
+ end
+ if QGT_Settings.AchievementWatch.Minimized then
+ updateAchievemtHeader(true)
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/RCLootCouncil.lua b/ElvUI_AddOnSkins/Skins/Addons/RCLootCouncil.lua
new file mode 100644
index 0000000..bb5ac53
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/RCLootCouncil.lua
@@ -0,0 +1,140 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("RCLootCouncil") then return end
+
+-- RCLootCouncil 2.0.4
+-- https://github.com/ajseward/RcLootCouncil-Wotlk
+
+S:AddCallbackForAddon("RCLootCouncil", "RCLootCouncil", function()
+ if not E.private.addOnSkins.RCLootCouncil then return end
+
+ local addon = LibStub("AceAddon-3.0"):GetAddon("RCLootCouncil", true)
+ if not addon then return end
+
+ AS:SkinLibrary("DropDownMenu")
+ AS:SkinLibrary("LibDialog-1.0")
+ AS:SkinLibrary("ScrollingTable")
+
+ S:RawHook(addon, "CreateFrame", function(self, ...)
+ local frame = S.hooks[self].CreateFrame(self, ...)
+
+ frame:SetScale(UIParent:GetScale())
+ frame.title:SetTemplate("Default")
+ frame.content:SetTemplate("Transparent")
+
+ frame.title:SetFrameLevel(frame:GetFrameLevel() + 3)
+
+ return frame
+ end)
+
+ S:RawHook(addon, "CreateButton", function(self, ...)
+ local button = S.hooks[self].CreateButton(self, ...)
+
+ S:HandleButton(button)
+
+ return button
+ end)
+
+ local function updateTexCoord(self)
+ local normalTexture = self:GetNormalTexture()
+ normalTexture:SetTexCoord(unpack(E.TexCoords))
+ normalTexture:SetInside()
+ end
+
+ local function skinIconButton(button)
+ button:SetTemplate()
+ button:StyleButton(nil, true, true)
+ button:GetNormalTexture():SetDrawLayer("ARTWORK")
+ hooksecurefunc(button, "SetNormalTexture", updateTexCoord)
+ end
+
+ local votingFrame = addon:GetModule("RCVotingFrame", true)
+ if votingFrame then
+ local function moreInfoSetTexture(self, texture)
+ local normalTexture = self:GetNormalTexture()
+ local pushedTexture = self:GetPushedTexture()
+
+ local arrowDir = texture == "Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Up" and "left" or "right"
+ normalTexture:SetRotation(S.ArrowRotation[arrowDir])
+ pushedTexture:SetRotation(S.ArrowRotation[arrowDir])
+ end
+
+ local function setBackdropBorderColor(self, r, g, b)
+ if r == 1 and g == 1 and b == 1 then
+ self:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+ end
+
+ S:RawHook(votingFrame, "GetFrame", function(self, ...)
+ local frame = S.hooks[self].GetFrame(self, ...)
+ S:Unhook(self, "GetFrame")
+
+ skinIconButton(frame.itemIcon)
+
+ S:HandleNextPrevButton(frame.moreInfoBtn, "right")
+
+ frame.moreInfoBtn.SetNormalTexture = moreInfoSetTexture
+ frame.moreInfoBtn.SetPushedTexture = E.noop
+
+ E:GetModule("Tooltip"):HookScript(frame.moreInfo, "OnShow", "SetStyle")
+
+ frame.filter:HookScript("OnEnter", S.SetModifiedBackdrop)
+ frame.filter:HookScript("OnLeave", S.SetOriginalBackdrop)
+
+ return frame
+ end)
+
+ S:RawHook(votingFrame, "UpdateSessionButton", function(self, ...)
+ local button = S.hooks[self].UpdateSessionButton(self, ...)
+
+ if not button.isSkinned then
+ hooksecurefunc(button, "SetBackdropBorderColor", setBackdropBorderColor)
+ skinIconButton(button)
+ button.SetBackdrop = E.noop
+ button.isSkinned = true
+ end
+
+ return button
+ end)
+ end
+
+ local lootFrame = addon:GetModule("RCLootFrame", true)
+ if lootFrame then
+ local function updateTexCoord(self)
+ self.icon:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ end
+
+ S:RawHook(lootFrame, "GetEntry", function(self, ...)
+ local frame = S.hooks[self].GetEntry(self, ...)
+
+ frame:SetTemplate("Transparent")
+ skinIconButton(frame.icon)
+ hooksecurefunc(frame, "Show", updateTexCoord)
+
+ return frame
+ end)
+ end
+
+ local sessionFrame = addon:GetModule("RCSessionFrame", true)
+ if sessionFrame then
+ S:RawHook(sessionFrame, "GetFrame", function(self, ...)
+ local frame = S.hooks[self].GetFrame(self, ...)
+ S:Unhook(self, "GetFrame")
+
+ S:HandleCheckBox(frame.toggle)
+
+ return frame
+ end)
+
+ S:SecureHook(sessionFrame, "SetCellItemIcon", function(_, frame)
+ frame:SetTemplate()
+ frame:StyleButton(nil, true, true)
+ local normalTexture = frame:GetNormalTexture()
+ normalTexture:SetDrawLayer("ARTWORK")
+ normalTexture:SetTexCoord(unpack(E.TexCoords))
+ normalTexture:SetInside()
+ end)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/SatrinaBuffFrame.lua b/ElvUI_AddOnSkins/Skins/Addons/SatrinaBuffFrame.lua
new file mode 100644
index 0000000..088adea
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/SatrinaBuffFrame.lua
@@ -0,0 +1,87 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("SatrinaBuffFrame") then return end
+
+local _G = _G
+local ipairs = ipairs
+local unpack = unpack
+
+-- SatrinaBuffFrame 3.1.20
+
+S:AddCallbackForAddon("SatrinaBuffFrame", "SatrinaBuffFrame", function()
+ if not E.private.addOnSkins.SatrinaBuffFrame then return end
+
+ local SBF = LibStub("AceAddon-3.0"):GetAddon("SBF", true)
+ if not SBF then return end
+
+ local function skinIcon(frame)
+ if frame.isSkinned then return end
+
+ frame.icon:SetTexCoord(unpack(E.TexCoords))
+ frame.icon:CreateBackdrop("Default")
+
+ frame.border:Kill()
+
+ frame.isSkinned = true
+ end
+
+ local function skinBar(frame)
+ if frame.isSkinned then return end
+
+ frame:SetFrameLevel(frame:GetFrameLevel() + 1)
+ frame:StripTextures()
+ frame:CreateBackdrop("Transparent")
+
+ frame.isSkinned = true
+ end
+
+ do
+ local iconCount = 0
+ local barCount = 0
+
+ for _, frame in ipairs(SBF.frames) do
+ for _, slot in ipairs(frame.slots) do
+ if slot.icon then
+ skinIcon(slot.icon)
+ iconCount = iconCount + 1
+ end
+ if slot.bar then
+ skinBar(slot.bar)
+ barCount = barCount + 1
+ end
+ end
+ end
+
+ local i = iconCount + 1
+ local frame = _G["SBFBuffIcon"..i]
+
+ while frame do
+ skinIcon(frame)
+ i = i + 1
+ frame = _G["SBFBuffIcon"..i]
+ end
+
+ i = barCount + 1
+ frame = _G["SBFBuffBar"..i]
+
+ while frame do
+ skinBar(frame)
+ i = i + 1
+ frame = _G["SBFBuffBar"..i]
+ end
+ end
+
+ S:RawHook(SBF, "GetIcon", function(self)
+ local element = S.hooks[SBF].GetIcon(self)
+ skinIcon(element)
+ return element
+ end)
+
+ S:RawHook(SBF, "GetBar", function(self)
+ local element = S.hooks[SBF].GetBar(self)
+ skinBar(element)
+ return element
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/SlideBar.lua b/ElvUI_AddOnSkins/Skins/Addons/SlideBar.lua
new file mode 100644
index 0000000..046ca70
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/SlideBar.lua
@@ -0,0 +1,22 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("SlideBar") then return end
+
+-- SlideBar 5.8.4723
+-- https://www.curseforge.com/wow/addons/auctionator/files/426882
+
+S:AddCallbackForAddon("SlideBar", "SlideBar", function()
+ if not E.private.addOnSkins.SlideBar then return end
+
+ local lib = LibStub("SlideBar", true)
+ if not lib then return end
+
+ lib.frame:SetTemplate("Transparent")
+
+ local TT = E:GetModule("Tooltip")
+ hooksecurefunc(lib, "SetTip", function(self)
+ TT:SetStyle(self.tooltip)
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/WIM.lua b/ElvUI_AddOnSkins/Skins/Addons/WIM.lua
new file mode 100644
index 0000000..dd67619
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/WIM.lua
@@ -0,0 +1,313 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("WIM") then return end
+
+local format = string.format
+
+-- WIM 3.3.7
+-- https://www.wowace.com/projects/wim-3/files/439176
+
+S:AddCallbackForAddon("WIM", "WIM", function()
+ if not E.private.addOnSkins.WIM then return end
+
+ local function formatDetails(window, guild, level, race, class)
+ if guild == "" then
+ return format("|cffffffff %s %s %s|r", level, race, class)
+ else
+ return format("|cffffffff<%s> %s %s %s|r", guild, level, race, class)
+ end
+ end
+
+ local WIM_Elvui = {
+ title = "WIM ElvUI",
+ version = "1.0.0",
+ author = "Divico",
+ website = "",
+ message_window = {
+ texture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\message_window",
+ min_width = 256,
+ min_height = 128,
+ backdrop = {
+ top_left = {
+ width = 64,
+ height = 64,
+ offset = {0, 0},
+ texture_coord = {0, 0, 0, .25, .25, 0, .25, .25}
+ },
+ top_right = {
+ width = 64,
+ height = 64,
+ offset = {0, 0},
+ texture_coord = {.75, 0, .75, .25, 1, 0, 1, .25}
+ },
+ bottom_left = {
+ width = 64,
+ height = 64,
+ offset = {0, 0},
+ texture_coord = {0, .75, 0, 1, .25, .75, .25, 1}
+ },
+ bottom_right = {
+ width = 64,
+ height = 64,
+ offset = {0, 0},
+ texture_coord = {.75, .75, .75, 1, 1, .75, 1, 1}
+ },
+ top = {
+ tile = false,
+ texture_coord = {.25, 0, .25, .25, .75, 0, .75, .25}
+ },
+ bottom = {
+ tile = false,
+ texture_coord = {.25, .75, .25, 1, .75, .75, .75, 1}
+ },
+ left = {
+ tile = false,
+ texture_coord = {0, .25, 0, .75, .25, .25, .25, .75}
+ },
+ right = {
+ tile = false,
+ texture_coord = {.75, .25, .75, .75, 1, .25, 1, .75}
+ },
+ background = {
+ tile = false,
+ texture_coord = {.25, .25, .25, .75, .75, .25, .75, .75}
+ }
+ },
+ widgets = {
+ class_icon = {
+ texture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\class_icons",
+ chatAlphaMask = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\chatAlphaMask",
+ width = 16, -- 64
+ height = 16, -- 64
+ points = {
+ {"TOPLEFT", "window", "TOPLEFT", 4, -4} -- "TOPLEFT", "window", "TOPLEFT", -10, 12
+ },
+ is_round = false, -- true
+ blank = {.5, .5, .5, .75, .75, .5, .75, .75},
+ druid = {0, 0, 0, .25, .25, 0, .25, .25},
+ hunter = {.25, 0, .25, .25, .5, 0, .5, .25},
+ mage = {.5, 0, .5, .25, .75, 0, .75, .25},
+ paladin = {.75, 0, .75, .25, 1, 0, 1, .25},
+ priest = {0, .25, 0, .5, .25, .25, .25, .5},
+ rogue = {.25, .25, .25, .5, .5, .25, .5, .5},
+ shaman = {.5, .25, .5, .5, .75, .25, .75, .5},
+ warlock = {.75, .25, .75, .5, 1, .25, 1, .5},
+ warrior = {0, .5, 0, .75, .25, .5, .25, .75},
+ deathknight = {.75, .5, .75, .75, 1, .5, 1, .75},
+ gm = {.25, .5, .25, .75, .5, .5, .5, .75}
+ },
+ from = {
+ points = {
+ {"TOPLEFT", "window", "TOPLEFT", 24, -7} -- "TOPLEFT", "window", "TOPLEFT", 50, -8
+ },
+ font = "FriendsFont_Normal", -- GameFontNormalLarge
+ font_color = "ffffff",
+ font_height = 11, -- 16
+ font_flags = "",
+ use_class_color = true
+ },
+ char_info = {
+ format = formatDetails,
+ points = {
+ {"TOPRIGHT", "window", "TOPRIGHT", -25, -7} -- "TOP", "window", "TOP", 0, -30
+ },
+ font = "FriendsFont_Normal", -- GameFontNormal
+ font_color = "1883d1" -- ffffff
+ },
+ close = {
+ state_hide = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\hide",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\hide_pushed",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
+ HighlightAlphaMode = "ADD"
+ },
+ state_close = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\close",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\close_pushed",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
+ HighlightAlphaMode = "ADD"
+ },
+ width = 16, -- 32
+ height = 16, -- 32
+ points = {
+ {"TOPRIGHT", "window", "TOPRIGHT", -4, -4} -- "TOPRIGHT", "window", "TOPRIGHT", 4, 1
+ }
+ },
+ history = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\history",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\history_pushed",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
+ HighlightAlphaMode = "ADD",
+ width = 16, -- 18
+ height = 16, -- 18
+ points = {
+ {"BOTTOMRIGHT", "window", "BOTTOMRIGHT", -3, 44} -- "TOPRIGHT", "window", "TOPRIGHT", -28, -6
+ }
+ },
+ w2w = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\w2w",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\w2w",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\w2w",
+ HighlightAlphaMode = "ADD",
+ points = {
+ {"TOPLEFT", "class_icon", 14, -14},
+ {"BOTTOMRIGHT", "class_icon", -14, 14}
+ }
+ },
+ chat_info = {
+ NormalTexture = "",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\w2w",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\w2w",
+ HighlightAlphaMode = "ADD",
+ points = {
+ {"TOPLEFT", "class_icon", 14, -14},
+ {"BOTTOMRIGHT", "class_icon", -14, 14}
+ }
+ },
+ chatting = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\chatting",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\chatting",
+ width = 16,
+ height = 16,
+ points = {
+ {"TOPLEFT", "window", -3, -23} -- "TOPLEFT", "window", 45, -28
+ }
+ },
+ scroll_up = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\scroll_up",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\scroll_up_pushed",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
+ DisabledTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_disabled",
+ HighlightAlphaMode = "ADD",
+ width = 16, -- 32
+ height = 16, -- 32
+ points = {
+ {"TOPRIGHT", "window", "TOPRIGHT", -3, -23} -- "TOPRIGHT", "window", "TOPRIGHT", -4, -39
+ }
+ },
+ scroll_down = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\scroll_down",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\scroll_down_pushed",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
+ DisabledTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_disabled",
+ HighlightAlphaMode = "ADD",
+ width = 16, -- 32
+ height = 16, -- 32
+ points = {
+ {"BOTTOMRIGHT", "window", "BOTTOMRIGHT", -3, 27} -- "BOTTOMRIGHT", "window", "BOTTOMRIGHT", -4, 24
+ }
+ },
+ chat_display = {
+ points = {
+ {"TOPLEFT", "window", "TOPLEFT", 4, -24}, -- "TOPLEFT", "window", "TOPLEFT", 24, -46
+ {"BOTTOMRIGHT", "window", "BOTTOMRIGHT", -22, 27} -- "BOTTOMRIGHT", "window", "BOTTOMRIGHT", -38, 39
+ },
+ font = "FriendsFont_UserText", -- ChatFontNormal
+ font_height = 12,
+ font_flags = ""
+ },
+ msg_box = {
+ font = "FriendsFont_UserText", -- ChatFontNormal
+ font_height = 14,
+ font_color = {1,1,1},
+ points = {
+ {"TOPLEFT", "window", "BOTTOMLEFT", 6, 25}, -- "TOPLEFT", "window", "BOTTOMLEFT", 24, 30
+ {"BOTTOMRIGHT", "window", "BOTTOMRIGHT", -3, 1} -- "BOTTOMRIGHT", "window", "BOTTOMRIGHT", -10, 4
+ }
+ },
+ resize = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\resize",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\resize",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\resize",
+ HighlightAlphaMode = "ADD",
+ width = 16, -- 25
+ height = 16, -- 25
+ points = {
+ {"BOTTOMLEFT", "window", "BOTTOMRIGHT", -16, 0} -- "BOTTOMRIGHT", "window", "BOTTOMRIGHT", 5, -5
+ }
+ },
+ shortcuts = {
+ stack = "DOWN",
+ spacing = 1, -- 2
+ points = {
+ {"TOPLEFT", "window", "TOPRIGHT", -19, -40}, -- "TOPLEFT", "window", "TOPRIGHT", -30, -70
+ {"BOTTOMRIGHT", "window", "BOTTOMRIGHT", -3, 105} -- "BOTTOMRIGHT", "window", "BOTTOMRIGHT", -8, 55
+ },
+ buttons = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_frame",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_pushed",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
+ HighlightAlphaMode = "ADD",
+ icons = {
+ location = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\location",
+ invite = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\invite",
+ friend = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\friend",
+ ignore = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\ignore"
+ }
+ }
+ }
+ }
+ },
+ tab_strip = {
+ textures = {
+ tab = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\tab_normal",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\tab_selected",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\tab_flash",
+ -- HighlightTexture = "Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight",
+ HighlightAlphaMode = "ADD"
+ },
+ prev = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\prev",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\prev_pushed",
+ DisabledTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\prev",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
+ HighlightAlphaMode = "ADD",
+ height = 16, -- 20
+ width = 16 -- 20
+ },
+ next = {
+ NormalTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\next",
+ PushedTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\next_pushed",
+ DisabledTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\next",
+ HighlightTexture = "Interface\\AddOns\\ElvUI_AddOnSkins\\media\\wim\\icons\\button_highlight",
+ HighlightAlphaMode = "ADD",
+ height = 16, -- 20
+ width = 16 -- 20
+ }
+ },
+ height = 20, -- 26
+ points = {
+ {"BOTTOMLEFT", "window", "TOPLEFT", 18, 4}, -- "BOTTOMLEFT", "window", "TOPLEFT", 38, -4
+ {"BOTTOMRIGHT", "window", "TOPRIGHT", -18, 4} -- "BOTTOMRIGHT", "window", "TOPRIGHT", -20, -4
+ },
+ text = {
+ font = "SystemFont_Small", -- ChatFontNormal
+ font_color = {1, 1, 1},
+ font_height = 11, -- 12
+ font_flags = ""
+ },
+ vertical = false
+ }
+ }
+
+ local function ApplySkin(self)
+ self.db.skin.selected = "WIM ElvUI"
+ self.RegisterSkin(WIM_Elvui)
+ end
+
+ if WIM.db then
+ ApplySkin(WIM)
+ else
+ hooksecurefunc(WIM, "VARIABLES_LOADED", function(self)
+ ApplySkin(self)
+ end)
+ end
+
+ TutorialFrameTop.Show = E.noop
+ TutorialFrameTop:Hide()
+ TutorialFrameBottom.Show = E.noop
+ TutorialFrameBottom:Hide()
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/ZOMGBuffs.lua b/ElvUI_AddOnSkins/Skins/Addons/ZOMGBuffs.lua
new file mode 100644
index 0000000..9cfca21
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/ZOMGBuffs.lua
@@ -0,0 +1,144 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("ZOMGBuffs") then return end
+
+local pairs = pairs
+local unpack = unpack
+
+-- ZOMGBuffs r156
+-- https://www.wowace.com/projects/zomgbuffs/files/424938
+
+S:AddCallbackForAddon("ZOMGBuffs", "ZOMGBuffs", function()
+ if not E.private.addOnSkins.ZOMGBuffs then return end
+
+ if ZOMGBuffsButton then
+ ZOMGBuffsButton:SetNormalTexture(nil)
+ ZOMGBuffsButton.SetNormalTexture = E.noop
+ ZOMGBuffsButton:SetHighlightTexture(nil)
+ ZOMGBuffsButton:SetPushedTexture(nil)
+ else
+ S:SecureHook(ZOMGBuffs, "OnStartup", function(self)
+ self.icon:SetNormalTexture(nil)
+ self.icon.SetNormalTexture = E.noop
+ self.icon:SetHighlightTexture(nil)
+ self.icon:SetPushedTexture(nil)
+
+ S:Unhook(ZOMGBuffs, "OnStartup")
+ end)
+ end
+
+ S:RawHook(ZOMGBuffs, "CreateHelpFrame", function(self)
+ local frame = S.hooks[self].CreateHelpFrame(self)
+
+ frame:SetScale(E:Scale(0.9))
+ frame:SetTemplate("Transparent")
+ frame.close:StripTextures()
+ S:HandleButton((frame:GetChildren()))
+
+ S:Unhook(ZOMGBuffs, "CreateHelpFrame")
+
+ return frame
+ end, true)
+
+ AS:SkinLibrary("AceAddon-2.0")
+ AS:SkinLibrary("Dewdrop-2.0")
+ AS:SkinLibrary("Tablet-2.0")
+ AS:SkinLibrary("ZFrame-1.0")
+end)
+
+S:AddCallbackForAddon("ZOMGBuffs_BlessingsManager", "ZOMGBuffs_BlessingsManager", function()
+ if not E.private.addOnSkins.ZOMGBuffs then return end
+
+ local ZBM = ZOMGBuffs:GetModule("ZOMGBlessingsManager", true)
+ if not ZBM then return end
+
+ S:SecureHook(ZBM, "SplitInitialize", function(self)
+ local frame = self.splitframe
+
+ S:HandleButton(frame.autoButton)
+ S:HandleCheckBox(frame.useGuild)
+
+ for i = 1, #frame.column do
+ frame.column[i]:SetTemplate("Transparent")
+ S:HandleScrollBar(frame.column[i].scroll.bar)
+
+ for j = 1, 10 do
+ frame.column[i].list[j].icon:SetTexCoord(unpack(E.TexCoords))
+ end
+ end
+ end)
+
+ S:RawHook(ZBM, "CreateMainMainFrame", function(self)
+ local frame = S.hooks[self].CreateMainMainFrame(self)
+
+ S:HandleButton(frame.configure)
+ S:HandleButton(frame.help)
+ S:HandleButton(frame.generate)
+ S:HandleButton(frame.broadcast)
+ S:HandleButton(frame.groups)
+ S:HandleButton(frame.autoroles)
+
+ for _, button in pairs(frame.classTitle.cell) do
+ button.highlightTex:SetTexture(1, 1, 1, 0.3)
+ end
+
+ S:Unhook(ZOMGBlessingsManager, "CreateMainMainFrame")
+
+ return frame
+ end)
+
+ local function SkinActionButton(button)
+ if button.isSkinned then return end
+
+ button:StyleButton()
+ button:SetTemplate("Default")
+ button:SetNormalTexture(nil)
+ button.SetNormalTexture = E.noop
+
+ button.icon:SetTexCoord(unpack(E.TexCoords))
+ button.icon:SetInside()
+ button.icon:SetDrawLayer("ARTWORK")
+
+ button.isSkinned = true
+ end
+
+ S:SecureHook(ZBM, "SplitPanelColumnPopulate", function(self, col)
+ if not self.expandpanel.class then return end
+
+ for i in pairs(col.cell) do
+ SkinActionButton(col.cell[i])
+ end
+ end)
+
+ S:SecureHook(ZBM, "DrawAll", function(self)
+ if not self.configuring then return end
+
+ local f = self.frame
+
+ for i = 1, #f.row do
+ for j in pairs(f.row[i].cell) do
+ SkinActionButton(f.row[i].cell[j])
+ end
+ end
+
+ S:Unhook(ZBM, "DrawAll")
+ end)
+end)
+
+S:AddCallbackForAddon("ZOMGBuffs_Log", "ZOMGBuffs_Log", function()
+ if not E.private.addOnSkins.ZOMGBuffs then return end
+
+ local ZL = ZOMGBuffs:GetModule("ZOMGLog", true)
+ if not ZL then return end
+
+ S:RawHook(ZL, "CreateLogFrame", function(self)
+ local frame = S.hooks[self].CreateLogFrame(self)
+
+ S:HandleScrollBar(frame.scrollBar.slider)
+ frame.scrollBar.slider:Height(24)
+
+ return frame
+ end, true)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/_NPCScan.lua b/ElvUI_AddOnSkins/Skins/Addons/_NPCScan.lua
new file mode 100644
index 0000000..7f52ab3
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/_NPCScan.lua
@@ -0,0 +1,35 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("_NPCScan") then return end
+
+-- NPCScan 3.3.5.5
+-- https://www.curseforge.com/wow/addons/npcscan/files/441050
+
+S:AddCallbackForAddon("_NPCScan", "_NPCScan", function()
+ if not E.private.addOnSkins._NPCScan then return end
+
+ _NPCScanButton:SetScale(1)
+ _NPCScanButton.SetScale = E.noop
+
+ _NPCScanButton:StripTextures()
+ _NPCScanButton:SetTemplate("Default", true)
+
+ _NPCScanButton:HookScript("OnEnter", S.SetModifiedBackdrop)
+ _NPCScanButton:HookScript("OnLeave", S.SetOriginalBackdrop)
+
+ for i = 1, _NPCScanButton:GetNumChildren() do
+ local child = select(i, _NPCScanButton:GetChildren())
+ if child and child:IsObjectType("Button") then
+ S:HandleCloseButton(child)
+ child:ClearAllPoints()
+ child:Point("TOPRIGHT", _NPCScanButton, "TOPRIGHT", 4, 5)
+ child:SetScale(1)
+ end
+ end
+
+ local NPCFoundText = select(4, _NPCScanButton:GetRegions())
+ NPCFoundText:SetTextColor(1, 1, 1, 1)
+ NPCFoundText:SetShadowOffset(1, -1)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/_NPCScanOverlay.lua b/ElvUI_AddOnSkins/Skins/Addons/_NPCScanOverlay.lua
new file mode 100644
index 0000000..e0651c4
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/_NPCScanOverlay.lua
@@ -0,0 +1,35 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("_NPCScan.Overlay") then return end
+
+-- NPCScan Overlay 3.3.5.1
+-- https://www.curseforge.com/wow/addons/npcscan-overlay/files/434851
+
+S:AddCallbackForAddon("_NPCScan.Overlay", "_NPCScan.Overlay", function()
+ if not E.private.addOnSkins._NPCScanOverlay then return end
+
+ S:HandleCheckBox(_NPCScanOverlayWorldMapToggle)
+ _NPCScanOverlayWorldMapToggle:Size(24)
+
+ local worldMapKey = _NPCScan.Overlay.Modules.List.WorldMap.KeyParent.Key
+
+ worldMapKey:SetTemplate("Transparent")
+ worldMapKey.Body:SetBackdrop(nil)
+ worldMapKey.Body:DisableDrawLayer("BORDER")
+
+ local bottomPoint
+ worldMapKey:SetScript("OnEnter", function(self)
+ bottomPoint = not bottomPoint
+ self:ClearAllPoints()
+ if bottomPoint then
+ self:Point("BOTTOMRIGHT", 1, -1)
+ else
+ self:Point("TOPRIGHT", 1, 1)
+ end
+ end)
+
+ worldMapKey:ClearAllPoints()
+ worldMapKey:Point("TOPRIGHT", 1, 1)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/aCP.lua b/ElvUI_AddOnSkins/Skins/Addons/aCP.lua
new file mode 100644
index 0000000..b6c5721
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/aCP.lua
@@ -0,0 +1,90 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("ACP") then return end
+
+local _G = _G
+
+-- Addon Control Panel 3.3.7
+-- https://www.curseforge.com/wow/addons/acp/files/453071
+
+S:AddCallbackForAddon("ACP", "ACP", function()
+ if not E.private.addOnSkins.ACP then return end
+
+ S:HandleButton(GameMenuButtonAddOns)
+
+ ACP_AddonList:SetParent(UIParent)
+ ACP_AddonList:SetFrameStrata("HIGH")
+ ACP_AddonList:SetHitRectInsets(0, 0, 0, 0)
+
+ ACP_AddonList:StripTextures()
+ ACP_AddonList:SetTemplate("Transparent")
+ ACP_AddonList:Size(580, 488)
+
+ S:HandleCloseButton(ACP_AddonListCloseButton, ACP_AddonList)
+
+ S:HandleDropDownBox(ACP_AddonListSortDropDown, 145)
+ ACP_AddonListSortDropDown:Point("TOPLEFT", 50, -5)
+
+ ACP_AddonListCollapseAll:Point("TOPLEFT", 12, -17)
+ ACP_AddonListEntry1:Point("TOPLEFT", 29, -44)
+
+ ACP_AddonList_ScrollFrame:StripTextures()
+ ACP_AddonList_ScrollFrame:SetTemplate("Transparent")
+ ACP_AddonList_ScrollFrame:Size(543, 414)
+ ACP_AddonList_ScrollFrame:Point("TOPLEFT", 8, -35)
+
+ S:HandleScrollBar(ACP_AddonList_ScrollFrameScrollBar)
+ ACP_AddonList_ScrollFrameScrollBar:Point("TOPLEFT", ACP_AddonList_ScrollFrame, "TOPRIGHT", 3, -19)
+ ACP_AddonList_ScrollFrameScrollBar:Point("BOTTOMLEFT", ACP_AddonList_ScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ S:HandleButton(ACP_AddonListSetButton)
+ S:HandleButton(ACP_AddonListDisableAll)
+ S:HandleButton(ACP_AddonListEnableAll)
+ S:HandleButton(ACP_AddonList_ReloadUI)
+ S:HandleButton(ACP_AddonListBottomClose)
+
+ S:HandleCheckBox(ACP_AddonList_NoRecurse)
+
+ ACP_AddonListSetButton:Point("BOTTOMLEFT", 8, 8)
+ ACP_AddonListDisableAll:Point("BOTTOMLEFT", 78, 8)
+ ACP_AddonListEnableAll:Point("BOTTOMLEFT", 163, 8)
+ ACP_AddonList_ReloadUI:Point("BOTTOMRIGHT", -121, 8)
+ ACP_AddonListBottomClose:Point("BOTTOMRIGHT", -8, 8)
+
+ local function collapseSetTexture(self, texture)
+ if texture == "Interface\\Minimap\\UI-Minimap-ZoomInButton-Up" then
+ self:_SetTexture(E.Media.Textures.Plus)
+ else
+ self:_SetTexture(E.Media.Textures.Minus)
+ end
+ end
+
+ local function skinCollapseIcon(frame)
+ frame:SetTexture(E.Media.Textures.Minus)
+
+ frame._SetTexture = frame.SetTexture
+ frame.SetTexture = collapseSetTexture
+ end
+
+ local function updateCheckboxSize(self, size)
+ if size == 32 then
+ self:Size(24)
+ else
+ self:Size(20)
+ end
+ end
+
+ skinCollapseIcon(ACP_AddonListCollapseAllIcon)
+
+ for i = 1, 20 do
+ local checkbox = _G["ACP_AddonListEntry" .. i.. "Enabled"]
+ S:HandleCheckBox(checkbox)
+ checkbox.SetHeight = updateCheckboxSize
+
+ skinCollapseIcon(_G["ACP_AddonListEntry" .. i.. "CollapseIcon"])
+
+ S:HandleButton(_G["ACP_AddonListEntry" .. i .. "LoadNow"])
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/ackisRecipeList.lua b/ElvUI_AddOnSkins/Skins/Addons/ackisRecipeList.lua
new file mode 100644
index 0000000..f02544a
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/ackisRecipeList.lua
@@ -0,0 +1,365 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("AckisRecipeList") then return end
+
+local ipairs, select, unpack = ipairs, select, unpack
+
+local hooksecurefunc = hooksecurefunc
+
+-- AckisRecipeList 2.01.14
+-- https://www.curseforge.com/wow/addons/arl/files/458020
+
+S:AddCallbackForAddon("AckisRecipeList", "AckisRecipeList", function()
+ if not E.private.addOnSkins.AckisRecipeList then return end
+
+ local addon = LibStub("AceAddon-3.0"):GetAddon("Ackis Recipe List", true)
+ if not addon then return end
+
+ local function HandleScrollBar(frame)
+ local UpButton, DownButton = frame:GetChildren()
+
+ S:HandleNextPrevButton(UpButton, "up")
+ UpButton:Size(20, 18)
+
+ S:HandleNextPrevButton(DownButton)
+ DownButton:Size(20, 18)
+
+ frame.trackbg = CreateFrame("Frame", nil, frame)
+ frame.trackbg:Point("TOPLEFT", UpButton, "BOTTOMLEFT", 0, -1)
+ frame.trackbg:Point("BOTTOMRIGHT", DownButton, "TOPRIGHT", 0, 1)
+ frame.trackbg:SetTemplate()
+
+ frame:GetThumbTexture():SetAlpha(0)
+
+ frame.thumbbg = CreateFrame("Frame", nil, frame)
+ frame.thumbbg:Point("TOPLEFT", frame:GetThumbTexture(), "TOPLEFT", 8, -7)
+ frame.thumbbg:Point("BOTTOMRIGHT", frame:GetThumbTexture(), "BOTTOMRIGHT", -8, 7)
+ frame.thumbbg:SetTemplate("Default", true, true)
+ frame.thumbbg:SetBackdropColor(0.6, 0.6, 0.6)
+ frame.thumbbg:SetFrameLevel(frame.trackbg:GetFrameLevel() + 1)
+ end
+
+ local function SkinButton(button, strip)
+ S:HandleButton(button, strip)
+
+ button.SetNormalTexture = E.noop
+ button.SetHighlightTexture = E.noop
+ button.SetPushedTexture = E.noop
+ button.SetDisabledTexture = E.noop
+ end
+
+ local function ChangeTexture(texture)
+ texture:SetInside()
+ texture:SetTexCoord(0.22, 0.78, 0.22, 0.78)
+ end
+
+ local function ExpansionButton(button)
+ button:GetRegions():SetDesaturated(true)
+
+ button:GetPushedTexture():SetTexture(nil)
+ button:GetHighlightTexture():SetTexture(nil)
+ button:GetCheckedTexture():SetTexture(nil)
+
+ hooksecurefunc(button, "SetChecked", function(self, state)
+ self:GetRegions():SetDesaturated(state)
+ end)
+ end
+
+ S:HandleButton(addon.scan_button)
+
+ hooksecurefunc(addon, "TRADE_SKILL_SHOW", function(self)
+ if self.scan_button:GetParent() == TradeSkillFrame then
+ self.scan_button:SetFrameLevel(TradeSkillFrame:GetFrameLevel() + 10)
+ end
+ end)
+
+ S:SecureHook(addon, "Scan", function(self)
+ S:Unhook(self, "Scan")
+
+ local ARL_MainPanel = ARL_MainPanel
+
+ ARL_MainPanel:StripTextures()
+ ARL_MainPanel:CreateBackdrop("Transparent")
+ ARL_MainPanel.backdrop:Point("TOPLEFT", 11, -12)
+ ARL_MainPanel.backdrop:Point("BOTTOMRIGHT", -32, 76)
+
+ S:SetBackdropHitRect(ARL_MainPanel, ARL_MainPanel.backdrop, true)
+
+ hooksecurefunc(ARL_MainPanel, "ToggleState", function(self)
+ if self.is_expanded then
+ self.backdrop:Point("BOTTOMRIGHT", -87, 76)
+ S:SetBackdropHitRect(self, self.backdrop, true)
+ else
+ self.backdrop:Point("BOTTOMRIGHT", -32, 76)
+ S:SetBackdropHitRect(self, self.backdrop, true)
+ end
+ end)
+
+ S:HandleCloseButton(ARL_MainPanel.xclose_button, ARL_MainPanel.backdrop)
+
+ ARL_MainPanel.title_bar:Hide()
+
+ ARL_MainPanel.top_left:Hide()
+ ARL_MainPanel.top_right:Hide()
+ ARL_MainPanel.bottom_left:Hide()
+ ARL_MainPanel.bottom_right:Hide()
+
+ ARL_MainPanel.top_left.Show = E.noop
+ ARL_MainPanel.top_right.Show = E.noop
+ ARL_MainPanel.bottom_left.Show = E.noop
+ ARL_MainPanel.bottom_right.Show = E.noop
+
+ ARL_MainPanel.prof_button:SetTemplate()
+ ARL_MainPanel.prof_button:Size(32)
+ ARL_MainPanel.prof_button:Point("TOPLEFT", 19, -20)
+
+ local prof_buttonHighlight = ARL_MainPanel.prof_button:GetHighlightTexture()
+ prof_buttonHighlight:SetInside()
+ prof_buttonHighlight:SetTexture(1, 1, 1, 0.3)
+ prof_buttonHighlight:SetTexture()
+
+ ChangeTexture(ARL_MainPanel.prof_button._normal)
+ ChangeTexture(ARL_MainPanel.prof_button._pushed)
+ ChangeTexture(ARL_MainPanel.prof_button._disabled)
+
+ hooksecurefunc(ARL_MainPanel.prof_button, "ChangeTexture", function(self)
+ ChangeTexture(self._normal)
+ ChangeTexture(self._pushed)
+ ChangeTexture(self._disabled)
+ end)
+
+ S:HandleEditBox(ARL_MainPanel.search_editbox)
+ ARL_MainPanel.search_editbox.backdrop:Point("TOPLEFT", -2, 0)
+ ARL_MainPanel.search_editbox:Point("TOPLEFT", ARL_MainPanel, "TOPLEFT", 90, -50)
+ ARL_MainPanel.search_editbox:DisableDrawLayer("BACKGROUND")
+ ARL_MainPanel.search_editbox:Size(140, 17)
+
+ for i = 1, ARL_MainPanel:GetNumChildren() do
+ local child = select(i, ARL_MainPanel:GetChildren())
+ if child and child:IsObjectType("CheckButton") and child.text then
+ -- SkillToggle
+ S:HandleCheckBox(child, true)
+ child:Size(14)
+ child:Point("TOPLEFT", ARL_MainPanel.search_editbox, "TOPRIGHT", -142, 34)
+ child.text:Point("LEFT", child, "RIGHT", 3, 0)
+
+ local excludeToggle = select(i + 1, ARL_MainPanel:GetChildren())
+ S:HandleCheckBox(excludeToggle, true)
+ excludeToggle:Size(14)
+ excludeToggle:Point("TOP", child, "BOTTOM", 0, -3)
+ excludeToggle.text:Point("LEFT", excludeToggle, "RIGHT", 3, 0)
+
+ break
+ end
+ end
+
+ select(2, ARL_MainPanel.expand_button:GetPoint()):GetParent():Hide()
+ S:HandleCollapseExpandButton(ARL_MainPanel.expand_button, "+")
+ ARL_MainPanel.expand_button:ClearAllPoints()
+ ARL_MainPanel.expand_button:Point("BOTTOMRIGHT", ARL_MainPanel.search_editbox, "BOTTOMLEFT", -53, -2)
+
+ ARL_MainPanel.list_frame:SetBackdrop(nil)
+ ARL_MainPanel.list_frame:CreateBackdrop("Transparent")
+ ARL_MainPanel.list_frame.backdrop:Point("TOPLEFT", -2, 2)
+ ARL_MainPanel.list_frame.backdrop:Point("BOTTOMRIGHT", 5, 5)
+ ARL_MainPanel.list_frame:Point("TOPLEFT", ARL_MainPanel, "TOPLEFT", 21, -73)
+
+ HandleScrollBar(ARL_MainPanel.list_frame.scroll_bar)
+ ARL_MainPanel.list_frame.scroll_bar:Point("TOPLEFT", ARL_MainPanel.list_frame, "TOPRIGHT", 6, -12)
+ ARL_MainPanel.list_frame.scroll_bar:Point("BOTTOMLEFT", ARL_MainPanel.list_frame, "BOTTOMRIGHT", 6, 19)
+ ARL_MainPanel.list_frame.scroll_bar.Hide = E.noop
+ ARL_MainPanel.list_frame.scroll_bar:Show()
+
+ for i = 1, 25 do
+ S:HandleCollapseExpandButton(ARL_MainPanel.list_frame.state_buttons[i], "+")
+ S:HandleButtonHighlight(ARL_MainPanel.list_frame.entry_buttons[i])
+ end
+
+ S:HandleNextPrevButton(ARL_MainPanel.sort_button, "down", nil, true)
+ ARL_MainPanel.sort_button:Size(22)
+ ARL_MainPanel.sort_button:ClearAllPoints()
+ ARL_MainPanel.sort_button:Point("LEFT", ARL_MainPanel.expand_button, "RIGHT", 20, 0)
+
+ ARL_MainPanel.sort_button.SetTextures = function(self)
+ local normal, pushed = self:GetNormalTexture(), self:GetPushedTexture()
+
+ if addon.db.profile.sorting == "Ascending" then
+ normal:SetRotation(3.14)
+ pushed:SetRotation(3.14)
+ else
+ normal:SetRotation(0)
+ pushed:SetRotation(0)
+ end
+ end
+
+ ARL_MainPanel.progress_bar:StripTextures()
+ ARL_MainPanel.progress_bar:CreateBackdrop()
+ ARL_MainPanel.progress_bar:Size(209, 20)
+ ARL_MainPanel.progress_bar:Point("BOTTOMLEFT", ARL_MainPanel, 20, 85)
+ ARL_MainPanel.progress_bar:SetStatusBarTexture(E.media.normTex)
+ ARL_MainPanel.progress_bar:SetStatusBarColor(0.22, 0.39, 0.84)
+ E:RegisterStatusBar(ARL_MainPanel.progress_bar)
+
+ ARL_MainPanel.close_button:Height(22)
+ ARL_MainPanel.close_button:Point("LEFT", ARL_MainPanel.progress_bar, "RIGHT", 4, 0)
+ SkinButton(ARL_MainPanel.close_button, true)
+
+ for i, tab in ipairs(ARL_MainPanel.tabs) do
+ tab:StripTextures()
+ tab.left.SetTexture = E.noop
+ tab.middle.SetTexture = E.noop
+ tab.right.SetTexture = E.noop
+
+ tab:CreateBackdrop()
+ tab.backdrop:Point("TOPLEFT", 10, E.PixelMode and -1 or -3)
+ tab.backdrop:Point("BOTTOMRIGHT", -10, 3)
+
+ tab:SetHitRectInsets(10, 10, E.PixelMode and 1 or 3, 3)
+
+ if i == 1 then
+ tab:Point("TOPLEFT", ARL_MainPanel, "BOTTOMLEFT", 11, 78)
+ else
+ tab:Point("LEFT", ARL_MainPanel.tabs[i-1], "RIGHT", -15, 0)
+ end
+ end
+
+ if not (TipTac and TipTac.AddModifiedTip) then
+ E:GetModule("Tooltip"):SecureHookScript(AckisRecipeList_SpellTooltip, "OnShow", "SetStyle")
+ AS:SkinLibrary("LibQTip-1.0")
+ end
+
+ S:HandleNextPrevButton(ARL_MainPanel.filter_toggle, "right", nil, true)
+ ARL_MainPanel.filter_toggle:Point("TOPLEFT", ARL_MainPanel, "TOPLEFT", 324, -39)
+ ARL_MainPanel.filter_toggle:Size(28)
+
+ ARL_MainPanel.filter_toggle.SetTextures = function(self)
+ local normal, pushed = self:GetNormalTexture(), self:GetPushedTexture()
+ if ARL_MainPanel.is_expanded then
+ normal:SetRotation(1.57)
+ pushed:SetRotation(1.57)
+ else
+ normal:SetRotation(-1.57)
+ pushed:SetRotation(-1.57)
+ end
+
+ self:HookScript("OnEnter", function()
+ normal:SetVertexColor(unpack(E.media.rgbvaluecolor))
+ end)
+ self:HookScript("OnLeave", function()
+ normal:SetVertexColor(1, 1, 1)
+ end)
+ end
+
+ ARL_MainPanel.filter_toggle:HookScript("OnClick", function(self)
+ if self.isFrameSkinned then return end
+ self.isFrameSkinned = true
+
+ ARL_MainPanel.filter_menu:SetTemplate("Transparent")
+ ARL_MainPanel.filter_menu:Size(326, 332)
+ ARL_MainPanel.filter_menu:Point("TOPRIGHT", ARL_MainPanel, "TOPRIGHT", -95, -71)
+
+ ARL_MainPanel.filter_reset:Point("BOTTOMRIGHT", ARL_MainPanel, "BOTTOMRIGHT", -95, 84)
+ SkinButton(ARL_MainPanel.filter_reset, true)
+
+ local menuIcons = {
+ "menu_toggle_general",
+ "menu_toggle_obtain",
+ "menu_toggle_binding",
+ "menu_toggle_item",
+ "menu_toggle_quality",
+ "menu_toggle_player",
+ "menu_toggle_rep",
+ "menu_toggle_misc"
+ }
+
+ for i, menuIcon in ipairs(menuIcons) do
+ local iconEntry = ARL_MainPanel[menuIcon]
+
+ if i == 1 then
+ iconEntry:Point("LEFT", ARL_MainPanel.filter_toggle, "RIGHT", 17, 0)
+ end
+
+ iconEntry:SetTemplate()
+ iconEntry:StyleButton()
+ iconEntry:DisableDrawLayer("BACKGROUND")
+
+ local region = select(2, iconEntry:GetRegions())
+ region:SetInside()
+ region:SetTexCoord(unpack(E.TexCoords))
+ end
+
+ local filterMenus = {
+ "general",
+ "obtain",
+ "binding",
+ "item",
+ "quality",
+ "player",
+ "rep",
+ "misc"
+ }
+
+ for _, menu in ipairs(filterMenus) do
+ local menuEntry = ARL_MainPanel.filter_menu[menu]
+
+ if menu == "misc" then
+ for i = 1, menuEntry:GetNumChildren() do
+ local child = select(i, menuEntry:GetChildren())
+
+ if child and child:IsObjectType("Button") then
+ S:HandleNextPrevButton(child)
+ select(2, child:GetPoint()):SetTextColor(1, 1, 1)
+ end
+ end
+ elseif menu == "rep" then
+ for expNum = 0, 2 do
+ for i = 1, menuEntry["expansion"..expNum]:GetNumChildren() do
+ local child = select(i, menuEntry["expansion"..expNum]:GetChildren())
+
+ if child and (child:IsObjectType("Button") and child.text and not child:IsObjectType("CheckButton")) then
+ child:StripTextures()
+ child.text:SetTextColor(1, 0.8, 0.1)
+ elseif child and child:IsObjectType("CheckButton") and child.text then
+ S:HandleCheckBox(child)
+ child.text:SetTextColor(1, 1, 1)
+ end
+ end
+ end
+ else
+ for i = 1, menuEntry:GetNumChildren() do
+ local child = select(i, menuEntry:GetChildren())
+
+ if child and (child:IsObjectType("Button") and child.text and not child:IsObjectType("CheckButton")) then
+ child:StripTextures()
+ child.text:SetTextColor(1, 0.8, 0.1)
+ elseif child and child:IsObjectType("CheckButton") and child.text then
+ S:HandleCheckBox(child)
+ child.text:SetTextColor(1, 1, 1)
+ end
+ end
+ end
+ end
+
+ ExpansionButton(ARL_MainPanel.filter_menu.rep.toggle_expansion0)
+ ExpansionButton(ARL_MainPanel.filter_menu.rep.toggle_expansion1)
+ ExpansionButton(ARL_MainPanel.filter_menu.rep.toggle_expansion2)
+ end)
+ end)
+
+ ARLCopyFrame:StripTextures()
+ ARLCopyFrame:SetTemplate("Transparent")
+
+ S:HandleScrollBar(ARLCopyScrollScrollBar)
+
+ for i = 1, ARLCopyFrame:GetNumChildren() do
+ local child = select(i, ARLCopyFrame:GetChildren())
+ if child and child:IsObjectType("Button") then
+ child:ClearAllPoints()
+ child:Point("TOPRIGHT", ARLCopyFrame, "TOPRIGHT", 1, 0)
+ S:HandleCloseButton(child)
+ break
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/adiBags.lua b/ElvUI_AddOnSkins/Skins/Addons/adiBags.lua
new file mode 100644
index 0000000..67be289
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/adiBags.lua
@@ -0,0 +1,201 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("AdiBags") then return end
+
+local _G = _G
+local ipairs = ipairs
+local type = type
+local unpack = unpack
+
+local GetItemInfo = GetItemInfo
+local hooksecurefunc = hooksecurefunc
+
+local ITEM_QUALITY_POOR = ITEM_QUALITY_POOR
+local ITEM_QUALITY_UNCOMMON = ITEM_QUALITY_UNCOMMON
+local TEXTURE_ITEM_QUEST_BANG = TEXTURE_ITEM_QUEST_BANG
+local TEXTURE_ITEM_QUEST_BORDER = TEXTURE_ITEM_QUEST_BORDER
+
+-- AdiBags 1.1 beta 7
+-- https://www.curseforge.com/wow/addons/adibags/files/452440
+
+S:AddCallbackForAddon("AdiBags", "AdiBags", function()
+ if not E.private.addOnSkins.AdiBags then return end
+
+ local AdiBags = LibStub("AceAddon-3.0"):GetAddon("AdiBags", true)
+ if not AdiBags then return end
+
+ hooksecurefunc(AdiBags, "ResetBagPositions", function(self)
+ self.db.profile.scale = 1
+ self:LayoutBags()
+ end)
+
+ local function SkinContainer(frame)
+ frame:SetTemplate("Transparent")
+ S:HandleCloseButton(frame.CloseButton)
+
+ local bagSlots = frame.HeaderLeftRegion.widgets[1].widget
+ bagSlots:SetTemplate()
+ bagSlots:StyleButton(nil, true)
+
+ local bagSlotsTex = bagSlots:GetNormalTexture()
+ bagSlotsTex:SetInside()
+ bagSlotsTex:SetTexCoord(unpack(E.TexCoords))
+
+ frame.BagSlotPanel:SetTemplate("Transparent")
+
+ for _, bag in ipairs(frame.BagSlotPanel.buttons) do
+ bag:StripTextures()
+ bag:SetTemplate()
+ bag:StyleButton()
+
+ local icon = _G[bag:GetName().."IconTexture"]
+ icon:SetInside()
+ icon:SetTexCoord(unpack(E.TexCoords))
+ end
+ end
+
+ S:RawHook(AdiBags, "CreateContainerFrame", function(self, ...)
+ local frame = S.hooks[self].CreateContainerFrame(self, ...)
+
+ SkinContainer(frame)
+
+ return frame
+ end)
+
+ local qualityColors = {
+ ["questStarter"] = {E.db.bags.colors.items.questStarter.r, E.db.bags.colors.items.questStarter.g, E.db.bags.colors.items.questStarter.b},
+ ["questItem"] = {E.db.bags.colors.items.questItem.r, E.db.bags.colors.items.questItem.g, E.db.bags.colors.items.questItem.b}
+ }
+ for i = 0, 7 do
+ qualityColors[i] = {GetItemQualityColor(i)}
+ end
+
+ local LayeredRegionClass = AdiBags:GetClass("LayeredRegion")
+ hooksecurefunc(LayeredRegionClass.prototype, "AddWidget", function(self, widget)
+ if widget:IsObjectType("Button") then
+ if widget:GetText() then
+ S:HandleButton(widget)
+ else
+ widget:StyleButton(true, true)
+ widget:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ widget:GetCheckedTexture():SetTexCoord(unpack(E.TexCoords))
+ end
+ elseif widget.editBox and widget.editBox.clearButton then
+ widget.editBox:DisableDrawLayer("BACKGROUND")
+ S:HandleEditBox(widget.editBox)
+
+ S:HandleButton(widget.editBox.clearButton)
+ end
+ end)
+
+ local function updateBorderTexture(self, texture, g, b)
+ if texture == TEXTURE_ITEM_QUEST_BANG then
+ self:SetAlpha(1)
+ self.parent:SetBackdropBorderColor(unpack(qualityColors.questStarter))
+ self.parent._itemQuality = "questStarter"
+ else
+ self:SetAlpha(0)
+
+ if texture == TEXTURE_ITEM_QUEST_BORDER then
+ self.parent:SetBackdropBorderColor(unpack(qualityColors.questItem))
+ self.parent._itemQuality = "questItem"
+ elseif texture == "Interface\\Buttons\\UI-ActionButton-Border" then
+ -- await for vertex color
+ self.awaitColor = true
+
+ local _, _, quality = GetItemInfo(self.parent.itemId)
+ if quality and quality >= ITEM_QUALITY_UNCOMMON then
+ self.parent._itemQuality = quality
+ elseif quality == ITEM_QUALITY_POOR and AdiBags.db.profile.dimJunk then
+ self.parent._itemQuality = 1 - 0.5 * AdiBags.db.profile.qualityOpacity
+ end
+
+ return
+ elseif type(texture) == "number" then
+ self.parent._itemQuality = 1
+ self.parent:SetBackdropBorderColor(texture, g, b)
+ end
+ end
+ end
+
+ local function updateBorderVertexColor(self, r, g, b)
+ if not self.awaitColor then return end
+
+ self.parent:SetBackdropBorderColor(r, g, b)
+ self.awaitColor = nil
+ end
+
+ local function updateDimJunk(self, mode)
+ if mode == "MOD" and AdiBags.db.profile.dimJunk then
+ local alpha = 1 - 0.5 * AdiBags.db.profile.qualityOpacity
+ self.parent.IconTexture:SetVertexColor(1, 1, 1, alpha)
+ self._dimmed = true
+ elseif self.dimmed then
+ self.parent.IconTexture:SetVertexColor(1, 1, 1, 1)
+ self._dimmed = nil
+ end
+ end
+
+ local function updateBorderOnHide(self)
+ if not self._searchMode then
+ if self._restoreBorder then
+ local color = qualityColors[self.parent._itemQuality]
+ self.parent:SetBackdropBorderColor(color[1], color[2], color[3], 1)
+ self._restoreBorder = nil
+ end
+
+ self.parent:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ self.parent.IconTexture:SetVertexColor(1, 1, 1, 1)
+ elseif self.parent._itemQuality then
+ self._restoreBorder = true
+
+ local color = qualityColors[self.parent._itemQuality]
+ if color then
+ self.parent:SetBackdropBorderColor(color[1], color[2], color[3], 0.2)
+ else
+ color = self.parent._itemQuality
+ self.parent:SetBackdropBorderColor(color, color, color, 0.2)
+ end
+ end
+ end
+
+ local ItemButtonClass = AdiBags:GetClass("ItemButton")
+ hooksecurefunc(ItemButtonClass.prototype, "OnCreate", function(self)
+ self.NormalTexture:SetTexture(nil)
+ self:SetTemplate("Default", true)
+ self:StyleButton()
+
+ self.IconTexture:SetInside()
+ self.IconTexture:SetTexCoord(unpack(E.TexCoords))
+ self.IconTexture.SetTexCoord = E.noop
+
+ self.IconQuestTexture:SetInside()
+ self.IconQuestTexture:SetTexture(E.Media.Textures.BagQuestIcon)
+ self.IconQuestTexture:SetTexCoord(unpack(E.TexCoords))
+ self.IconQuestTexture.SetTexCoord = E.noop
+ self.IconQuestTexture.parent = self
+ self.IconQuestTexture.SetTexture = updateBorderTexture
+ self.IconQuestTexture.SetVertexColor = updateBorderVertexColor
+ self.IconQuestTexture.SetBlendMode = updateDimJunk
+ hooksecurefunc(self.IconQuestTexture, "Hide", updateBorderOnHide)
+
+ E:RegisterCooldown(self.Cooldown)
+ end)
+
+ hooksecurefunc(ItemButtonClass.prototype, "Update", function(self)
+ if not self:CanUpdate() then return end
+
+ if not self.texture then
+ self.IconTexture:SetTexture(nil)
+ end
+ end)
+
+ local AdiBags_SearchHighlight = AdiBags:GetModule("SearchHighlight", true)
+ S:RawHook(AdiBags_SearchHighlight, "UpdateButton", function(self, event, button)
+ button.IconQuestTexture._searchMode = true
+ S.hooks[self].UpdateButton(self, event, button)
+ button.IconQuestTexture._searchMode = nil
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/advancedTradeSkillWindow.lua b/ElvUI_AddOnSkins/Skins/Addons/advancedTradeSkillWindow.lua
new file mode 100644
index 0000000..657bb60
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/advancedTradeSkillWindow.lua
@@ -0,0 +1,368 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("AdvancedTradeSkillWindow") then return end
+
+local _G = _G
+local ipairs = ipairs
+local unpack = unpack
+
+local GetTradeSkillListLink = GetTradeSkillListLink
+local hooksecurefunc = hooksecurefunc
+
+-- AdvancedTradeSkillWindow 0.7.8
+-- https://www.curseforge.com/wow/addons/advanced-trade-skill-window/files/400569
+
+S:AddCallbackForAddon("AdvancedTradeSkillWindow", "AdvancedTradeSkillWindow", function()
+ if not E.private.addOnSkins.AdvancedTradeSkillWindow then return end
+
+ local scrollBars = {
+ -- Main Frame
+ "ATSWListScrollFrameScrollBar",
+ "ATSWQueueScrollFrameScrollBar",
+ -- Sorting Editor
+ "ATSWCSUListScrollFrameScrollBar",
+ "ATSWCSSListScrollFrameScrollBar",
+ -- ShoppingList Frame
+ "ATSWSLScrollFrameScrollBar",
+ }
+
+ local buttons = {
+ -- Scan
+ "ATSWScanDelayFrameSkipButton",
+ "ATSWScanDelayFrameAbortButton",
+ -- Main Frame
+ "ATSWCSButton",
+ "ATSWOptionsButton",
+ "ATSWQueueAllButton",
+ "ATSWCreateAllButton",
+ "ATSWCreateButton",
+ "ATSWQueueButton",
+ "ATSWQueueStartStopButton",
+ "ATSWQueueDeleteButton",
+ "ATSWReagentsButton",
+ -- Sorting Editor
+ "ATSWAddCategoryButton",
+ -- Reagent Frame
+ "ATSWBuyReagentsButton",
+ -- Options
+ "ATSWOptionsFrameOKButton",
+ -- Merchant Frame
+ "ATSWAutoBuyButton",
+ }
+
+ local checkBoxes = {
+ -- Main Frame
+ "ATSWHeaderSortButton",
+ "ATSWNameSortButton",
+ "ATSWDifficultySortButton",
+ "ATSWCustomSortButton",
+ "ATSWOnlyCreatableButton",
+ -- Options
+ "ATSWOFUnifiedCounterButton",
+ "ATSWOFSeparateCounterButton",
+ "ATSWOFIncludeBankButton",
+ "ATSWOFIncludeAltsButton",
+ "ATSWOFIncludeMerchantsButton",
+ "ATSWOFAutoBuyButton",
+ "ATSWOFTooltipButton",
+ "ATSWOFShoppingListButton",
+ "ATSWOFReagentListButton",
+ "ATSWOFNewRecipeLinkButton",
+ }
+
+ local editBoxes = {
+ -- Main Frame
+ "ATSWFilterBox",
+ "ATSWInputBox",
+ -- Sorting Editor
+ "ATSWCSNewCategoryBox",
+ }
+
+ local dropDownBoxes = {
+ -- Main Frame
+ "ATSWSubClassDropDown",
+ "ATSWInvSlotDropDown",
+ }
+
+ local closeButtons = {
+ -- Main Frame
+ "ATSWFrameCloseButton",
+ -- Reagent Frame
+ "ATSWReagentFrameCloseButton",
+ -- Sorting Editor
+ "ATSWCSFrameCloseButton",
+ }
+
+ local statusBars = {
+ -- Scan
+ "ATSWScanDelayFrameBar",
+ -- Main Frame
+ "ATSWRankFrame",
+ }
+
+ for _, scrollBar in ipairs(scrollBars) do
+ scrollBar = _G[scrollBar]
+ scrollBar:GetParent():StripTextures()
+ S:HandleScrollBar(scrollBar)
+ end
+ for _, button in ipairs(buttons) do
+ S:HandleButton(_G[button])
+ end
+ for _, checkBox in ipairs(checkBoxes) do
+ S:HandleCheckBox(_G[checkBox])
+ end
+ for _, editBox in ipairs(editBoxes) do
+ S:HandleEditBox(_G[editBox])
+ end
+ for _, dropDownBox in ipairs(dropDownBoxes) do
+ S:HandleDropDownBox(_G[dropDownBox])
+ end
+ for _, closeButton in ipairs(closeButtons) do
+ closeButton = _G[closeButton]
+ S:HandleCloseButton(closeButton, closeButton:GetParent().backdrop)
+ end
+ for _, statusBar in ipairs(statusBars) do
+ statusBar = _G[statusBar]
+ statusBar:StripTextures()
+ statusBar:CreateBackdrop()
+ statusBar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(statusBar)
+ end
+
+ E:GetModule("Tooltip"):SecureHookScript(ATSWTradeskillTooltip, "OnShow", "SetStyle")
+
+ -- ScanDelay Frame
+ ATSWScanDelayFrame:Size(400, 151) -- fix pixelperfect
+ ATSWScanDelayFrame:StripTextures()
+ ATSWScanDelayFrame:SetTemplate("Transparent")
+
+ -- Options Frame
+ ATSWOptionsFrame:SetParent(UIParent)
+ ATSWOptionsFrame:StripTextures()
+ ATSWOptionsFrame:SetTemplate("Transparent")
+
+ -- Main Frame
+ ATSWFrame:StripTextures()
+ ATSWFrame:CreateBackdrop("Transparent")
+ ATSWFrame.backdrop:Point("TOPLEFT", 11, -12)
+ ATSWFrame.backdrop:Point("BOTTOMRIGHT", -32, 10)
+ ATSWFrame:SetClampedToScreen(true)
+ S:SetBackdropHitRect(ATSWFrame, nil, true)
+
+ ATSWFramePortrait:Hide()
+
+ S:HandleNextPrevButton(ATSWDecrementButton)
+ S:HandleNextPrevButton(ATSWIncrementButton)
+
+ ATSWExpandButtonFrame:StripTextures()
+
+ ATSWRankFrameBorder:StripTextures()
+ ATSWRankFrameBorder:Hide()
+
+ for i = 0, ATSW_TRADE_SKILLS_DISPLAYED or 23 do
+ if i == 0 then
+ S:HandleCollapseExpandButton(ATSWCollapseAllButton)
+
+ local onClick = function(self)
+ if self.collapsed then
+ self:GetNormalTexture():SetTexture(E.Media.Textures.Minus)
+ self:GetPushedTexture():SetTexture(E.Media.Textures.Minus)
+ self:GetDisabledTexture():SetTexture(E.Media.Textures.Minus)
+ else
+ self:GetNormalTexture():SetTexture(E.Media.Textures.Plus)
+ self:GetPushedTexture():SetTexture(E.Media.Textures.Plus)
+ self:GetDisabledTexture():SetTexture(E.Media.Textures.Plus)
+ end
+ end
+
+ onClick(ATSWCollapseAllButton)
+ ATSWCollapseAllButton:HookScript("OnClick", onClick)
+ else
+ local button = _G["ATSWSkill"..i]
+ if button then
+ S:HandleCollapseExpandButton(button)
+ end
+ end
+ end
+
+ local function SkinIcon(reagent, icon, count)
+ reagent:StripTextures()
+
+ icon:SetTexCoord(unpack(E.TexCoords))
+ icon:SetDrawLayer("OVERLAY")
+
+ icon.backdrop = CreateFrame("Frame", nil, reagent)
+ icon.backdrop:SetFrameLevel(reagent:GetFrameLevel() - 1)
+ icon.backdrop:SetTemplate("Default")
+ icon.backdrop:SetOutside(icon)
+
+ icon:SetParent(icon.backdrop)
+ count:SetParent(icon.backdrop)
+ count:SetDrawLayer("OVERLAY")
+ end
+
+ for i = 1, ATSW_MAX_TRADE_SKILL_REAGENTS do
+ local reagent = _G["ATSWReagent" .. i]
+ local icon = _G["ATSWReagent" .. i .. "IconTexture"]
+ local count = _G["ATSWReagent" .. i .. "Count"]
+
+ SkinIcon(reagent, icon, count)
+ end
+
+ hooksecurefunc(ATSWSkillIcon, "SetNormalTexture", function(self)
+ if self.skinned then
+ self:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ else
+ local reagent = _G["ATSWSkillIcon"]
+ local icon = _G["ATSWSkillIcon"]:GetNormalTexture()
+ local count = _G["ATSWSkillIconCount"]
+
+ SkinIcon(reagent, icon, count)
+
+ self.skinned = true
+ end
+ end)
+
+ for i = 1, 4 do
+ local button = _G["ATSWQueueItem"..i.."DeleteButton"]
+ S:HandleButton(button)
+ button:Size(20, 21)
+ end
+
+ ATSWHeaderSortButton:Point("TOPLEFT", 29, -30)
+ ATSWNameSortButton:Point("TOPLEFT", 29, -45)
+ ATSWDifficultySortButton:Point("TOPLEFT", 189, -30)
+ ATSWCustomSortButton:Point("TOPLEFT", 189, -45)
+
+ ATSWOnlyCreatableButton:Point("TOPLEFT", 349, -37)
+
+ ATSWCSButton:Point("CENTER", ATSWFrame, "TOPLEFT", 594, -44)
+
+ ATSWOptionsButton:Height(20)
+ ATSWOptionsButton:Point("CENTER", ATSWFrame, "TOPLEFT", 683, -44)
+
+ ATSWRankFrame:Point("TOPLEFT", 459, -62)
+
+ ATSWInvSlotDropDown:Point("TOPRIGHT", -421, -65)
+ ATSWSubClassDropDown:Point("RIGHT", ATSWInvSlotDropDown, "LEFT", 20, 0)
+
+ ATSWFilterBox:Width(212)
+
+ ATSWExpandButtonFrame:Point("TOPLEFT", 14, -95)
+
+ ATSWListScrollFrame:SetTemplate("Transparent")
+ ATSWListScrollFrame:Size(299, 374)
+ ATSWListScrollFrame:Point("TOPLEFT", 19, -120)
+ ATSWListScrollFrame.Hide = E.noop
+
+ ATSWListScrollFrameScrollBar:Point("TOPLEFT", ATSWListScrollFrame, "TOPRIGHT", 3, -19)
+ ATSWListScrollFrameScrollBar:Point("BOTTOMLEFT", ATSWListScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ ATSWSkill1:Point("TOPLEFT", 22, -123)
+
+ ATSWCreateButton:Point("CENTER", ATSWFrame, "TOPLEFT", 625, -349)
+ ATSWQueueButton:Point("LEFT", ATSWCreateButton, "RIGHT", 3, 0)
+
+ ATSWCreateAllButton:Point("RIGHT", ATSWCreateButton, "LEFT", -84, 0)
+ ATSWQueueAllButton:Point("RIGHT", ATSWCreateAllButton, "LEFT", -3, 0)
+
+ ATSWDecrementButton:Point("LEFT", ATSWCreateAllButton, "RIGHT", 5, 0)
+ ATSWInputBox:Point("LEFT", ATSWDecrementButton, "RIGHT", 4, 0)
+ ATSWIncrementButton:Point("RIGHT", ATSWCreateButton, "LEFT", -5, 0)
+
+ ATSWQueueItem1:Point("TOPLEFT", 355, -373)
+
+ ATSWQueueScrollFrameScrollBar:Point("TOPLEFT", ATSWQueueScrollFrame, "TOPRIGHT", 8, -16)
+ ATSWQueueScrollFrameScrollBar:Point("BOTTOMLEFT", ATSWQueueScrollFrame, "BOTTOMRIGHT", 8, 16)
+
+ ATSWReagentsButton:Point("CENTER", ATSWFrame, "TOPLEFT", 683, -483)
+ ATSWQueueStartStopButton:Point("CENTER", ATSWFrame, "TOPLEFT", 421, -483)
+
+ ATSWQueueDeleteButton:ClearAllPoints()
+ ATSWQueueDeleteButton:Point("LEFT", ATSWQueueStartStopButton, "RIGHT", 3, 0)
+ ATSWQueueDeleteButton:Point("RIGHT", ATSWReagentsButton, "LEFT", -3, 0)
+
+ -- Reagent Frame
+ ATSWReagentFrame:StripTextures()
+ ATSWReagentFrame:CreateBackdrop("Transparent")
+ ATSWReagentFrame.backdrop:Point("TOPLEFT", 12, -14)
+ ATSWReagentFrame.backdrop:Point("BOTTOMRIGHT", -34, 74)
+ S:SetBackdropHitRect(ATSWReagentFrame, nil, true)
+
+ -- SortingEditor Frame
+ ATSWCSFrame:StripTextures()
+ ATSWCSFrame:CreateBackdrop("Transparent")
+ ATSWCSFrame.backdrop:Point("TOPLEFT", 11, -12)
+ ATSWCSFrame.backdrop:Point("BOTTOMRIGHT", -32, 10)
+ ATSWCSFrame:SetClampedToScreen(true)
+ S:SetBackdropHitRect(ATSWCSFrame, nil, true)
+
+ ATSWCSUListScrollFrame:SetTemplate("Transparent")
+ ATSWCSUListScrollFrame:Size(342, 383) -- 311, 383
+ ATSWCSUListScrollFrame:Point("TOPLEFT", 19, -111)
+ ATSWCSSkill1:Point("TOPLEFT", 28, -120)
+
+ ATSWCSUListScrollFrameScrollBar:Point("TOPLEFT", ATSWCSUListScrollFrame, "TOPRIGHT", 3, -19)
+ ATSWCSUListScrollFrameScrollBar:Point("BOTTOMLEFT", ATSWCSUListScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ ATSWCSSListScrollFrame:SetTemplate("Transparent")
+ ATSWCSSListScrollFrame:Size(322, 354)
+ ATSWCSSListScrollFrame:Point("TOPLEFT", 385, -111)
+ ATSWCSCSkill1:Point("TOPLEFT", 394, -120)
+
+ ATSWCSSListScrollFrameScrollBar:Point("TOPLEFT", ATSWCSSListScrollFrame, "TOPRIGHT", 3, -19)
+ ATSWCSSListScrollFrameScrollBar:Point("BOTTOMLEFT", ATSWCSSListScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ for i = 1, 17 do
+ local buttonDelete = _G["ATSWCSCSkill" .. i .. "Delete"]
+ local buttonUp = _G["ATSWCSCSkill" .. i .. "MoveUp"]
+ local buttonDown = _G["ATSWCSCSkill" .. i .. "MoveDown"]
+ local skillButton = _G["ATSWCSCSkill" .. i .. "SkillButton"]
+
+ buttonDelete:Size(17)
+ buttonUp:Size(24)
+ buttonDown:Size(24)
+
+ S:HandleButton(buttonDelete)
+ S:HandleNextPrevButton(buttonUp, "up")
+ S:HandleNextPrevButton(buttonDown, "down")
+
+ S:HandleCollapseExpandButton(skillButton)
+ end
+
+ ATSWCSNewCategoryBox:Point("TOPLEFT", 424, -473)
+
+ ATSWAddCategoryButton:Point("LEFT", ATSWCSNewCategoryBox, "RIGHT", 4, 0)
+
+ -- ShoppingList
+ ATSWShoppingListFrame:StripTextures()
+ ATSWShoppingListFrame:CreateBackdrop("Transparent")
+ ATSWShoppingListFrame.backdrop:Point("TOPLEFT", 12, 0)
+ ATSWShoppingListFrame.backdrop:Point("BOTTOMRIGHT", -35, 59)
+
+ S:SetBackdropHitRect(ATSWShoppingListFrame)
+
+ S:HandleCloseButton(ATSWSLCloseButton)
+ ATSWSLCloseButton:Point("BOTTOMRIGHT", -39, 177)
+ ATSWSLCloseButton:SetHitRectInsets(1, 0, 1, 0)
+ ATSWSLCloseButton:SetText(nil)
+
+ ATSWSLScrollFrameScrollBar:Point("TOPLEFT", ATSWSLScrollFrame, "TOPRIGHT", 5, -18)
+ ATSWSLScrollFrameScrollBar:Point("BOTTOMLEFT", ATSWSLScrollFrame, "BOTTOMRIGHT", 5, 22)
+
+ ATSWShoppingListFrame.SetPoint = function(self)
+ ATSWSLCloseButton.SetPoint(ATSWShoppingListFrame, "TOPLEFT", AuctionFrame, "TOPLEFT", 355, -446)
+ end
+
+ -- ChatLink fix
+ ATSWTradeSkillLinkButton:SetScript("OnClick", function()
+ local ChatFrameEditBox = ChatEdit_ChooseBoxForSend()
+ if not ChatFrameEditBox:IsShown() then
+ ChatEdit_ActivateChat(ChatFrameEditBox)
+ end
+
+ ChatFrameEditBox:Insert(GetTradeSkillListLink())
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/allStats.lua b/ElvUI_AddOnSkins/Skins/Addons/allStats.lua
new file mode 100644
index 0000000..50b879e
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/allStats.lua
@@ -0,0 +1,26 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("AllStats") then return end
+
+-- All Stats 1.1
+-- https://www.curseforge.com/wow/addons/all-stats/files/430951
+
+S:AddCallbackForAddon("AllStats", "AllStats", function()
+ if not E.private.addOnSkins.AllStats then return end
+
+ AllStatsFrame:StripTextures()
+ AllStatsFrame:SetTemplate("Transparent")
+ AllStatsFrame:Height(424)
+ AllStatsFrame:Point("TOPLEFT", PaperDollFrame, "TOPLEFT", 351, -12)
+
+ S:HandleButton(AllStatsButtonShowFrame)
+ AllStatsButtonShowFrame:Height(21)
+
+ if CharacterFrameExpandButton then
+ AllStatsButtonShowFrame:Point("BOTTOMRIGHT", -40, 84)
+ else
+ AllStatsButtonShowFrame:Point("BOTTOMRIGHT", -60, 84)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/altoholic.lua b/ElvUI_AddOnSkins/Skins/Addons/altoholic.lua
new file mode 100644
index 0000000..e6f0e1f
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/altoholic.lua
@@ -0,0 +1,402 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Altoholic") then return end
+
+local _G = _G
+local pairs = pairs
+local unpack = unpack
+
+local hooksecurefunc = hooksecurefunc
+
+-- Altoholic 3.3.002b
+
+S:AddCallbackForAddon("Altoholic", "Altoholic", function()
+ if not E.private.addOnSkins.Altoholic then return end
+
+ local function AltoItem(item)
+ local name = item:GetName()
+ item:SetTemplate()
+ item:StyleButton()
+
+ item:SetNormalTexture("")
+ _G[name.."IconTexture"]:SetInside()
+ _G[name.."IconTexture"]:SetTexCoord(unpack(E.TexCoords))
+
+ local cooldown = _G[name.."Cooldown"]
+ if cooldown then
+ E:RegisterCooldown(cooldown)
+ end
+ end
+
+ AltoTooltip:HookScript("OnShow", function(self)
+ self:SetTemplate("Transparent", nil, true) --ignore updates
+
+ local r, g, b = self:GetBackdropColor()
+ self:SetBackdropColor(r, g, b, E.db.tooltip.colorAlpha)
+ end)
+
+ AltoholicFrame:StripTextures()
+ AltoholicFrame:CreateBackdrop("Transparent")
+ AltoholicFrame.backdrop:Point("TOPLEFT", 11, -12)
+ AltoholicFrame.backdrop:Point("BOTTOMRIGHT", -1, 11)
+
+ AltoholicFramePortrait:Hide()
+
+ S:HandleCloseButton(AltoholicFrameCloseButton, AltoholicFrame.backdrop)
+
+ for i = 1, 5 do
+ local tab = _G["AltoholicFrameTab"..i]
+
+ if i == 1 then
+ tab:Point("TOPLEFT", AltoholicFrame, "BOTTOMLEFT", 11, 13)
+ else
+ tab:Point("TOPLEFT", _G["AltoholicFrameTab"..(i - 1)], "TOPRIGHT", -15, 0)
+ end
+
+ S:HandleTab(tab)
+ end
+
+ S:HandleEditBox(AltoholicFrame_SearchEditBox)
+ S:HandleButton(AltoholicFrame_ResetButton)
+ AltoholicFrame_ResetButton:Point("TOPLEFT", "$parent_SearchEditBox", "BOTTOMLEFT", -40, -3)
+ S:HandleButton(AltoholicFrame_SearchButton)
+
+ local function ClassesItemItemTexure_SetTexCoord(self, left, right, top, bottom)
+ if self.customTexCoord then return end
+ self.customTexCoord = true
+ self:SetTexCoord(left + 0.02, right - 0.02, top + 0.02, bottom - 0.02)
+ self.customTexCoord = nil
+ end
+
+ local function ClassesItem_OnShow(self)
+ if self.border:IsShown() then
+ self:SetBackdropBorderColor(self.border:GetVertexColor())
+ else
+ self:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+
+ _G[self:GetName().."IconTexture"]:SetInside()
+
+ self.border:SetTexture("")
+ end
+
+ for i = 1, 10 do
+ local item = _G["AltoholicFrameClassesItem"..i]
+ AltoItem(item)
+
+ hooksecurefunc(_G[item:GetName().."IconTexture"], "SetTexCoord", ClassesItemItemTexure_SetTexCoord)
+
+ item:HookScript("OnShow", ClassesItem_OnShow)
+ end
+
+ AltoMsgBox:SetTemplate("Transparent")
+ S:HandleButton(AltoMsgBoxYesButton)
+ S:HandleButton(AltoMsgBoxNoButton)
+
+ AltoAccountSharing:SetTemplate("Transparent")
+
+ S:HandleEditBox(AltoAccountSharing_AccNameEditBox)
+ S:HandleButton(AltoAccountSharing_InfoButton)
+ S:HandleEditBox(AltoAccountSharing_AccTargetEditBox)
+ S:HandleButton(AltoAccountSharing_SendButton)
+ S:HandleButton(AltoAccountSharing_CancelButton)
+
+ S:HandleCollapseExpandButton(AltoAccountSharing_ToggleAll, "-")
+
+ S:HandleCheckBox(AltoAccountSharing_CheckAll)
+
+ -- AccountSummary
+ AltoholicFrameSummaryScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameSummaryScrollFrameScrollBar)
+
+ for i = 1, 14 do
+ S:HandleCollapseExpandButton(_G["AltoholicFrameSummaryEntry"..i.."Collapse"], "-")
+ end
+
+ -- Activity
+ AltoholicFrameActivityScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameActivityScrollFrameScrollBar)
+
+ for i = 1, 14 do
+ S:HandleCollapseExpandButton(_G["AltoholicFrameActivityEntry"..i.."Collapse"], "-")
+ end
+
+ -- AuctionHouse
+ AltoholicFrameAuctionsScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameAuctionsScrollFrameScrollBar)
+
+ for i = 1, 7 do
+ AltoItem(_G["AltoholicFrameAuctionsEntry"..i.."Item"])
+ end
+
+ -- BagUsage
+ AltoholicFrameBagUsageScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameBagUsageScrollFrameScrollBar)
+
+ for i = 1, 14 do
+ S:HandleCollapseExpandButton(_G["AltoholicFrameBagUsageEntry"..i.."Collapse"], "-")
+ end
+
+ -- Calendar
+ S:HandleNextPrevButton(AltoholicFrameCalendar_PrevMonth)
+ S:HandleNextPrevButton(AltoholicFrameCalendar_NextMonth)
+
+ AltoholicFrameCalendarScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameCalendarScrollFrameScrollBar)
+
+ -- Containers
+ S:HandleDropDownBox(AltoholicFrameContainers_SelectContainerView)
+ S:HandleDropDownBox(AltoholicFrameContainers_SelectRarity)
+
+ AltoholicFrameContainersScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameContainersScrollFrameScrollBar)
+
+ for i = 1, 7 do
+ for j = 1, 14 do
+ AltoItem(_G["AltoholicFrameContainersEntry"..i.."Item"..j])
+ end
+ end
+
+ -- Currencies
+ S:HandleDropDownBox(AltoholicFrameCurrencies_SelectCurrencies)
+
+ AltoholicFrameCurrenciesScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameCurrenciesScrollFrameScrollBar)
+
+--[[
+ for i = 1, 8 do
+ for j = 1, 10 do
+ _G["AltoholicFrameCurrenciesEntry"..i.."Item"..j]
+ end
+ end
+]]
+
+ -- Equipment
+ AltoholicFrameEquipmentScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameEquipmentScrollFrameScrollBar)
+
+ for i = 1, 7 do
+ for j = 1, 10 do
+ AltoItem(_G["AltoholicFrameEquipmentEntry"..i.."Item"..j])
+ end
+ end
+
+ -- GuildBank
+ for i = 1, 7 do
+ for j = 1, 14 do
+ AltoItem(_G["AltoGuildBankEntry"..i.."Item"..j])
+ end
+ end
+
+ -- GuildBankTabs
+ AltoholicFrameGuildBankTabsScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameGuildBankTabsScrollFrameScrollBar)
+
+ for i = 1, 14 do
+ S:HandleCollapseExpandButton(_G["AltoholicFrameGuildBankTabsEntry"..i.."Collapse"], "-")
+ S:HandleButton(_G["AltoholicFrameGuildBankTabsEntry"..i.."UpdateTab"])
+ end
+
+ -- GuildMembers
+ AltoholicFrameGuildMembersScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameGuildMembersScrollFrameScrollBar)
+
+ for i = 1, 14 do
+ S:HandleCollapseExpandButton(_G["AltoholicFrameGuildMembersEntry"..i.."Collapse"], "-")
+ end
+
+ for i = 1, 19 do
+ AltoItem(_G["AltoholicFrameGuildMembersItem"..i])
+ end
+
+ -- GuildProfessions
+ AltoholicFrameGuildProfessionsScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameGuildProfessionsScrollFrameScrollBar)
+
+ for i = 1, 14 do
+ S:HandleCollapseExpandButton(_G["AltoholicFrameGuildProfessionsEntry"..i.."Collapse"], "-")
+ end
+
+ -- Mails
+ AltoholicFrameMailScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameMailScrollFrameScrollBar)
+
+ for i = 1, 7 do
+ AltoItem(_G["AltoholicFrameMailEntry"..i.."Item"])
+ end
+
+ -- Pets
+ S:HandleDropDownBox(AltoholicFramePets_SelectPetView)
+ S:HandleRotateButton(AltoholicFramePetsNormal_ModelFrameRotateLeftButton)
+ S:HandleRotateButton(AltoholicFramePetsNormal_ModelFrameRotateRightButton)
+
+ for i = 1, 12 do
+ local button = _G["AltoholicFramePetsNormal_Button"..i]
+ button:SetTemplate()
+ button:StyleButton(nil, true)
+ button:GetDisabledTexture():SetInside()
+ button:SetNormalTexture("")
+ button:GetNormalTexture():SetDrawLayer("BORDER")
+ button:GetNormalTexture():SetInside()
+ button:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ end
+
+ S:HandleNextPrevButton(AltoholicFramePetsNormalPrevPage, nil, nil, true)
+ AltoholicFramePetsNormalPrevPage:Size(32)
+ S:HandleNextPrevButton(AltoholicFramePetsNormalNextPage, nil, nil, true)
+ AltoholicFramePetsNormalNextPage:Size(32)
+
+ AltoholicFramePetsAllInOneScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFramePetsAllInOneScrollFrameScrollBar)
+
+ -- Quests
+ AltoholicFrameQuestsScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameQuestsScrollFrameScrollBar)
+
+ for i = 1, 14 do
+ S:HandleCollapseExpandButton(_G["AltoholicFrameQuestsEntry"..i.."Collapse"], "-")
+ end
+
+ -- Recipes
+ S:HandleCollapseExpandButton(AltoholicFrameRecipesInfo_ToggleAll, "-")
+ S:HandleDropDownBox(AltoholicFrameRecipesInfo_SelectColor)
+ S:HandleDropDownBox(AltoholicFrameRecipesInfo_SelectSubclass)
+ S:HandleDropDownBox(AltoholicFrameRecipesInfo_SelectInvSlot)
+
+ AltoholicFrameRecipesScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameRecipesScrollFrameScrollBar)
+
+ for i = 1, 14 do
+ S:HandleCollapseExpandButton(_G["AltoholicFrameRecipesEntry"..i.."Collapse"], "-")
+ AltoItem(_G["AltoholicFrameRecipesEntry"..i.."Craft"])
+
+ for j = 1, 8 do
+ AltoItem(_G["AltoholicFrameRecipesEntry"..i.."Item"..j])
+ end
+ end
+
+ -- Reputations
+ S:HandleDropDownBox(AltoholicFrameReputations_SelectFaction)
+ AltoholicFrameReputationsScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameReputationsScrollFrameScrollBar)
+
+ for i = 1, 8 do
+ for j = 1, 10 do
+ local item = _G["AltoholicFrameReputationsEntry"..i.."Item"..j]
+ local bg = _G["AltoholicFrameReputationsEntry"..i.."Item"..j.."_Background"]
+
+ item:SetTemplate()
+ item:StyleButton()
+
+ bg:SetDrawLayer("BORDER")
+ bg:SetInside()
+ bg:SetTexCoord(unpack(E.TexCoords))
+ end
+ end
+
+ -- Search
+ AltoholicFrameSearchScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameSearchScrollFrameScrollBar)
+
+ for i = 1, 7 do
+ E:RegisterCooldown(_G["AltoholicFrameSearchEntry"..i.."Cooldown"])
+ AltoItem(_G["AltoholicFrameSearchEntry"..i.."Item"])
+ end
+
+ -- Skills
+ AltoholicFrameSkillsScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameSkillsScrollFrameScrollBar)
+
+ for i = 1, 14 do
+ S:HandleCollapseExpandButton(_G["AltoholicFrameSkillsEntry"..i.."Collapse"], "-")
+ end
+
+ -- TabCharacters
+ S:HandleDropDownBox(AltoholicTabCharacters_SelectRealm)
+ S:HandleDropDownBox(AltoholicTabCharacters_SelectChar)
+
+ local tabCharacters = {"_Bags", "_Equipment", "_Quests", "_Talents", "_Auctions", "_Bids", "_Mails", "_Pets", "_Mounts", "_Factions", "_Tokens", "_Cooking", "_FirstAid", "_Prof1", "_Prof2"}
+ for _, tab in pairs(tabCharacters) do
+ AltoItem(_G["AltoholicTabCharacters"..tab])
+ end
+
+ for i = 1, 4 do
+ _G["AltoholicTabCharacters_Sort"..i]:StripTextures()
+ end
+
+ -- TabGuildBank
+ S:HandleDropDownBox(AltoholicTabGuildBank_SelectGuild)
+ S:HandleButton(AltoholicTabGuildBank_DeleteGuildButton)
+ S:HandleCheckBox(AltoholicTabGuildBank_HideInTooltip)
+
+ for i = 1, 6 do
+ _G["AltoholicTabGuildBankMenuItem"..i]:StripTextures()
+ end
+
+ -- TabSearch
+ for i = 1, 15 do
+ _G["AltoholicTabSearchMenuItem"..i]:StripTextures()
+ end
+
+ AltoholicSearchMenuScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicSearchMenuScrollFrameScrollBar)
+ S:HandleEditBox(AltoholicTabSearch_MinLevel)
+ S:HandleEditBox(AltoholicTabSearch_MaxLevel)
+ S:HandleDropDownBox(AltoholicTabSearch_SelectRarity)
+ S:HandleDropDownBox(AltoholicTabSearch_SelectSlot, 140)
+ S:HandleDropDownBox(AltoholicTabSearch_SelectLocation, 200)
+
+ for i = 1, 8 do
+ _G["AltoholicTabSearch_Sort"..i]:StripTextures()
+ end
+
+ -- TabSummary
+ for i = 1, 8 do
+ _G["AltoholicTabSummaryMenuItem"..i]:StripTextures()
+ _G["AltoholicTabSummary_Sort"..i]:StripTextures()
+ end
+
+ S:HandleCollapseExpandButton(AltoholicTabSummaryToggleView, "-")
+
+ S:HandleDropDownBox(AltoholicTabSummary_SelectLocation, 200)
+ S:HandleButton(AltoholicTabSummary_OptionsDataStore)
+ S:HandleButton(AltoholicTabSummary_Options)
+ S:HandleButton(AltoholicTabSummary_RequestSharing)
+
+ -- Telents
+ for i = 1, 3 do
+ AltoItem(_G["AltoholicFrameTalents_SpecIcon"..i])
+ end
+
+ S:HandleScrollBar(AltoholicFrameTalents_ScrollFrameScrollBar)
+
+ for i = 1, 40 do
+ AltoItem(_G["AltoholicFrameTalents_ScrollFrameTalent"..i])
+ end
+end)
+
+S:AddCallbackForAddon("Altoholic_Achievements", "Altoholic_Achievements", function()
+ if not E.private.addOnSkins.Altoholic then return end
+
+ AltoholicFrameAchievementsScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicFrameAchievementsScrollFrameScrollBar)
+
+ for i = 1, 8 do
+ for j = 1, 10 do
+ _G["AltoholicFrameAchievementsEntry"..i.."Item"..j]:SetTemplate()
+ _G["AltoholicFrameAchievementsEntry"..i.."Item"..j]:StyleButton()
+ _G["AltoholicFrameAchievementsEntry"..i.."Item"..j.."_Background"]:SetDrawLayer("BORDER")
+ _G["AltoholicFrameAchievementsEntry"..i.."Item"..j.."_Background"]:SetInside()
+ _G["AltoholicFrameAchievementsEntry"..i.."Item"..j.."_Background"]:SetTexCoord(unpack(E.TexCoords))
+ end
+ end
+
+ for i = 1, 15 do
+ _G["AltoholicTabAchievementsMenuItem"..i]:StripTextures()
+ end
+
+ AltoholicAchievementsMenuScrollFrame:StripTextures()
+ S:HandleScrollBar(AltoholicAchievementsMenuScrollFrameScrollBar)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/atlas.lua b/ElvUI_AddOnSkins/Skins/Addons/atlas.lua
new file mode 100644
index 0000000..0517ded
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/atlas.lua
@@ -0,0 +1,85 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Atlas") then return end
+
+-- Atlas 1.18.1
+
+S:AddCallbackForAddon("Atlas", "Atlas", function()
+ if not E.private.addOnSkins.Atlas then return end
+
+ AtlasFrame:StripTextures()
+ AtlasFrame:SetTemplate("Transparent")
+ AtlasFrame:SetClampRectInsets(0, 0, 0, 0)
+
+ S:HandleCloseButton(AtlasFrameCloseButton, AtlasFrame)
+
+ AtlasFrameLockButton:Point("RIGHT", AtlasFrameCloseButton, "LEFT", 12, -1)
+ AtlasFrameLockButton:SetHitRectInsets(6, 6, 6, 6)
+
+ AtlasLockNorm:SetInside(AtlasFrameLockButton, 10, 10)
+ AtlasLockPush:SetInside(AtlasFrameLockButton, 10, 10)
+ AtlasLockNorm:SetTexCoord(.36, .65, .32, .73)
+ AtlasLockPush:SetTexCoord(.36, .60, .38, .76)
+
+ AtlasMap:SetDrawLayer("ARTWORK")
+ AtlasMap:CreateBackdrop()
+
+ hooksecurefunc("Atlas_UpdateLock", function()
+ AtlasLockNorm:SetDesaturated(true)
+ AtlasLockPush:SetDesaturated(true)
+ end)
+ Atlas_UpdateLock()
+
+ S:HandleDropDownBox(AtlasFrameDropDownType)
+ S:HandleDropDownBox(AtlasFrameDropDown)
+
+ S:HandleEditBox(AtlasSearchEditBox)
+ AtlasSearchEditBox:Height(22)
+
+ S:HandleButton(AtlasSwitchButton)
+ S:HandleButton(AtlasSearchButton)
+ S:HandleButton(AtlasSearchClearButton)
+ S:HandleButton(AtlasFrameOptionsButton)
+
+ S:HandleScrollBar(AtlasScrollBarScrollBar)
+
+ AtlasFrameDropDownType:Point("TOPLEFT", 24, -40)
+ AtlasFrameDropDown:Point("LEFT", AtlasFrameDropDownType, "RIGHT", 2, 0)
+
+ AtlasFrameOptionsButton:Point("TOPRIGHT", -14, -43)
+
+ AtlasMap:Point("TOPLEFT", 15, -74)
+ AtlasMap.ClearAllPoints = E.noop
+ AtlasMap.SetPoint = E.noop
+
+ AtlasSwitchButton:Height(24)
+ AtlasSearchButton:Height(24)
+ AtlasSearchClearButton:Size(62, 24)
+
+ AtlasSearchEditBox:Point("BOTTOMRIGHT", -152, 15)
+ AtlasSwitchButton:Point("RIGHT", AtlasSearchEditBox, "LEFT", -4, 0)
+ AtlasSearchButton:Point("LEFT", AtlasSearchEditBox, "RIGHT", 4, 0)
+ AtlasSearchClearButton:Point("LEFT", AtlasSearchButton, "RIGHT", 3, 0)
+
+ AtlasScrollBarScrollBar:Point("TOPLEFT", AtlasScrollBar, "TOPRIGHT", 8, -16)
+ AtlasScrollBarScrollBar:Point("BOTTOMLEFT", AtlasScrollBar, "BOTTOMRIGHT", 8, 16)
+
+ -- options
+ S:HandleCheckBox(AtlasOptionsFrameToggleButton)
+ S:HandleCheckBox(AtlasOptionsFrameAutoSelect)
+ S:HandleCheckBox(AtlasOptionsFrameRightClick)
+ S:HandleCheckBox(AtlasOptionsFrameAcronyms)
+ S:HandleCheckBox(AtlasOptionsFrameClamped)
+ S:HandleCheckBox(AtlasOptionsFrameCtrl)
+
+ S:HandleSliderFrame(AtlasOptionsFrameSliderButtonPos)
+ S:HandleSliderFrame(AtlasOptionsFrameSliderButtonRad)
+ S:HandleSliderFrame(AtlasOptionsFrameSliderAlpha)
+ S:HandleSliderFrame(AtlasOptionsFrameSliderScale)
+
+ S:HandleDropDownBox(AtlasOptionsFrameDropDownCats)
+
+ S:HandleButton(AtlasOptionsFrameResetPosition)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/atlasLoot.lua b/ElvUI_AddOnSkins/Skins/Addons/atlasLoot.lua
new file mode 100644
index 0000000..3165c25
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/atlasLoot.lua
@@ -0,0 +1,191 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("AtlasLoot") then return end
+
+local select = select
+local unpack = unpack
+
+-- AtlasLoot Enhanced 5.11.04
+-- https://www.curseforge.com/wow/addons/atlasloot-enhanced/files/445202
+
+S:AddCallbackForAddon("AtlasLoot", "AtlasLoot", function()
+ if not E.private.addOnSkins.AtlasLoot then return end
+
+ AtlasLootTooltip:HookScript("OnShow", function(self)
+ self:SetTemplate("Transparent", nil, true)
+
+ local r, g, b = self:GetBackdropColor()
+ self:SetBackdropColor(r, g, b, E.db.tooltip.colorAlpha)
+
+ local iLink = select(2, self:GetItem())
+ local quality = iLink and select(3, GetItemInfo(iLink))
+ if quality and quality >= 2 then
+ self:SetBackdropBorderColor(GetItemQualityColor(quality))
+ else
+ self:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+ end)
+
+ AtlasLootDefaultFrame:StripTextures()
+ AtlasLootDefaultFrame:SetTemplate("Transparent")
+
+ S:HandleCloseButton(AtlasLootDefaultFrame_CloseButton, AtlasLootDefaultFrame)
+
+ S:HandleButton(AtlasLootDefaultFrame_Options)
+ S:HandleButton(AtlasLootDefaultFrame_LoadModules)
+ S:HandleButton(AtlasLootDefaultFrame_Menu)
+ S:HandleButton(AtlasLootDefaultFrame_SubMenu)
+
+ AtlasLootDefaultFrame_LootBackground_Back:SetTexture()
+ AtlasLootDefaultFrame_LootBackground:SetTemplate("Transparent")
+
+ S:HandleButton(AtlasLootDefaultFrame_Preset1)
+ S:HandleButton(AtlasLootDefaultFrame_Preset2)
+ S:HandleButton(AtlasLootDefaultFrame_Preset3)
+ S:HandleButton(AtlasLootDefaultFrame_Preset4)
+
+ S:HandleButton(AtlasLootDefaultFrameWishListButton)
+ S:HandleEditBox(AtlasLootDefaultFrameSearchBox)
+ S:HandleButton(AtlasLootDefaultFrameSearchButton)
+ S:HandleNextPrevButton(AtlasLootDefaultFrameSearchOptionsButton)
+ S:HandleButton(AtlasLootDefaultFrameSearchClearButton)
+ S:HandleButton(AtlasLootDefaultFrameLastResultButton)
+
+ AtlasLootDefaultFrame_Options:Point("TOPLEFT", 43, -11)
+ AtlasLootDefaultFrame_LoadModules:Point("TOPRIGHT", -42, -11)
+
+ AtlasLootDefaultFrame_Preset1:Point("BOTTOMLEFT", 83, 59)
+
+ AtlasLootDefaultFrameSearchBox:Height(22)
+ AtlasLootDefaultFrameSearchBox:Point("BOTTOM", AtlasLootDefaultFrame, "BOTTOM", -83, 29)
+
+ AtlasLootDefaultFrameSearchButton:Point("LEFT", AtlasLootDefaultFrameSearchBox, "RIGHT", 6, 0)
+
+ AtlasLootDefaultFrameSearchOptionsButton:Size(24)
+ AtlasLootDefaultFrameSearchOptionsButton:Point("LEFT", AtlasLootDefaultFrameSearchButton, "RIGHT", 5, 0)
+ AtlasLootDefaultFrameSearchClearButton:Point("LEFT", AtlasLootDefaultFrameSearchOptionsButton, "RIGHT", 5, 0)
+ AtlasLootDefaultFrameLastResultButton:Point("LEFT", AtlasLootDefaultFrameSearchClearButton, "RIGHT", 5, 0)
+ AtlasLootDefaultFrameWishListButton:Point("RIGHT", AtlasLootDefaultFrameSearchBox, "LEFT", -6, 0)
+
+ AtlasLootDefaultFrame_Notice:Point("BOTTOM", 0, 9)
+
+ S:HandleCloseButton(AtlasLootItemsFrame_CloseButton)
+
+ S:HandleButton(AtlasLootInfoHidePanel)
+
+ for i = 1, 30 do
+ _G["AtlasLootItem_" .. i .. "_Icon"]:SetTexCoord(unpack(E.TexCoords))
+ _G["AtlasLootItem_" .. i]:CreateBackdrop("Default")
+ _G["AtlasLootItem_" .. i].backdrop:SetOutside(_G["AtlasLootItem_" .. i .. "_Icon"])
+
+ _G["AtlasLootMenuItem_" .. i .. "_Icon"]:SetTexCoord(unpack(E.TexCoords))
+ _G["AtlasLootMenuItem_" .. i]:CreateBackdrop("Default")
+ _G["AtlasLootMenuItem_" .. i].backdrop:SetOutside(_G["AtlasLootMenuItem_" .. i .. "_Icon"])
+ end
+
+ S:HandleButton(AtlasLoot10Man25ManSwitch)
+ S:HandleButton(AtlasLootServerQueryButton)
+ S:HandleCheckBox(AtlasLootItemsFrame_Heroic)
+ S:HandleCheckBox(AtlasLootFilterCheck)
+ S:HandleButton(AtlasLootItemsFrame_BACK)
+ S:HandleNextPrevButton(AtlasLootQuickLooksButton)
+ S:HandleNextPrevButton(AtlasLootItemsFrame_PREV)
+ S:HandleNextPrevButton(AtlasLootItemsFrame_NEXT)
+
+ AtlasLootItemsFrame_Back:SetTexture()
+
+ AtlasLoot10Man25ManSwitch:Height(24)
+ AtlasLootServerQueryButton:Height(24)
+ AtlasLootItemsFrame_BACK:Height(24)
+
+ AtlasLoot10Man25ManSwitch:Point("BOTTOM", -130, 3)
+ AtlasLootServerQueryButton:Point("BOTTOM", 131, 3)
+ AtlasLootItemsFrame_BACK:Point("BOTTOM", 0, 3)
+
+ AtlasLootItemsFrame_Heroic:Point("BOTTOM", -185, 28)
+ AtlasLootFilterCheck:Point("BOTTOM", 115, 28)
+ AtlasLootQuickLooksButton:Point("BOTTOM", 58, 32)
+
+ AtlasLootItemsFrame_PREV:Point("BOTTOMLEFT", 7, 6)
+ AtlasLootItemsFrame_NEXT:Point("BOTTOMRIGHT", -6, 6)
+
+ S:HandleCheckBox(AtlasLootOptionsFrameDefaultTT)
+ S:HandleCheckBox(AtlasLootOptionsFrameLootlinkTT)
+ S:HandleCheckBox(AtlasLootOptionsFrameItemSyncTT)
+ S:HandleCheckBox(AtlasLootOptionsFrameOpaque)
+ S:HandleCheckBox(AtlasLootOptionsFrameItemID)
+ S:HandleCheckBox(AtlasLootOptionsFrameLoDStartup)
+ S:HandleCheckBox(AtlasLootOptionsFrameSafeLinks)
+ S:HandleCheckBox(AtlasLootOptionsFrameEquipCompare)
+ S:HandleCheckBox(AtlasLootOptionsFrameItemSpam)
+ S:HandleCheckBox(AtlasLootOptionsFrameHidePanel)
+
+ S:HandleDropDownBox(AtlasLoot_SelectLootBrowserStyle)
+ S:HandleDropDownBox(AtlasLoot_CraftingLink)
+
+ S:HandleSliderFrame(AtlasLootOptionsFrameLootBrowserScale)
+
+ S:HandleButton(AtlasLootOptionsFrame_ResetWishlist)
+ S:HandleButton(AtlasLootOptionsFrame_ResetAtlasLoot)
+ S:HandleButton(AtlasLootOptionsFrame_ResetQuicklooks)
+ S:HandleButton(AtlasLootOptionsFrame_FuBarShow)
+ S:HandleButton(AtlasLootOptionsFrame_FuBarHide)
+
+ AtlasLootPanel:StripTextures()
+ AtlasLootPanel:SetTemplate("Transparent")
+
+ S:HandleButton(AtlasLootPanel_WorldEvents)
+ AtlasLootPanel_WorldEvents:Point("LEFT", AtlasLootPanel, "LEFT", 7, 29)
+ S:HandleButton(AtlasLootPanel_Sets)
+ AtlasLootPanel_Sets:Point("LEFT", AtlasLootPanel_WorldEvents, "RIGHT", 2, 0)
+ S:HandleButton(AtlasLootPanel_Reputation)
+ AtlasLootPanel_Reputation:Point("LEFT", AtlasLootPanel_Sets, "RIGHT", 2, 0)
+ S:HandleButton(AtlasLootPanel_PvP)
+ AtlasLootPanel_PvP:Point("LEFT", AtlasLootPanel_Reputation, "RIGHT", 2, 0)
+ S:HandleButton(AtlasLootPanel_Crafting)
+ AtlasLootPanel_Crafting:Point("LEFT", AtlasLootPanel_PvP, "RIGHT", 2, 0)
+ S:HandleButton(AtlasLootPanel_WishList)
+ AtlasLootPanel_WishList:Point("LEFT", AtlasLootPanel_Crafting, "RIGHT", 2, 0)
+ S:HandleButton(AtlasLootPanel_Options)
+ S:HandleButton(AtlasLootPanel_LoadModules)
+ S:HandleButton(AtlasLootPanel_Preset1)
+ S:HandleButton(AtlasLootPanel_Preset2)
+ S:HandleButton(AtlasLootPanel_Preset3)
+ S:HandleButton(AtlasLootPanel_Preset4)
+
+ S:HandleEditBox(AtlasLootSearchBox)
+ AtlasLootSearchBox:Height(20)
+ S:HandleButton(AtlasLootSearchButton)
+ AtlasLootSearchButton:Height(22)
+ AtlasLootSearchButton:Point("LEFT", AtlasLootSearchBox, "RIGHT", 3, 0)
+ S:HandleNextPrevButton(AtlasLootSearchOptionsButton)
+ AtlasLootSearchOptionsButton:Point("LEFT", AtlasLootSearchButton, "RIGHT", 2, 0)
+ S:HandleButton(AtlasLootSearchClearButton)
+ AtlasLootSearchClearButton:Height(22)
+ AtlasLootSearchClearButton:Point("LEFT", AtlasLootSearchOptionsButton, "RIGHT", 2, 0)
+ S:HandleButton(AtlasLootLastResultButton)
+ AtlasLootLastResultButton:Height(22)
+ AtlasLootLastResultButton:Point("LEFT", AtlasLootSearchClearButton, "RIGHT", 2, 0)
+
+ if AS:IsAddonEnabled("Atlas") then
+ hooksecurefunc("AtlasLoot_SetupForAtlas", function()
+ AtlasLootInfo:Point("TOPLEFT", 546, 15)
+ AtlasLootPanel:Point("TOP", "AtlasFrame", "BOTTOM", 0, 1)
+ end)
+
+ hooksecurefunc("AtlasLoot_SetItemInfoFrame", function(pFrame)
+ if not pFrame or pFrame == AtlasFrame then
+ AtlasLootItemsFrame:Point("TOPLEFT", 15, -74)
+ end
+ end)
+ end
+
+ AS:SkinLibrary("Dewdrop-2.0")
+end)
+
+S:AddCallbackForAddon("AtlasLootFu", "AtlasLootFu", function()
+ AS:SkinLibrary("AceAddon-2.0")
+ AS:SkinLibrary("Tablet-2.0")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/atlasQuest.lua b/ElvUI_AddOnSkins/Skins/Addons/atlasQuest.lua
new file mode 100644
index 0000000..e0dc95c
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/atlasQuest.lua
@@ -0,0 +1,111 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("AtlasQuest") then return end
+
+-- AtlasQuest 4.4.3
+-- https://www.curseforge.com/wow/addons/atlas-quest-fan-update/files/442800
+
+S:AddCallbackForAddon("AtlasQuest", "AtlasQuest", function()
+ if not E.private.addOnSkins.AtlasQuest then return end
+
+ local buttons = {
+ STORYbutton,
+ OPTIONbutton,
+ CLOSEbutton3,
+ AQOptionCloseButton,
+ }
+
+ local checkBoxes = {
+ AQACB,
+ AQHCB,
+ AQFinishedQuest,
+ AQAutoshowOption,
+ AQLEFTOption,
+ AQRIGHTOption,
+ AQColourOption,
+ AQCheckQuestlogButton,
+ AQAutoQueryOption,
+ AQNoQuerySpamOption,
+ AQCompareTooltipOption,
+ }
+
+ for _, button in ipairs(buttons) do
+ S:HandleButton(button)
+ end
+ for _, checkBox in ipairs(checkBoxes) do
+ S:HandleCheckBox(checkBox)
+ end
+
+ AtlasQuestFrame:StripTextures()
+ AtlasQuestFrame:SetTemplate("Transparent")
+ AtlasQuestFrame:ClearAllPoints()
+ AtlasQuestFrame:Point("BOTTOMRIGHT", AtlasFrame, "BOTTOMLEFT", 1, 0)
+
+ AQ_HordeTexture:SetTexture("Interface\\TargetingFrame\\UI-PVP-HORDE")
+ AQ_AllianceTexture:SetTexture("Interface\\TargetingFrame\\UI-PVP-ALLIANCE")
+
+ if AtlasMap then
+ AtlasQuestInsideFrame:SetAllPoints(AtlasMap)
+ end
+
+ AtlasQuestOptionFrame:StripTextures()
+ AtlasQuestOptionFrame:SetTemplate("Transparent")
+
+ S:HandleCloseButton(CLOSEbutton)
+ CLOSEbutton:Point("TOPLEFT", 1, 0)
+
+ S:HandleCloseButton(CLOSEbutton2, AtlasQuestInsideFrame)
+
+ E:GetModule("Tooltip"):HookScript(AtlasQuestTooltip, "OnShow", "SetStyle")
+
+ for i = 1, 6 do
+ _G["AtlasQuestItemframe"..i.."_Icon"]:SetTexCoord(unpack(E.TexCoords))
+ end
+
+ hooksecurefunc("AQLEFTOption_OnClick", function()
+ if not AtlasFrame then return end
+ AtlasQuestFrame:ClearAllPoints()
+ AtlasQuestFrame:Point("BOTTOMRIGHT", AtlasFrame, "BOTTOMLEFT", 1, 0)
+ end)
+
+ hooksecurefunc("AQRIGHTOption_OnClick", function()
+ if not AtlasFrame then return end
+ AtlasQuestFrame:ClearAllPoints()
+ AtlasQuestFrame:Point("BOTTOMLEFT", AtlasFrame, "BOTTOMRIGHT", -1, 0)
+ end)
+
+ AQ_AtlasOrAlphamap = function()
+ if AtlasFrame and AtlasFrame:IsVisible() then
+ AtlasORAlphaMap = "Atlas"
+ AtlasQuestFrame:SetParent(AtlasFrame)
+
+ if AQ_ShownSide == "Right" then
+ AtlasQuestFrame:ClearAllPoints()
+ AtlasQuestFrame:Point("BOTTOMLEFT", AtlasFrame, "BOTTOMRIGHT", -1, 0)
+ else
+ AtlasQuestFrame:ClearAllPoints()
+ AtlasQuestFrame:Point("BOTTOMRIGHT", AtlasFrame, "BOTTOMLEFT", 1, 0)
+ end
+
+ AtlasQuestInsideFrame:SetParent(AtlasFrame)
+ AtlasQuestInsideFrame:SetAllPoints(AtlasMap)
+ elseif AlphaMapFrame and AlphaMapFrame:IsVisible() then
+ AtlasORAlphaMap = "AlphaMap"
+ AtlasQuestFrame:SetParent(AlphaMapFrame)
+
+ if AQ_ShownSide == "Right" then
+ AtlasQuestFrame:ClearAllPoints()
+ AtlasQuestFrame:Point("TOP", "AlphaMapFrame", 400, -107)
+ else
+ AtlasQuestFrame:ClearAllPoints()
+ AtlasQuestFrame:Point("TOPLEFT", "AlphaMapFrame", -195, -107)
+ end
+
+ AtlasQuestInsideFrame:SetParent(AlphaMapFrame)
+ AtlasQuestInsideFrame:ClearAllPoints()
+ AtlasQuestInsideFrame:Point("TOPLEFT", "AlphaMapFrame", 1, -108)
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/auctionator.lua b/ElvUI_AddOnSkins/Skins/Addons/auctionator.lua
new file mode 100644
index 0000000..e7d8f40
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/auctionator.lua
@@ -0,0 +1,416 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Auctionator") then return end
+
+local _G = _G
+local type = type
+local unpack = unpack
+
+local GetItemIcon = GetItemIcon
+local GetItemInfo = GetItemInfo
+local GetItemQualityColor = GetItemQualityColor
+
+-- Auctionator 2.6.3
+-- https://www.curseforge.com/wow/addons/auctionator/files/426882
+
+S:AddCallbackForAddon("Auctionator", "Auctionator", function()
+ if not E.private.addOnSkins.Auctionator then return end
+
+ -- Error Frame
+ Atr_Error_Frame:SetTemplate("Transparent")
+ S:HandleButton((Atr_Error_Frame:GetChildren()))
+
+ -- BuyConfirm Frame
+ Atr_Buy_Confirm_Frame:SetTemplate("Transparent")
+
+ S:HandleEditBox(Atr_Buy_Confirm_Numstacks)
+
+ S:HandleButton(Atr_Buy_Confirm_OKBut)
+ S:HandleButton(Atr_Buy_Confirm_CancelBut)
+
+ -- Advanced Search
+ Atr_Adv_Search_Dialog:StripTextures()
+ Atr_Adv_Search_Dialog:SetTemplate("Transparent")
+ Atr_Adv_Search_Dialog:Point("TOPLEFT", 215, -183)
+
+ S:HandleEditBox(Atr_AS_Searchtext)
+ S:HandleEditBox(Atr_AS_Minlevel)
+ S:HandleEditBox(Atr_AS_Maxlevel)
+
+ S:HandleDropDownBox(Atr_ASDD_Class, 180)
+ S:HandleDropDownBox(Atr_ASDD_Subclass, 180)
+
+ S:HandleButton(Atr_Adv_Search_ResetBut)
+ S:HandleButton(Atr_Adv_Search_OKBut)
+ S:HandleButton(Atr_Adv_Search_CancelBut)
+
+ hooksecurefunc("Atr_FullScanAnalyze", function()
+ Atr_FullScanResults:SetBackdropColor(unpack(E.media.backdropfadecolor))
+ end)
+
+ -- Full Scan
+ Atr_FullScanFrame:StripTextures()
+ Atr_FullScanFrame:SetTemplate("Transparent")
+ Atr_FullScanFrame:Height(424)
+ Atr_FullScanFrame:Point("TOPLEFT", 215, -116)
+
+ Atr_FullScanResults:SetTemplate("Transparent")
+
+ S:HandleButton(Atr_FullScanStartButton)
+ S:HandleButton(Atr_FullScanDone)
+
+ hooksecurefunc("Atr_ShowFullScanFrame", function()
+ Atr_FullScanFrame:SetBackdropColor(unpack(E.media.backdropfadecolor))
+ end)
+
+ -- Check Actives
+ Atr_CheckActives_Frame:StripTextures()
+ Atr_CheckActives_Frame:SetTemplate("Transparent")
+
+ local checkActivesButton1, checkActivesButton2 = Atr_CheckActives_Frame:GetChildren()
+ S:HandleButton(checkActivesButton1)
+ S:HandleButton(checkActivesButton2)
+
+ -- Confirm Frame
+ Atr_Confirm_Frame:SetTemplate("Transparent")
+ S:HandleButton(Atr_Confirm_Cancel)
+ S:HandleButton((select(2, Atr_Confirm_Frame:GetChildren())))
+
+ local SELL_TAB = 1
+ local BUY_TAB = 3
+ hooksecurefunc("Atr_AuctionFrameTab_OnClick", function(self, index, down)
+ if not index or type(index) == "string" then
+ index = self:GetID()
+ end
+
+ if Atr_IsAuctionatorTab(index) then
+ if index == Atr_FindTabIndex(BUY_TAB) then
+ Atr_Hlist:Height(242)
+ Atr_Hlist_ScrollFrame:Height(242)
+ else
+ Atr_Hlist:Height(330)
+ Atr_Hlist_ScrollFrame:Height(330)
+
+ if index == Atr_FindTabIndex(SELL_TAB) then
+ Atr_Hlist_ScrollFrame:_Hide()
+ AuctionFrameMoneyFrame:Show()
+ end
+ end
+ end
+ end)
+
+ hooksecurefunc("Atr_SetTextureButton", function(elementName, count, itemlink)
+ local button = _G[elementName]
+ local buttonName = _G[elementName.."Name"]
+
+ if GetItemIcon(itemlink) then
+ local _, _, quality = GetItemInfo(itemlink)
+ if quality then
+ local r, g, b = GetItemQualityColor(quality)
+
+ button:SetBackdropBorderColor(r, g, b)
+ if buttonName then
+ buttonName:SetTextColor(r, g, b)
+ end
+ else
+ button:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ if buttonName then
+ buttonName:SetTextColor(1, 0.82, 0)
+ end
+ end
+ else
+ button:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ if buttonName then
+ buttonName:SetTextColor(1, 0.82, 0)
+ end
+ end
+ end)
+
+ local function itemButtomSetNormalTexture(self, texture)
+ self.normalTexture:SetTexture(texture)
+ end
+ local function skinItemButtom(frame)
+ frame:StripTextures()
+ frame:SetTemplate("Default", true)
+ frame:StyleButton(nil, true)
+
+ frame:SetNormalTexture("")
+ frame.normalTexture = frame:GetNormalTexture()
+ frame.normalTexture:SetTexCoord(unpack(E.TexCoords))
+ frame.normalTexture:SetInside()
+ frame.SetNormalTexture = itemButtomSetNormalTexture
+ end
+
+ local function skinButtonHighlight(button)
+ local highlight = button:GetHighlightTexture()
+ highlight:SetTexCoord(0, 1, 0, 1)
+ highlight:SetTexture(E.Media.Textures.Highlight)
+ highlight:SetVertexColor(0.9, 0.9, 0.9, 0.35)
+
+ local pushed = button:GetPushedTexture()
+ pushed:SetTexCoord(0, 1, 0, 1)
+ pushed:SetTexture(E.Media.Textures.Highlight)
+ pushed:SetVertexColor(0.9, 0.9, 0.9, 0.35)
+ end
+
+ S:SecureHook("Atr_Init", function()
+ S:Unhook("Atr_Init")
+
+ if not E.private.skins.blizzard.enable or not E.private.skins.blizzard.auctionhouse then
+ for i = AuctionFrame.numTabs - 2, AuctionFrame.numTabs do
+ local tab = _G["AuctionFrameTab"..i]
+ S:HandleTab(tab)
+ tab:Point("LEFT", _G["AuctionFrameTab"..(i - 1)], "RIGHT", -15, 0)
+ end
+ end
+
+ Atr_Main_Panel:Size(412, 424)
+
+ Atr_Mask:Size(819, 422)
+ Atr_Mask:Point("TOPLEFT", 12, -117)
+
+ AuctionatorTitle:Point("TOP", 0, -5)
+
+ S:HandleButton(Atr_FullScanButton)
+ Atr_FullScanButton:Height(22)
+ Atr_FullScanButton:Point("RIGHT", Auctionator1Button, "LEFT", -5, 0)
+
+ S:HandleButton(Auctionator1Button)
+ Auctionator1Button:Height(22)
+ Auctionator1Button:Point("LEFT", Atr_Search_Button, "RIGHT", 177, 0)
+
+ S:HandleButton(AuctionatorCloseButton)
+ S:HandleButton(Atr_CancelSelectionButton)
+ S:HandleButton(Atr_Buy1_Button)
+
+ AuctionatorCloseButton:Point("BOTTOMRIGHT", 202, 8)
+ Atr_Buy1_Button:Point("RIGHT", AuctionatorCloseButton, "LEFT", -5, 0)
+ Atr_CancelSelectionButton:Point("RIGHT", Atr_Buy1_Button, "LEFT", -5, 0)
+
+ -- Left panel
+ Atr_Hlist:StripTextures()
+ Atr_Hlist:SetTemplate("Transparent")
+ Atr_Hlist:Width(172)
+ Atr_Hlist:Point("TOPLEFT", -191, -57)
+
+ Atr_Hlist_ScrollFrame:Width(172)
+ Atr_Hlist_ScrollFrame:Point("TOPLEFT", -191, -57)
+ Atr_Hlist_ScrollFrame._Hide = Atr_Hlist_ScrollFrame.Hide
+ Atr_Hlist_ScrollFrame.Hide = E.noop
+
+ S:HandleScrollBar(Atr_Hlist_ScrollFrameScrollBar)
+ Atr_Hlist_ScrollFrameScrollBar:Point("TOPLEFT", Atr_Hlist_ScrollFrame, "TOPRIGHT", 3, -19)
+ Atr_Hlist_ScrollFrameScrollBar:Point("BOTTOMLEFT", Atr_Hlist_ScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ for i = 1, 20 do -- ITEM_HIST_NUM_LINES
+ local button = _G["AuctionatorHEntry"..i]
+
+ button:Width(170)
+ skinButtonHighlight(button)
+
+ _G["AuctionatorHEntry"..i.."_EntryText"]:Width(168)
+
+ if i == 1 then
+ button:Point("TOPLEFT", 1, -1)
+ else
+ button:Point("TOPLEFT", 1, -1 - (i - 1) * 16)
+ end
+ end
+
+ -- Right panel
+ Atr_Hilite1:SetTemplate("Transparent", nil, true)
+ Atr_Hilite1:SetBackdropColor(0, 0, 0, 0)
+ Atr_Hilite1:Height(112)
+ Atr_Hilite1:Point("TOPLEFT", 5, -57)
+ Atr_Hilite1:Point("RIGHT", 202, 0)
+
+ skinItemButtom(Atr_RecommendItem_Tex)
+
+ AuctionatorMessageFrame:Point("TOP", 100, -65)
+ AuctionatorMessage2Frame:Point("TOP", 100, -55)
+
+ for i = 1, 3 do
+ local tab = _G["Atr_ListTabsTab"..i]
+ tab:StripTextures()
+ S:HandleButton(tab)
+ tab:Height(22)
+
+ if i ~= 3 then
+ tab:Point("RIGHT", _G["Atr_ListTabsTab"..(i + 1)], "LEFT", -3, 0)
+ end
+ end
+
+ Atr_HeadingsBar:StripTextures()
+ Atr_HeadingsBar:Point("TOPLEFT", 6, -152)
+ Atr_HeadingsBar:CreateBackdrop("Transparent")
+ Atr_HeadingsBar.backdrop:Point("TOPLEFT", -1, -41)
+ Atr_HeadingsBar.backdrop:Point("BOTTOMRIGHT", 3, -171)
+
+ Atr_ListTabs:Point("BOTTOMRIGHT", Atr_HeadingsBar, "TOPRIGHT", 11, -22)
+
+ AuctionatorScrollFrame:Height(194)
+ AuctionatorScrollFrame:Point("TOPLEFT", 5, -193)
+
+ S:HandleScrollBar(AuctionatorScrollFrameScrollBar)
+ AuctionatorScrollFrameScrollBar:Point("TOPLEFT", AuctionatorScrollFrame, "TOPRIGHT", 3, -19)
+ AuctionatorScrollFrameScrollBar:Point("BOTTOMLEFT", AuctionatorScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ for _, tab in ipairs({Atr_Col1_Heading_Button, Atr_Col3_Heading_Button}) do
+ tab:StripTextures()
+ tab:SetNormalTexture([[Interface\Buttons\UI-SortArrow]])
+ tab:StyleButton()
+ end
+
+ AuctionatorEntry1:Point("TOPLEFT", AuctionatorScrollFrame, "TOPLEFT", 1, -1)
+
+ for i = 1, 12 do
+ local button = _G["AuctionatorEntry"..i]
+ button:Width(586)
+ skinButtonHighlight(button)
+ end
+
+ AuctionatorScrollFrame:HookScript("OnShow", function(self)
+ Atr_HeadingsBar.backdrop:Point("BOTTOMRIGHT", -18, -171)
+ end)
+ AuctionatorScrollFrame:HookScript("OnHide", function(self)
+ Atr_HeadingsBar.backdrop:Point("BOTTOMRIGHT", 3, -171)
+ end)
+
+ -- Buy tab
+ S:HandleDropDownBox(Atr_DropDownSL, 221)
+ Atr_DropDownSL:Point("TOPLEFT", -211, -29)
+
+ S:HandleEditBox(Atr_Search_Box)
+ S:HandleButton(Atr_Search_Button)
+ S:HandleButton(Atr_Adv_Search_Button)
+
+ Atr_Search_Box:Point("TOPLEFT", 20, -32)
+ Atr_Search_Button:Point("LEFT", Atr_Search_Box, "RIGHT", 6, 0)
+
+ Atr_Adv_Search_Button:Height(22)
+ Atr_Adv_Search_Button:Point("LEFT", Atr_Search_Button, "RIGHT", 5, 0)
+
+ S:HandleButton(Atr_AddToSListButton)
+ Atr_AddToSListButton:Width(193)
+ Atr_AddToSListButton:Point("TOPLEFT", -191, -304)
+
+ S:HandleButton(Atr_RemFromSListButton)
+ Atr_RemFromSListButton:Width(193)
+ Atr_RemFromSListButton:Point("TOPLEFT", -191, -325)
+
+ S:HandleButton(Atr_DelSListButton)
+ Atr_DelSListButton:Width(193)
+ Atr_DelSListButton:Point("TOPLEFT", -191, -346)
+
+ S:HandleButton(Atr_NewSListButton)
+ Atr_NewSListButton:Width(193)
+ Atr_NewSListButton:Point("TOPLEFT", -191, -367)
+
+ S:HandleButton(Atr_Back_Button)
+ Atr_Back_Button:Height(22)
+ Atr_Back_Button:Point("TOPLEFT", 7, 13)
+
+ -- Sell tab
+ Atr_SellControls:SetTemplate("Transparent")
+ Atr_SellControls:Size(193, 330)
+ Atr_SellControls:Point("TOPLEFT", -191, -57)
+
+ skinItemButtom(Atr_SellControls_Tex)
+ Atr_SellControls_Tex:Point("TOPLEFT", 11, -14)
+
+ Atr_StackPriceText:Point("TOPLEFT", 7, -56)
+ Atr_ItemPriceText:Point("TOPLEFT", 7, -96)
+
+ S:HandleButton(Atr_CreateAuctionButton)
+ Atr_CreateAuctionButton:Point("TOPLEFT", 4, -139)
+
+ Atr_Batch_Stacksize_Text:Point("TOPLEFT", 55, -177)
+ Atr_Batch_NumAuctions:Point("TOPLEFT", Atr_Batch_Stacksize_Text, "TOPLEFT", -41, 0)
+
+ Atr_Batch_MaxAuctions_Text:ClearAllPoints()
+ Atr_Batch_MaxAuctions_Text:Point("BOTTOM", Atr_Batch_NumAuctions, 0, -14)
+ Atr_Batch_MaxStacksize_Text:ClearAllPoints()
+ Atr_Batch_MaxStacksize_Text:Point("BOTTOM", Atr_Batch_Stacksize, 0, -14)
+
+ Atr_StartingPriceText:Point("TOPLEFT", 13, -229)
+ Atr_StartingPriceDiscountText:Point("TOPLEFT", 10, -238)
+
+ Atr_Duration_Text:Point("TOPLEFT", 10, -276)
+ Atr_Duration_Text.SetPoint = E.noop
+ S:HandleDropDownBox(Atr_Duration, 130)
+
+ Atr_Deposit_Text:Point("TOPLEFT", 10, -304)
+
+ S:HandleEditBox(Atr_StackPriceGold)
+ S:HandleEditBox(Atr_StackPriceSilver)
+ S:HandleEditBox(Atr_StackPriceCopper)
+ S:HandleEditBox(Atr_ItemPriceGold)
+ S:HandleEditBox(Atr_ItemPriceSilver)
+ S:HandleEditBox(Atr_ItemPriceCopper)
+ S:HandleEditBox(Atr_StartingPriceGold)
+ S:HandleEditBox(Atr_StartingPriceSilver)
+ S:HandleEditBox(Atr_StartingPriceCopper)
+ S:HandleEditBox(Atr_Batch_NumAuctions)
+ S:HandleEditBox(Atr_Batch_Stacksize)
+
+ -- More tab
+ S:HandleDropDownBox(Atr_DropDown1, 221)
+ Atr_DropDown1:Point("TOPLEFT", -211, -29)
+
+ S:HandleButton(Atr_CheckActiveButton)
+ Atr_CheckActiveButton:Size(193, 22)
+ Atr_CheckActiveButton:Point("TOPLEFT", -191, -394)
+
+ if Atr_CancelAllUndercutsButton then
+ S:HandleButton(Atr_CancelAllUndercutsButton)
+ Atr_CancelAllUndercutsButton:Height(22)
+ Atr_CancelAllUndercutsButton:Point("TOPLEFT", 7, -394)
+ end
+ end)
+
+ -- Config
+ Atr_BasicOptionsFrame:SetTemplate("Transparent")
+ Atr_TooltipsOptionsFrame:SetTemplate("Transparent")
+ Atr_UCConfigFrame:SetTemplate("Transparent")
+ Atr_StackingOptionsFrame:SetTemplate("Transparent")
+ Atr_ScanningOptionsFrame:SetTemplate("Transparent")
+ AuctionatorDescriptionFrame:SetTemplate("Transparent")
+
+ Atr_Stacking_List:SetTemplate("Transparent")
+
+ S:HandleCheckBox(AuctionatorOption_Enable_Alt_CB)
+ S:HandleCheckBox(AuctionatorOption_Open_All_Bags_CB)
+ S:HandleCheckBox(AuctionatorOption_Show_StartingPrice_CB)
+ S:HandleCheckBox(AuctionatorOption_Def_Duration_CB)
+ S:HandleCheckBox(ATR_tipsVendorOpt_CB)
+ S:HandleCheckBox(ATR_tipsAuctionOpt_CB)
+ S:HandleCheckBox(ATR_tipsDisenchantOpt_CB)
+
+ S:HandleDropDownBox(AuctionatorOption_Deftab)
+ S:HandleDropDownBox(Atr_tipsShiftDD)
+ S:HandleDropDownBox(Atr_deDetailsDD, 220)
+ S:HandleDropDownBox(Atr_scanLevelDD)
+ Atr_deDetailsDDText:SetJustifyH("RIGHT")
+
+ local moneyEditBoxes = {
+ "UC_5000000_MoneyInput",
+ "UC_1000000_MoneyInput",
+ "UC_200000_MoneyInput",
+ "UC_50000_MoneyInput",
+ "UC_10000_MoneyInput",
+ "UC_2000_MoneyInput",
+ "UC_500_MoneyInput",
+ }
+ for _, name in ipairs(moneyEditBoxes) do
+ S:HandleEditBox(_G[name.."Gold"])
+ S:HandleEditBox(_G[name.."Silver"])
+ S:HandleEditBox(_G[name.."Copper"])
+ end
+ S:HandleEditBox(Atr_Starting_Discount)
+
+ S:HandleButton(Atr_UCConfigFrame_Reset)
+ S:HandleButton(Atr_StackingOptionsFrame_Edit)
+ S:HandleButton(Atr_StackingOptionsFrame_New)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/auctioneerSuite.lua b/ElvUI_AddOnSkins/Skins/Addons/auctioneerSuite.lua
new file mode 100644
index 0000000..6bb5695
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/auctioneerSuite.lua
@@ -0,0 +1,651 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Auc-Advanced") then return end
+
+local unpack = unpack
+
+local hooksecurefunc = hooksecurefunc
+
+-- AuctioneerSuite 5.8.4723
+-- https://www.curseforge.com/wow/addons/auctioneer/files/427823
+
+S:AddCallbackForAddon("Auc-Advanced", "Auc-Advanced", function()
+ if not E.private.addOnSkins.AuctioneerSuite then return end
+
+ AS:SkinLibrary("Configator")
+ AS:SkinLibrary("LibExtraTip-1")
+
+ local function setMoneyBackdropColor(self, r, g, b, a)
+ if a == 0 then
+ r, g, b = unpack(E.media.bordercolor)
+ self.backdrop:SetBackdropBorderColor(r, g, b, 1)
+ else
+ self.backdrop:SetBackdropBorderColor(r, g, b, a)
+ end
+ end
+ local function skinMoneyFrame(obj, hookBackdropColor)
+ if obj.gold then
+ S:HandleEditBox(obj.gold)
+ if hookBackdropColor then
+ obj.gold:SetBackdrop(nil)
+ obj.gold.SetBackdropColor = setMoneyBackdropColor
+ end
+ end
+ if obj.silver then
+ S:HandleEditBox(obj.silver)
+ if hookBackdropColor then
+ obj.silver:SetBackdrop(nil)
+ obj.silver.SetBackdropColor = setMoneyBackdropColor
+ end
+ end
+ if obj.copper then
+ S:HandleEditBox(obj.copper)
+ if hookBackdropColor then
+ obj.copper:SetBackdrop(nil)
+ obj.copper.SetBackdropColor = setMoneyBackdropColor
+ end
+ end
+ end
+
+ local function skinEditBox(obj)
+ if not obj then return end
+
+ local objName = obj:GetName()
+ if objName then
+ _G[objName.."Left"]:Hide()
+ _G[objName.."Middle"]:Hide()
+ _G[objName.."Right"]:Hide()
+ else
+ for i = 1, obj:GetNumRegions() do
+ local region = select(i, obj:GetRegions())
+ if region.IsObjectType and region:IsObjectType("Texture") and region:GetTexture() == "Interface\\Common\\Common-Input-Border" then
+ region:Hide()
+ end
+ end
+ end
+
+ obj:Height(17)
+ obj:CreateBackdrop("Default")
+ obj.backdrop:Point("TOPLEFT", -2, 0)
+ obj.backdrop:Point("BOTTOMRIGHT", 2, 0)
+ obj.backdrop:SetParent(obj:GetParent())
+ obj:SetParent(obj.backdrop)
+ end
+
+ local Appraiser = AucAdvanced.Modules.Util.Appraiser
+ if Appraiser then
+ S:SecureHook(Appraiser.Private, "CreateFrames", function()
+ AucAdvanced.Settings.SetDefault("util.mover.anchors", {"TOPLEFT", UIParent, "TOPLEFT", 0, -116})
+
+ local frame = Appraiser.Private.frame
+
+ local title = frame:GetRegions()
+ title:Point("TOPLEFT", 80, -10)
+
+ frame.toggleManifest:Point("TOPRIGHT", -30, -8)
+ frame.config:Point("TOPRIGHT", frame.toggleManifest, "TOPLEFT", -3, 0)
+
+ S:HandleButton(frame.toggleManifest)
+ S:HandleButton(frame.config)
+ S:HandleButton(frame.switchToStack)
+ S:HandleButton(frame.switchToStack2)
+ S:HandleButton(frame.go)
+ S:HandleButton(frame.gobatch)
+ S:HandleButton(frame.refresh)
+ S:HandleButton(frame.cancel)
+
+ frame.go:Height(22)
+ frame.go:Point("BOTTOMRIGHT", -8, 31)
+ frame.gobatch:Height(22)
+ frame.gobatch:Point("BOTTOMRIGHT", -91, 31)
+ frame.refresh:Height(22)
+ frame.refresh:Point("BOTTOMRIGHT", -174, 31)
+ frame.cancel:Size(24, 22)
+ frame.cancel:Point("BOTTOMLEFT", 180, 31)
+
+ -- Left Panel
+ frame.itembox:SetTemplate("Transparent")
+ frame.itembox:Size(230, 339)
+ frame.itembox:Point("TOPLEFT", 19, -48)
+
+ frame.itembox.showAuctions:Point("BOTTOMRIGHT", frame.itembox, "TOPRIGHT", -30 -Auc_Util_Appraiser_ShowAuctionsText:GetWidth(), 0)
+ frame.itembox.showText:Point("BOTTOMRIGHT", frame.itembox.showHidden, "BOTTOMLEFT", 0, 1)
+
+ S:HandleSliderFrame(frame.scroller)
+ frame.scroller:SetPoint("TOPRIGHT", 0, 0)
+ frame.scroller:SetPoint("BOTTOM", 0, 0)
+
+ for i, item in ipairs(frame.items) do
+ if i == 1 then
+ item:Point("TOPLEFT", 4, -8)
+ end
+ item:Point("RIGHT", frame.itembox, "RIGHT", -15,0)
+
+ S:HandleButtonHighlight(item)
+
+ item.name:Point("TOPLEFT", item.icon, "TOPRIGHT", 3, 0)
+ item.info:Point("BOTTOMLEFT", item.icon, "BOTTOMRIGHT", 3, -2)
+ item.bg:Hide()
+
+ item.iconbutton:SetTemplate("Default")
+
+ item.icon:SetInside()
+ item.icon:SetTexCoord(unpack(E.TexCoords))
+ end
+
+ -- SaleBox
+ frame.salebox:SetTemplate("Transparent")
+ frame.salebox:Point("TOPLEFT", frame.itembox, "TOPRIGHT", 3, 12)
+ frame.salebox:Point("RIGHT", -8, 0)
+
+ S:HandleCheckBox(frame.salebox.numberonly)
+ S:HandleCheckBox(frame.salebox.matcher)
+ S:HandleCheckBox(frame.salebox.ignore)
+ S:HandleCheckBox(frame.salebox.bulk)
+
+ S:HandleSliderFrame(frame.salebox.stack)
+ S:HandleSliderFrame(frame.salebox.number)
+ S:HandleSliderFrame(frame.salebox.duration)
+
+ S:HandleEditBox(frame.salebox.numberentry)
+ S:HandleEditBox(frame.salebox.stackentry)
+
+ skinMoneyFrame(frame.salebox.bid, true)
+ skinMoneyFrame(frame.salebox.buy, true)
+ skinMoneyFrame(frame.salebox.bid.stack, true)
+ skinMoneyFrame(frame.salebox.buy.stack, true)
+
+ S:HandleDropDownBox(frame.salebox.model, 140)
+
+ frame.salebox.slot:SetTexture(nil)
+
+ frame.salebox.slotBackdrop = CreateFrame("Frame", nil, frame.salebox)
+ frame.salebox.slotBackdrop:SetTemplate("Default")
+ frame.salebox.slotBackdrop:SetOutside(frame.salebox.icon)
+
+ frame.salebox.icon:GetHighlightTexture():SetTexture(1, 1, 1, 0.3)
+
+ hooksecurefunc(Appraiser.Private.frame, "SelectItem", function(link)
+ if not Appraiser.Private.frame.salebox.sig then return end
+
+ Appraiser.Private.frame.salebox.icon:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ end)
+
+ -- ImageView
+ frame.imageview:SetTemplate("Transparent")
+ frame.imageview:Point("TOPLEFT", frame.salebox, "BOTTOMLEFT", 0, -3)
+ frame.imageview:SetPoint("BOTTOM", frame.itembox, "BOTTOM", 0, 0)
+ frame.imageview.purchase:SetBackdrop(nil)
+
+ frame.imageview.purchase:Point("TOPLEFT", frame.imageview, "BOTTOMLEFT", 0, 23)
+ frame.imageview.purchase:SetPoint("BOTTOMRIGHT", 0, 0)
+
+ S:HandleCheckBox(frame.itembox.showAuctions)
+ S:HandleCheckBox(frame.itembox.showHidden)
+
+ S:HandleButton(frame.imageview.purchase.buy)
+ S:HandleButton(frame.imageview.purchase.bid)
+
+ -- Manifest
+ frame.manifest:SetTemplate("Transparent")
+ frame.manifest:Point("TOPLEFT", frame, "TOPRIGHT", -1, 0)
+ frame.manifest:Point("BOTTOM", 0, 60)
+
+ frame.manifest.close:Size(32)
+ S:HandleCloseButton(frame.manifest.close, frame.manifest)
+
+ -- SellerIgnore
+ frame.sellerIgnore:SetTemplate("Transparent")
+
+ frame.sellerIgnore.help:Point("CENTER", frame.sellerIgnore, "TOP", 0, -20)
+
+ frame.sellerIgnore.yes:Height(21)
+ S:HandleButton(frame.sellerIgnore.yes)
+
+ frame.sellerIgnore.no:Height(21)
+ S:HandleButton(frame.sellerIgnore.no)
+
+ S:Unhook(Appraiser.Private,"CreateFrames")
+ end)
+ end
+
+ local AutoMagic = AucAdvanced.Modules.Util.AutoMagic
+ if AutoMagic then
+ local frame = autosellframe
+
+ frame:SetTemplate("Transparent")
+ frame.baglist:SetTemplate("Transparent")
+ frame.resultlist:SetTemplate("Transparent")
+
+ S:HandleScrollBar(frame.baglist.sheet.panel.vScroll)
+ S:HandleScrollBar(frame.resultlist.sheet.panel.vScroll)
+ S:HandleScrollBar(frame.resultlist.sheet.panel.hScroll, true)
+
+ S:HandleButton(frame.additem)
+ S:HandleButton(frame.removeitem)
+ S:HandleButton(frame.bagList)
+ S:HandleButton(frame.closeButton)
+
+ frame.slot:CreateBackdrop("Default")
+ frame.slot.backdrop:Point("TOPLEFT", frame.slot, 3, -3)
+ frame.slot.backdrop:Point("BOTTOMRIGHT", frame.slot, -4, 4)
+ frame.slot:SetTexture(nil)
+ frame.slot:SetTexCoord(unpack(E.TexCoords))
+
+ frame.icon:GetHighlightTexture():SetInside()
+ frame.icon:GetHighlightTexture():SetTexture(1, 1, 1, 0.3)
+
+ hooksecurefunc(frame, "ClearIcon", function()
+ frame.slot:SetTexture(nil)
+ end)
+ end
+
+ local Glypher = AucAdvanced.Modules.Util.Glypher
+ if Glypher then
+ S:SecureHook(Glypher.Private, "SetupConfigGui", function()
+ local frame = Glypher.Private.frame
+
+ S:HandleButton(frame.refreshButton)
+ S:HandleButton(frame.searchButton)
+ S:HandleButton(frame.skilletButton)
+
+ frame.glypher:SetTemplate("Transparent")
+
+ S:Unhook(Glypher.Private, "SetupConfigGui")
+ end)
+ end
+
+ local GlypherPost = AucAdvanced.Modules.Util.GlypherPost
+ if GlypherPost then
+ S:SecureHook(GlypherPost.Private, "SetupConfigGui", function()
+ S:HandleButton(GlypherPost.Private.frame.refreshButton)
+ S:Unhook(GlypherPost.Private, "SetupConfigGui")
+ end)
+ end
+
+ local SearchUI = AucAdvanced.Modules.Util.SearchUI
+ if SearchUI then
+ local private = SearchUI.Private
+
+ function SearchUI.AttachToAH()
+ if private.isAttached then return end
+ local gui = private.gui
+ gui.buttonTop = -43
+ local height, width = 410, 830
+ gui:SetPosition(gui.AuctionFrame, width, height, 7, 21 + height)
+ gui:HideBackdrop()
+ gui:EnableMouse(false)
+ gui:RealSetScale(0.9999)
+ gui:RealSetScale(1.0)
+ gui:Show()
+ private.isAttached = true
+ end
+
+ S:SecureHook(SearchUI, "CreateAuctionFrames", function()
+ local frame = private.gui.AuctionFrame
+
+ if frame then
+ frame.title:Point("TOP", 0, -5)
+
+ frame.scanslabel:Point("TOPLEFT", 50, -28)
+
+ frame.backing:SetBackdrop(nil)
+ frame.money:Hide()
+
+ S:Unhook(SearchUI, "CreateAuctionFrames")
+ end
+ end)
+
+ S:SecureHook(SearchUI, "MakeGuiConfig", function()
+ local gui = private.gui
+
+ -- Top Buttons
+ gui.saves:Height(24)
+ gui.saves:Point("TOPRIGHT", -5, -6)
+
+ S:HandleEditBox(gui.saves.name)
+
+ gui.saves.select.button:Point("TOPRIGHT", -18, -3)
+ S:HandleNextPrevButton(gui.saves.select.button, "down", {1, 0.8, 0})
+
+ S:HandleButton(gui.saves.load)
+ S:HandleButton(gui.saves.save)
+ S:HandleButton(gui.saves.delete)
+ S:HandleButton(gui.saves.reset)
+
+ -- Left Panel
+ gui.LeftBackground = CreateFrame("Frame", nil, gui)
+ gui.LeftBackground.SetFrameLevel = E.noop
+ gui.LeftBackground:SetTemplate("Transparent")
+ gui.LeftBackground:Size(150, 317)
+ gui.LeftBackground:Point("TOPLEFT", 12, -33)
+
+ gui.buttons[1]:Point("TOPLEFT", 12, -34)
+ gui.buttons[1].SetPoint = E.noop
+
+ -- Right Panel
+ for _, tab in ipairs(gui.tabs) do
+ tab.topOffset = 23
+ tab.expandGap = 26
+ tab.frame:Point("TOPLEFT", 160 + tab.leftOffset, -10 - tab.topOffset)
+ end
+
+ gui.frame:SetTemplate("Transparent")
+ gui.frame:Point("TOP", 0, -119)
+ gui.frame:Point("LEFT", gui:GetButton(1), "RIGHT", 3, 0)
+ gui.frame:Point("BOTTOMRIGHT", gui.Done, "TOPRIGHT", -5, 31)
+
+ -- Bottom Buttons
+ S:HandleButton(gui.Search)
+ S:HandleButton(gui.frame.cancel)
+ S:HandleButton(gui.frame.purchase)
+ S:HandleButton(gui.frame.notnow)
+ S:HandleButton(gui.frame.ignore)
+ S:HandleButton(gui.frame.ignoreperm)
+ S:HandleButton(gui.frame.snatch)
+ S:HandleButton(gui.frame.clear)
+ S:HandleButton(gui.frame.buyout)
+ S:HandleButton(gui.frame.bid)
+
+ skinMoneyFrame(gui.frame.bidbox)
+
+ gui.Search:Point("BOTTOMLEFT", 72, 34)
+ gui.frame.cancel:Size(24, 21)
+ gui.frame.cancel:Point("BOTTOMLEFT", gui, "BOTTOMLEFT", 39, 34)
+
+ gui.frame.purchase:Point("BOTTOMLEFT", gui, "BOTTOMLEFT", 170, 34)
+ gui.frame.notnow:Point("BOTTOMLEFT", gui, "BOTTOMLEFT", 263, 34)
+ gui.frame.ignore:Point("BOTTOMLEFT", gui, "BOTTOMLEFT", 400, 34)
+ gui.frame.ignoreperm:Point("BOTTOMLEFT", gui, "BOTTOMLEFT", 493, 34)
+ gui.frame.snatch:Point("BOTTOMLEFT", gui, "BOTTOMLEFT", 650, 34)
+ gui.frame.bidbox:Point("BOTTOMRIGHT", gui.frame.bid, "BOTTOMLEFT", -4, 3)
+
+ -- ProgressBar
+ gui.frame.progressbar:SetTemplate("Transparent")
+ gui.frame.progressbar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(gui.frame.progressbar)
+
+ S:HandleButton(gui.frame.progressbar.cancel)
+
+ S:Unhook(SearchUI, "MakeGuiConfig")
+ end)
+
+ local RealTime = SearchUI.Searchers.RealTime
+ if RealTime then
+ S:SecureHook(RealTime, "HookAH", function()
+ local button = AS:GetObjectChildren(AuctionFrameBrowse)
+
+ button:Point("TOPRIGHT", AuctionFrameBrowse, "TOPLEFT", 229, -6)
+ S:HandleButton(button.control)
+
+ S:Unhook(RealTime, "HookAH")
+ end)
+ end
+
+ local Snatch = SearchUI.Searchers.Snatch
+ if Snatch then
+ S:SecureHook(Snatch, "MakeGuiConfig", function(self, gui)
+ local frame = self.Private.frame
+
+ frame.snatchlist:SetBackdrop(nil)
+
+ frame.slot:Hide()
+
+ frame.icon:SetTemplate("Default")
+ frame.icon:GetHighlightTexture():SetInside()
+ frame.icon:GetHighlightTexture():SetTexture(1, 1, 1, 0.3)
+
+ skinMoneyFrame(frame.money)
+ skinEditBox(frame.pctBox)
+
+ S:HandleButton(frame.additem)
+ S:HandleButton(frame.removeitem)
+ S:HandleButton(frame.resetList)
+
+ S:Unhook(Snatch, "MakeGuiConfig")
+ end)
+
+ hooksecurefunc(Snatch, "SetWorkingItem", function(link)
+ if not Snatch.Private.workingItemLink then return end
+
+ Snatch.Private.frame.icon:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ Snatch.Private.frame.icon:GetNormalTexture():SetInside()
+ end)
+ end
+
+ local ItemPrice = SearchUI.Filters.ItemPrice
+ if ItemPrice then
+ S:SecureHook(ItemPrice, "MakeGuiConfig", function(self, gui)
+ local t, id = gui:GetTabByName(ItemPrice.tabname, "Filters")
+ if t then
+ local ignorelistGUI, removebutton = AS:GetObjectChildren(gui.tabs[id][3], -1, true)
+ ignorelistGUI:SetTemplate("Default")
+ S:HandleButton(removebutton)
+ end
+
+ S:Unhook(ItemPrice, "MakeGuiConfig")
+ end)
+ end
+ end
+
+ local CompactUI = AucAdvanced.Modules.Util.CompactUI
+ if CompactUI then
+ local private = CompactUI.Private
+
+ S:HandleButton(private.switchUI)
+
+ -- SellerIgnore
+ private.sellerIgnore:SetTemplate("Transparent")
+
+ private.sellerIgnore.help:Point("CENTER", private.sellerIgnore, "TOP", 0, -20)
+
+ private.sellerIgnore.yes:Height(21)
+ S:HandleButton(private.sellerIgnore.yes)
+
+ private.sellerIgnore.no:Height(21)
+ S:HandleButton(private.sellerIgnore.no)
+
+ S:SecureHook(private, "HookAH", function()
+ private.switchUI:Point("TOPRIGHT", AuctionFrameBrowse, "TOPRIGHT", -120, -6)
+
+ BrowseButton1:Point("TOPLEFT", 188, -87)
+
+ local i = 1
+ local button = _G["BrowseButton"..i]
+ while button do
+ button.Icon:SetTexCoord(unpack(E.TexCoords))
+
+ i = i + 1
+ button = _G["BrowseButton"..i]
+ end
+ _G["BrowseButton"..(i - 1)]:Show()
+
+ local _, tex = BrowsePrevPageButton:GetPoint()
+ tex:Size(614, 32)
+ tex:Point("TOPLEFT", private.buttons[#private.buttons].Count, "BOTTOMLEFT", 0, -1)
+
+ S:HandleCheckBox(private.PerItem)
+ private.PerItem:Point("TOPLEFT", tex, "TOPLEFT", 3, -3)
+ private.PerItem:SetFrameLevel(AuctionFrameBrowse:GetFrameLevel() + 2)
+
+ BrowseSearchCountText:Point("BOTTOMRIGHT", tex, "BOTTOMRIGHT", -40, 20)
+
+ -- prevent main AH skin from repointing
+ BrowseButton1.SetPoint = E.noop
+ BrowsePrevPageButton.SetPoint = E.noop
+ BrowseNextPageButton.SetPoint = E.noop
+ BrowseSearchCountText.SetPoint = E.noop
+
+ S:Unhook(private, "HookAH")
+ end)
+ end
+
+ local ScanButton = AucAdvanced.Modules.Util.ScanButton
+ if ScanButton then
+ S:SecureHook(ScanButton.Private, "HookAH", function()
+ local private = ScanButton.Private
+
+ private.buttons:Point("TOPLEFT", AuctionFrameBrowse, 100, -6)
+
+ S:HandleButton(private.buttons.stop)
+ S:HandleButton(private.buttons.play)
+ S:HandleButton(private.buttons.pause)
+ S:HandleButton(private.buttons.getall)
+
+ private.message:SetTemplate("Transparent")
+ S:HandleButton(private.message.Done)
+
+ S:Unhook(ScanButton.Private, "HookAH")
+ end)
+ end
+
+ local SimpleAuction = AucAdvanced.Modules.Util.SimpleAuction
+ if SimpleAuction then
+ S:SecureHook(SimpleAuction.Private, "CreateFrames", function()
+ local frame = SimpleAuction.Private.frame
+
+ -- BrowseFrame
+ S:HandleButton(frame.scanbutton)
+ frame.scanbutton:Height(22)
+ frame.scanbutton:Point("LEFT", AuctionFrameMoneyFrame, "RIGHT", 6, -1)
+
+ -- PostFrame
+ frame.title:Point("TOP", 0, -5)
+
+ S:HandleButton(frame.config)
+ frame.config:Point("TOPRIGHT", -30, -8)
+
+ frame.slot:SetTexture(nil)
+ frame.slot:Size(42)
+ frame.slot:Point("TOPLEFT", 80, -24)
+
+ frame.name:Point("TOPLEFT", frame.slot, "TOPRIGHT", 6, 0)
+
+ frame.icon:SetTemplate("Default")
+ frame.icon:SetPoint("TOPLEFT", frame.slot, "TOPLEFT", 0, 0)
+ frame.icon:GetHighlightTexture():SetInside()
+ frame.icon:GetHighlightTexture():SetTexture(1, 1, 1, 0.3)
+
+ S:HandleButton(frame.refresh)
+ S:HandleButton(frame.bid)
+ S:HandleButton(frame.buy)
+
+ frame.refresh:Height(22)
+ frame.refresh:Point("BOTTOMRIGHT", -174, 31)
+ frame.bid:Height(22)
+ frame.bid:Point("TOPLEFT", frame.refresh, "TOPRIGHT", 3, 0)
+ frame.buy:Height(22)
+ frame.buy:Point("TOPLEFT", frame.bid, "TOPRIGHT", 3, 0)
+
+ -- Left Panel
+ frame.LeftBackground = CreateFrame("Frame", nil, frame)
+ frame.LeftBackground:SetFrameLevel(frame:GetFrameLevel() - 1)
+ frame.LeftBackground:SetTemplate("Transparent")
+ frame.LeftBackground:Point("TOPLEFT", 19, -75)
+ frame.LeftBackground:Point("BOTTOMRIGHT", -648, 60)
+
+ skinMoneyFrame(frame.minprice)
+ skinMoneyFrame(frame.buyout)
+
+ S:HandleEditBox(frame.stacks.num)
+ S:HandleEditBox(frame.stacks.size)
+
+ S:HandleButton(frame.create)
+ S:HandleButton(frame.clear)
+
+ for pos in ipairs(frame.duration.time.intervals) do
+ S:HandleCheckBox(frame.duration.time[pos])
+ end
+
+ for _, obj in pairs(frame.options) do
+ if type(obj) == "table" and obj.GetObjectType and obj:GetObjectType() == "CheckButton" then
+ S:HandleCheckBox(obj)
+ end
+ end
+
+ frame.minprice:Point("TOPLEFT", 24, -92)
+
+ frame.options:Point("TOPLEFT", frame.stacks, "BOTTOMLEFT", 0, -37)
+
+ frame.create:Width(157)
+ frame.create:Point("BOTTOMRIGHT", AuctionFrameMoneyFrame, "TOPRIGHT", -1, 14)
+ frame.clear:Width(157)
+ frame.clear:Point("BOTTOMRIGHT", frame.create, "TOPRIGHT", 0, 3)
+
+ -- ImageView
+ frame.imageview:SetTemplate("Transparent")
+ frame.imageview:Point("TOPLEFT", 187, -75)
+ frame.imageview:Point("TOPRIGHT", -8, 0)
+ frame.imageview:Point("BOTTOM", 0, 60)
+
+ S:Unhook(SimpleAuction.Private, "CreateFrames")
+ end)
+
+ hooksecurefunc(SimpleAuction.Private, "LoadItemLink", function(link)
+ if not SimpleAuction.Private.frame.icon.itemLink then return end
+
+ SimpleAuction.Private.frame.icon:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ SimpleAuction.Private.frame.icon:GetNormalTexture():SetInside()
+ end)
+ end
+
+ local Scan = AucAdvanced.Scan
+ if Scan then
+ hooksecurefunc(Scan , "ProgressBars", function(self)
+ if self.isSkinned then return end
+
+ self:SetTemplate("Transparent")
+ self:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(self)
+
+ self.isSkinned = true
+ end)
+ end
+
+ if AucAdvanced.Buy then
+ AucAdvanced.Buy.Private.Prompt.Frame:SetTemplate("Transparent")
+ S:HandleEditBox(AucAdvanced.Buy.Private.Prompt.Reason)
+ S:HandleButton(AucAdvanced.Buy.Private.Prompt.Yes)
+ S:HandleButton(AucAdvanced.Buy.Private.Prompt.No)
+ end
+end)
+
+S:AddCallbackForAddon("Auc-Filter-Basic", "Auc-Filter-Basic", function()
+ if not E.private.addOnSkins.AuctioneerSuite then return end
+
+ S:HandleButton(BasicFilter_IgnoreList_IgnorePlayerButton)
+ S:HandleButton(BasicFilter_IgnoreList_StopIgnoreButton)
+
+ BasicFilter_IgnoreList_ScrollFrame:StripTextures()
+ S:HandleScrollBar(BasicFilter_IgnoreList_ScrollFrameScrollBar)
+end)
+
+S:AddCallbackForAddon("Auc-Stat-Histogram", "Auc-Stat-Histogram", function()
+ if not E.private.addOnSkins.AuctioneerSuite then return end
+
+ local StatHistogram = AucAdvanced.GetModule("Stat", "Histogram")
+ if StatHistogram then
+ S:SecureHook(StatHistogram.Private, "SetupConfigGui", function()
+ local frame = StatHistogram.Private.frame
+
+ frame.slot:Hide()
+
+ frame.icon:SetTemplate("Default")
+ frame.icon:GetHighlightTexture():SetInside()
+ frame.icon:GetHighlightTexture():SetTexture(1, 1, 1, 0.3)
+
+ frame.bargraph:SetTemplate("Default")
+
+ S:Unhook(StatHistogram.Private, "SetupConfigGui")
+ end)
+
+ hooksecurefunc(StatHistogram, "SetWorkingItem", function(link)
+ if not StatHistogram.Private.frame.link then return end
+
+ StatHistogram.Private.frame.icon:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ StatHistogram.Private.frame.icon:GetNormalTexture():SetInside()
+ end)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/beanCounter.lua b/ElvUI_AddOnSkins/Skins/Addons/beanCounter.lua
new file mode 100644
index 0000000..3554808
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/beanCounter.lua
@@ -0,0 +1,155 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("BeanCounter") then return end
+
+-- BeanCounter 5.8.4723
+-- https://www.curseforge.com/wow/addons/auctioneer/files/427823
+
+S:AddCallbackForAddon("BeanCounter", "BeanCounter", function()
+ if not E.private.addOnSkins.BeanCounter then return end
+
+ AS:SkinLibrary("Configator")
+ AS:SkinLibrary("LibExtraTip-1")
+
+ local base = BeanCounterBaseFrame
+ if base then
+ local private = BeanCounter.Private
+ local frame = private.frame
+
+ -- External GUI
+ base:SetBackdrop(nil)
+ base:Size(832, 447)
+ base:SetMinResize(832, 447)
+ base:SetMaxResize(1500, 447)
+
+ base:CreateBackdrop("Transparent")
+ base.backdrop:Point("TOPLEFT", 11, 0)
+ base.backdrop:Point("BOTTOMRIGHT", 0, -2)
+ S:SetBackdropHitRect(base)
+
+ base.Drag:Point("TOPLEFT", 22, -1)
+ base.Drag:Point("TOPRIGHT", -11, -1)
+
+ base.DragBottom:Point("BOTTOMLEFT", 22, 1)
+ base.DragBottom:Point("BOTTOMRIGHT", -11, 1)
+
+ S:HandleButton(base.Done)
+ base.Done:Height(18)
+ base.Done:Point("BOTTOMRIGHT", -47, 6)
+
+ S:HandleNextPrevButton(base.Resizer, "right")
+ base.Resizer:Point("BOTTOMRIGHT", -8, 6)
+
+ -- Actual Usable Frame
+ local title = frame:GetRegions()
+ title:Point("TOPLEFT", 80, -10)
+
+ S:HandleButton(frame.Config)
+ frame.Config:Point("TOPRIGHT", -30, -8)
+
+ -- Left Panel
+ frame.LeftBackground = CreateFrame("Frame", nil, frame)
+ frame.LeftBackground:SetFrameLevel(frame:GetFrameLevel() - 1)
+ frame.LeftBackground.SetFrameLevel = E.noop
+ frame.LeftBackground:SetTemplate("Transparent")
+ frame.LeftBackground:Point("TOPLEFT", 19, -36)
+ frame.LeftBackground:Point("BOTTOMRIGHT", -648, 60)
+
+ frame.slot:SetTexture(nil)
+ frame.slot:Point("TOPLEFT", frame, "TOPLEFT", 23, -110)
+
+ frame.icon:SetTemplate("Default")
+ frame.icon:GetHighlightTexture():SetInside()
+ frame.icon:GetHighlightTexture():SetTexture(1, 1, 1, 0.3)
+ frame.icon:SetPoint("TOPLEFT", frame.slot, "TOPLEFT", 0, 0)
+
+ frame.selectbox.box:StripTextures()
+ frame.selectbox.box:Point("TOPLEFT", frame, "TOPLEFT", 4, -77)
+ frame.selectbox.box:CreateBackdrop("Default")
+ frame.selectbox.box.backdrop:Point("TOPLEFT", 19, -2)
+ frame.selectbox.box.backdrop:Point("BOTTOMRIGHT", -14, -11)
+ _G[frame.selectbox.box:GetName().."Text"]:SetParent(frame.selectbox.box.backdrop)
+
+ frame.selectbox.box.button:Size(16)
+ frame.selectbox.box.button:Point("TOPRIGHT", -16, -4)
+ S:HandleNextPrevButton(frame.selectbox.box.button, "down", {1, 0.8, 0})
+
+ local searchBoxName = frame.searchBox:GetName()
+ _G[searchBoxName.."Left"]:Hide()
+ _G[searchBoxName.."Middle"]:Hide()
+ _G[searchBoxName.."Right"]:Hide()
+ frame.searchBox:SetTemplate("Default")
+ frame.searchBox:Point("TOPLEFT", 23, -165)
+ frame.searchBox:Size(157, 20)
+
+ S:HandleButton(frame.searchButton)
+ frame.searchButton:Point("TOPLEFT", frame.searchBox, "BOTTOMLEFT", 0, -3)
+
+ S:HandleCheckBox(frame.exactCheck)
+ S:HandleCheckBox(frame.neutralCheck)
+ S:HandleCheckBox(frame.bidCheck)
+ S:HandleCheckBox(frame.bidFailedCheck)
+ S:HandleCheckBox(frame.auctionCheck)
+ S:HandleCheckBox(frame.auctionFailedCheck)
+
+ frame.exactCheck:Point("TOPLEFT", 19, -216)
+ frame.neutralCheck:Point("TOPLEFT", 19, -241)
+
+ frame.bidCheck:SetScale(1)
+ frame.bidCheck:Point("TOPLEFT", 19, -274)
+ frame.auctionCheck:SetScale(1)
+ frame.auctionCheck:Point("TOPLEFT", 19, -299)
+
+ frame.bidFailedCheck:SetScale(1)
+ frame.bidFailedCheck:Point("TOPLEFT", 19, -332)
+ frame.auctionFailedCheck:SetScale(1)
+ frame.auctionFailedCheck:Point("TOPLEFT", 19, -357)
+
+ hooksecurefunc(private, "searchByItemID", function(id, settings, queryReturn, count, itemTexture, classic)
+ if not itemTexture then return end
+
+ private.frame.icon:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ private.frame.icon:GetNormalTexture():SetInside()
+ end)
+
+ -- ResultList
+ frame.RightBackground = CreateFrame("Frame", nil, frame)
+ frame.RightBackground:SetFrameLevel(frame:GetFrameLevel() - 1)
+ frame.RightBackground.SetFrameLevel = E.noop
+ frame.RightBackground:SetTemplate("Transparent")
+ frame.RightBackground:Point("TOPLEFT", 187, -36)
+ frame.RightBackground:Point("BOTTOMRIGHT", -29, 52)
+
+ frame.resultlist:SetBackdrop(nil)
+ frame.resultlist:Point("TOPLEFT", 184, -34)
+ frame.resultlist:Point("TOPRIGHT", -4, 0)
+ frame.resultlist:Point("BOTTOM", 0, 27)
+
+ S:HandleScrollBar(frame.resultlist.sheet.panel.vScroll)
+ S:HandleScrollBar(frame.resultlist.sheet.panel.hScroll, true)
+
+ frame.resultlist.sheet.panel.vScroll:Point("TOPLEFT", frame.resultlist.sheet.panel, "TOPRIGHT", 3, -16)
+ frame.resultlist.sheet.panel.vScroll:Point("BOTTOMLEFT", frame.resultlist.sheet.panel, "BOTTOMRIGHT", 3, 19)
+
+ frame.resultlist.sheet.panel.hScroll:Point("TOPLEFT", frame.resultlist.sheet.panel, "BOTTOMLEFT", 17, -3)
+ frame.resultlist.sheet.panel.hScroll:Point("TOPRIGHT", frame.resultlist.sheet.panel, "BOTTOMRIGHT", -19, -3)
+
+ -- DeletePrompt
+ private.deletePromptFrame:SetTemplate("Transparent")
+ S:HandleButton(private.deletePromptFrame.yes)
+ S:HandleButton(private.deletePromptFrame.no)
+
+ -- ErrorFrame
+ if private.scriptframe.loadError then
+ private.scriptframe.loadError:SetTemplate("Transparent")
+ S:HandleButton(private.scriptframe.loadError.close)
+ else
+ hooksecurefunc(private, "CreateErrorFrames", function()
+ private.scriptframe.loadError:SetTemplate("Transparent")
+ S:HandleButton(private.scriptframe.loadError.close)
+ end)
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/bigwigs.lua b/ElvUI_AddOnSkins/Skins/Addons/bigwigs.lua
new file mode 100644
index 0000000..e00834b
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/bigwigs.lua
@@ -0,0 +1,40 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("BigWigs_Plugins") then return end
+
+-- BigWigs r7558
+-- https://www.curseforge.com/wow/addons/big-wigs/files/458195
+
+S:AddCallbackForAddon("BigWigs_Plugins", "BigWigs_Plugins", function()
+ if not E.private.addOnSkins.BigWigs then return end
+
+ AS:SkinLibrary("LibCandyBar-3.0")
+
+ local db = E.db.addOnSkins
+
+ local function scaleToSize(bar)
+ local scale = bar:GetScale()
+
+ bar:SetScale(1)
+ bar:Size(bar.width * scale, bar.height * scale)
+
+ bar.candyBarIconFrame:Width(bar.height * scale)
+ bar.candyBarLabel:SetFont(bar.candyBarLabel:GetFont(), db.bigwigsFontSize * scale, db.bigwigsFontOutline)
+ bar.candyBarDuration:SetFont(bar.candyBarLabel:GetFont(), db.bigwigsFontSize * scale, db.bigwigsFontOutline)
+ end
+
+ local candy = LibStub("LibCandyBar-3.0")
+ hooksecurefunc(candy.barPrototype_mt.__index, "Start", function(self)
+ if self:Get("bigwigs:module") and not self:Get("bigwigs:emphasized") then
+ self.height = db.bigwigsBarHeight
+ scaleToSize(self)
+ end
+ end)
+
+ local plugin = BigWigs:GetPlugin("Bars")
+ hooksecurefunc(plugin, "EmphasizeBar", function(_, bar)
+ scaleToSize(bar)
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/bindPad.lua b/ElvUI_AddOnSkins/Skins/Addons/bindPad.lua
new file mode 100644
index 0000000..5189858
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/bindPad.lua
@@ -0,0 +1,205 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("BindPad") then return end
+
+local _G = _G
+local unpack = unpack
+
+-- BindPad 2.2.4
+-- https://www.curseforge.com/wow/addons/bind-pad/files/410752
+
+S:AddCallbackForAddon("BindPad", "BindPad", function()
+ if not E.private.addOnSkins.BindPad then return end
+
+ BindPadFrame:StripTextures()
+ BindPadFrame:CreateBackdrop("Transparent")
+ BindPadFrame.backdrop:Point("TOPLEFT", 11, -12)
+ BindPadFrame.backdrop:Point("BOTTOMRIGHT", -32, 76)
+
+ S:SetBackdropHitRect(BindPadFrame)
+
+ S:HandleCloseButton(BindPadFrameCloseButton, BindPadFrame.backdrop)
+
+ local slot, slotIcon, slotBorder, slotAddButton
+ for i = 1, 42 do
+ slot = _G["BindPadSlot" .. i]
+ slotIcon = _G["BindPadSlot" .. i .. "Icon"]
+ slotBorder = _G["BindPadSlot" .. i .. "Border"]
+ slotAddButton = _G["BindPadSlot" .. i .. "AddButton"]
+
+ slot:SetNormalTexture(nil)
+ slot:SetTemplate("Defaylt", true)
+ slot:StyleButton(nil, nil, true)
+
+ slotIcon:SetInside()
+ slotIcon:SetTexCoord(unpack(E.TexCoords))
+ slotIcon:SetDrawLayer("ARTWORK")
+
+ slotBorder:SetTexture(1, 1, 0, 0.3)
+ slotBorder:SetInside()
+
+ slotAddButton:SetNormalTexture(nil)
+ slotAddButton:SetPushedTexture(nil)
+ slotAddButton:SetDisabledTexture(nil)
+ slotAddButton:SetHighlightTexture(nil)
+
+ slotAddButton.Text = slotAddButton:CreateFontString(nil, "OVERLAY")
+ slotAddButton.Text:FontTemplate(nil, 22)
+ slotAddButton.Text:SetPoint("CENTER", 0, 0)
+ slotAddButton.Text:SetText("+")
+ end
+
+ for i = 1, 4 do
+ local tab = _G["BindPadFrameTab" .. i]
+ S:HandleTab(tab)
+ tab.backdrop:Point("TOPLEFT", 3, -8)
+ tab.backdrop:Point("BOTTOMRIGHT", -3, -1)
+ S:SetBackdropHitRect(tab)
+ end
+
+ for i = 1, 5 do
+ local tab = _G["BindPadProfileTab" .. i]
+ local subIcon = _G["BindPadProfileTab" .. i .. "SubIcon"]
+
+ tab:StripTextures()
+ tab:SetTemplate("Defaylt", true)
+ tab:StyleButton(nil, true)
+
+ tab:GetNormalTexture():SetInside()
+ tab:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ tab:GetNormalTexture():SetDrawLayer("ARTWORK")
+
+ subIcon:Point("BOTTOMRIGHT", -1, 1)
+ subIcon:SetTexCoord(unpack(E.TexCoords))
+ end
+
+ BindPadProfileTab1:Point("TOPLEFT", BindPadFrame, "TOPRIGHT", -33, -65)
+
+ local function HandleMicroButton(button)
+ local pushed = button:GetPushedTexture()
+ local normal = button:GetNormalTexture()
+ local disabled = button:GetDisabledTexture()
+
+ button:Size(20, 26)
+ button:SetHitRectInsets(0, 0, 0, 0)
+ button:GetHighlightTexture():Kill()
+
+ button:CreateBackdrop()
+
+ normal:SetInside(button.backdrop)
+ -- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 32, 64, 21, 27, 5, 31
+ normal:SetTexCoord(0.15625, 0.8125, 0.484375, 0.90625)
+
+ pushed:SetInside(button.backdrop)
+ -- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 32, 64, 20, 26, 5, 33
+ pushed:SetTexCoord(0.15625, 0.78125, 0.515625, 0.921875)
+
+ if disabled then
+ disabled:SetInside(button.backdrop)
+ -- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 32, 64, 21, 27, 5, 31
+ disabled:SetTexCoord(0.15625, 0.8125, 0.484375, 0.90625)
+ end
+ end
+
+ S:HandleCheckBox(BindPadFrameCharacterButton)
+ S:HandleCheckBox(BindPadFrameShowHotkeysButton)
+ S:HandleCheckBox(BindPadFrameTriggerOnKeydownButton)
+
+ S:HandleButton(BindPadFrameExitButton)
+
+ HandleMicroButton(BindPadFrameOpenSpellBookButton)
+ HandleMicroButton(BindPadFrameOpenMacroButton)
+ HandleMicroButton(BindPadFrameOpenBagButton)
+
+ BindPadFrameOpenSpellBookButton:Point("BOTTOMLEFT", BindPadFrame, "TOPLEFT", 20, -427)
+ BindPadFrameOpenMacroButton:Point("BOTTOMLEFT", BindPadFrameOpenSpellBookButton, "BOTTOMRIGHT", 5, 0)
+ BindPadFrameOpenBagButton:Point("BOTTOMLEFT", BindPadFrameOpenMacroButton, "BOTTOMRIGHT", 5, 0)
+
+ BindPadFrameShowHotkeysButton:Point("BOTTOMLEFT", BindPadFrameOpenBagButton, "BOTTOMRIGHT", 15, 11)
+ BindPadFrameTriggerOnKeydownButton:Point("BOTTOMLEFT", BindPadFrameOpenBagButton, "BOTTOMRIGHT", 15, -5)
+
+ BindPadFrameExitButton:Point("CENTER", BindPadFrame, "TOPLEFT", 304, -417)
+
+ -- Popup frame
+ S:HandleIconSelectionFrame(BindPadMacroPopupFrame, 20, "BindPadMacroPopupButton", "BindPadMacroPopup")
+ S:SetBackdropHitRect(BindPadMacroPopupFrame)
+ BindPadMacroPopupFrame:Point("TOPLEFT", BindPadFrame, "TOPRIGHT", -43, 0)
+
+ BindPadMacroPopupScrollFrame:SetTemplate("Transparent")
+
+ S:HandleScrollBar(BindPadMacroPopupScrollFrameScrollBar)
+
+ local text1, text2 = select(5, BindPadMacroPopupFrame:GetRegions())
+ text1:Point("TOPLEFT", 24, -18)
+ text2:Point("TOPLEFT", 24, -60)
+
+ BindPadMacroPopupEditBox:Point("TOPLEFT", 61, -35)
+
+ BindPadMacroPopupButton1:Point("TOPLEFT", 31, -82)
+
+ BindPadMacroPopupScrollFrame:Size(247, 180)
+ BindPadMacroPopupScrollFrame:Point("TOPRIGHT", -32, -76)
+
+ BindPadMacroPopupScrollFrameScrollBar:Point("TOPLEFT", BindPadMacroPopupScrollFrame, "TOPRIGHT", 3, -19)
+ BindPadMacroPopupScrollFrameScrollBar:Point("BOTTOMLEFT", BindPadMacroPopupScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ BindPadMacroPopupOkayButton:Point("RIGHT", BindPadMacroPopupCancelButton, "LEFT", -3, 0)
+
+ -- Macro Text
+ BindPadMacroTextFrame:StripTextures()
+ BindPadMacroTextFrame:CreateBackdrop("Transparent")
+ BindPadMacroTextFrame.backdrop:Point("TOPLEFT", 11, -12)
+ BindPadMacroTextFrame.backdrop:Point("BOTTOMRIGHT", -32, 76)
+
+ S:SetBackdropHitRect(BindPadMacroTextFrame)
+
+ S:HandleCloseButton(BindPadMacroTextFrameCloseButton, BindPadMacroTextFrame.backdrop)
+
+ BindPadMacroTextFrameSelectedMacroButton:StripTextures()
+ BindPadMacroTextFrameSelectedMacroButton:SetTemplate("Defaylt", true)
+ BindPadMacroTextFrameSelectedMacroButtonIcon:SetInside()
+ BindPadMacroTextFrameSelectedMacroButtonIcon:SetTexCoord(unpack(E.TexCoords))
+
+ BindPadMacroTextFrameTextBackground:SetTemplate("Defaylt")
+
+ S:HandleScrollBar(BindPadMacroTextFrameScrollFrameScrollBar)
+
+ S:HandleButton(BindPadMacroTextFrameEditButton)
+ S:HandleButton(BindPadMacroTextFrameTestButton)
+ S:HandleButton(BindPadMacroTextFrameExitButton)
+ S:HandleButton(BindPadMacroDeleteButton)
+
+ BindPadMacroTextFrameEnterMacroText:Point("TOPLEFT", BindPadMacroTextFrameSelectedMacroBackground, "BOTTOMLEFT", 8, 3)
+
+ BindPadMacroTextFrameTextBackground:Size(304, 252)
+ BindPadMacroTextFrameTextBackground:Point("TOPLEFT", 19, -147)
+
+ BindPadMacroTextFrameText:Width(298)
+
+ BindPadMacroTextFrameScrollFrame:Size(298, 241)
+ BindPadMacroTextFrameScrollFrame:Point("TOPLEFT", BindPadMacroTextFrameSelectedMacroBackground, "BOTTOMLEFT", 6, -16)
+
+ BindPadMacroTextFrameScrollFrameScrollBar:Point("TOPLEFT", BindPadMacroTextFrameScrollFrame, "TOPRIGHT", 6, -14)
+ BindPadMacroTextFrameScrollFrameScrollBar:Point("BOTTOMLEFT", BindPadMacroTextFrameScrollFrame, "BOTTOMRIGHT", 6, 13)
+
+ BindPadMacroTextFrameSelectedMacroName:Point("TOPLEFT", BindPadMacroTextFrameSelectedMacroBackground, "TOPRIGHT", -4, -12)
+ BindPadMacroTextFrameEditButton:Point("TOPLEFT", BindPadMacroTextFrameSelectedMacroBackground, "TOPLEFT", 53, -28)
+
+ BindPadMacroDeleteButton:Point("BOTTOMLEFT", 19, 84)
+ BindPadMacroTextFrameTestButton:Point("CENTER", BindPadMacroTextFrame, "TOPLEFT", 221, -417)
+ BindPadMacroTextFrameExitButton:Point("CENTER", BindPadMacroTextFrame, "TOPLEFT", 304, -417)
+
+ -- Bind
+ BindPadBindFrame:StripTextures()
+ BindPadBindFrame:SetTemplate("Transparent")
+ BindPadBindFrame:Size(400, 150)
+
+ S:HandleCloseButton(BindPadBindFrameCloseButton, BindPadBindFrame)
+
+ S:HandleButton(BindPadBindFrameUnbindButton)
+ S:HandleButton(BindPadBindFrameExitButton)
+
+ S:HandleCheckBox(BindPadBindFrameFastTriggerButton)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/blackList.lua b/ElvUI_AddOnSkins/Skins/Addons/blackList.lua
new file mode 100644
index 0000000..a73d4f4
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/blackList.lua
@@ -0,0 +1,105 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("BlackList") then return end
+
+-- Black List 3.3.01
+-- https://www.curseforge.com/wow/addons/black-list-siv0968/files/439842
+
+S:AddCallbackForAddon("BlackList", "BlackList", function()
+ if not E.private.addOnSkins.BlackList then return end
+
+ FriendsTabHeaderTab4:StripTextures()
+ FriendsTabHeaderTab4:Size(63, 26)
+ FriendsTabHeaderTab4:Point("TOPLEFT", FriendsTabHeaderTab3, "TOPLEFT", 3, -7)
+ S:HandleButton(FriendsTabHeaderTab4)
+
+ S:HandleButton(FriendsFrameBlacklistPlayerButton)
+ S:HandleButton(FriendsFrameRemovePlayerButton)
+ S:HandleButton(FriendsFrameOptionsButton)
+ S:HandleButton(FriendsFrameShareListButton)
+
+ FriendsFrameBlacklistPlayerButton:Height(22)
+ FriendsFrameRemovePlayerButton:Height(22)
+ FriendsFrameOptionsButton:Height(22)
+ FriendsFrameShareListButton:Height(22)
+
+ FriendsFrameBlacklistPlayerButton:Point("BOTTOMLEFT", FriendsFrame, "BOTTOMLEFT", 19, 109)
+ FriendsFrameRemovePlayerButton:Point("TOP", FriendsFrameBlacklistPlayerButton, "BOTTOM", 0, -3)
+ FriendsFrameOptionsButton:Point("LEFT", FriendsFrameBlacklistPlayerButton, "RIGHT", 63, 0)
+ FriendsFrameShareListButton:Point("TOP", FriendsFrameOptionsButton, "BOTTOM", 0, -3)
+
+ FriendsFrameBlackListButton1:Width(302)
+ FriendsFrameBlackListButton1:Point("TOPLEFT", FriendsFrame, "TOPLEFT", 20, -97)
+
+ FriendsFrameBlackListScrollFrame:Size(304, 282)
+ FriendsFrameBlackListScrollFrame:Point("TOPRIGHT", FriendsFrame, "TOPRIGHT", -61, -92)
+
+ FriendsFrameBlackListScrollFrame:StripTextures()
+ S:HandleScrollBar(FriendsFrameBlackListScrollFrameScrollBar)
+ FriendsFrameBlackListScrollFrameScrollBar:Point("TOPLEFT", FriendsFrameBlackListScrollFrame, "TOPRIGHT", 3, -19)
+ FriendsFrameBlackListScrollFrameScrollBar:Point("BOTTOMLEFT", FriendsFrameBlackListScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ -- Details
+ BlackListDetailsFrame:StripTextures()
+ BlackListDetailsFrame:SetTemplate("Transparent")
+ BlackListDetailsFrame:Point("TOPLEFT", FriendsFrame, "TOPRIGHT", -33, -97)
+
+ S:HandleCloseButton(BlackListDetailsCloseButton, BlackListDetailsFrame)
+
+ S:HandleButton(BlackListDetailsEditButton)
+ S:HandleCheckBox(BlackListDetailsFrameCheckButton1)
+ S:HandleCheckBox(BlackListDetailsFrameCheckButton2)
+
+ BlackListDetailsFrameReasonTextBackground:SetTemplate()
+ S:HandleScrollBar(BlackListDetailsFrameScrollFrameScrollBar)
+
+ BlackListDetailsFrameScrollFrameScrollBar:Point("BOTTOMLEFT", BlackListDetailsFrameScrollFrame, "BOTTOMRIGHT", 6, 18)
+
+ -- Details Edit
+ BlackListEditDetailsFrame:StripTextures()
+ BlackListEditDetailsFrame:SetTemplate("Transparent")
+ BlackListEditDetailsFrame:Point("TOPLEFT", BlackListDetailsFrame, "BOTTOMLEFT", 0, 1)
+
+ BlackListEditDetailsFrameLevelBackground:StripTextures()
+ BlackListEditDetailsFrameLevelBackground:CreateBackdrop()
+ BlackListEditDetailsFrameLevelBackground:Size(39, 28)
+ BlackListEditDetailsFrameLevelBackground:Point("TOPLEFT", 7, -18)
+ BlackListEditDetailsFrameLevelBackground.backdrop:Point("TOPLEFT", 5, -3)
+ BlackListEditDetailsFrameLevelBackground.backdrop:Point("BOTTOMRIGHT", -5, 5)
+
+ S:HandleDropDownBox(BlackListEditDetailsFrameClassDropDown, 143)
+ S:HandleDropDownBox(BlackListEditDetailsFrameRaceDropDown, 143)
+
+ BlackListEditDetailsFrameClassDropDown:Point("TOPLEFT", BlackListEditDetailsFrameLevelBackground, "TOPRIGHT", -18, 0)
+ BlackListEditDetailsFrameClassDropDown.SetWidth = E.noop
+ BlackListEditDetailsFrameClassDropDownButton.SetWidth = E.noop
+
+ BlackListEditDetailsFrameRaceDropDown:Point("TOPLEFT", BlackListEditDetailsFrameClassDropDown, "TOPRIGHT", -21, 0)
+ BlackListEditDetailsFrameRaceDropDown.SetWidth = E.noop
+ BlackListEditDetailsFrameRaceDropDownButton.SetWidth = E.noop
+
+ S:HandleButton(BlackListEditDetailsFrameSaveButton)
+ S:HandleButton(BlackListEditDetailsFrameCancelButton)
+
+ BlackListEditDetailsFrameSaveButton:Point("TOPLEFT", 8, -61)
+ BlackListEditDetailsFrameCancelButton:Point("LEFT", BlackListEditDetailsFrameSaveButton, "RIGHT", 19, 0)
+
+ -- Options
+ BlackListOptionsFrame:StripTextures()
+ BlackListOptionsFrame:SetTemplate("Transparent")
+
+ S:HandleCheckBox(SoundCheckButton)
+ S:HandleCheckBox(CenterCheckButton)
+ S:HandleCheckBox(ChatCheckButton)
+ S:HandleCheckBox(IgnoreCheckButton)
+ S:HandleCheckBox(BanCheckButton)
+ S:HandleCheckBox(KickCheckButton)
+
+ BL_RankBox:Size(20)
+ BL_RankBox:Point("TOPLEFT", 65, -273)
+ S:HandleEditBox(BL_RankBox)
+
+ S:HandleButton(BlackListOptionsFrameClose)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/bugSack.lua b/ElvUI_AddOnSkins/Skins/Addons/bugSack.lua
new file mode 100644
index 0000000..0d52158
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/bugSack.lua
@@ -0,0 +1,42 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("BugSack") then return end
+
+-- BugSack r229
+-- https://www.curseforge.com/wow/addons/bugsack/files/448833
+
+S:AddCallbackForAddon("BugSack", "BugSack", function()
+ if not E.private.addOnSkins.BugSack then return end
+
+ S:SecureHook(BugSack, "OpenSack", function()
+ BugSackFrame:StripTextures()
+ BugSackFrame:SetTemplate("Transparent")
+
+ for _, child in ipairs({BugSackFrame:GetChildren()}) do
+ if child:IsObjectType("Button") and child:GetScript("OnClick") == BugSack.CloseSack then
+ S:HandleCloseButton(child)
+ end
+ end
+
+ S:HandleButton(BugSackNextButton)
+ S:HandleButton(BugSackPrevButton)
+
+ if BugSack.Serialize then
+ S:HandleButton(BugSackSendButton)
+ BugSackSendButton:Point("LEFT", BugSackPrevButton, "RIGHT", E.PixelMode and 1 or 3, 0)
+ BugSackSendButton:Point("RIGHT", BugSackNextButton, "LEFT", -(E.PixelMode and 1 or 3), 0)
+ end
+
+ local scrollBar = BugSackScrollScrollBar or BugSackFrameScrollScrollBar
+ S:HandleScrollBar(scrollBar)
+
+ BugSackTabAll:Point("TOPLEFT", BugSackFrame, "BOTTOMLEFT", 0, 2)
+ S:HandleTab(BugSackTabAll)
+ S:HandleTab(BugSackTabSession)
+ S:HandleTab(BugSackTabLast)
+
+ S:Unhook(BugSack, "OpenSack")
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/buyEmAll.lua b/ElvUI_AddOnSkins/Skins/Addons/buyEmAll.lua
new file mode 100644
index 0000000..2e25fbe
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/buyEmAll.lua
@@ -0,0 +1,34 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("BuyEmAll") then return end
+
+-- BuyEmAll 2.9.2
+
+S:AddCallbackForAddon("BuyEmAll", "BuyEmAll", function()
+ if not E.private.addOnSkins.BuyEmAll then return end
+
+ BuyEmAllFrame:StripTextures()
+ BuyEmAllFrame:SetTemplate("Transparent")
+
+ local moneyTextBG = CreateFrame("Frame", "BuyEmAllFrameMoneyTexBG", BuyEmAllFrame)
+ moneyTextBG:SetTemplate("Default")
+ moneyTextBG:Size(113, 21)
+ moneyTextBG:Point("TOPLEFT", 32, -20)
+
+ BuyEmAllText:SetParent(BuyEmAllFrameMoneyTexBG)
+ BuyEmAllText:Point("RIGHT", BuyEmAllFrameMoneyTex, "RIGHT", -12, 0)
+
+ S:HandleNextPrevButton(BuyEmAllLeftButton)
+ S:HandleNextPrevButton(BuyEmAllRightButton)
+ BuyEmAllLeftButton:Size(13, 17)
+ BuyEmAllRightButton:Size(13, 17)
+
+ BuyEmAllMoneyFrame:Point("TOP", BuyEmAllFrameMoneyTex, "BOTTOM", 7, 6)
+
+ S:HandleButton(BuyEmAllOkayButton)
+ S:HandleButton(BuyEmAllCancelButton)
+ S:HandleButton(BuyEmAllStackButton)
+ S:HandleButton(BuyEmAllMaxButton)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/callToArms.lua b/ElvUI_AddOnSkins/Skins/Addons/callToArms.lua
new file mode 100644
index 0000000..e722b26
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/callToArms.lua
@@ -0,0 +1,188 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("CallToArms") then return end
+
+local _G = _G
+local ipairs = ipairs
+local select = select
+
+-- CallToArms r303
+
+S:AddCallbackForAddon("CallToArms", "CallToArms", function()
+ if not E.private.addOnSkins.CallToArms then return end
+
+ local frames = {
+ CTA_SearchFrame_Filters_PlayerInternalFrame,
+ CTA_SearchFrame_Filters_GroupInternalFrame,
+ CTA_SettingsFrameMinimapSettings,
+ CTA_SettingsFrameLFxSettings,
+ CTA_LogFrameInternalFrame,
+ CTA_GreyListItemEditFrame,
+ CTA_AddPlayerFrame,
+ }
+ local buttons = {
+ CTA_SearchButton,
+ CTA_RequestInviteButton,
+ CTA_GreyListItemEditFrameDeleteButton,
+ CTA_GreyListItemEditFrameCloseButton,
+ CTA_GreyListItemEditFrameEditButton,
+ CTA_AddPlayerButton,
+ CTA_AnnounceToLFGButton,
+ CTA_AnnounceToLFGButton2,
+ CTA_StopHostingButton,
+ CTA_ConvertToRaidButton,
+ CTA_ConvertToPartyButton,
+ CTA_ToggleViewableButton,
+ CTA_StartAPartyButton,
+ CTA_StartARaidButton,
+ CTA_AcidEditDialogCloseButton,
+ CTA_AcidEditDialogOkButton,
+ CTA_AddPlayerFrameCloseButton,
+ CTA_AddPlayerFrameOkButton,
+ }
+ local checkBoxes = {
+ CTA_MuteLFGChannelCheckButton,
+ CTA_ShowFilteredMessagesInChatCheckButton,
+ CTA_ShowOnMinimapCheckButton,
+ CTA_PlaySoundOnNewResultCheckButton,
+ CTA_ScanGuildChat,
+ CTA_DisableBroadcast,
+ CTA_MyRaidFramePVPCheckButton,
+ CTA_MyRaidFramePVECheckButton,
+ CTA_LFGCheckButton,
+ CTA_AcidClassCheckButton1,
+ CTA_AcidClassCheckButton2,
+ CTA_AcidClassCheckButton3,
+ CTA_AcidClassCheckButton4,
+ CTA_AcidClassCheckButton5,
+ CTA_AcidClassCheckButton6,
+ CTA_AcidClassCheckButton7,
+ CTA_AcidClassCheckButton8,
+ CTA_AcidClassCheckButton9,
+ CTA_AcidClassCheckButton10
+ }
+ local editBoxes = {
+ CTA_SearchFrameDescriptionEditBox,
+ CTA_GreyListItemEditFrameEditBox,
+ CTA_PlayerMinLevelEditBox,
+ CTA_PlayerMaxLevelEditBox,
+ CTA_ChatFrameNumberEditBox,
+ CTA_MyRaidFrameDescriptionEditBox,
+ CTA_MyRaidFrameMaxSizeEditBox,
+ CTA_MyRaidFrameMinLevelEditBox,
+ CTA_MyRaidFramePasswordEditBox,
+ CTA_LFGDescriptionEditBox,
+ CTA_AddPlayerFrameEditBox,
+ }
+ local sliders = {
+ CTA_MinimapArcSlider,
+ CTA_MinimapRadiusSlider,
+ CTA_MinimapMsgArcSlider,
+ CTA_MinimapMsgRadiusSlider,
+ CTA_FrameTransparencySlider,
+ CTA_FilterLevelSlider,
+ }
+ local nextPrevButtons = {
+ CTA_SearchFrame_ResultsPrev,
+ CTA_SearchFrame_ResultsNext,
+ CTA_GreyListFramePrev,
+ CTA_GreyListFrameNext,
+ CTA_LogUpButton,
+ CTA_LogDownButton,
+ CTA_LogBottomButton,
+ }
+ local tabNames = {
+ CTA_ShowResultsButton,
+ CTA_ShowOptionsButton,
+ CTA_ShowBlacklistButton,
+ CTA_SettingsFrameButton,
+ CTA_LogFrameButton,
+ CTA_ShowSearchButton,
+ CTA_ShowMyRaidButton,
+ CTA_ShowMFFButton,
+ CTA_ShowLFGButton,
+ }
+
+ for _, frame in ipairs(frames) do
+ frame:SetTemplate("Transparent")
+ end
+ for _, button in ipairs(buttons) do
+ S:HandleButton(button)
+ end
+ for _, checkbox in ipairs(checkBoxes) do
+ S:HandleCheckBox(checkbox)
+ end
+ for _, slider in ipairs(sliders) do
+ S:HandleSliderFrame(slider)
+ end
+ for _, nextPrevButton in ipairs(nextPrevButtons) do
+ S:HandleNextPrevButton(nextPrevButton)
+ end
+ for _, tab in ipairs(tabNames) do
+ S:HandleTab(tab)
+
+ local text = _G[tab:GetName().."Text"]
+ text:ClearAllPoints()
+ text:Point("CENTER", 0, 1)
+ end
+
+ local function editboxClearFocus(self)
+ self:ClearFocus()
+ end
+ for _, editBox in ipairs(editBoxes) do
+ local backdrop, border = select(6, editBox:GetRegions())
+ backdrop:Hide()
+ border:Hide()
+
+ S:HandleEditBox(editBox)
+
+ if not editBox:GetScript("OnEnterPressed") then
+ editBox:SetScript("OnEnterPressed", editboxClearFocus)
+ end
+ if not editBox:GetScript("OnEscapePressed") then
+ editBox:SetScript("OnEscapePressed", editboxClearFocus)
+ end
+ end
+
+ CTA_MainFrame:StripTextures()
+ CTA_MainFrame:SetTemplate("Transparent")
+ CTA_MainFrame:Height(500)
+
+ S:HandleCloseButton(CTA_MainFrameCloseButton, CTA_MainFrame)
+
+ CTA_SearchDropDown:Point("TOPLEFT", 4, -48)
+ S:HandleDropDownBox(CTA_SearchDropDown, 200)
+ S:HandleDropDownBox(CTA_PlayerClassDropDown, 100)
+ S:HandleDropDownBox(CTA_RoleplayDropDown, 100)
+
+ CTA_SearchFrame_ResultsPrev:Point("BOTTOM", -60, 7)
+ CTA_SearchFrame_ResultsNext:Point("BOTTOM", 60, 7)
+
+ CTA_GreyListFramePrev:Point("BOTTOM", -60, 7)
+ CTA_GreyListFrameNext:Point("BOTTOM", 60, 7)
+
+ CTA_ShowSearchButton:Point("TOPLEFT", CTA_MainFrame, "BOTTOMLEFT", 0, 2)
+ CTA_ShowMyRaidButton:Point("TOPLEFT", CTA_ShowSearchButton, "TOPRIGHT", -15, 0)
+ CTA_ShowLFGButton:Point("TOPLEFT", CTA_ShowMyRaidButton, "TOPRIGHT", -15, 0)
+ CTA_ShowMFFButton:Point("TOPRIGHT", CTA_MainFrame, "BOTTOMRIGHT", 0, 2)
+
+ CTA_AnnounceToLFGButton2:Point("BOTTOM", 0, 90)
+
+ CTA_AcidEditDialog:StripTextures()
+ CTA_AcidEditDialog:SetTemplate("Default")
+
+ for i = 0, 10 do
+ _G["CTA_Acid"..i.."barBorder"]:SetTemplate("Transparent")
+ S:HandleButton(_G["CTA_Acid"..i.."DeleteButton"])
+
+ local button = _G["CTA_Acid"..i.."MoreButton"]
+ button:Point("TOPLEFT", 43, 0)
+ S:HandleNextPrevButton(button, "up")
+
+ button = _G["CTA_Acid"..i.."LessButton"]
+ button:Point("TOPLEFT", 43, -30)
+ S:HandleNextPrevButton(button, "down")
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/carbonite.lua b/ElvUI_AddOnSkins/Skins/Addons/carbonite.lua
new file mode 100644
index 0000000..ad1ca4b
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/carbonite.lua
@@ -0,0 +1,91 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Carbonite") then return end
+
+local pairs = pairs
+local lshift = bit.lshift
+
+-- Carbonite 3.34
+
+S:AddCallbackForAddon("Carbonite", "Carbonite", function()
+ if not E.private.addOnSkins.Carbonite then return end
+
+ local function ColorConvert(r, g, b, a)
+ if not a then a = 1 end
+
+ local clr = r * 255
+ clr = lshift(clr, 8) + g * 255
+ clr = lshift(clr, 8) + b * 255
+ clr = lshift(clr, 8) + a * 255
+
+ return clr
+ end
+
+ local borderColor = ColorConvert(unpack(E.media.bordercolor))
+ local backdropColor = ColorConvert(unpack(E.media.backdropfadecolor))
+
+ local backdrop
+ if E.private.general.pixelPerfect then
+ backdrop = {
+ bgFile = E.media.blankTex,
+ edgeFile = E.media.blankTex,
+ tile = false, tileSize = 0, edgeSize = E.mult,
+ insets = {left = 0, right = 0, top = 0, bottom = 0}
+ }
+ else
+ backdrop = {
+ bgFile = E.media.blankTex,
+ edgeFile = E.media.blankTex,
+ tile = false, tileSize = 0, edgeSize = E.mult,
+ insets = {left = -E.mult, right = -E.mult, top = -E.mult, bottom = -E.mult}
+ }
+ end
+
+ Nx.Ski1["ElvUI"] = {
+ ["Folder"] = "",
+ ["WinBrH"] = "WinBrH",
+ ["WinBrV"] = "WinBrV",
+ ["TabOff"] = "TabOff",
+ ["TabOn"] = "TabOn",
+ ["Backdrop"] = backdrop,
+ ["BdCol"] = borderColor,
+ ["BgCol"] = backdropColor,
+ }
+
+ for i, v in ipairs(Nx.OpD) do
+ if v.N == "Skin" then
+ table.insert(Nx.OpD[i], {N = "ElvUI", F = "NXCmdSkin", Dat = "ElvUI"})
+ break
+ end
+ end
+
+ Nx.Tit.Frm:SetTemplate("Transparent")
+
+ for win in pairs(Nx.Win.Win2) do
+ win.Frm:SetTemplate("Transparent")
+ end
+
+ for men in pairs(Nx.Men.Men1) do
+ men.MaF:SetTemplate("Transparent")
+ end
+
+ S:RawHook(Nx.Win, "Cre", function(self, ...)
+ local win = S.hooks[self].Cre(self, ...)
+ win.Frm:SetTemplate("Transparent")
+ return win
+ end)
+
+ S:RawHook(Nx.Men, "Cre", function(self, ...)
+ local men = S.hooks[self].Cre(self, ...)
+ men.MaF:SetTemplate("Transparent")
+ return men
+ end)
+
+ S:RawHook(Nx.Ski, "GFSBGC", function(self)
+ return E.media.backdropfadecolor
+ end, true)
+
+ Nx.Ski:Set("ElvUI")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/chatBar.lua b/ElvUI_AddOnSkins/Skins/Addons/chatBar.lua
new file mode 100644
index 0000000..8551c4c
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/chatBar.lua
@@ -0,0 +1,188 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("ChatBar") then return end
+
+local _G = _G
+local abs = math.abs
+
+-- ChatBar 3.1
+
+S:AddCallbackForAddon("ChatBar", "ChatBar", function()
+ if not E.private.addOnSkins.ChatBar then return end
+
+ local db = E.db.addOnSkins
+
+ if ChatBar_ButtonScale then
+ ChatBar_ButtonScale = 1
+ end
+
+ ChatBar_UpdateArt = E.noop
+ ChatBar_Toggle_LargeButtons = E.noop
+
+ ChatBarFrameBackground:SetOutside()
+ ChatBarFrameBackground:SetTemplate("Transparent")
+
+ for i = 1, 20 do
+ local button = _G["ChatBarFrameButton" .. i]
+ local center = _G["ChatBarFrameButton" .. i .. "Center"]
+ local highlight = _G["ChatBarFrameButton" .. i .. "Highlight"]
+ local flash = _G["ChatBarFrameButton" .. i .. "Flash"]
+
+ button:StripTextures()
+ button:SetTemplate()
+ button:SetScale(1)
+ button:Size(db.chatBarSize)
+
+ center:SetInside()
+ highlight:SetInside()
+ flash:SetInside()
+
+ center:SetTexture(1, 1, 1)
+ highlight:SetTexture(1, 1, 1, 0.5)
+ flash:SetTexture(1, 1, 1, 0.5)
+
+ highlight:SetBlendMode("MOD")
+ flash:SetTexture("MOD")
+ end
+
+ ChatBarFrame:SetScript("OnUpdate", function(self, elapsed)
+ if self.slidingEnabled and self.isSliding and self.velocity and self.endsize then
+ local currSize = ChatBar_GetSize()
+
+ if abs(currSize - self.endsize) < ConstantSnapLimit then
+ ChatBar_SetSize(self.endsize)
+ ChatBarFrame.isSliding = nil
+ self.velocity = 0
+
+ if ChatBar_VerticalDisplay_Sliding or ChatBar_AlternateDisplay_Sliding or ChatBar_LargeButtons_Sliding then
+ if ChatBar_VerticalDisplay_Sliding then
+ ChatBar_VerticalDisplay_Sliding = nil
+ ChatBar_Toggle_VerticalButtonOrientation()
+ elseif ChatBar_AlternateDisplay_Sliding then
+ ChatBar_AlternateDisplay_Sliding = nil
+ ChatBar_Toggle_AlternateButtonOrientation()
+ elseif ChatBar_LargeButtons_Sliding then
+ ChatBar_LargeButtons_Sliding = nil
+ ChatBar_UpdateButtons()
+ end
+
+ ChatBar_UpdateOrientationPoint()
+ else
+ ChatBar_UpdateOrientationPoint(true)
+ end
+ else
+ local desiredVelocity = ConstantVelocityModifier * (self.endsize - currSize)
+ local acceleration = ConstantJerk * (desiredVelocity - self.velocity)
+
+ self.velocity = self.velocity + acceleration * elapsed
+ ChatBar_SetSize(currSize + self.velocity * elapsed)
+ end
+
+ local frame
+ for i = 1, CHAT_BAR_MAX_BUTTONS do
+ frame = _G["ChatBarFrameButton" .. i]
+ if currSize >= (i * (db.chatBarSize + db.chatBarSpacing) - db.chatBarSpacing) then
+ frame:Show()
+ else
+ frame:Hide()
+ end
+ end
+ elseif self.count then
+ if self.count > CHAT_BAR_UPDATE_DELAY then
+ self.count = nil
+ ChatBarFrame.slidingEnabled = true
+ ChatBar_UpdateButtons()
+ else
+ self.count = self.count + 1
+ end
+ end
+ end)
+
+ function ChatBar_UpdateButtonOrientation()
+ local button = ChatBarFrameButton1
+ button:ClearAllPoints()
+ button.Text:ClearAllPoints()
+ button.Text:SetPoint(db.chatBarTextPoint, button, db.chatBarTextPoint, db.chatBarTextXOffset, db.chatBarTextYOffset)
+
+ if ChatBar_VerticalDisplay then
+ if ChatBar_AlternateOrientation then
+ button:SetPoint("TOP", "ChatBarFrame", "TOP", 0, -db.chatBarSpacing)
+ else
+ button:SetPoint("BOTTOM", "ChatBarFrame", "BOTTOM", 0, db.chatBarSpacing)
+ end
+ else
+ if ChatBar_AlternateOrientation then
+ button:SetPoint("RIGHT", "ChatBarFrame", "RIGHT", -db.chatBarSpacing, 0)
+ else
+ button:SetPoint("LEFT", "ChatBarFrame", "LEFT", db.chatBarSpacing, 0)
+ end
+ end
+
+ for i = 2, CHAT_BAR_MAX_BUTTONS do
+ button = _G["ChatBarFrameButton"..i]
+ button:ClearAllPoints()
+ button.Text:ClearAllPoints()
+ button.Text:SetPoint(db.chatBarTextPoint, button, db.chatBarTextPoint, db.chatBarTextXOffset, db.chatBarTextYOffset)
+
+ if ChatBar_VerticalDisplay then
+ if ChatBar_AlternateOrientation then
+ button:SetPoint("TOP", "ChatBarFrameButton"..(i-1), "BOTTOM", 0, -db.chatBarSpacing)
+ else
+ button:SetPoint("BOTTOM", "ChatBarFrameButton"..(i-1), "TOP", 0, db.chatBarSpacing)
+ end
+ else
+ if ChatBar_AlternateOrientation then
+ button:SetPoint("RIGHT", "ChatBarFrameButton"..(i-1), "LEFT", -db.chatBarSpacing, 0)
+ else
+ button:SetPoint("LEFT", "ChatBarFrameButton"..(i-1), "RIGHT", db.chatBarSpacing, 0)
+ end
+ end
+ end
+ end
+
+ hooksecurefunc("ChatBar_UpdateButtons", function()
+ local i, buttonIndex = 1, 1
+
+ if not ChatBar_HideAllButtons then
+ while ChatBar_ChatTypes[i] and buttonIndex <= 20 do
+ if ChatBar_ChatTypes[i].show() then
+ _G["ChatBarFrameButton" .. buttonIndex]:Size(db.chatBarSize)
+ _G["ChatBarFrameButton" .. buttonIndex]:SetAlpha(1)
+ buttonIndex = buttonIndex + 1
+ end
+
+ i = i + 1
+ end
+ end
+
+ local size = (buttonIndex - 1) * (db.chatBarSize + db.chatBarSpacing) + db.chatBarSpacing
+ if ChatBar_VerticalDisplay then
+ ChatBarFrame:SetWidth(db.chatBarSize + (db.chatBarSpacing * 2))
+
+ if ChatBarFrame:GetTop() then
+ ChatBar_StartSlidingTo(size)
+ else
+ ChatBarFrame:SetHeight(size)
+ end
+ else
+ ChatBarFrame:SetHeight(db.chatBarSize + (db.chatBarSpacing * 2))
+
+ if ChatBarFrame:GetRight() then
+ ChatBar_StartSlidingTo(size)
+ else
+ ChatBarFrame:SetWidth(size)
+ end
+ end
+
+ while buttonIndex <= 20 do
+ _G["ChatBarFrameButton" .. buttonIndex]:SetAlpha(0)
+ buttonIndex = buttonIndex + 1
+ end
+ end)
+
+ ChatBar_UpdateButtonOrientation()
+
+ E:GetModule("Tooltip"):HookScript(ChatBarFrameTooltip, "OnShow", "SetStyle")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/chocolateBar.lua b/ElvUI_AddOnSkins/Skins/Addons/chocolateBar.lua
new file mode 100644
index 0000000..2722ef5
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/chocolateBar.lua
@@ -0,0 +1,31 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("ChocolateBar") then return end
+
+-- ChocolateBar r109
+-- https://www.curseforge.com/wow/addons/chocolatebar/files/445816
+
+S:AddCallbackForAddon("ChocolateBar", "ChocolateBar", function()
+ if not E.private.addOnSkins.ChocolateBar then return end
+
+ local i = 1
+ local frame = _G["ChocolateBar"..i]
+ while frame do
+ frame:SetTemplate("Transparent")
+ i = i + 1
+ frame = _G["ChocolateBar"..i]
+ end
+
+ local ChocolateBar = LibStub("AceAddon-3.0"):GetAddon("ChocolateBar", true)
+ if not ChocolateBar then return end
+
+ hooksecurefunc(ChocolateBar.Bar, "New", function(self, name)
+ _G[name]:SetTemplate("Transparent")
+ end)
+
+ if RaidUtility_ShowButton then
+ RaidUtility_ShowButton:Point("TOP", -400, -19)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/clique.lua b/ElvUI_AddOnSkins/Skins/Addons/clique.lua
new file mode 100644
index 0000000..1f811b4
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/clique.lua
@@ -0,0 +1,225 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Clique") then return end
+
+local _G = _G
+local unpack = unpack
+
+local FauxScrollFrame_GetOffset = FauxScrollFrame_GetOffset
+
+-- Clique r139
+-- https://www.curseforge.com/wow/addons/clique/files/466948
+
+S:AddCallbackForAddon("Clique", "Clique", function()
+ if not E.private.addOnSkins.Clique then return end
+
+ CliquePulloutTab:StyleButton(nil, true)
+ CliquePulloutTab:SetTemplate("Default", true)
+ CliquePulloutTab:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ CliquePulloutTab:GetNormalTexture():SetInside()
+ CliquePulloutTab:GetRegions():Hide()
+
+ local function SkinFrame(frame)
+ frame:StripTextures()
+ frame:SetTemplate("Transparent")
+
+ frame.titleBar:StripTextures()
+ frame.titleBar:SetTemplate("Default", true)
+ frame.titleBar:Height(20)
+ frame.titleBar:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, 0)
+ frame.titleBar:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, 0)
+ end
+
+ local function listItemOnEnter(self)
+ self:SetBackdropBorderColor(unpack(E.media.rgbvaluecolor))
+ end
+ local function listItemOnLeave(self)
+ local offset = FauxScrollFrame_GetOffset(CliqueListScroll)
+ if (self.id + offset) == Clique.listSelected then
+ self:SetBackdropBorderColor(1, 1, 1)
+ else
+ self:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+ end
+
+ hooksecurefunc(Clique, "CreateOptionsFrame", function()
+ -- Main Frame
+ SkinFrame(CliqueFrame)
+
+ CliqueFrame:Height(424)
+ CliqueFrame:Point("LEFT", SpellBookFrame, "RIGHT", 6, 32)
+
+ S:HandleCloseButton(CliqueButtonClose)
+ CliqueButtonClose:Size(32)
+ CliqueButtonClose:Point("TOPRIGHT", 5, 6)
+
+ S:HandleDropDownBox(CliqueDropDown, 170)
+ CliqueDropDown:Point("TOPRIGHT", 0, -26)
+
+ CliqueList1:Point("TOPLEFT", 8, -56)
+
+ CliqueListScroll:StripTextures()
+ S:HandleScrollBar(CliqueListScrollScrollBar)
+ CliqueListScrollScrollBar:Point("TOPLEFT", CliqueListScroll, "TOPRIGHT", 3, -19)
+ CliqueListScrollScrollBar:Point("BOTTOMLEFT", CliqueListScroll, "BOTTOMRIGHT", 3, 19)
+
+ CliqueButtonCustom:Point("BOTTOMLEFT", 8, 8)
+
+ for i = 1, 10 do
+ local entry = _G["CliqueList"..i]
+ entry:Size(388, 32)
+ entry:SetTemplate("Default")
+ entry.icon:Point("LEFT", 4, 0)
+ entry.icon:SetTexCoord(unpack(E.TexCoords))
+
+ if i > 1 then
+ entry:Point("TOP", _G["CliqueList" .. (i - 1)], "BOTTOM", 0, -1)
+ end
+
+ entry:SetScript("OnEnter", listItemOnEnter)
+ entry:SetScript("OnLeave", listItemOnLeave)
+ end
+
+ S:HandleButton(CliqueButtonCustom)
+ S:HandleButton(CliqueButtonFrames)
+ S:HandleButton(CliqueButtonProfiles)
+ S:HandleButton(CliqueButtonOptions)
+ S:HandleButton(CliqueButtonDelete)
+ S:HandleButton(CliqueButtonEdit)
+
+ -- OptionsFrame
+ SkinFrame(CliqueOptionsFrame)
+ CliqueOptionsFrame:Height(125)
+ CliqueOptionsFrame:Point("TOPLEFT", CliqueFrame, "TOPRIGHT", -1, 0)
+
+ S:HandleCloseButton(CliqueOptionsButtonClose)
+ CliqueOptionsButtonClose:Size(32)
+ CliqueOptionsButtonClose:Point("TOPRIGHT", 5, 6)
+
+ if CliqueOptionsAnyDown then
+ S:HandleCheckBox(CliqueOptionsAnyDown)
+ CliqueOptionsAnyDown.backdrop:Point("TOPLEFT", 6, -4)
+ CliqueOptionsAnyDown.backdrop:Point("BOTTOMRIGHT", -4, 3)
+ CliqueOptionsAnyDown.backdrop:Point("TOPRIGHT", CliqueOptionsAnyDown.name, "TOPLEFT", -4, 0)
+ end
+
+ S:HandleCheckBox(CliqueOptionsSpecSwitch)
+ CliqueOptionsSpecSwitch.backdrop:Point("TOPLEFT", 6, -4)
+ CliqueOptionsSpecSwitch.backdrop:Point("BOTTOMRIGHT", -4, 3)
+ CliqueOptionsSpecSwitch.backdrop:Point("TOPRIGHT", CliqueOptionsSpecSwitch.name, "TOPLEFT", -4, 0)
+
+ S:HandleDropDownBox(CliquePriSpecDropDown, 225)
+ S:HandleDropDownBox(CliqueSecSpecDropDown, 225)
+
+ CliqueSecSpecDropDown:Point("TOPLEFT", CliquePriSpecDropDown, "BOTTOMLEFT", 0, 7)
+
+ -- TextListFrame
+ SkinFrame(CliqueTextListFrame)
+
+ CliqueTextListFrame:Point("BOTTOMLEFT", CliqueFrame, "BOTTOMRIGHT", -1, 0)
+
+ S:HandleCloseButton(CliqueTextButtonClose)
+ CliqueTextButtonClose:Size(32)
+ CliqueTextButtonClose:Point("TOPRIGHT", 5, 6)
+
+ CliqueTextList1:Point("TOPLEFT", 6, -23)
+
+ CliqueTextListScroll:StripTextures()
+ S:HandleScrollBar(CliqueTextListScrollScrollBar)
+ CliqueTextListScrollScrollBar:Point("TOPLEFT", CliqueTextListScroll, "TOPRIGHT", 3, -19)
+ CliqueTextListScrollScrollBar:Point("BOTTOMLEFT", CliqueTextListScroll, "BOTTOMRIGHT", 3, 19)
+
+ S:HandleButton(CliqueButtonDeleteProfile)
+ S:HandleButton(CliqueButtonSetProfile)
+ S:HandleButton(CliqueButtonNewProfile)
+
+ CliqueButtonDeleteProfile:Point("BOTTOMLEFT", 30, 8)
+
+ for i = 1, 12 do
+ local entry = _G["CliqueTextList"..i]
+ S:HandleCheckBox(entry)
+ entry.backdrop:Point("TOPLEFT", 6, -4)
+ entry.backdrop:Point("BOTTOMRIGHT", -4, 3)
+ entry.backdrop:Point("TOPRIGHT", entry.name, "TOPLEFT", -4, 0)
+ end
+
+ -- CustomFrame
+ SkinFrame(CliqueCustomFrame)
+
+ S:HandleButton(CliqueCustomButtonBinding)
+ S:HandleButton(CliqueCustomButtonIcon)
+ CliqueCustomButtonIcon.icon:SetTexCoord(unpack(E.TexCoords))
+ CliqueCustomButtonIcon.icon:SetInside()
+
+ for i = 1, 5 do
+ local entry = _G["CliqueCustomArg"..i]
+ S:HandleEditBox(entry)
+ entry.backdrop:Point("TOPLEFT", -5, -5)
+ entry.backdrop:Point("BOTTOMRIGHT", -5, 5)
+ end
+
+ CliqueMulti:Width(276)
+ CliqueMulti:Point("TOPRIGHT", CliqueCustomArg1, "BOTTOMRIGHT", -14, -27)
+ CliqueMulti:SetBackdrop(nil)
+ CliqueMulti:CreateBackdrop("Default")
+ CliqueMulti.backdrop:Point("TOPLEFT", 5, -7)
+ CliqueMulti.backdrop:Point("BOTTOMRIGHT", -5, 5)
+
+ S:HandleScrollBar(CliqueMultiScrollFrameScrollBar)
+ CliqueMultiScrollFrameScrollBar:Point("TOPLEFT", CliqueMultiScrollFrame, "TOPRIGHT", 6, -18)
+
+ S:HandleButton(CliqueCustomButtonCancel)
+ S:HandleButton(CliqueCustomButtonSave)
+
+ CliqueCustomButtonCancel:Point("BOTTOM", 65, 8)
+
+ -- IconSelectFrame
+ SkinFrame(CliqueIconSelectFrame)
+
+ CliqueIconSelectFrame:Size(261, 211)
+
+ CliqueIcon1:Point("TOPLEFT", 9, -28)
+
+ CliqueIconScrollFrame:StripTextures()
+ S:HandleScrollBar(CliqueIconScrollFrameScrollBar)
+ CliqueIconScrollFrameScrollBar:Point("TOPLEFT", CliqueIconScrollFrame, "TOPRIGHT", -4, -18)
+ CliqueIconScrollFrameScrollBar:Point("BOTTOMLEFT", CliqueIconScrollFrame, "BOTTOMRIGHT", -4, 18)
+
+ for i = 1, 20 do
+ local button = _G["CliqueIcon"..i]
+ local buttonIcon = _G["CliqueIcon"..i.."Icon"]
+
+ button:StripTextures()
+ button:StyleButton(nil, true)
+ button.hover:SetAllPoints()
+ button:CreateBackdrop("Default")
+
+ buttonIcon:SetAllPoints()
+ buttonIcon:SetTexCoord(unpack(E.TexCoords))
+ end
+ end)
+
+ hooksecurefunc(Clique, "ListScrollUpdate", function(self)
+ if not CliqueListScroll then return end
+
+ local offset = FauxScrollFrame_GetOffset(CliqueListScroll)
+ local width = CliqueListScroll:IsShown() and 388 or 384
+
+ for i = 1, 10 do
+ local idx = offset + i
+
+ if idx <= #self.sortList then
+ local button = _G["CliqueList" .. i]
+ button:Width(width)
+
+ if idx == self.listSelected then
+ button:SetBackdropBorderColor(1, 1, 1)
+ else
+ button:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+ end
+ end
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/dbm.lua b/ElvUI_AddOnSkins/Skins/Addons/dbm.lua
new file mode 100644
index 0000000..540cd49
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/dbm.lua
@@ -0,0 +1,640 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("DBM-Core") then return end
+
+local _G = _G
+local unpack = unpack
+local find, gsub = string.find, string.gsub
+
+local CreateFrame = CreateFrame
+local hooksecurefunc = hooksecurefunc
+
+-- Deadly Boss Mods 4.52 r4442
+-- https://www.curseforge.com/wow/addons/deadly-boss-mods/files/447605
+
+S:AddCallbackForAddon("DBM-Core", "DBM-Core", function()
+ if not E.private.addOnSkins.DBM then return end
+
+ local backportVersion = DBM.ReleaseRevision > 7000
+ local backportVersion2 = DBM.ReleaseRevision >= 20220412000000 -- 9.2.14
+
+ local function createIconOverlay(id, parent)
+ local frame = CreateFrame("Frame", "$parentIcon" .. id .. "Overlay", parent)
+ frame:SetTemplate()
+
+ if id == 1 then
+ if E.db.addOnSkins.DBMSkinHalf then
+ frame:Point("BOTTOMRIGHT", parent, "BOTTOMLEFT", -10 * (E.Border + E.Spacing), 0)
+ else
+ frame:Point("RIGHT", parent, "LEFT", -(E.Border + E.Spacing), 0)
+ end
+ elseif E.db.addOnSkins.DBMSkinHalf then
+ frame:Point("BOTTOMLEFT", parent, "BOTTOMRIGHT", 10 * (E.Border + E.Spacing), 0)
+ else
+ frame:Point("LEFT", parent, "RIGHT", (E.Border + E.Spacing), 0)
+ end
+
+ local backdroptex = frame:CreateTexture(nil, "BORDER")
+ backdroptex:SetTexture("Interface\\Icons\\Spell_Nature_WispSplode")
+ backdroptex:SetInside(frame)
+ backdroptex:SetTexCoord(unpack(E.TexCoords))
+
+ return frame
+ end
+
+ local function applyStyle(self)
+ local db = E.db.addOnSkins
+
+ local frame = self.frame
+ local frameName = frame:GetName()
+ local bar = _G[frameName .. "Bar"]
+ local background = _G[frameName .. "BarBackground"]
+ local icon1 = _G[frameName .. "BarIcon1"]
+ local icon2 = _G[frameName .. "BarIcon2"]
+ local name = _G[frameName .. "BarName"]
+ local timer = _G[frameName .. "BarTimer"]
+ local spark = _G[frameName .. "BarSpark"]
+
+ local scale = self.enlarged and self.owner.options.HugeScale or self.owner.options.Scale
+ local barWidth = (self.enlarged and self.owner.options.HugeWidth or self.owner.options.Width) * scale
+ local barHeight = (backportVersion2 and (self.enlarged and self.owner.options.HugeHeight or self.owner.options.Height) or db.dbmBarHeight) * scale
+ local fontSize = db.dbmFontSize * scale
+
+ background:Hide()
+ spark:Hide()
+ frame._SetPoint = frame.SetPoint
+
+ self._bar = bar
+ self._icon1 = icon1
+ self._icon2 = icon2
+ self._name = name
+ self._timer = timer
+ self._font = E.LSM:Fetch("font", db.dbmFont)
+
+ if not icon1.overlay then
+ icon1.overlay = createIconOverlay(1, frame)
+ icon1:SetTexCoord(unpack(E.TexCoords))
+ icon1:SetParent(icon1.overlay)
+ icon1:SetInside(icon1.overlay)
+ end
+ if not icon2.overlay then
+ icon2.overlay = createIconOverlay(2, frame)
+ icon2:SetTexCoord(unpack(E.TexCoords))
+ icon2:SetParent(icon2.overlay)
+ icon2:SetInside(icon2.overlay)
+ end
+
+ frame:SetScale(1)
+ frame:SetTemplate(db.dbmTemplate)
+
+ bar:SetInside(frame)
+
+ frame:Size(barWidth, db.DBMSkinHalf and barHeight / 3 or barHeight)
+ bar:Size(barWidth, barHeight)
+
+ icon1.overlay:Size(barHeight)
+ icon2.overlay:Size(barHeight)
+
+ name:ClearAllPoints()
+ timer:ClearAllPoints()
+
+ if db.DBMSkinHalf then
+ if not self.owner.options.BarYOffset or self.owner.options.BarYOffset < 20 then
+ self.owner.options.BarYOffset = 20
+ end
+
+ if not self.owner.options.HugeBarYOffset or self.owner.options.HugeBarYOffset < 20 then
+ self.owner.options.HugeBarYOffset = 20
+ end
+
+ name:Point("BOTTOMLEFT", frame, "TOPLEFT", 0, 3)
+ if backportVersion then
+ name:Point("BOTTOMRIGHT", timer, "BOTTOMLEFT")
+ end
+ timer:Point("BOTTOMRIGHT", frame, "TOPRIGHT", 1, 3)
+ else
+ name:Point("LEFT", 5, 0)
+ if backportVersion then
+ name:Point("RIGHT", timer, "LEFT")
+ end
+ timer:Point("RIGHT", -5, 0)
+ end
+
+ if not backportVersion then
+ name:SetFont(self._font, fontSize, db.dbmFontOutline)
+ timer:SetFont(self._font, fontSize, db.dbmFontOutline)
+ end
+
+ if self.owner.options.IconLeft then
+ icon1.overlay:Show()
+ else
+ icon1.overlay:Hide()
+ end
+
+ if self.owner.options.IconRight then
+ icon2.overlay:Show()
+ else
+ icon2.overlay:Hide()
+ end
+ end
+
+ local function skinBars(self)
+ local db = E.db.addOnSkins
+
+ for bar in self:GetBarIterator() do
+ if not bar.injected then
+ hooksecurefunc(bar, "Update", function()
+ local sparkEnabled = DBT.Options.Spark
+ if not (db.DBMSkinHalf and sparkEnabled) then return end
+ local spark = _G[bar.frame:GetName().."BarSpark"]
+ spark:SetSize(12, ((bar.enlarged and DBT.Options.HugeHeight or DBT.Options.Height) * 3) - 2)
+ local a, b, c, d = spark:GetPoint()
+ spark:SetPoint(a, b, c, d, 0)
+ end)
+ hooksecurefunc(bar, "ApplyStyle", function()
+ local frame = bar.frame
+ local tbar = _G[frame:GetName().."Bar"]
+ local icon1 = _G[frame:GetName().."BarIcon1"]
+ local icon2 = _G[frame:GetName().."BarIcon2"]
+ local name = _G[frame:GetName().."BarName"]
+ local timer = _G[frame:GetName().."BarTimer"]
+ local iconSize = (bar.enlarged and DBT.Options.HugeHeight or DBT.Options.Height) * db.dbmIconSize
+ if db.DBMSkinHalf then
+ iconSize = iconSize * 2
+ end
+
+ if not icon1.overlay then
+ icon1.overlay = createIconOverlay(1, frame)
+ icon1:SetTexCoord(unpack(E.TexCoords))
+ icon1:SetParent(icon1.overlay)
+ icon1:SetInside(icon1.overlay)
+ end
+ icon1.overlay:SetSize(iconSize, iconSize)
+
+ if not icon2.overlay then
+ icon2.overlay = createIconOverlay(2, frame)
+ icon2:SetTexCoord(unpack(E.TexCoords))
+ icon2:SetParent(icon2.overlay)
+ icon2:SetInside(icon2.overlay)
+ end
+ icon2.overlay:SetSize(iconSize, iconSize)
+
+ frame:SetTemplate(db.dbmTemplate)
+
+ tbar:SetInside(frame)
+
+ name:ClearAllPoints()
+ name:SetWidth(165)
+ name:SetHeight(8)
+ name:SetJustifyH("LEFT")
+ name:SetShadowColor(0, 0, 0, 0)
+
+ timer:ClearAllPoints()
+ timer:SetJustifyH("RIGHT")
+ timer:SetShadowColor(0, 0, 0, 0)
+
+ if db.DBMSkinHalf then
+ name:SetPoint("BOTTOMLEFT", frame, "TOPLEFT", 0, 3)
+ name:SetPoint("BOTTOMRIGHT", timer, "BOTTOMLEFT") -- truncation
+ timer:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT", -1, 1)
+ else
+ name:SetPoint("LEFT", frame, "LEFT", 4, 0)
+ name:SetPoint("RIGHT", timer, "LEFT") -- truncation
+ timer:SetPoint("RIGHT", frame, "RIGHT", -4, 0)
+ end
+
+ if DBT.Options.IconLeft then icon1.overlay:Show() else icon1.overlay:Hide() end
+ if DBT.Options.IconRight then icon2.overlay:Show() else icon2.overlay:Hide() end
+
+ bar.injected = true
+ end)
+ bar:ApplyStyle()
+ end
+ end
+ end
+
+ local function correctPoint(self, p1, a, p2, x, y)
+ self._SetPoint(self, p1, a, p2, x, y - 40)
+ self.SetPoint = nil
+ end
+ local function preUpdate(self, elapsed)
+ if (self.timer - elapsed > 0) and self.moving == "move" and self.moveElapsed <= 0.5 and self.owner.options.ExpandUpwards then
+ self.frame.SetPoint = correctPoint
+ end
+ end
+
+ local function setPosition(self)
+ if self.moving == "enlarge" then return end
+
+ local enlarged = self.enlarged
+ local expandUpwards = backportVersion and (enlarged and self.owner.options.ExpandUpwardsLarge or self.owner.options.ExpandUpwards) or self.owner.options.ExpandUpwards
+ local anchor = (self.prev and self.prev.frame) or (self.enlarged and self.owner.secAnchor) or self.owner.mainAnchor
+
+ self.frame:ClearAllPoints()
+ if expandUpwards then
+ self.frame:SetPoint("BOTTOM", anchor, "TOP", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
+ else
+ self.frame:SetPoint("TOP", anchor, "BOTTOM", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], -self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
+ end
+ end
+
+ local function moveToNextPosition(self, oldX, oldY)
+ if self.moving == "enlarge" then return end
+
+ local enlarged = self.enlarged
+ local expandUpwards = backportVersion and (enlarged and self.owner.options.ExpandUpwardsLarge or self.owner.options.ExpandUpwards) or self.owner.options.ExpandUpwards
+ local newAnchor = (self.prev and self.prev.frame) or (self.enlarged and self.owner.secAnchor) or self.owner.mainAnchor
+
+ oldX = oldX or (self.frame:GetRight() - self.frame:GetWidth() / 2)
+ if expandUpwards then
+ oldY = oldY or self.frame:GetTop() + self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"]
+ else
+ oldY = oldY or self.frame:GetTop() - self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"]
+ end
+
+ self.frame:ClearAllPoints()
+ if expandUpwards then
+ self.movePoint = "BOTTOM"
+ self.moveRelPoint = "TOP"
+ self.frame:SetPoint("BOTTOM", newAnchor, "TOP", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
+ else
+ self.movePoint = "TOP"
+ self.moveRelPoint = "BOTTOM"
+ self.frame:SetPoint("TOP", newAnchor, "BOTTOM", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], -self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
+ end
+
+ local newX = self.frame:GetRight() - self.frame:GetWidth() / 2
+ local newY = self.frame:GetTop()
+
+ self.moveAnchor = newAnchor
+ self.moveOffsetX = -(newX - oldX)
+ self.moveOffsetY = -(newY - oldY)
+ self.moveElapsed = 0
+
+ if self.owner.options.BarStyle ~= "NoAnim" then
+ self.frame:ClearAllPoints()
+ self.frame:SetPoint(self.movePoint, newAnchor, self.moveRelPoint, self.moveOffsetX, self.moveOffsetY)
+ self.moving = "move"
+ end
+ end
+
+ local function enlarge(self)
+ local newAnchor = (self.owner.hugeBars.last and self.owner.hugeBars.last.frame) or self.owner.secAnchor
+ local oldX = self.frame:GetRight() - self.frame:GetWidth() / 2
+ local oldY = self.frame:GetTop()
+
+ local enlarged = self.enlarged
+ local expandUpwards = backportVersion and (enlarged and self.owner.options.ExpandUpwardsLarge or self.owner.options.ExpandUpwards) or self.owner.options.ExpandUpwards
+
+ self.frame:ClearAllPoints()
+ if expandUpwards then
+ self.movePoint = "BOTTOM"
+ self.moveRelPoint = "TOP"
+ self.frame:SetPoint("BOTTOM", newAnchor, "TOP", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
+ else
+ self.movePoint = "TOP"
+ self.moveRelPoint = "BOTTOM"
+ self.frame:SetPoint("TOP", newAnchor, "BOTTOM", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], -self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
+ end
+
+ local newX = self.frame:GetRight() - self.frame:GetWidth() / 2
+ local newY = self.frame:GetTop()
+
+ self.moving = self.owner.options.BarStyle == "NoAnim" and "nextEnlarge" or "enlarge"
+ self.moveAnchor = newAnchor
+ self.moveOffsetX = -(newX - oldX)
+ self.moveOffsetY = -(newY - oldY)
+ self.moveElapsed = 0
+
+ self.frame:ClearAllPoints()
+ self.frame:SetPoint("TOP", newAnchor, "BOTTOM", self.moveOffsetX, self.moveOffsetY)
+ end
+
+ local function animateEnlarge(self, elapsed)
+ self.moveElapsed = self.moveElapsed + elapsed
+
+ if self.moveElapsed < 1 then
+ local options = self.owner.options
+ local newX = self.moveOffsetX + (options.HugeBarXOffset - self.moveOffsetX) * (self.moveElapsed / 1)
+ local newY = self.moveOffsetY + (options.HugeBarYOffset - self.moveOffsetY) * (self.moveElapsed / 1)
+ local newWidth = options.Width + (options.HugeWidth - options.Width) * (self.moveElapsed / 1)
+ local newScale = options.Scale + (options.HugeScale - options.Scale) * (self.moveElapsed / 1)
+
+ self.frame:ClearAllPoints()
+ self.frame:SetPoint(self.movePoint, self.moveAnchor, self.moveRelPoint, newX, newY)
+
+ local db = E.db.addOnSkins
+ local width = newWidth
+ local iconHeight = db.dbmBarHeight * newScale
+ local height = (db.DBMSkinHalf and iconHeight / 3) or iconHeight
+ local fontSize = db.dbmFontSize * newScale
+
+ self.frame:Size(width, height)
+ self._bar:Size(width, height)
+
+ self._icon1.overlay:Size(iconHeight)
+ self._icon2.overlay:Size(iconHeight)
+
+ self._name:SetFont(self._font, fontSize, db.dbmFontOutline)
+ self._timer:SetFont(self._font, fontSize, db.dbmFontOutline)
+ else
+ self.moving = nil
+ self.enlarged = true
+ self.owner.hugeBars:Append(self)
+ self:ApplyStyle()
+ self:SetPosition()
+ end
+ end
+
+ if backportVersion2 then
+ hooksecurefunc(DBT, "CreateBar", skinBars)
+ else
+ S:SecureHook(DBT, "CreateBar", function(self)
+ local hooked
+ for bar in pairs(self.bars) do
+ if not hooked then
+ local mt = getmetatable(bar).__index
+
+ hooksecurefunc(mt, "ApplyStyle", applyStyle)
+ if not backportVersion then
+ S:Hook(mt, "Update", preUpdate)
+ end
+
+ mt.SetPosition = setPosition
+ mt.MoveToNextPosition = moveToNextPosition
+ mt.Enlarge = enlarge
+ mt.AnimateEnlarge = animateEnlarge
+
+ hooked = true
+ end
+
+ bar:ApplyStyle()
+ bar:SetPosition()
+ end
+
+ S:Unhook(DBT, "CreateBar")
+ end)
+ end
+
+ local function SkinBoss()
+ local db = E.db.addOnSkins
+
+ local count = 1
+ local bar = _G["DBM_BossHealth_Bar_" .. count]
+ local barName, background, progress, name, timer
+ local point1, anchor, point2
+
+ while bar do
+ point1, anchor, point2 = bar:GetPoint()
+ if not point1 then return end
+
+ barName = bar:GetName()
+ background = _G[barName .. "BarBorder"]
+ progress = _G[barName .. "Bar"]
+ name = _G[barName .. "BarName"]
+ timer = _G[barName .. "BarTimer"]
+
+ bar:ClearAllPoints()
+
+ bar:Height(db.dbmBarHeight)
+ bar:SetTemplate("Transparent")
+
+ background:SetNormalTexture(nil)
+
+ progress:SetStatusBarTexture(E.media.normTex)
+ progress:ClearAllPoints()
+ progress:SetInside(bar)
+
+ name:ClearAllPoints()
+ name:Point("LEFT", bar, "LEFT", 4, 0)
+ name:SetFont(E.LSM:Fetch("font", db.dbmFont), db.dbmFontSize, db.dbmFontOutline)
+
+ timer:ClearAllPoints()
+ timer:Point("RIGHT", bar, "RIGHT", -4, 0)
+ timer:SetFont(E.LSM:Fetch("font", db.dbmFont), db.dbmFontSize, db.dbmFontOutline)
+
+ if DBM.Options.HealthFrameGrowUp then
+ bar:Point(point1, anchor, point2, 0, count == 1 and 8 or 4)
+ else
+ bar:Point(point1, anchor, point2, 0, -(count == 1 and 8 or 4))
+ end
+
+ count = count + 1
+ bar = _G["DBM_BossHealth_Bar_" .. count]
+ end
+ end
+
+ hooksecurefunc(DBM.BossHealth, "Show", SkinBoss)
+ hooksecurefunc(DBM.BossHealth, "AddBoss", SkinBoss)
+ hooksecurefunc(DBM.BossHealth, "UpdateSettings", SkinBoss)
+
+ S:SecureHook(DBM.RangeCheck, "Show", function(self)
+ if not DBMRangeCheck then return end
+
+ DBMRangeCheck:SetTemplate("Transparent")
+ E:GetModule("Tooltip"):HookScript(DBMRangeCheck, "OnShow", "SetStyle")
+
+ S:Unhook(self, "Show")
+ end)
+
+ if backportVersion then
+ S:RawHook(DBM, "AddWarning", function(self, text, ...)
+ if find(text, " |T") then
+ text = gsub(text, "(:12:12)", ":18:18:0:0:64:64:5:59:5:59")
+ end
+
+ return S.hooks[DBM].AddWarning(self, text, ...)
+ end)
+ else
+ S:RawHook("RaidNotice_AddMessage", function(noticeFrame, textString, colorInfo)
+ if find(textString, " |T") then
+ textString = gsub(textString, "(:12:12)", ":18:18:0:0:64:64:5:59:5:59")
+ end
+
+ return S.hooks.RaidNotice_AddMessage(noticeFrame, textString, colorInfo)
+ end, true)
+ end
+
+ if DBM.ShowUpdateReminder then
+ S:SecureHook(DBM, "ShowUpdateReminder", function(self)
+ DBMUpdateReminder:SetTemplate("Transparent")
+ DBMUpdateReminder:EnableMouse(true)
+
+ local editBox, button = DBMUpdateReminder:GetChildren()
+
+ local left, right, middle = select(6, DBMUpdateReminder:GetChildren():GetRegions())
+ left:Hide()
+ right:Hide()
+ middle:Hide()
+ editBox:Height(22)
+ S:HandleEditBox(editBox)
+
+ S:HandleButton(button)
+
+ S:Unhook(self, "ShowUpdateReminder")
+ end)
+ end
+end)
+
+S:AddCallbackForAddon("DBM-GUI", "DBM-GUI", function()
+ if not E.private.addOnSkins.DBM then return end
+ local backportVersion2 = DBM.ReleaseRevision >= 20220412000000 -- 9.2.14
+
+ DBM_GUI_OptionsFrame:SetTemplate("Transparent")
+
+ DBM_GUI_OptionsFrameHeader:Point("TOP", 0, 7)
+ DBM_GUI_OptionsFrameHeader:Hide()
+
+ DBM_GUI_OptionsFramePanelContainer:SetTemplate("Transparent")
+
+ if backportVersion2 then
+ for i = 1, #DBM_GUI.tabs do -- can be variable
+ S:HandleTab(_G["DBM_GUI_OptionsFrameTab" .. i])
+ end
+ else
+ S:HandleTab(DBM_GUI_OptionsFrameTab1)
+ S:HandleTab(DBM_GUI_OptionsFrameTab2)
+ end
+
+ DBM_GUI_OptionsFrameTab1:Point("BOTTOMLEFT", backportVersion2 and DBM_GUI_OptionsFrameList or DBM_GUI_OptionsFrameBossMods, "TOPLEFT", 6, -4)
+ DBM_GUI_OptionsFrameTab1Text:SetPoint("CENTER", 0, 0)
+ DBM_GUI_OptionsFrameTab2Text:SetPoint("CENTER", 0, 0)
+
+ S:HandleScrollBar(DBM_GUI_OptionsFramePanelContainerFOVScrollBar)
+ DBM_GUI_OptionsFramePanelContainerFOVScrollBar:Point("TOPRIGHT", 18, -16)
+ DBM_GUI_OptionsFramePanelContainerFOVScrollBar:Point("BOTTOMRIGHT", 18, 14)
+
+ S:HandleButton(DBM_GUI_OptionsFrameOkay)
+
+ if DBM_GUI_OptionsFrameWebsiteButton then
+ S:HandleButton(DBM_GUI_OptionsFrameWebsiteButton)
+ end
+
+ if backportVersion2 then
+ for _, button in ipairs(DBM_GUI_OptionsFrameList.buttons) do
+ S:HandleCollapseTexture(button.toggle)
+ end
+ end
+
+ S:SecureHookScript(DBM_GUI_OptionsFrame, "OnShow", function(self)
+ if backportVersion2 then
+ DBM_GUI_OptionsFrameList:StripTextures()
+ DBM_GUI_OptionsFrameList:SetTemplate("Transparent")
+ S:HandleScrollBar(DBM_GUI_OptionsFrameListListScrollBar)
+ DBM_GUI_OptionsFrameListListScrollBar:Point("TOPRIGHT", 1, -18)
+ DBM_GUI_OptionsFrameListListScrollBar:Point("BOTTOMLEFT", 7, 18)
+
+ else
+ DBM_GUI_OptionsFrameBossMods:StripTextures()
+ DBM_GUI_OptionsFrameBossMods:SetTemplate("Transparent")
+
+ DBM_GUI_OptionsFrameBossModsList:StripTextures()
+ S:HandleScrollBar(DBM_GUI_OptionsFrameBossModsListScrollBar)
+ DBM_GUI_OptionsFrameBossModsListScrollBar:Point("TOPRIGHT", 1, -18)
+ DBM_GUI_OptionsFrameBossModsListScrollBar:Point("BOTTOMLEFT", 7, 18)
+
+ for _, button in ipairs(DBM_GUI_OptionsFrameBossMods.buttons) do
+ S:HandleCollapseExpandButton(button.toggle, "auto")
+ button.toggle:Point("TOPLEFT", 3, 0)
+ end
+
+ DBM_GUI_OptionsFrameDBMOptions:StripTextures()
+ DBM_GUI_OptionsFrameDBMOptions:SetTemplate("Transparent")
+
+ DBM_GUI_OptionsFrameDBMOptionsList:StripTextures()
+ S:HandleScrollBar(DBM_GUI_OptionsFrameDBMOptionsListScrollBar)
+ DBM_GUI_OptionsFrameDBMOptionsListScrollBar:Point("TOPRIGHT", 1, -18)
+ DBM_GUI_OptionsFrameDBMOptionsListScrollBar:Point("BOTTOMLEFT", 7, 18)
+
+ for _, button in ipairs(DBM_GUI_OptionsFrameDBMOptions.buttons) do
+ S:HandleCollapseExpandButton(button.toggle, "auto")
+ button.toggle:Point("TOPLEFT", 3, 0)
+ end
+ end
+
+ S:Unhook(self, "OnShow")
+ end)
+--[[
+ hooksecurefunc(DBM_GUI_OptionsFrame, "DisplayButton", function(self, button, element)
+ button.toggle:Point("LEFT", 8 * element.depth - 5, 2);
+ end)
+--]]
+ S:RawHook(DBM_GUI, "CreateNewPanel", function(self, ...)
+ local panel = S.hooks[DBM_GUI].CreateNewPanel(self, ...)
+
+ local PanelPrototype = getmetatable(panel).__index
+
+ hooksecurefunc(PanelPrototype, "CreateArea", function(this)
+ this.areas[#this.areas].frame:SetTemplate("Transparent", nil, true)
+ this.areas[#this.areas].frame:SetBackdropColor(0, 0, 0, 0)
+ end)
+--[[
+ S:RawHook(PanelPrototype, "CreateCheckButton", function(this, name, autoplace, ...)
+ local button = S.hooks[PanelPrototype].CreateCheckButton(this, name, autoplace, ...)
+
+ if button then
+ S:HandleCheckBox(button, true)
+
+ if autoplace then
+ local _, lastObj = button:GetPoint()
+ if lastObj.mytype == "checkbutton" then
+ button:Point("TOPLEFT", lastObj, "BOTTOMLEFT", 0, -7)
+ end
+ end
+
+ return button
+ end
+ end)
+ S:RawHook(PanelPrototype, "CreateEditBox", function(this, ...)
+ local editbox = S.hooks[PanelPrototype].CreateEditBox(this, ...)
+ S:HandleEditBox(editbox)
+ return editbox
+ end)
+ S:RawHook(PanelPrototype, "CreateSlider", function(this, ...)
+ local slider = S.hooks[PanelPrototype].CreateSlider(this, ...)
+ S:HandleSliderFrame(slider)
+ return slider
+ end)
+ S:RawHook(PanelPrototype, "CreateButton", function(this, ...)
+ local button = S.hooks[PanelPrototype].CreateButton(this, ...)
+ S:HandleButton(button)
+ return button
+ end)
+--]]
+ S:Unhook(DBM_GUI, "CreateNewPanel")
+
+ return panel
+ end)
+--[[
+ DBM_GUI_DropDown:SetTemplate("Transparent")
+
+ local dropdownArrowColor = {1, 0.8, 0}
+ S:RawHook(DBM_GUI, "CreateDropdown", function(self, ...)
+ local dropdown = S.hooks[DBM_GUI].CreateDropdown(self, ...)
+
+ local frameName = dropdown:GetName()
+ local button = _G[frameName.."Button"]
+ local text = _G[frameName.."Text"]
+
+ dropdown:StripTextures()
+ dropdown:SetTemplate()
+ dropdown:Size(dropdown:GetWidth(), 20)
+
+ if button then
+ S:HandleNextPrevButton(button, "down", dropdownArrowColor)
+ button:ClearAllPoints()
+ button:Point("RIGHT", dropdown, "RIGHT", -3, 0)
+ button:Size(16)
+ end
+
+ if text then
+ text:ClearAllPoints()
+ text:Point("RIGHT", button, "LEFT", -3, 0)
+ end
+
+ return dropdown
+ end)
+--]]
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/doom_CooldownPulse.lua b/ElvUI_AddOnSkins/Skins/Addons/doom_CooldownPulse.lua
new file mode 100644
index 0000000..5077f32
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/doom_CooldownPulse.lua
@@ -0,0 +1,53 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Doom_CooldownPulse") then return end
+
+-- Doom_CooldownPulse 1.2.3
+-- https://www.curseforge.com/wow/addons/doomcooldownpulse/files/400638
+
+S:AddCallbackForAddon("Doom_CooldownPulse", "Doom_CooldownPulse", function()
+ if not E.private.addOnSkins.Doom_CooldownPulse then return end
+
+ local frame = AS:FindFrameByPoint("CENTER", UIParent, "BOTTOMLEFT", DCP_Saved.x, DCP_Saved.y)
+ if not frame then return end
+
+ Doom_CooldownPulse = frame
+ frame:SetTemplate()
+ frame.icon = frame:GetRegions()
+
+ frame.icon:SetParent(frame)
+ frame.icon:SetDrawLayer("ARTWORK")
+ frame.icon:SetInside()
+ frame.icon:SetTexCoord(unpack(E.TexCoords))
+
+ hooksecurefunc(frame.icon, "SetTexture", function(self)
+ if not self:GetTexture() then
+ self:GetParent():SetAlpha(0)
+ end
+ end)
+
+ hooksecurefunc(frame, "CreateOptionsFrame", function()
+ DCP_OptionsFrame:SetScale(GetCVar("uiScale"))
+
+ DCP_OptionsFrame:StripTextures()
+ DCP_OptionsFrame:SetTemplate("Transparent")
+
+ S:HandleSliderFrame(DCP_OptionsFrameSlider1)
+ S:HandleSliderFrame(DCP_OptionsFrameSlider2)
+ S:HandleSliderFrame(DCP_OptionsFrameSlider3)
+ S:HandleSliderFrame(DCP_OptionsFrameSlider4)
+ S:HandleSliderFrame(DCP_OptionsFrameSlider5)
+ S:HandleSliderFrame(DCP_OptionsFrameSlider6)
+
+ S:HandleEditBox(DCP_OptionsFrameIgnoreBox)
+ DCP_OptionsFrameIgnoreBox.backdrop:Point("TOPLEFT", -4, -6)
+ DCP_OptionsFrameIgnoreBox.backdrop:Point("BOTTOMRIGHT", 0, 5)
+
+ S:HandleButton(DCP_OptionsFrameButton1)
+ S:HandleButton(DCP_OptionsFrameButton2)
+ S:HandleButton(DCP_OptionsFrameButton3)
+ S:HandleButton(DCP_OptionsFrameButton4)
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/enchantrix.lua b/ElvUI_AddOnSkins/Skins/Addons/enchantrix.lua
new file mode 100644
index 0000000..f2eb40f
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/enchantrix.lua
@@ -0,0 +1,42 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Enchantrix") then return end
+
+-- Enchantrix 5.8.4723
+-- https://www.curseforge.com/wow/addons/auctioneer/files/427823
+
+S:AddCallbackForAddon("Enchantrix", "Enchantrix", function()
+ if not E.private.addOnSkins.Enchantrix then return end
+
+ AS:SkinLibrary("Configator")
+ AS:SkinLibrary("LibExtraTip-1")
+
+ S:SecureHook(Enchantrix_Manifest, "ShowMessage", function()
+ Enchantrix_Manifest.messageFrame:SetTemplate("Transparent")
+ S:HandleButton(Enchantrix_Manifest.messageFrame.done)
+ S:Unhook(Enchantrix_Manifest, "ShowMessage")
+ end)
+
+ local function SkinAutoDePrompt(frame)
+ frame:SetTemplate("Transparent")
+
+ S:HandleItemButton(AutoDisenchantPromptItem, true)
+ AutoDisenchantPromptItem:GetNormalTexture():SetInside(AutoDisenchantPromptItem.backdrop)
+ AutoDisenchantPromptItem:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+
+ S:HandleButton(AutoDEPromptYes)
+ S:HandleButton(AutoDEPromptNo)
+ S:HandleButton(AutoDEPromptIgnore)
+ end
+
+ if AutoDEPromptYes then
+ SkinAutoDePrompt(AutoDEPromptYes:GetParent())
+ else
+ S:SecureHook(Enchantrix.AutoDisenchant, "AddonLoaded", function()
+ SkinAutoDePrompt(AutoDEPromptYes:GetParent())
+ S:Unhook(Enchantrix.AutoDisenchant, "AddonLoaded")
+ end)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/epgp.lua b/ElvUI_AddOnSkins/Skins/Addons/epgp.lua
new file mode 100644
index 0000000..d963209
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/epgp.lua
@@ -0,0 +1,238 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("epgp") then return end
+
+-- EPGP 5.5.19
+-- https://www.curseforge.com/wow/addons/epgp-dkp-reloaded/files/442647
+
+S:AddCallbackForAddon("epgp", "epgp", function()
+ if not E.private.addOnSkins.EPGP then return end
+
+ local EPGPUI = EPGP and EPGP:GetModule("ui", true)
+ if not EPGPUI then return end
+
+ local function SkinEPGP()
+ -- Main Frame
+ EPGPFrame:StripTextures()
+ EPGPFrame:CreateBackdrop("Transparent")
+ EPGPFrame.backdrop:Point("TOPLEFT", 11, -12)
+ EPGPFrame.backdrop:Point("BOTTOMRIGHT", -32, 76)
+
+ S:SetUIPanelWindowInfo(EPGPFrame, "width", nil, nil, nil, true)
+ S:SetBackdropHitRect(EPGPFrame)
+
+ local closeButton, checkBoxBorder, _, _, _, main = EPGPFrame:GetChildren()
+
+ S:HandleCloseButton(closeButton, EPGPFrame.backdrop)
+
+ checkBoxBorder:StripTextures()
+ checkBoxBorder:Point("TOPRIGHT", EPGPFrame, "TOPRIGHT", -49, -38)
+ S:HandleCheckBox(checkBoxBorder:GetChildren())
+
+ main:Width(329)
+ main:Point("TOPLEFT", 20, -70)
+
+ EPGPScrollFrame:SetTemplate("Transparent")
+ EPGPScrollFrame:Width(304)
+ EPGPScrollFrame:Point("TOPRIGHT", 1, 1)
+ EPGPScrollFrame:Point("BOTTOMRIGHT", 1, 8)
+
+ EPGPScrollFrameScrollBarBorder:StripTextures()
+ S:HandleScrollBar(EPGPScrollFrameScrollBar)
+ EPGPScrollFrameScrollBar:Point("TOPLEFT", EPGPScrollFrame, "TOPRIGHT", 3, -19)
+ EPGPScrollFrameScrollBar:Point("BOTTOMLEFT", EPGPScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ local award, logButton, decay, tabl = main:GetChildren()
+
+ for _, header in ipairs(tabl.headers) do
+ header:StripTextures()
+ header:StyleButton()
+ end
+
+ for _, row in ipairs(tabl.rowFrame.rows) do
+ row.check:SetDrawLayer("BORDER")
+ end
+
+ S:HandleButton(award)
+ S:HandleButton(logButton)
+ S:HandleButton(decay)
+
+ logButton:Point("BOTTOMRIGHT", -5, 0)
+ decay:Point("RIGHT", logButton, "LEFT", -3, 0)
+
+ local statusText = select(2, main:GetRegions())
+ statusText:Point("BOTTOMLEFT", award, "TOPLEFT", 0, 7)
+ statusText:Point("BOTTOMRIGHT", logButton, "TOPRIGHT", 0, 7)
+
+ -- First Side Frame
+ EPGPSideFrame:StripTextures()
+ EPGPSideFrame:SetTemplate("Transparent")
+ EPGPSideFrame:Point("TOPLEFT", EPGPFrame, "TOPRIGHT", -33, -12)
+
+ S:HandleCloseButton(EPGPSideFrame:GetChildren(), EPGPSideFrame)
+
+ S:HandleDropDownBox(EPGPSideFrameGPControlDropDown, 190)
+ S:HandleDropDownBox(EPGPSideFrameEPControlDropDown, 190)
+
+ S:HandleEditBox(EPGPSideFrameGPControlEditBox)
+ S:HandleEditBox(EPGPSideFrameEPControlOtherEditBox)
+ S:HandleEditBox(EPGPSideFrameEPControlEditBox)
+
+ EPGPSideFrameGPControlEditBox:Height(22)
+ EPGPSideFrameEPControlOtherEditBox:Height(22)
+ EPGPSideFrameEPControlEditBox:Height(22)
+ EPGPSideFrameEPControlOtherEditBox:Point("RIGHT", -14, 0)
+
+ local parentFrame = EPGPSideFrameGPControlEditBox:GetParent()
+ S:HandleButton(parentFrame.button)
+ EPGPSideFrameGPControlEditBox:Point("RIGHT", parentFrame.button, "LEFT", -4, 0)
+ parentFrame.button:Point("RIGHT", EPGPSideFrameGPControlDropDown, "RIGHT", -8, 0)
+
+ parentFrame = EPGPSideFrameEPControlEditBox:GetParent()
+ S:HandleButton(parentFrame.button)
+ EPGPSideFrameEPControlEditBox:Point("RIGHT", parentFrame.button, "LEFT", -4, 0)
+ parentFrame.button:Point("RIGHT", EPGPSideFrameEPControlOtherEditBox, "RIGHT", 1, 0)
+
+ -- Second Side Frame
+ EPGPSideFrame2:EnableMouse(true)
+ EPGPSideFrame2:SetTemplate("Transparent")
+ EPGPSideFrame2:Point("BOTTOMLEFT", EPGPFrame, "BOTTOMRIGHT", -33, 76)
+
+ S:HandleCloseButton(EPGPSideFrame2:GetChildren(), EPGPSideFrame2)
+
+ S:HandleDropDownBox(EPGPSideFrame2EPControlDropDown, 190)
+
+ S:HandleEditBox(EPGPSideFrame2EPControlOtherEditBox)
+ S:HandleEditBox(EPGPSideFrame2EPControlEditBox)
+
+ EPGPSideFrame2EPControlOtherEditBox:Point("RIGHT", -14, 0)
+ EPGPSideFrame2EPControlOtherEditBox:Height(22)
+ EPGPSideFrame2EPControlEditBox:Height(22)
+
+ parentFrame = EPGPSideFrame2EPControlEditBox:GetParent()
+
+ S:HandleButton(parentFrame.button)
+ parentFrame.button:Point("RIGHT", EPGPSideFrame2EPControlOtherEditBox, "RIGHT", 1, 0)
+ EPGPSideFrame2EPControlEditBox:Point("RIGHT", parentFrame.button, "LEFT", -4, 0)
+
+ S:HandleCheckBox(parentFrame.recurring)
+ parentFrame.recurring:Point("TOP", EPGPSideFrame2EPControlEditBox, "BOTTOMLEFT", 0, -6)
+
+ S:HandleNextPrevButton(parentFrame.decButton, "down")
+ parentFrame.decButton:Size(18)
+
+ S:HandleNextPrevButton(parentFrame.incButton, "up")
+ parentFrame.incButton:Size(18)
+
+ parentFrame.decButton:Point("TOP", parentFrame.recurring, "TOP", 0, -3)
+ parentFrame.decButton:Point("RIGHT", -13, 0)
+ parentFrame.incButton:Point("RIGHT", parentFrame.decButton, "LEFT", -5, 0)
+
+ -- Log Frame
+ EPGPLogFrame:EnableMouse(true)
+ EPGPLogFrame:StripTextures()
+ EPGPLogFrame:SetTemplate("Transparent")
+ EPGPLogFrame:Height(424)
+ EPGPLogFrame:SetMinResize(435, 424)
+ EPGPLogFrame:SetMaxResize(1200, 424)
+ EPGPLogFrame:Point("TOPLEFT", EPGPFrame, "TOPRIGHT", -33, -12)
+
+ local sizer, closeButton2, export, import, trimLog, undo, redo, scrollParent = EPGPLogFrame:GetChildren()
+
+ S:HandleCloseButton(closeButton2, EPGPLogFrame)
+
+ scrollParent:StripTextures()
+ scrollParent:Point("LEFT", 7, 0)
+ scrollParent:Point("RIGHT", 1, 0)
+ scrollParent:CreateBackdrop("Transparent")
+ scrollParent.backdrop:Point("TOPLEFT", 1, 2)
+ scrollParent.backdrop:Point("BOTTOMRIGHT", -30, 7)
+
+ EPGPLogRecordScrollFrame:Size(368, 350)
+ EPGPLogRecordScrollFrame:Point("TOPRIGHT", -0, -3)
+
+ EPGPLogRecordFrame1:Point("TOPLEFT", 3, 0)
+
+ EPGPLogRecordScrollFrameScrollBarBorder:StripTextures()
+ S:HandleScrollBar(EPGPLogRecordScrollFrameScrollBar)
+
+ EPGPLogRecordScrollFrameScrollBar:Point("TOPLEFT", EPGPLogRecordScrollFrame, "TOPRIGHT", -27, -14)
+ EPGPLogRecordScrollFrameScrollBar:Point("BOTTOMLEFT", EPGPLogRecordScrollFrame, "BOTTOMRIGHT", -27, 18)
+
+ S:HandleButton(export)
+ S:HandleButton(import)
+ S:HandleButton(trimLog)
+ S:HandleButton(undo)
+ S:HandleButton(redo)
+
+ export:Point("BOTTOMLEFT", 8, 8)
+ import:Point("LEFT", export, "RIGHT", 3, 0)
+
+ undo:Point("BOTTOMRIGHT", -8, 8)
+ redo:Point("RIGHT", undo, "LEFT", -3, 0)
+
+ sizer:Size(14)
+
+ local line1, line2 = sizer:GetRegions()
+ line1:Size(12)
+ line1:Point("BOTTOMRIGHT", -1, 1)
+ line2:Size(8)
+ line2:Point("BOTTOMRIGHT", -1, 1)
+ local x = 0.1 * 14/17
+ line1:SetTexCoord(1/32 - x, 0.5, 1/32, 0.5 + x, 1/32, 0.5 - x, 1/32 + x, 0.5)
+ x = 0.1 * 11/17
+ line2:SetTexCoord(1/32 - x, 0.5, 1/32, 0.5 + x, 1/32, 0.5 - x, 1/32 + x, 0.5)
+
+ sizer:HookScript("OnMouseUp", function(self)
+ self:GetParent():ClearAllPoints()
+ self:GetParent():Point("TOPLEFT", EPGPFrame, "TOPRIGHT", -33, -12)
+ end)
+
+ -- ExportImport Frame
+ EPGPExportImportFrame:EnableMouse(true)
+ EPGPExportImportFrame:SetTemplate("Transparent")
+ EPGPExportImportFrame:Width(480)
+
+ EPGPExportImportFrame.help:Point("TOP", 0, -10)
+
+ EPGPExportImportFrame.editbox:Width(438)
+
+ EPGPExportScrollFrame:EnableMouse(true)
+ EPGPExportScrollFrame:StripTextures()
+ EPGPExportScrollFrame:Point("TOPLEFT", EPGPExportImportFrame.help, "BOTTOMLEFT", 0, -10)
+ EPGPExportScrollFrame:Point("TOPRIGHT", EPGPExportImportFrame.help, "BOTTOMRIGHT", -17, 0)
+ EPGPExportScrollFrame:Point("BOTTOM", EPGPExportImportFrame.button1, "TOP", 0, 9)
+
+ EPGPExportScrollFrame:CreateBackdrop("Transparent")
+ EPGPExportScrollFrame.backdrop:Point("TOPLEFT", -2, 2)
+ EPGPExportScrollFrame.backdrop:Point("BOTTOMRIGHT", -2, -2)
+
+ S:HandleScrollBar(EPGPExportScrollFrameScrollBar)
+ EPGPExportScrollFrameScrollBar:Point("TOPLEFT", EPGPExportScrollFrame, "TOPRIGHT", 1, -17)
+ EPGPExportScrollFrameScrollBar:Point("BOTTOMLEFT", EPGPExportScrollFrame, "BOTTOMRIGHT", 1, 17)
+
+ S:HandleButton(EPGPExportImportFrame.button1)
+ S:HandleButton(EPGPExportImportFrame.button2)
+
+ EPGPExportImportFrame.button1:Point("BOTTOM", 0, 8)
+
+ if not EPGPExportScrollFrame:GetScript("OnMouseUp") then
+ EPGPExportScrollFrame:SetScript("OnMouseUp", function(self, button)
+ if button == "LeftButton" then
+ EPGPExportImportFrame.editbox:SetFocus()
+ end
+ end)
+ end
+ end
+
+ if EPGPFrame then
+ SkinEPGP()
+ else
+ S:SecureHook(EPGPUI, "OnEnable", function(self)
+ SkinEPGP()
+ S:Unhook(self, "OnEnable")
+ end)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/epgp_lootmaster.lua b/ElvUI_AddOnSkins/Skins/Addons/epgp_lootmaster.lua
new file mode 100644
index 0000000..a8d5403
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/epgp_lootmaster.lua
@@ -0,0 +1,177 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("EPGP_LootMaster") then return end
+
+local ipairs = ipairs
+local select = select
+local unpack = unpack
+
+local GetItemQualityColor = GetItemQualityColor
+local hooksecurefunc = hooksecurefunc
+
+-- EPGP LootMaster 0.4.9
+-- https://www.curseforge.com/wow/addons/epgp_lootmaster/files/409167
+
+S:AddCallbackForAddon("EPGP_LootMaster", "EPGP_LootMaster", function()
+ if not E.private.addOnSkins.EPGP_LootMaster then return end
+
+ local EPGPLM = LibStub("AceAddon-3.0"):GetAddon("EPGPLootMaster", true)
+ if not EPGPLM then return end
+
+ S:SecureHook(EPGPLM, "InitUI", function(self)
+ self.frame:SetTemplate("Transparent")
+ self.frame.titleFrame:SetTemplate("Default")
+
+ S:Unhook(EPGPLM, "InitUI")
+ end)
+
+ S:SecureHook(EPGPLM, "ShowVersionCheckFrame", function(self)
+ self.versioncheckframe:SetTemplate("Transparent")
+ self.versioncheckframe.titleFrame:SetTemplate("Default")
+
+ self.versioncheckframe.sstScroll.frame:SetTemplate("Default")
+ S:HandleScrollBar(_G[self.versioncheckframe.sstScroll.frame:GetName().."ScrollFrameScrollBar"])
+
+ for i = 1, self.versioncheckframe:GetNumChildren() do
+ local child = select(i, self.versioncheckframe:GetChildren())
+ if child and child:IsObjectType("Button") then
+ S:HandleButton(child)
+ end
+ end
+
+ S:Unhook(EPGPLM, "ShowVersionCheckFrame")
+ end)
+
+ local function UpdateLootUI_Icon_SetNormalTexture(self, texture)
+ if texture and self:GetParent().data then
+ self:SetBackdropBorderColor(GetItemQualityColor(self:GetParent().data.quality))
+ end
+ end
+
+ hooksecurefunc(EPGPLM, "UpdateLootUI", function(self)
+ for _, frame in ipairs(self.lootSelectFrames) do
+ if not frame.isSkinned then
+ frame:SetTemplate("Transparent")
+
+ frame.itemIcon:SetTemplate("Default")
+ frame.itemIcon:GetNormalTexture():SetInside(frame.itemIcon.backdrop)
+ frame.itemIcon:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ frame.itemIcon:SetBackdropBorderColor(GetItemQualityColor(frame.data.quality))
+
+ hooksecurefunc(frame.itemIcon, "SetNormalTexture", UpdateLootUI_Icon_SetNormalTexture)
+
+ S:HandleButton(frame.btnPass)
+
+ frame.timerFrame:SetBackdrop(nil)
+ select(2, frame.timerFrame:GetChildren()):SetBackdrop(nil)
+
+ frame.progressBar:CreateBackdrop()
+ frame.progressBar:Height(20)
+ frame.progressBar:SetStatusBarTexture(E.media.normTex)
+ frame.progressBar:SetStatusBarColor(0.13, 0.35, 0.80)
+ E:RegisterStatusBar(frame.progressBar)
+
+ frame.btnNote:SetTemplate("Default")
+ frame.btnNote:Size(20)
+ frame.btnNote:HookScript("OnEnter", S.SetModifiedBackdrop)
+ frame.btnNote:HookScript("OnLeave", S.SetOriginalBackdrop)
+ frame.btnNote:SetHighlightTexture(nil)
+ frame.btnNote:DisableDrawLayer("OVERLAY")
+
+ local btnNoteIcon = frame.btnNote:GetRegions()
+ btnNoteIcon:SetDrawLayer("ARTWORK")
+ btnNoteIcon:SetPoint("CENTER", 0, 0)
+
+ frame.tbNote:SetBackdrop(nil)
+ S:HandleEditBox(frame.tbNote)
+
+ local buttonSave = frame.tbNote:GetChildren()
+ buttonSave:SetHeight(26)
+ buttonSave:SetPoint("LEFT", frame.tbNote, "RIGHT", 0, 0)
+ S:HandleButton(buttonSave)
+
+ frame.isSkinned = true
+ end
+
+ for _, button in ipairs(frame.buttons) do
+ S:HandleButton(button)
+ end
+ end
+ end)
+end)
+
+S:AddCallbackForAddon("EPGP_LootMaster_ML", "EPGP_LootMaster_ML", function()
+ if not E.private.addOnSkins.EPGP_LootMaster then return end
+
+ local LMML = LibStub("AceAddon-3.0"):GetAddon("LootMasterML", true)
+ if not LMML then return end
+
+ S:SecureHook(LMML, "GetFrame", function(self)
+ self.frame:SetTemplate("Transparent")
+ self.frame.titleFrame:SetTemplate("Default")
+
+ self.frame.extralootframe:SetTemplate("Transparent")
+ self.frame.extralootframe:Point("TOPRIGHT", self.frame, "TOPLEFT", 1, -10)
+
+ self.frame.itemIcon:SetTemplate("Default")
+ self.frame.itemIcon:GetNormalTexture():SetInside(self.frame.itemIcon.backdrop)
+ self.frame.itemIcon:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+
+ hooksecurefunc(self.frame.itemIcon, "SetNormalTexture", function(self, texture)
+ if texture and self:GetParent().currentLoot then
+ self:SetBackdropBorderColor(GetItemQualityColor(self:GetParent().currentLoot.quality))
+ end
+ end)
+
+ self.frame.tbGPValueFrame:SetBackdrop(nil)
+ S:HandleEditBox(self.frame.tbGPValue)
+
+ S:HandleButton(self.frame.btnAnnounce)
+ S:HandleButton(self.frame.btnDiscard)
+
+ self.frame.sstScroll.frame:SetTemplate("Default")
+ S:HandleScrollBar(_G[self.frame.sstScroll.frame:GetName().."ScrollFrameScrollBar"])
+
+ S:Unhook(LMML, "GetFrame")
+ end)
+
+ local function CreateLootButton_Icon_SetNormalTexturefunction(self, texture)
+ if texture and self.data then
+ self:SetBackdropBorderColor(GetItemQualityColor(self.data.quality))
+ end
+ end
+
+ S:RawHook(LMML, "CreateLootButton", function(self)
+ local icon = S.hooks[self].CreateLootButton(self)
+
+ icon:SetTemplate("Default")
+ icon:GetNormalTexture():SetInside(icon.backdrop)
+ icon:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+
+ hooksecurefunc(icon, "SetNormalTexture", CreateLootButton_Icon_SetNormalTexturefunction)
+
+ return icon
+ end)
+
+ S:SecureHook(LMML, "ShowRaidInfoLookup", function(self)
+ self.raidinfoframe:SetTemplate("Transparent")
+ self.raidinfoframe.titleFrame:SetTemplate("Default")
+
+ for i = 1, self.raidinfoframe:GetNumChildren() do
+ local child = select(i, self.raidinfoframe:GetChildren())
+ if child and child:IsObjectType("Button") then
+ S:HandleButton(child)
+ end
+ end
+
+ self.raidinfoframe.sstScroll.frame:SetTemplate("Default")
+ S:HandleScrollBar(_G[self.raidinfoframe.sstScroll.frame:GetName().."ScrollFrameScrollBar"])
+
+ self.raidinfoframe.tbWhisperFrame:SetBackdrop(nil)
+ S:HandleEditBox(self.raidinfoframe.tbWhisperBox)
+
+ S:Unhook(LMML, "ShowRaidInfoLookup")
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/equipCompare.lua b/ElvUI_AddOnSkins/Skins/Addons/equipCompare.lua
new file mode 100644
index 0000000..0cf2203
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/equipCompare.lua
@@ -0,0 +1,16 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("EquipCompare") then return end
+
+-- EquipCompare 2.17
+
+S:AddCallbackForAddon("EquipCompare", "EquipCompare", function()
+ if not E.private.addOnSkins.EquipCompare then return end
+
+ local TT = E:GetModule("Tooltip")
+
+ TT:HookScript(ComparisonTooltip1, "OnShow", "SetStyle")
+ TT:HookScript(ComparisonTooltip2, "OnShow", "SetStyle")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/eventAlert.lua b/ElvUI_AddOnSkins/Skins/Addons/eventAlert.lua
new file mode 100644
index 0000000..b5260e1
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/eventAlert.lua
@@ -0,0 +1,137 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("EventAlert") then return end
+
+local _G = _G
+
+-- EventAlert 4.3.6
+-- https://www.curseforge.com/wow/addons/event-alert/files/456081
+
+S:AddCallbackForAddon("EventAlert", "EventAlert", function()
+ if not E.private.addOnSkins.EventAlert then return end
+
+ local function Alart_OnShow(self)
+ self.icon:SetTexture(self:GetBackdrop().bgFile)
+ self:SetTemplate("Transparent")
+ end
+
+ local function SkinAlartFrame(frame, hook)
+ if not frame or frame.icon then return end
+
+ frame.icon = frame:CreateTexture(nil, "ARTWORK")
+ frame.icon:SetInside()
+ frame.icon:SetTexCoord(unpack(E.TexCoords))
+
+ if hook or not frame:GetBackdrop() then
+ frame:Hide()
+ frame:HookScript("OnShow", Alart_OnShow)
+ else
+ Alart_OnShow(frame)
+ end
+ end
+
+ local function SkinFrames()
+ for index in pairsByKeys(EA_Items[EA_playerClass]) do
+ SkinAlartFrame(_G["EAFrame_"..index], true)
+ end
+ for index in pairsByKeys(EA_AltItems[EA_playerClass]) do
+ SkinAlartFrame(_G["EAFrame_"..index], true)
+ end
+ for index in pairsByKeys(EA_Items[EA_CLASS_OTHER]) do
+ SkinAlartFrame(_G["EAFrame_"..index], true)
+ end
+
+ -- Anchor Test Frames
+ for _, frame in pairs({EA_Anchor_Frame, EA_Anchor_Frame2, EA_Anchor_Frame3}) do
+ SkinAlartFrame(frame)
+ end
+
+ -- Class Alart Options
+ for i = 1, Class_Events_Frame:GetNumChildren() do
+ local child = select(i, Class_Events_Frame:GetChildren())
+ if child and child:IsObjectType("CheckButton") then
+ S:HandleCheckBox(child)
+ end
+ end
+
+ -- Alt Alarts Options
+ for i = 1, Alt_Alerts_Frame:GetNumChildren() do
+ local child = select(i, Alt_Alerts_Frame:GetChildren())
+ if child and child:IsObjectType("CheckButton") then
+ S:HandleCheckBox(child)
+ end
+ end
+ end
+
+ local function SkinCustomFrames()
+ for index in pairsByKeys(EA_CustomItems[EA_playerClass]) do
+ SkinAlartFrame(_G["EAFrame_"..index], true)
+ end
+ end
+
+ if EA_playerClass then
+ SkinFrames()
+ SkinCustomFrames()
+ else
+ hooksecurefunc("EventAlert_CreateFrames", SkinFrames)
+ end
+ hooksecurefunc("EventAlert_CreateCustomFrames", SkinCustomFrames)
+
+ -- Options
+ EA_Options_Frame:SetTemplate("Transparent")
+ EA_Options_Frame_Header:Hide()
+ S:HandleButton(EA_Options_Frame_ToggleIconOptions)
+ S:HandleButton(EA_Options_Frame_ToggleClassEvents)
+ S:HandleButton(EA_Options_Frame_ToggleCustomEvents)
+ S:HandleButton(EA_Options_Frame_Okay)
+ S:HandleCheckBox(EA_Options_Frame_ShowFrame)
+ S:HandleCheckBox(EA_Options_Frame_ShowName)
+ S:HandleCheckBox(EA_Options_Frame_ShowTimer)
+ S:HandleCheckBox(EA_Options_Frame_ChangeTimer)
+ S:HandleCheckBox(EA_Options_Frame_ShowFlash)
+ S:HandleCheckBox(EA_Options_Frame_DoAlertSound)
+ S:HandleCheckBox(EA_Options_Frame_AllowESC)
+ S:HandleCheckBox(EA_Options_Frame_AltAlerts)
+ S:HandleCheckBox(EA_Options_Frame_ShowSpellInfo)
+ S:HandleDropDownBox(EA_Options_Frame_AlertSoundSelect)
+
+ -- Icon Position Options
+ EA_Icon_Options_Frame:SetTemplate("Transparent")
+ EA_Icon_Options_Frame_Header:Hide()
+ EA_Icon_Options_Frame:Point("TOPLEFT", EA_Options_Frame, "TOPRIGHT", -1, 0)
+ S:HandleCheckBox(EA_Icon_Options_Frame_LockFrame)
+ S:HandleSliderFrame(EA_Icon_Options_Frame_IconSize)
+ S:HandleSliderFrame(EA_Icon_Options_Frame_IconXOffset)
+ S:HandleSliderFrame(EA_Icon_Options_Frame_IconYOffset)
+ S:HandleButton(EA_Icon_Options_Frame_ToggleAlertFrame)
+ S:HandleButton(EA_Icon_Options_Frame_ResetAlertPosition)
+
+ -- Class Alart Options
+ Class_Events_Frame:SetTemplate("Transparent")
+ Class_Events_Frame_Header:Hide()
+ Class_Events_Frame:Point("TOPLEFT", EA_Options_Frame, "TOPRIGHT", -1, 0)
+
+ -- Alt Alarts Options
+ Alt_Alerts_Frame:SetTemplate("Transparent")
+ Alt_Alerts_Frame_Header:Hide()
+ Alt_Alerts_Frame:Point("TOPLEFT", Class_Events_Frame, "TOPRIGHT", -1, 0)
+
+ -- Custom Event Options
+ Custom_Events_Frame:SetTemplate("Transparent")
+ Custom_Events_Frame_Header:Hide()
+ Custom_Events_Frame:SetPoint("TOPLEFT", EA_Options_Frame, "TOPRIGHT", -1, 0)
+ S:HandleButton(Custom_Events_Frame_SaveCustom_Button)
+ S:HandleButton(Custom_Events_Frame_DeleteCustom_Button)
+ S:HandleEditBox(Custom_Events_Frame_SaveCustom_Box)
+ S:HandleDropDownBox(Custom_Events_Frame_DeleteCustom_Box)
+ Custom_Events_Frame_SaveCustom_Box:Height(20)
+ Custom_Events_Frame_DeleteCustom_Box:Width(182)
+ Custom_Events_Frame_DeleteCustom_Button:Point("RIGHT", Custom_Events_Frame_DeleteCustom_Box, "RIGHT", 91, 3)
+
+ -- Version
+ EA_Version_Frame:SetTemplate("Transparent")
+ EA_Version_Frame_Header:Hide()
+ S:HandleButton(EA_Version_Frame_Okay)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/everyQuest.lua b/ElvUI_AddOnSkins/Skins/Addons/everyQuest.lua
new file mode 100644
index 0000000..432110e
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/everyQuest.lua
@@ -0,0 +1,73 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("EveryQuest") then return end
+
+-- EveryQuest r162
+-- https://www.wowace.com/projects/everyquest/files/459624
+
+S:AddCallbackForAddon("EveryQuest", "EveryQuest", function()
+ if not E.private.addOnSkins.EveryQuest then return end
+
+ local addon = LibStub("AceAddon-3.0"):GetAddon("EveryQuest", true)
+ if not addon then return end
+
+ EveryQuestFrame:StripTextures()
+ EveryQuestFrame:SetTemplate("Transparent")
+ EveryQuestFrame:Size(341, 494)
+ EveryQuestFrame:SetClampedToScreen(true)
+ EveryQuestFrame:SetHitRectInsets(0, 0, 0, 0)
+
+ EveryQuestTitleText:Point("TOP", 0, -5)
+
+ EveryQuestListScrollFrame:CreateBackdrop("Transparent")
+ EveryQuestListScrollFrame.backdrop:Point("TOPLEFT", -3, 1)
+ EveryQuestListScrollFrame.backdrop:Point("BOTTOMRIGHT", 1, 2)
+ EveryQuestListScrollFrame:Point("TOPLEFT", 11, -51)
+ EveryQuestListScrollFrame.Hide = E.noop
+ EveryQuestListScrollFrame:Show()
+
+ S:HandleScrollBar(EveryQuestListScrollFrameScrollBar)
+ EveryQuestListScrollFrameScrollBar:Point("TOPLEFT", EveryQuestListScrollFrame, "TOPRIGHT", 4, -18)
+ EveryQuestListScrollFrameScrollBar:Point("BOTTOMLEFT", EveryQuestListScrollFrame, "BOTTOMRIGHT", 4, 21)
+
+ EveryQuestTitle1:Point("TOPLEFT", 10, -52)
+
+ for i = 1, 27 do
+ S:HandleButtonHighlight(_G["EveryQuestTitle"..i], 1, 0.8, 0.1)
+ end
+
+ S:HandleCloseButton(EveryQuestFrameCloseButton, EveryQuestFrame)
+
+ S:HandleDropDownBox(addon.frames.Menu, 241)
+ addon.frames.Menu:Point("TOPRIGHT", -56, -22)
+
+ EQ_MenuText:Point("RIGHT", EQ_MenuButton, "LEFT", -6, 0)
+
+ addon.frames.ShownTT:SetTemplate("Transparent")
+ addon.frames.ShownTT:Point("BOTTOMLEFT", EveryQuestFrame, "BOTTOMLEFT", 8, 8)
+
+ S:HandleButton(EveryQuestExitButton)
+ EveryQuestExitButton:ClearAllPoints()
+ EveryQuestExitButton:Point("BOTTOMRIGHT", -8, 8)
+ EveryQuestExitButton:Width(72)
+
+ S:HandleButton(addon.frames.Options)
+ addon.frames.Options:Point("TOPLEFT", addon.frames.Filters, "TOPRIGHT", 3, 0)
+
+ S:HandleButton(addon.frames.Filters)
+ addon.frames.Filters:Point("BOTTOMLEFT", EveryQuestFrame, "BOTTOMLEFT", 135, 8)
+
+ S:HandleButton(addon.frames.Show)
+ addon.frames.Show:ClearAllPoints()
+ addon.frames.Show:Point("LEFT", QuestLogCount, "RIGHT", 8, -2)
+ addon.frames.Show:Size(50, 20)
+
+ hooksecurefunc(addon, "OnShow", function(self)
+ if not self.dbpc.profile.posx and not self.dbpc.profile.posy then
+ EveryQuestFrame:ClearAllPoints()
+ EveryQuestFrame:Point("TOPLEFT", QuestLogFrame, "TOPRIGHT", 6, -12)
+ end
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/factionizer.lua b/ElvUI_AddOnSkins/Skins/Addons/factionizer.lua
new file mode 100644
index 0000000..c082f4d
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/factionizer.lua
@@ -0,0 +1,81 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Factionizer") then return end
+
+-- Factionizer 30300.4
+-- https://www.curseforge.com/wow/addons/factionizer/files/419110
+
+S:AddCallbackForAddon("Factionizer", "Factionizer", function()
+ if not E.private.addOnSkins.Factionizer then return end
+
+ FIZ_OptionsFrame:StripTextures()
+ FIZ_OptionsFrame:SetTemplate("Transparent")
+
+ FIZ_OptionsFrame:ClearAllPoints()
+ FIZ_OptionsFrame:Point("TOPLEFT", CharacterFrame.backdrop, "TOPRIGHT", -1, 0)
+
+ S:HandleCloseButton(FIZ_OptionsFrameClose, FIZ_OptionsFrame)
+
+ FIZ_ReputationDetailFrame:StripTextures()
+ FIZ_ReputationDetailFrame:SetTemplate("Transparent")
+
+ FIZ_ReputationDetailFrame:ClearAllPoints()
+ FIZ_ReputationDetailFrame:Point("TOPLEFT", CharacterFrame.backdrop, "TOPRIGHT", -1, 0)
+
+ S:HandleCloseButton(FIZ_ReputationDetailCloseButton, FIZ_ReputationDetailFrame)
+
+ S:HandleSliderFrame(FIZ_ChatFrameSlider)
+
+ FIZ_UpdateListScrollFrame:SetTemplate("Transparent")
+ S:HandleScrollBar(FIZ_UpdateListScrollFrameScrollBar)
+
+ local buttons = {
+ FIZ_OptionsButton,
+ FIZ_ShowAllButton,
+ FIZ_ExpandButton,
+ FIZ_ShowNoneButton,
+ FIZ_CollapseButton,
+ FIZ_SupressNoneFactionButton,
+ FIZ_SupressNoneGlobalButton,
+ }
+
+ local checkboxes = {
+ FIZ_OrderByStandingCheckBox,
+ FIZ_EnableMissingBox,
+ FIZ_ExtendDetailsBox,
+ FIZ_GainToChatBox,
+ FIZ_SupressOriginalGainBox,
+ FIZ_ShowPreviewRepBox,
+ FIZ_ReputationDetailAtWarCheckBox,
+ FIZ_ReputationDetailInactiveCheckBox,
+ FIZ_ReputationDetailMainScreenCheckBox,
+ FIZ_ShowQuestButton,
+ FIZ_ShowInstancesButton,
+ FIZ_ShowMobsButton,
+ FIZ_ShowItemsButton,
+ }
+
+ for _, button in ipairs(buttons) do
+ S:HandleButton(button)
+ end
+ for _, checkbox in ipairs(checkboxes) do
+ S:HandleCheckBox(checkbox)
+ end
+
+ FIZ_OptionsButton:Point("TOPRIGHT", -40, -35)
+
+ FIZ_UpdateListScrollFrame:Point("TOPLEFT", FIZ_ReputationDetailDivider2, "BOTTOMLEFT", 5, 18)
+ FIZ_UpdateListScrollFrame:Size(363, 211)
+
+ FIZ_UpdateListScrollFrameScrollBar:Point("TOPLEFT", FIZ_UpdateListScrollFrame, "TOPRIGHT", 3, -19)
+ FIZ_UpdateListScrollFrameScrollBar:Point("BOTTOMLEFT", FIZ_UpdateListScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ FIZ_UpdateEntry1:Point("TOPLEFT", FIZ_UpdateListScrollFrame, "TOPLEFT", 0, -1)
+
+ FIZ_ShowAllButton:Point("TOPLEFT", FIZ_ReputationDetailDivider3, "BOTTOMLEFT", 230, 25)
+ FIZ_ShowNoneButton:Point("TOPLEFT", FIZ_ReputationDetailDivider3, "BOTTOMLEFT", 230, 0)
+
+ FIZ_SupressNoneGlobalButton:Point("TOPLEFT", FIZ_SupressNoneFactionButton, "BOTTOMLEFT", 0, -5)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/feralbyNight.lua b/ElvUI_AddOnSkins/Skins/Addons/feralbyNight.lua
new file mode 100644
index 0000000..ec392d2
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/feralbyNight.lua
@@ -0,0 +1,130 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("FeralbyNight") then return end
+
+local _G = _G
+local ipairs = ipairs
+local unpack = unpack
+
+local hooksecurefunc = hooksecurefunc
+
+-- FeralbyNight 3.321
+-- https://www.curseforge.com/wow/addons/fbn/files/441598
+
+S:AddCallbackForAddon("FeralbyNight", "FeralbyNight", function()
+ if not E.private.addOnSkins.FeralbyNight then return end
+ if E.myclass ~= "DRUID" or E.mylevel < 80 then return end
+
+ local function setAlpha(self, alpha)
+ self.backdrop:SetAlpha(alpha)
+ end
+ local function setTexture(self, texture)
+ if texture then
+ self.backdrop:Show()
+ else
+ self.backdrop:Hide()
+ end
+ end
+ local function setScale(self, scale)
+ if self.__scaleBlock then return end
+
+ self.__scaleBlock = true
+ self:SetScale(1)
+ self.__scaleBlock = nil
+
+ for _, child in ipairs({self:GetChildren()}) do
+ if child:IsObjectType("Frame") then
+ if not child.__baseWidth then
+ child.__baseWidth, child.__baseHeight = child:GetSize()
+ child.__basePointX, child.__basePointY = select(4, child:GetPoint())
+ end
+
+ local a1, p, a2 = child:GetPoint()
+ child:Size(child.__baseWidth * scale, child.__baseHeight * scale)
+ child:Point(a1, p, a2, child.__basePointX * scale, child.__basePointY * scale)
+ end
+ end
+ end
+
+ local function styleIcon(texture)
+ hooksecurefunc(texture, "SetAlpha", setAlpha)
+ hooksecurefunc(texture, "SetTexture", setTexture)
+
+ texture:CreateBackdrop("Default")
+ texture:SetDrawLayer("BORDER")
+ texture:SetTexture(texture:GetTexture())
+ texture:SetTexCoord(unpack(E.TexCoords))
+ end
+
+ local lists = {
+ "abilitycdmon1",
+ "abilitycdmon2",
+ "abilitycdmon3",
+ "bossfight",
+ "myfight",
+ "proc",
+ "textureList",
+ }
+
+ for _, list in ipairs(lists) do
+ for _, texture in pairs(FeralbyNight[list]) do
+ styleIcon(texture)
+ end
+ end
+
+ FeralbyNightDisplayFrame_current_cooldown:SetAllPoints(FeralbyNightDisplayFrame_current)
+
+ local frames = {
+ "FeralbyNightcdmonFrame1",
+ "FeralbyNightcdmonFrame2",
+ "FeralbyNightcdmonFrame3",
+ "FeralbyNightbossfightFrame",
+ "FeralbyNightmyfightFrame",
+ "FeralbyNightDisplayFrame",
+ }
+
+ for _, frame in ipairs(frames) do
+ frame = _G[frame]
+ hooksecurefunc(frame, "SetScale", setScale)
+ frame:SetScale(frame:GetScale())
+ end
+
+ FeralbyNightHudFrame_healthbar:Point("BOTTOM", FeralbyNightHudFrame, 0, -17)
+ FeralbyNightHudFrame_powerbar:Point("BOTTOM", FeralbyNightHudFrame_healthbar, "TOP", 0, 1)
+ FeralbyNightHudFrame_castbar:Point("BOTTOM", FeralbyNightHudFrame_powerbar, "TOP", 0, 1)
+ FeralbyNightHudFrame_bosshealthbar:Point("TOP", FeralbyNightHudFrame, 0, 17)
+ FeralbyNightHudFrame_bosspowerbar:Point("TOP", FeralbyNightHudFrame_bosshealthbar, "BOTTOM", 0, -1)
+ FeralbyNightHudFrame_manabar:Point("BOTTOMLEFT", -7, 0)
+ FeralbyNightHudFrame_threatbar:Point("BOTTOMRIGHT", 7, 0)
+
+ local ufs = {
+ "FeralbyNightHudFrame_powerbar",
+ "FeralbyNightHudFrame_castbar",
+ "FeralbyNightHudFrame_healthbar",
+ "FeralbyNightHudFrame_bosspowerbar",
+ "FeralbyNightHudFrame_bosshealthbar",
+ "FeralbyNightHudFrame_manabar",
+ "FeralbyNightHudFrame_threatbar"
+ }
+
+ local frame, statusbar
+ for _, frameName in ipairs(ufs) do
+ frame = _G[frameName]
+ statusbar = _G[frameName.."_frame"]
+
+ frame:SetBackdrop(nil)
+ frame:CreateBackdrop("Transparent")
+
+ frame:SetFrameStrata("BACKGROUND")
+ -- statusbar:SetFrameStrata("LOW")
+ -- statusbar.text
+ statusbar:Size(frame:GetSize())
+ -- statusbar:SetStatusBarTexture(E.media.normTex)
+ -- E:RegisterStatusBar(statusbar)
+
+ hooksecurefunc(frame, "SetScale", setScale)
+ frame:SetScale(frame:GetScale())
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/fishingBuddy.lua b/ElvUI_AddOnSkins/Skins/Addons/fishingBuddy.lua
new file mode 100644
index 0000000..906c994
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/fishingBuddy.lua
@@ -0,0 +1,132 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("FishingBuddy") then return end
+
+-- FishingBuddy 0.9.8 p1
+-- https://www.curseforge.com/wow/addons/fishingbuddy/files/442409
+
+S:AddCallbackForAddon("FishingBuddy", "FishingBuddy", function()
+ if not E.private.addOnSkins.FishingBuddy then return end
+
+ FishingBuddyFrame:CreateBackdrop("Transparent")
+ FishingBuddyFrame.backdrop:Point("TOPLEFT", 11, -12)
+ FishingBuddyFrame.backdrop:Point("BOTTOMRIGHT", -32, 76)
+
+ S:SetBackdropHitRect(FishingBuddyFrame)
+
+ FishingBuddyFramePortrait:Kill()
+ FishingLocationsFrame:StripTextures()
+ FishingOptionsFrame:StripTextures()
+ FishingLocationExpandButtonFrame:StripTextures()
+
+ S:HandleCloseButton(FishingBuddyCloseButton, FishingBuddyFrame.backdrop)
+
+ FishingLocsScrollFrame:StripTextures()
+ S:HandleScrollBar(FishingLocsScrollFrameScrollBar)
+
+ S:HandleButton(FishingLocationsSwitchButton)
+
+ S:HandleSliderFrame(FishingBuddyOption_MinimapRadSlider)
+ S:HandleSliderFrame(FishingBuddyOption_MinimapPosSlider)
+
+ S:HandleDropDownBox(FishingFluffPetMenu, 187)
+ S:HandleDropDownBox(FishingBuddyOption_OutfitMenu, 210)
+
+ S:HandleCheckBox(FishingBuddyOptionSLZ)
+
+ local skinnedTabs = 0
+ local function skinTabs()
+ local id = skinnedTabs + 1
+ local tab = _G["FishingBuddyFrameTab"..id]
+ while tab do
+ S:HandleTab(tab)
+
+ if id == 1 then
+ tab:Point("CENTER", FishingBuddyFrame, "BOTTOMLEFT", 54, 62)
+ else
+ tab:Point("LEFT", _G["FishingBuddyFrameTab" .. (id - 1)], "RIGHT", -15, 0)
+ end
+
+ tab.ClearAllPoints = E.noop
+ tab.SetPoint = E.noop
+
+ skinnedTabs = id
+ id = id + 1
+ tab = _G["FishingBuddyFrameTab"..id]
+ end
+ end
+
+ hooksecurefunc(FishingBuddy, "ManageFrame", skinTabs)
+ skinTabs()
+
+ if FishingBuddyOption_EasyCastKeys then
+ S:HandleDropDownBox(FishingBuddyOption_EasyCastKeys, 140)
+ else
+ S:SecureHook(FishingBuddy, "Initialize", function()
+ S:HandleDropDownBox(FishingBuddyOption_EasyCastKeys, 140)
+ S:Unhook(FishingBuddy, "Initialize")
+ end)
+ end
+
+ local function SkinCheckBoxes()
+ local checkBox
+ for i = 1, 12 do
+ checkBox = _G["FishingBuddyOption"..i]
+ if checkBox and not checkBox.isSkinned then
+ S:HandleCheckBox(checkBox)
+ checkBox.isSkinned = true
+ end
+ end
+ end
+
+ S:HookScript(FishingOptionsFrame, "OnShow", function()
+ E:Delay(0.01, SkinCheckBoxes)
+ S:Unhook(FishingOptionsFrame, "OnShow")
+ end)
+
+ local optionTabs = {
+ FishingBuddyOptionTab1,
+ FishingBuddyOptionTab2,
+ FishingBuddyOptionTab3
+ }
+
+ FishingBuddyOptionTab1:Point("TOPLEFT", FishingOptionsFrame, "TOPRIGHT", -33, -65)
+ FishingBuddyOptionTab1.ClearAllPoints = E.noop
+ FishingBuddyOptionTab1.SetPoint = E.noop
+
+ for _, frame in ipairs(optionTabs) do
+ frame:SetTemplate("Default")
+ frame:StyleButton()
+ frame:DisableDrawLayer("BACKGROUND")
+ frame:GetNormalTexture():SetInside(frame.backdrop)
+ frame:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+
+ frame:HookScript("OnClick", function(self)
+ if not self.isSkinned then
+ SkinCheckBoxes()
+ self.isSkinned = true
+ end
+ end)
+ end
+
+ for i = 0, 21 do
+ if i == 0 then
+ S:HandleCollapseExpandButton(FishingLocationsCollapseAllButton)
+ else
+ local button = _G["FishingLocations"..i]
+ if button then
+ S:HandleCollapseExpandButton(button)
+ end
+ end
+ end
+
+ FishingWatchDrag:SetClampedToScreen(true)
+ FishingWatchDrag:SetClampRectInsets(0, 0, 23, 0)
+
+ FishingWatchTab:CreateBackdrop("Transparent")
+ FishingWatchTab.backdrop:Point("TOPLEFT", 4, -11)
+ FishingWatchTab.backdrop:Point("BOTTOMRIGHT", -2, 0)
+ FishingWatchTab:DisableDrawLayer("BACKGROUND")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/flightMap.lua b/ElvUI_AddOnSkins/Skins/Addons/flightMap.lua
new file mode 100644
index 0000000..7c6c50b
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/flightMap.lua
@@ -0,0 +1,25 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("FlightMap") then return end
+
+-- Flight Map 3.3.3 beta2
+-- https://www.curseforge.com/wow/addons/flight-map/files/426246
+
+S:AddCallbackForAddon("FlightMap", "FlightMap", function()
+ if not E.private.addOnSkins.FlightMap then return end
+
+ FlightMapTimesFrame:StripTextures()
+ FlightMapTimesFrame:CreateBackdrop("Default")
+
+ FlightMapTimesFrame:SetStatusBarTexture(E.media.glossTex)
+ E:RegisterStatusBar(FlightMapTimesFrame)
+
+ FlightMapTimesText:ClearAllPoints()
+ FlightMapTimesText:SetPoint("CENTER", 0, 0)
+
+ for optionID in pairs(FLIGHTMAP_OPTIONS) do
+ S:HandleCheckBox(_G["InterfaceOptionsFlightMapPanelOption" .. optionID])
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/floAspectBar.lua b/ElvUI_AddOnSkins/Skins/Addons/floAspectBar.lua
new file mode 100644
index 0000000..cf103f6
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/floAspectBar.lua
@@ -0,0 +1,43 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("FloAspectBar") then return end
+
+local _G = _G
+local unpack = unpack
+
+-- FloAspectBar 3.3.0.16
+-- https://www.curseforge.com/wow/addons/flo-aspect-bar/files/399320
+
+S:AddCallbackForAddon("FloAspectBar", "FloAspectBar", function()
+ if not E.private.addOnSkins.FloAspectBar then return end
+
+ if E.myclass ~= "HUNTER" then return end
+
+ local AB = E:GetModule("ActionBars")
+
+ if not S:IsHooked("FloLib_ShowBorders") then
+ S:RawHook("FloLib_ShowBorders", function(self)
+ if self.globalSettings.borders then
+ if not self.template then
+ self:SetTemplate("Transparent")
+ end
+ if self.settings and self.settings.color then
+ self:SetBackdropBorderColor(unpack(self.settings.color))
+ end
+ else
+ self:SetBackdrop(nil)
+ self.template = nil
+ end
+ end)
+ end
+
+ FloAspectBar:SetClampedToScreen(true)
+
+ FloLib_ShowBorders(FloAspectBar)
+
+ for i = 1, 10 do
+ AB:StyleButton(_G["FloAspectBarButton" .. i])
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/floTotemBar.lua b/ElvUI_AddOnSkins/Skins/Addons/floTotemBar.lua
new file mode 100644
index 0000000..3245309
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/floTotemBar.lua
@@ -0,0 +1,73 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("FloTotemBar") then return end
+
+local _G = _G
+local unpack = unpack
+
+-- FloTotemBar 3.3.0.16
+-- https://www.curseforge.com/wow/addons/flo-totem-bar/files/399321
+
+S:AddCallbackForAddon("FloTotemBar", "FloTotemBar", function()
+ if not E.private.addOnSkins.FloTotemBar then return end
+
+ if E.myclass ~= "HUNTER" and E.myclass ~= "SHAMAN" then return end
+
+ local AB = E:GetModule("ActionBars")
+
+ if not S:IsHooked("FloLib_ShowBorders") then
+ S:RawHook("FloLib_ShowBorders", function(self)
+ if self.globalSettings.borders then
+ if not self.template then
+ self:SetTemplate("Transparent")
+ end
+ if self.settings and self.settings.color then
+ self:SetBackdropBorderColor(unpack(self.settings.color))
+ end
+ else
+ self:SetBackdrop(nil)
+ self.template = nil
+ end
+ end)
+ end
+
+ local function skinFrame(frame)
+ FloLib_ShowBorders(frame)
+
+ frame:SetClampedToScreen(true)
+
+ local frameName = frame:GetName()
+ if frameName == "FloBarTRAP" then
+ for i = 1, 3 do
+ local countdown = _G[frameName.."Countdown"..i]
+ countdown:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(countdown)
+ end
+ elseif frameName ~= "FloBarCALL" then
+ local statusbar = _G[frameName.."Countdown"]
+ statusbar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(statusbar)
+ end
+
+ for i = 1, 10 do
+ local button = _G[frameName.."Button"..i]
+ AB:StyleButton(button)
+
+ if frameName ~= "FloBarTRAP" and frameName ~= "FloBarCALL" then
+ FloSwitchButton_OnLeave(button)
+ end
+ end
+ end
+
+ if FLO_CLASS_NAME == "HUNTER" then
+ skinFrame(FloBarTRAP)
+ elseif FLO_CLASS_NAME == "SHAMAN" then
+ skinFrame(FloBarCALL)
+ skinFrame(FloBarEARTH)
+ skinFrame(FloBarFIRE)
+ skinFrame(FloBarWATER)
+ skinFrame(FloBarAIR)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/gearScore.lua b/ElvUI_AddOnSkins/Skins/Addons/gearScore.lua
new file mode 100644
index 0000000..6a4297c
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/gearScore.lua
@@ -0,0 +1,185 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("GearScore") then return end
+
+local _G = _G
+local unpack = unpack
+
+local GetItemInfo = GetItemInfo
+local GetItemQualityColor = GetItemQualityColor
+
+-- GearScore 3.1.17
+
+S:AddCallbackForAddon("GearScore", "GearScore", function()
+ if not E.private.addOnSkins.GearScore then return end
+
+ GS_DisplayFrame:SetTemplate("Transparent")
+
+ S:HandleCloseButton(GSDisplayFrameCloseButton, GS_DisplayFrame)
+
+ S:HandleEditBox(GS_EditBox1)
+ GS_EditBox1:Height(22)
+ GS_EditBox1:ClearAllPoints()
+ GS_EditBox1:Point("RIGHT", GS_SearchButton, "LEFT", -6, 0)
+
+ S:HandleButton(GS_SearchButton)
+ S:HandleButton(GS_GroupButton)
+ S:HandleButton(GS_DeleteButton)
+ S:HandleButton(GS_InviteButton)
+
+ local frame
+ for i = 1, 4 do
+ frame = _G["GS_SpecBar" .. i]
+ frame:StripTextures()
+ frame:SetStatusBarTexture(E.media.normTex)
+ frame:CreateBackdrop("Default")
+ E:RegisterStatusBar(frame)
+ end
+
+ GS_Model:SetTemplate("Transparent")
+
+ for i = 1, 18 do
+ if i ~= 4 then
+ frame = _G["GS_Frame" .. i]
+ frame.texture = frame:CreateTexture(nil, "BORDER")
+ frame.texture:SetInside()
+ frame.texture:SetTexCoord(unpack(E.TexCoords))
+ end
+ end
+
+ hooksecurefunc("GearScore_DisplayUnit", function(Name)
+ local frame
+
+ if GS_Data[E.myrealm].Players[Name] then
+ for i = 1, 18 do
+ if i ~= 4 then
+ frame = _G["GS_Frame" .. i]
+ frame:SetTemplate("Default")
+
+ local _, _, rarity, _, _, _, _, _, _, texture = GetItemInfo("item:" .. GS_Data[E.myrealm].Players[Name].Equip[i])
+
+ if texture then
+ frame.texture:SetTexture(texture)
+ frame:SetBackdropBorderColor(GetItemQualityColor(rarity))
+ else
+ frame.texture:SetTexture(GS_TextureFiles[i])
+ frame:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+ end
+ end
+ else
+ for i = 1, 18 do
+ if i ~= 4 then
+ frame = _G["GS_Frame" .. i]
+ frame:SetTemplate("Default")
+ frame.texture:SetTexture(GS_TextureFiles[i])
+ frame:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+ end
+ end
+ end)
+
+-- S:HandleEditBox(GS_NotesEditBox)
+
+ for i = 1, 14 do
+ frame = _G["GS_XpBar" .. i]
+ frame:StripTextures()
+ frame:SetStatusBarTexture(E.media.normTex)
+ frame:CreateBackdrop("Default")
+ E:RegisterStatusBar(frame)
+ end
+
+ GS_DisplayFrameTab1:Point("TOPLEFT", 0, -448)
+ GS_DisplayFrameTab2:Point("TOPLEFT", GS_DisplayFrameTab1, "TOPRIGHT", -15, 0)
+ GS_DisplayFrameTab3:Point("TOPRIGHT", 0, -448)
+ GS_DisplayFrameTab3:Height(32)
+
+ for i = 1, 3 do
+ S:HandleTab(_G["GS_DisplayFrameTab" .. i])
+ end
+
+ S:HandleCheckBox(GS_ShowPlayerCheck)
+
+ S:HandleButton(Button3)
+ S:HandleButton(GS_UndoButton)
+
+ S:HandleCheckBox(GS_Heavy)
+ S:HandleCheckBox(GS_None)
+ S:HandleCheckBox(GS_Light)
+ S:HandleCheckBox(GS_ShowItemCheck)
+ S:HandleCheckBox(GS_LevelCheck)
+
+ for i = 1, 4 do
+ S:HandleCheckBox(_G["GS_SpecScoreCheck" .. i])
+ end
+
+ S:HandleCheckBox(GS_DetailCheck)
+ S:HandleCheckBox(GS_DateCheck)
+ S:HandleCheckBox(GS_HelpCheck)
+ S:HandleCheckBox(GS_ChatCheck)
+
+ S:HandleEditBox(GS_LevelEditBox)
+
+ S:HandleCheckBox(GS_PruneCheck)
+ S:HandleCheckBox(GS_FactionCheck)
+
+ S:HandleSliderFrame(GS_DatabaseAgeSlider)
+
+ S:HandleCheckBox(GS_MasterlootCheck)
+
+ GS_DatabaseFrame:SetTemplate("Transparent")
+
+ S:HandleCloseButton(GSDatabaseFrameCloseButton, GS_DatabaseFrame)
+
+ GS_DatabaseFrameTab1:Point("TOPLEFT", 0, -468)
+ for i = 1, 4 do
+ S:HandleTab(_G["GS_DatabaseFrameTab" .. i])
+ end
+
+ S:HandleButton(GS_PreviousButton)
+ S:HandleButton(GS_NextButton)
+ S:HandleButton(GS_BackProfileButton)
+
+ S:HandleEditBox(GS_SearchXBox)
+ GS_SearchXBox:Height(22)
+ GS_SearchXBox:ClearAllPoints()
+ GS_SearchXBox:Point("RIGHT", GS_Search2Button, "LEFT", -6, 0)
+
+ for _, frame in ipairs({_G["GS_DatabaseFrame"]:GetChildren()}) do
+ if frame:GetName() == "GS_Search2Button" then
+ S:HandleButton(frame)
+ end
+ end
+
+ hooksecurefunc("GearScore_DisplayDatabase", function()
+ GS_DatabaseFrame.tooltip:SetBackdropColor(unpack(E.media.backdropfadecolor))
+ end)
+
+ GS_ReportFrame:SetTemplate("Transparent")
+ GS_ReportFrame:Point("TOPLEFT", 819, 0)
+
+ S:HandleCloseButton(GSReportFrameCloseButton, GS_ReportFrame)
+
+ S:HandleSliderFrame(GS_Slider)
+
+ GSX_WhisperEditBox:Height(22)
+ GSX_ChannelEditBox:Height(22)
+
+ S:HandleEditBox(GSX_WhisperEditBox)
+ S:HandleEditBox(GSX_ChannelEditBox)
+
+ S:HandleButton(GSXButton1)
+
+ S:HandleCheckBox(GSXSayCheck, true)
+ S:HandleCheckBox(GSXPartyCheck, true)
+ S:HandleCheckBox(GSXRaidCheck, true)
+ S:HandleCheckBox(GSXGuildCheck, true)
+ S:HandleCheckBox(GSXOfficerCheck, true)
+ S:HandleCheckBox(GSXWhisperTargetCheck, true)
+ S:HandleCheckBox(GSXWhisperCheck, true)
+ S:HandleCheckBox(GSXChannelCheck, true)
+
+ AS:SkinLibrary("LibQTip-1.0")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/gnomishVendorShrinker.lua b/ElvUI_AddOnSkins/Skins/Addons/gnomishVendorShrinker.lua
new file mode 100644
index 0000000..869ff63
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/gnomishVendorShrinker.lua
@@ -0,0 +1,115 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("GnomishVendorShrinker") then return end
+
+local unpack = unpack
+
+local hooksecurefunc = hooksecurefunc
+
+-- GnomishVendorShrinker 3.3.0.6
+-- https://www.curseforge.com/wow/addons/gnomishvendorshrinker/files/426171
+
+S:AddCallbackForAddon("GnomishVendorShrinker", "GnomishVendorShrinker", function()
+ if not E.private.addOnSkins.GnomishVendorShrinker then return end
+
+ if GVSEditBox then
+ GVSEditBox:StripTextures()
+ S:HandleEditBox(GVSEditBox)
+ GVSEditBox:Size(135, 19)
+ GVSEditBox:SetScale(1)
+
+ GVSMerchantFrame:CreateBackdrop("Transparent")
+ S:HandleButton(GVSScrollButton1)
+ S:HandleButton(GVSScrollButton2)
+ GVSScrollFrame:StripTextures()
+ S:HandleSliderFrame(GVSScrollBar)
+
+ return
+ end
+
+ local GVS = AS:FindChildFrameByPoint(MerchantFrame, "Frame", "TOPLEFT", MerchantFrame, "TOPLEFT", 21, -77)
+ if not GVS then return end
+
+ GVS:Size(304, 294)
+ GVS:Point("TOPLEFT", 19, -54)
+ GVS:SetTemplate("Transparent")
+
+ MerchantBuyBackItem:ClearAllPoints()
+ MerchantBuyBackItem:Point("BOTTOMLEFT", 187, 118)
+
+ local popoutButtonOnEnter = function(self) self.icon:SetVertexColor(unpack(E.media.rgbvaluecolor)) end
+ local popoutButtonOnLeave = function(self) self.icon:SetVertexColor(1, 1, 1) end
+ local skinCurrencyIcons = function(self)
+ if self.altframesSkinned < #self.altframes then
+ for _, frame in ipairs(self.altframes) do
+ frame.icon:SetTexCoord(unpack(E.TexCoords))
+ end
+ self.altframesSkinned = #self.altframes
+ end
+ end
+
+ for _, child in ipairs({GVS:GetChildren()}) do
+ local objType = child:GetObjectType()
+
+ if objType == "Button" then
+ child:Point("RIGHT", -3, 0)
+
+ S:HandleButtonHighlight(child)
+
+ if child.icon then
+ child.icon:SetTexCoord(unpack(E.TexCoords))
+ end
+
+ if child.popout then
+ child.popout:StripTextures()
+ child.popout:HookScript("OnEnter", popoutButtonOnEnter)
+ child.popout:HookScript("OnLeave", popoutButtonOnLeave)
+
+ child.popout.icon = child.popout:CreateTexture(nil, "ARTWORK")
+ child.popout.icon:Size(21)
+ child.popout.icon:SetPoint("CENTER")
+ child.popout.icon:SetTexture(E.Media.Textures.ArrowUp)
+ child.popout.icon:SetRotation(S.ArrowRotation.right)
+ end
+
+ child.altframesSkinned = 0
+ hooksecurefunc(child, "AddAltCurrency", skinCurrencyIcons)
+ elseif objType == "EditBox" then
+ for _, region in ipairs({child:GetRegions()}) do
+ if region:GetDrawLayer() == "BACKGROUND" then
+ region:SetTexture(nil)
+ end
+ end
+
+ child:Height(18)
+ child:Point("TOPLEFT", GVS, "BOTTOMLEFT", 1, -61)
+ S:HandleEditBox(child)
+ elseif objType == "Slider" then
+ for _, child2 in ipairs({child:GetChildren()}) do
+ local objType2 = child2:GetObjectType()
+
+ if objType2 == "Button" then
+ local texture = child2:GetNormalTexture():GetTexture()
+
+ if texture == "Interface\\Buttons\\UI-ScrollBar-ScrollUpButton-Up" then
+ S:HandleNextPrevButton(child2, "up")
+ child2:Point("BOTTOM", child2:GetParent(), "TOP", 0, 1)
+ elseif texture == "Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Up" then
+ S:HandleNextPrevButton(child2, "down")
+ child2:Point("TOP", child2:GetParent(), "BOTTOM", 0, -1)
+ end
+ elseif objType2 == "Frame" then
+ child2:SetBackdrop(nil)
+ end
+ end
+
+ child:Width(18)
+ child:Point("TOPRIGHT", 21, -19)
+ child:Point("BOTTOMRIGHT", 21, 19)
+
+ S:HandleScrollBar(child)
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/informant.lua b/ElvUI_AddOnSkins/Skins/Addons/informant.lua
new file mode 100644
index 0000000..a6a9e37
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/informant.lua
@@ -0,0 +1,15 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Informant") then return end
+
+-- Informant 5.8.4723
+-- https://www.curseforge.com/wow/addons/auctioneer/files/427823
+
+S:AddCallbackForAddon("Informant", "Informant", function()
+ if not E.private.addOnSkins.Informant then return end
+
+ AS:SkinLibrary("Configator")
+ AS:SkinLibrary("LibExtraTip-1")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/inspectEquip.lua b/ElvUI_AddOnSkins/Skins/Addons/inspectEquip.lua
new file mode 100644
index 0000000..64bcb20
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/inspectEquip.lua
@@ -0,0 +1,30 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("InspectEquip") then return end
+
+-- InspectEquip 1.7.7
+-- https://www.wowace.com/projects/inspect-equip/files/436507
+
+S:AddCallbackForAddon("InspectEquip", "InspectEquip", function()
+ if not E.private.addOnSkins.InspectEquip then return end
+
+ InspectEquip_InfoWindow:SetTemplate("Transparent")
+ S:HandleCloseButton(InspectEquip_InfoWindow_CloseButton, InspectEquip_InfoWindow)
+
+ S:SecureHook(InspectEquip, "SetParent", function(self, frame)
+ InspectEquip_InfoWindow:ClearAllPoints()
+ InspectEquip_InfoWindow:Point("TOPLEFT", _G[frame:GetName() .. "CloseButton"], "TOPRIGHT", -3, -3)
+ end)
+
+ GearManagerDialogPopup:HookScript("OnShow", function()
+ InspectEquip_InfoWindow:Hide()
+ end)
+
+ GearManagerDialogPopup:HookScript("OnHide", function()
+ if not GearManagerDialog:IsShown() then
+ InspectEquip_InfoWindow:Show()
+ end
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/kHunterTimers.lua b/ElvUI_AddOnSkins/Skins/Addons/kHunterTimers.lua
new file mode 100644
index 0000000..2d3e18b
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/kHunterTimers.lua
@@ -0,0 +1,63 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("KHunterTimers") then return end
+
+local _G = _G
+
+-- Kharthus's Hunter Timers 3.2.5
+-- https://www.curseforge.com/wow/addons/kharthuss-hunter-timers/files/423973
+
+S:AddCallbackForAddon("KHunterTimers", "KHunterTimers", function()
+ if not E.private.addOnSkins.KHunterTimers then return end
+
+ KHTvars.bartexture = E.media.normTex
+
+ KHunterTimersAnchor:SetTemplate("Default")
+
+ KHunterTimersOptions:StripTextures()
+ KHunterTimersOptions:SetTemplate("Transparent")
+
+ KHunterTimersOptionsTimers:SetTemplate("Transparent")
+ KHunterTimersOptionsBars:SetTemplate("Transparent")
+
+ S:HandleEditBox(KHunterTimersOptionsBarsEditBox1)
+ KHunterTimersOptionsBarsEditBox1:Height(22)
+
+ S:HandleEditBox(KHunterTimersOptionsBarsEditBox2)
+ KHunterTimersOptionsBarsEditBox2:Height(22)
+
+ S:HandleButton(KHunterTimersOptionsButtonOkay)
+ S:HandleButton(KHunterTimersOptionsButtonApply)
+ S:HandleButton(KHunterTimersOptionsButtonCancel)
+
+ S:HandleCheckBox(KHunterTimersOptionsBarsCheckButtonOn)
+
+ for i = 1, KHT_NUM_OPTIONS do
+ S:HandleCheckBox(_G["KHunterTimersOptionsBarsCheckButton"..i])
+ end
+
+ for i = 1, KHT_NUM_SLIDERS do
+ S:HandleSliderFrame(_G["KHunterTimersOptionsBarsSlider"..i.."Slider"])
+ end
+
+ for i = 1, 6 do
+ for j = 1, 13 do
+ S:HandleCheckBox(_G["KHunterTimersOptionsTimers"..i.."CheckButton"..j])
+ end
+
+ S:HandleScrollBar(_G["KHunterTimers"..i.."ScrollBarScrollBar"])
+
+ local tabName = "KHunterTimersOptionsTimersTab"..i
+ S:HandleTab(_G[tabName])
+ _G[tabName .. "Text"]:Point("CENTER", 0, 1)
+ end
+
+ KHunterTimersFrame:StripTextures()
+
+ for i = 1, KHT_NUM_BARS do
+ S:HandleIcon(_G["KHunterTimersStatus"..i.."Icon"])
+ S:HandleStatusBar(_G["KHunterTimersStatus"..i.."Bar"])
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/karniCrap.lua b/ElvUI_AddOnSkins/Skins/Addons/karniCrap.lua
new file mode 100644
index 0000000..61389e0
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/karniCrap.lua
@@ -0,0 +1,178 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("KarniCrap") then return end
+
+local _G = _G
+
+-- KarniCrap 3.02
+-- https://www.curseforge.com/wow/addons/karnicrap/files/416407
+
+S:AddCallbackForAddon("KarniCrap", "KarniCrap", function()
+ if not E.private.addOnSkins.KarniCrap then return end
+
+ KarniCrap:StripTextures()
+ KarniCrap:SetTemplate("Transparent")
+
+ KarniCrap_TitleText:Point("TOP", KarniCrap, "TOP", 0, -12)
+ KarniCrapTab1:Point("CENTER", KarniCrap, "BOTTOMLEFT", 80, -14)
+
+ KarniCrap_InvHeader1:Point("BOTTOMLEFT", KarniCrap_Inventory, "TOPLEFT", 0, -1)
+
+ KarniCrap_Poor_GoldTexture:SetParent(KarniCrap_Poor_GoldInputBox)
+ KarniCrap_Poor_SilverTexture:SetParent(KarniCrap_Poor_SilverInputBox)
+ KarniCrap_Poor_CopperTexture:SetParent(KarniCrap_Poor_CopperInputBox)
+ KarniCrap_Tab1_CBCommonDesc_GoldTexture:SetParent(KarniCrap_Tab1_CBCommonDesc_GoldInputBox)
+ KarniCrap_Tab1_CBCommonDesc_SilverTexture:SetParent(KarniCrap_Tab1_CBCommonDesc_SilverInputBox)
+ KarniCrap_Tab1_CBCommonDesc_CopperTexture:SetParent(KarniCrap_Tab1_CBCommonDesc_CopperInputBox)
+ KarniCrap_EBDestroyNumDisabled:StripTextures()
+
+ local frames = {
+ -- General Options
+ "KarniCrap_CategoryFrame",
+ "KarniCrap_OptionsFrame",
+ -- Lists
+ "KarniCrap_Blacklist",
+ "KarniCrap_Whitelist",
+ -- Inventory
+ "KarniCrap_Inventory",
+ "KarniCrap_InvHeader1",
+ "KarniCrap_InvHeader2",
+ "KarniCrap_ValueHeader",
+ "KarniCrap_InvHeader4",
+ }
+
+ local scrollBars = {
+ -- Lists
+ "KarniCrapScrollBarScrollBar",
+ "KarniNotCrapScrollBarScrollBar",
+ "KarniCrap_Inventory_ScrollBarScrollBar"
+ }
+
+ local buttons = {
+ "KarniCrap_CloseButton",
+ -- Lists
+ "KarniCrap_BtnBlacklistRemove",
+ "KarniCrap_BtnWhitelistRemove",
+ -- Inventory
+ "KarniCrap_BtnDestroyItem",
+ "KarniCrap_BtnDestroyAllItems"
+ }
+
+ local checkBoxes = {
+ "KarniCrap_CBEnabled",
+ -- General Options
+ "KarniCrap_CBPoor",
+ "KarniCrap_Tab1_CBCommon",
+ "KarniCrap_Tab1_CBUseStackValue",
+ "KarniCrap_Tab1_CBEcho",
+ "KarniCrap_CBDestroy",
+ "KarniCrap_CBDestroySlots",
+ "KarniCrap_CBNoDestroyTradeskill",
+ "KarniCrap_CBDestroyGroup",
+ "KarniCrap_CBDestroyRaid",
+ "KarniCrap_Cloth_CBLinen",
+ "KarniCrap_Cloth_CBWool",
+ "KarniCrap_Cloth_CBSilk",
+ "KarniCrap_Cloth_CBMageweave",
+ "KarniCrap_Cloth_CBRunecloth",
+ "KarniCrap_Cloth_CBNetherweave",
+ "KarniCrap_Cloth_CBFrostweave",
+ "KarniCrap_Corpses_CBSkinnable",
+ "KarniCrap_Corpses_CBGatherable",
+ "KarniCrap_Corpses_CBMinable",
+ "KarniCrap_Corpses_CBEngineerable",
+ "KarniCrap_Corpses_CBSkilledEnough",
+ "KarniCrap_Consumables_RBFood1",
+ "KarniCrap_Consumables_RBFood2",
+ "KarniCrap_Consumables_CBFoodMax",
+ "KarniCrap_Consumables_RBWater1",
+ "KarniCrap_Consumables_RBWater2",
+ "KarniCrap_Consumables_CBWaterMax",
+ "KarniCrap_Pickpocketing_CBPickpocketing",
+ "KarniCrap_Potions_RBHealth1",
+ "KarniCrap_Potions_RBHealth2",
+ "KarniCrap_Potions_CBHealthMax",
+ "KarniCrap_Potions_RBMana1",
+ "KarniCrap_Potions_RBMana2",
+ "KarniCrap_Potions_CBManaMax",
+ "KarniCrap_Quality_CBQualityPoor",
+ "KarniCrap_Quality_CBQualityCommon",
+ "KarniCrap_Quality_CBQualityUncommon",
+ "KarniCrap_Quality_CBQualityRare",
+ "KarniCrap_Quality_CBQualityEpic",
+ "KarniCrap_Quality_CBQualityGrouped",
+ "KarniCrap_Scrolls_CBMaxScrolls",
+ "KarniCrap_Scrolls_CBScrollAgility",
+ "KarniCrap_Scrolls_CBScrollIntellect",
+ "KarniCrap_Scrolls_CBScrollProtection",
+ "KarniCrap_Scrolls_CBScrollSpirit",
+ "KarniCrap_Scrolls_CBScrollStamina",
+ "KarniCrap_Scrolls_CBScrollStrength",
+ "KarniCrap_Tradeskills_CBCooking",
+ "KarniCrap_Tradeskills_CBFishing",
+ "KarniCrap_Tradeskills_CBEnchanting",
+ "KarniCrap_Tradeskills_CBGathering",
+ "KarniCrap_Tradeskills_CBMilling",
+ "KarniCrap_Tradeskills_CBMining",
+ "KarniCrap_Tradeskills_CBProspecting",
+ "KarniCrap_Tradeskills_CBSkinning",
+ -- Inventory
+ "KarniCrap_Inventory_CBHideQuestItems"
+ }
+
+ local editBoxes = {
+ -- General Options
+ "KarniCrap_Poor_GoldInputBox",
+ "KarniCrap_Poor_SilverInputBox",
+ "KarniCrap_Poor_CopperInputBox",
+ "KarniCrap_Tab1_CBCommonDesc_GoldInputBox",
+ "KarniCrap_Tab1_CBCommonDesc_SilverInputBox",
+ "KarniCrap_Tab1_CBCommonDesc_CopperInputBox",
+ "KarniCrap_EBDestroySlotsNum"
+ }
+
+ local tabs = {
+ "KarniCrapTab1",
+ "KarniCrapTab2",
+ "KarniCrapTab3"
+ }
+
+ for _, frame in ipairs(frames) do
+ _G[frame]:StripTextures()
+ _G[frame]:SetTemplate("Transparent")
+ end
+
+ for _, scrollBar in ipairs(scrollBars) do
+ _G[scrollBar]:GetParent():StripTextures()
+ S:HandleScrollBar(_G[scrollBar])
+ end
+
+ for _, button in ipairs(buttons) do
+ S:HandleButton(_G[button])
+ end
+
+ for _, checkBox in ipairs(checkBoxes) do
+ _G[checkBox]:StripTextures()
+ S:HandleCheckBox(_G[checkBox])
+ end
+
+ for _, editBox in ipairs(editBoxes) do
+ if _G[editBox.."Disabled"] then
+ _G[editBox.."Disabled"]:StripTextures()
+ end
+
+ _G[editBox]:Size(32, 16)
+ S:HandleEditBox(_G[editBox])
+ end
+
+ for _, tab in ipairs(tabs) do
+ S:HandleTab(_G[tab])
+ end
+
+ for i = 1, 15 do
+ _G["KarniInvEntry"..i.."_BtnCrap"]:Size(30)
+ S:HandleCloseButton(_G["KarniInvEntry"..i.."_BtnCrap"])
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/lightHeaded.lua b/ElvUI_AddOnSkins/Skins/Addons/lightHeaded.lua
new file mode 100644
index 0000000..be8c8d5
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/lightHeaded.lua
@@ -0,0 +1,143 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("LightHeaded") then return end
+
+local cos, pi = math.cos, math.pi
+
+-- LightHeaded r310
+
+S:AddCallbackForAddon("LightHeaded", "LightHeaded", function()
+ if not E.private.addOnSkins.LightHeaded then return end
+
+ LightHeadedFrame:StripTextures()
+ LightHeadedFrame:SetTemplate("Transparent")
+ LightHeadedFrame:Height(424)
+ LightHeadedFrame:Point("LEFT", QuestLogFrame, "RIGHT", -2, 0)
+
+ LightHeadedFrame.handle:SetParent(QuestLogFrame) -- ignore LightHeadedFrame alpha
+ LightHeadedFrame.handle:StripTextures()
+ LightHeadedFrame.handle:SetTemplate("Default")
+ LightHeadedFrame.handle:Point("LEFT", LightHeadedFrame, "RIGHT", -1, 0)
+
+ LightHeadedSearchBox:Width(281)
+ LightHeadedSearchBox:Point("TOP", LightHeadedFrame, "TOP", 0, -30)
+ S:HandleEditBox(LightHeadedSearchBox)
+
+ S:HandleCloseButton(LightHeadedFrame.close, LightHeadedFrame)
+
+ LightHeadedScrollFrame:CreateBackdrop("Transparent")
+ LightHeadedScrollFrame.backdrop:Point("TOPLEFT", -1, 2)
+ LightHeadedScrollFrame.backdrop:Point("BOTTOMRIGHT", 1, -2)
+
+ LightHeadedScrollFrame:Point("TOPLEFT", 9, -75)
+ LightHeadedScrollFrame:Point("BOTTOMRIGHT", -30, 55)
+
+ LightHeadedScrollFrameScrollBar:Point("TOPLEFT", LightHeadedScrollFrame, "TOPRIGHT", 4, -17)
+ LightHeadedScrollFrameScrollBar:Point("BOTTOMLEFT", LightHeadedScrollFrame, "BOTTOMRIGHT", 4, 17)
+
+ S:HandleNextPrevButton(LightHeadedFrameSub.next, "right")
+ S:HandleNextPrevButton(LightHeadedFrameSub.prev, "left")
+
+ S:HandleScrollBar(LightHeadedScrollFrameScrollBar)
+
+ LightHeadedTooltip:SetTemplate("Transparent")
+ hooksecurefunc(LightHeaded, "OnHyperlinkEnter", function()
+ local backdrop = E.media.backdropfadecolor
+ local border = E.media.bordercolor
+ LightHeadedTooltip:SetBackdropColor(backdrop[1], backdrop[2], backdrop[3], backdrop[4])
+ LightHeadedTooltip:SetBackdropBorderColor(border[1], border[2], border[3])
+ end)
+ hooksecurefunc(LightHeaded, "OnHyperlinkClick", function()
+ LightHeadedTooltip:Hide()
+ end)
+
+ local QLFrameOffsetXOpened, QLFrameOffsetXClosed = -2, -326
+
+ local function UpdatePosition()
+ if LightHeaded.db.profile.open then
+ LightHeadedFrame:Point("LEFT", QuestLogFrame, "RIGHT", QLFrameOffsetXOpened, 0)
+ else
+ LightHeadedFrame:SetAlpha(0)
+ LightHeadedFrameSub:SetAlpha(1)
+ LightHeadedFrame:Point("LEFT", QuestLogFrame, "RIGHT", QLFrameOffsetXClosed, 0)
+ end
+ end
+
+ UpdatePosition()
+
+ hooksecurefunc(LightHeaded, "LockUnlockFrame", function()
+ LightHeadedFrame:Height(424)
+ UpdatePosition()
+ end)
+
+ local function cosineInterpolation(y1, y2, mu)
+ return y1 + (y2 - y1) * (1 - cos(pi * mu)) / 2
+ end
+
+ local openedX, closedX = QLFrameOffsetXOpened, QLFrameOffsetXClosed
+ local timeToFade = 1.5
+ local mod = 1 / timeToFade
+
+ if LightHeaded.db.profile.open then
+ openedX, closedX = closedX, openedX
+ end
+
+ local count = 0
+ local totalElapsed = 0
+ local function OnUpdate(self, elapsed)
+ count = count + 1
+ totalElapsed = totalElapsed + elapsed
+
+ if totalElapsed >= timeToFade then
+ local temp = openedX
+ openedX = closedX
+ closedX = temp
+ count = 0
+ totalElapsed = 0
+ self:SetScript("OnUpdate", nil)
+
+ if not LightHeaded.db.profile.open then
+ if LightHeadedFrameSub.justclosed then
+ LightHeadedFrameSub.justclosed = false
+ LightHeadedFrameSub:Hide()
+
+ self:SetAlpha(0)
+ else
+ LightHeaded.db.profile.open = true
+
+ self:SetAlpha(1)
+ end
+ end
+
+ return
+ elseif count == 1 then
+ if LightHeaded.db.profile.open then
+ LightHeaded.db.profile.open = false
+ LightHeadedFrameSub.justclosed = true
+ else
+ LightHeadedFrameSub:Show()
+ LightHeaded:SelectQuestLogEntry()
+ end
+ end
+
+ local status = mod * totalElapsed
+ local offset = cosineInterpolation(closedX, openedX, status)
+
+ self:Point("LEFT", QuestLogFrame, "RIGHT", offset, 0)
+ self:SetAlpha(LightHeaded.db.profile.lhopen and (1 - status) or status)
+ end
+
+ LightHeadedFrame.handle:SetScript("OnClick", function()
+ LightHeadedFrame:SetScript("OnUpdate", OnUpdate)
+
+ if LightHeaded.db.profile.sound then
+ PlaySoundFile("Sound\\Doodad\\Karazahn_WoodenDoors_Close_A.wav")
+ end
+
+ LightHeaded.db.profile.lhopen = not LightHeaded.db.profile.lhopen
+ end)
+
+ LightHeaded.ChangeBGAlpha = E.noop
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/load_addons.xml b/ElvUI_AddOnSkins/Skins/Addons/load_addons.xml
new file mode 100644
index 0000000..29c67cb
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/load_addons.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/loseControl.lua b/ElvUI_AddOnSkins/Skins/Addons/loseControl.lua
new file mode 100644
index 0000000..fe7072d
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/loseControl.lua
@@ -0,0 +1,64 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("LoseControl") then return end
+
+local _G = _G
+local unpack = unpack
+
+local hooksecurefunc = hooksecurefunc
+
+-- LoseControl 3.33
+-- https://www.curseforge.com/wow/addons/losecontrol/files/417954
+
+S:AddCallbackForAddon("LoseControl", "LoseControl", function()
+ if not E.private.addOnSkins.LoseControl then return end
+
+ local framePrefix = "LoseControl"
+
+ local frameUnits = {
+ "player",
+ "target",
+ "focus",
+ "party1",
+ "party2",
+ "party3",
+ "party4",
+ "arena1",
+ "arena2",
+ "arena3",
+ "arena4",
+ "arena5",
+ }
+
+ local function fixParent(self, parent)
+ if not parent then
+ self:SetParent(UIParent)
+ end
+ end
+
+ local function skinIcon(frame)
+ if not frame or frame.inSkinned then return end
+
+ frame:CreateBackdrop()
+
+ frame.texture:SetAllPoints(frame)
+ frame.texture:SetTexCoord(unpack(E.TexCoords))
+
+ E:RegisterCooldown(frame)
+
+ hooksecurefunc(frame, "SetParent", fixParent)
+ frame.SetSize = frame.Size
+
+ frame.inSkinned = true
+ end
+
+ for _, frameUnit in ipairs(frameUnits) do
+ skinIcon(_G[framePrefix..frameUnit])
+ end
+
+ hooksecurefunc(_G["LoseControlplayer"].__index, "new", function(_, unitID)
+ skinIcon(_G[framePrefix..unitID])
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/mageNuggets.lua b/ElvUI_AddOnSkins/Skins/Addons/mageNuggets.lua
new file mode 100644
index 0000000..108c715
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/mageNuggets.lua
@@ -0,0 +1,214 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("MageNuggets") then return end
+
+local _G = _G
+local unpack = unpack
+
+-- Mage Nuggets 1.86
+-- https://www.curseforge.com/wow/addons/mage-nuggets/files/438172
+
+S:AddCallbackForAddon("MageNuggets", "MageNuggets", function()
+ if not E.private.addOnSkins.MageNuggets then return end
+
+ MageNugSP_Frame:SetTemplate("Transparent", nil, true)
+ MageNugSP_FrameText:FontTemplate(nil, 9)
+ MageNugSP_FrameButtonShowOptions:Size(6)
+ S:HandleButton(MageNugSP_FrameButtonShowOptions)
+
+ MNTorment_Frame:SetTemplate("Default")
+ MNTorment_FrameTexture:SetDrawLayer("OVERLAY")
+ MNTorment_FrameTexture:SetTexCoord(unpack(E.TexCoords))
+ MNTorment_FrameTexture:SetInside()
+
+ MNicyveins_Frame:SetTemplate("Default")
+ MNicyveins_FrameTexture:SetDrawLayer("OVERLAY")
+ MNicyveins_FrameTexture:SetTexCoord(unpack(E.TexCoords))
+ MNicyveins_FrameTexture:SetInside()
+
+ MNarcanepower_Frame:SetTemplate("Default")
+ MNarcanepower_FrameTexture:SetDrawLayer("OVERLAY")
+ MNarcanepower_FrameTexture:SetTexCoord(unpack(E.TexCoords))
+ MNarcanepower_FrameTexture:SetInside()
+
+ MNlust_Frame:SetTemplate("Default")
+ MNlust_FrameTexture:SetDrawLayer("OVERLAY")
+ MNlust_FrameTexture:SetTexCoord(unpack(E.TexCoords))
+ MNlust_FrameTexture:SetInside()
+
+ MageNugClearcast_Frame:SetTemplate("Default")
+ MageNugClearcast_FrameTexture:SetDrawLayer("OVERLAY")
+ MageNugClearcast_FrameTexture:SetTexCoord(unpack(E.TexCoords))
+ MageNugClearcast_FrameTexture:SetInside()
+ MageNugClearcast_Frame_Bar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(MageNugClearcast_Frame_Bar)
+ MageNugClearcast_Frame_Bar:CreateBackdrop("Default")
+ MageNugClearcast_Frame_Bar:Width(34 - E.Spacing * 2)
+ MageNugClearcast_Frame_Bar:Point("TOP", MageNugClearcast_Frame, "BOTTOM", 0, -E.Spacing * 3)
+
+ MageNugSmallLB_Frame:SetTemplate("Default")
+ MageNugSmallLB_FrameTexture:SetDrawLayer("OVERLAY")
+ MageNugSmallLB_FrameTexture:SetTexCoord(unpack(E.TexCoords))
+ MageNugSmallLB_FrameTexture:SetInside()
+ MageNugSmallLB_Frame_LBBar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(MageNugSmallLB_Frame_LBBar)
+ MageNugSmallLB_Frame_LBBar:CreateBackdrop("Default")
+ MageNugSmallLB_Frame_LBBar:Width(34 - E.Spacing * 2)
+ MageNugSmallLB_Frame_LBBar:Point("TOP", MageNugSmallLB_Frame, "BOTTOM", 0, -E.Spacing * 3)
+
+ MageNugScorch_Frame:SetTemplate("Default")
+ MageNugScorch_FrameTexture:SetDrawLayer("OVERLAY")
+ MageNugScorch_FrameTexture:SetTexCoord(unpack(E.TexCoords))
+ MageNugScorch_FrameTexture:SetInside()
+ MageNugScorch_Frame_Bar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(MageNugScorch_Frame_Bar)
+ MageNugScorch_Frame_Bar:CreateBackdrop("Default")
+ MageNugScorch_Frame_Bar:Width(34 - E.Spacing * 2)
+ MageNugScorch_Frame_Bar:Point("TOP", MageNugScorch_Frame, "BOTTOM", 0, -E.Spacing * 3)
+
+ MageNugAB_Frame:SetTemplate("Default")
+ MageNugAB_FrameText:SetDrawLayer("OVERLAY", 1)
+ MageNugAB_FrameTexture:SetDrawLayer("OVERLAY")
+ MageNugAB_FrameTexture:SetTexCoord(unpack(E.TexCoords))
+ MageNugAB_FrameTexture:SetInside()
+ MageNugAB_Frame_ABBar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(MageNugAB_Frame_ABBar)
+ MageNugAB_Frame_ABBar:CreateBackdrop("Default")
+ MageNugAB_Frame_ABBar:Width(34 - E.Spacing * 2)
+ MageNugAB_Frame_ABBar:Point("TOP", MageNugAB_Frame, "BOTTOM", 0, -E.Spacing * 3)
+ MNabCast_Frame:SetTemplate("Transparent")
+ MNabCast_Frame:Point("BOTTOM", MageNugAB_Frame, "TOP", 0, E.Spacing)
+
+ local procFrames = {
+ "MageNugProcFrame",
+ "MageNugImpactProcFrame",
+ "MageNugBFProcFrame",
+ "MageNugMBProcFrame",
+ "MageNugFoFProcFrame"
+ }
+
+ for _, frameName in ipairs(procFrames) do
+ local frame = _G[frameName]
+ local texture = _G[frameName .. "Texture"]
+ local bar = _G[frameName .. "_ProcBar"]
+
+ frame:SetBackdrop(nil)
+ frame:CreateBackdrop("Default")
+ frame.backdrop:SetOutside(texture)
+
+ texture:SetTexCoord(unpack(E.TexCoords))
+
+ _G[frameName .. "Text"]:FontTemplate()
+ _G[frameName .. "Text2"]:FontTemplate(nil, 10)
+ _G[frameName .. "Text2"]:SetPoint("BOTTOMRIGHT", bar)
+ _G[frameName .. "Text2"]:SetParent(bar)
+
+ bar:Point("LEFT", frame.backdrop, "RIGHT", E.Spacing * 3, 0)
+ bar:CreateBackdrop("Default")
+ bar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(bar)
+ end
+
+ MageNugPolyFrame:SetTemplate("Transparent")
+ MageNugPolyFrame:CreateBackdrop("Default")
+ MageNugPolyFrame.backdrop:SetOutside(MageNugPolyFrameTexture)
+ MageNugPolyFrameTexture:SetTexCoord(unpack(E.TexCoords))
+ MageNugPolyFrameText:FontTemplate()
+ MageNugPolyFrameTimerText:FontTemplate()
+
+ MNSpellSteal_Frame:SetTemplate("Transparent", nil, true)
+ MNSpellSteal_FrameTitleText:FontTemplate()
+ S:HandleButton(MNSpellSteal_FrameButtonShowOptions)
+
+ MageNugMI_Frame:CreateBackdrop("Default")
+ MageNugMI_Frame.backdrop:SetOutside(MageNugMI_FrameTexture1)
+ MageNugMI_FrameTexture1:SetTexCoord(unpack(E.TexCoords))
+ MageNugMI_Frame_MIText:FontTemplate()
+ MageNugMI_Frame_MIText1:FontTemplate()
+ MageNugMI_Frame_MiBar:Point("LEFT", MageNugMI_Frame.backdrop, "RIGHT", E.Spacing * 3, 0)
+ MageNugMI_Frame_MiBar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(MageNugMI_Frame_MiBar)
+ MageNugMI_Frame_MiBar:CreateBackdrop("Default")
+
+ MageNugWE_Frame:CreateBackdrop("Default")
+ MageNugWE_Frame.backdrop:SetOutside(MageNugWE_FrameTexture1)
+ MageNugWE_FrameTexture1:SetTexCoord(unpack(E.TexCoords))
+ MageNugWE_Frame_MIText:FontTemplate()
+ MageNugWE_Frame_WEText1:FontTemplate()
+ MageNugWE_Frame_WeBar:Point("LEFT", MageNugWE_Frame.backdrop, "RIGHT", E.Spacing * 3, 0)
+ MageNugWE_Frame_WeBar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(MageNugWE_Frame_WeBar)
+ MageNugWE_Frame_WeBar:CreateBackdrop("Default")
+
+ MageNugHordeFrame:SetTemplate("Transparent")
+ MageNugHordeFrameText:FontTemplate()
+ MageNugHordeFrameText2:FontTemplate()
+
+ local hordeButtons = {
+ "PortDal",
+ "PortShat",
+ "PortOrg",
+ "PortUC",
+ "PortTB",
+ "PortSMC",
+ "PortStonard",
+ "TeleDal",
+ "TeleShat",
+ "TeleOrg",
+ "TeleUC",
+ "TeleTB",
+ "TeleSMC",
+ "TeleStonard",
+ "Hearth"
+ }
+
+ for _, button in ipairs(hordeButtons) do
+ _G["MageNugHordeFrame" .. button]:SetTemplate("Default")
+ _G["MageNugHordeFrame" .. button]:StyleButton()
+
+ local icon = _G["MageNugHordeFrame" .. button .. "TelDalTexture"]
+ icon:SetDrawLayer("OVERLAY")
+ icon:SetTexCoord(unpack(E.TexCoords))
+ icon:SetInside()
+ end
+
+ S:HandleButton(MageNugHordeFrameClose)
+ S:HandleButton(MageNugHordeFrameShowOptions)
+
+ MageNugAlliFrame:SetTemplate("Transparent")
+ MageNugAlliFrameText:FontTemplate()
+ MageNugAlliFrameText2:FontTemplate()
+
+ local alliButtons = {
+ "PortDal",
+ "PortShat",
+ "PortIF",
+ "PortSW",
+ "PortDarn",
+ "PortExo",
+ "PortTheramore",
+ "TeleDal",
+ "TeleShat",
+ "TeleIF",
+ "TeleSW",
+ "TeleDarn",
+ "TeleExo",
+ "TeleTheramore",
+ "Hearth"
+ }
+
+ for _, button in pairs(alliButtons) do
+ _G["MageNugAlliFrame" .. button]:SetTemplate("Default")
+ _G["MageNugAlliFrame" .. button]:StyleButton()
+
+ local icon = _G["MageNugAlliFrame" .. button .. "TelDalTexture"]
+ icon:SetDrawLayer("OVERLAY")
+ icon:SetTexCoord(unpack(E.TexCoords))
+ icon:SetInside()
+ end
+
+ S:HandleButton(MageNugAlliFrameClose)
+ S:HandleButton(MageNugAlliFrameShowOptions)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/moveAnything.lua b/ElvUI_AddOnSkins/Skins/Addons/moveAnything.lua
new file mode 100644
index 0000000..f3f15fb
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/moveAnything.lua
@@ -0,0 +1,82 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("MoveAnything") then return end
+
+local _G = _G
+local unpack = unpack
+
+-- MoveAnything 3.3.5-10
+-- https://www.curseforge.com/wow/addons/move-anything/files/434496
+
+S:AddCallbackForAddon("MoveAnything", "MoveAnything", function()
+ if not E.private.addOnSkins.MoveAnything then return end
+
+ local SPACING = 1 + (E.Spacing * 2)
+
+ local moverOnShow = function(self)
+ _G[self:GetName() .. "Backdrop"]:SetBackdropBorderColor(unpack(E.media.rgbvaluecolor))
+ end
+ local moverOnEnter = function(self)
+ _G[self:GetName() .. "BackdropMovingFrameName"]:SetTextColor(1, 1, 1)
+ end
+ local moverOnLeave = function(self)
+ _G[self:GetName() .. "BackdropMovingFrameName"]:SetTextColor(unpack(E.media.rgbvaluecolor))
+ end
+
+ for i = 1, 20 do
+ _G["MAMover" .. i .. "Backdrop"]:SetTemplate("Transparent")
+ _G["MAMover" .. i]:HookScript("OnShow", moverOnShow)
+ _G["MAMover" .. i]:SetScript("OnEnter", moverOnEnter)
+ _G["MAMover" .. i]:SetScript("OnLeave", moverOnLeave)
+ end
+
+ MAOptions:StripTextures()
+ MAOptions:SetTemplate("Transparent")
+ MAOptions:Size(420, 500 + (16 * SPACING))
+
+ S:HandleCheckBox(MAOptionsCharacterSpecific)
+ S:HandleCheckBox(MAOptionsToggleTooltips)
+ S:HandleCheckBox(MAOptionsToggleModifiedFramesOnly)
+ S:HandleCheckBox(MAOptionsToggleCategories)
+
+ S:HandleButton(MAOptionsResetAll)
+ S:HandleButton(MAOptionsClose)
+ S:HandleButton(MAOptionsSync)
+
+ for i = 1, 17 do
+ _G["MAMove" .. i .. "Backdrop"]:SetTemplate("Default")
+ S:HandleCheckBox(_G["MAMove" .. i .. "Move"])
+ S:HandleCheckBox(_G["MAMove" .. i .. "Hide"])
+ S:HandleButton(_G["MAMove" .. i .. "Reset"])
+
+ if i ~= 1 then
+ _G["MAMove" .. i]:SetPoint("TOPLEFT", "MAMove" .. (i - 1), "BOTTOMLEFT", 0, -SPACING)
+ end
+ end
+
+ MAScrollFrame:Size(380, 442 + (16 * SPACING))
+ S:HandleScrollBar(MAScrollFrameScrollBar)
+ MAScrollBorder:StripTextures()
+
+ MANudger:SetTemplate("Transparent")
+ S:HandleButton(MANudger_NudgeUp)
+ MANudger_NudgeUp:Point("CENTER", 0, 24 + SPACING)
+ S:HandleButton(MANudger_CenterMe)
+ MANudger_CenterMe:Point("TOP", MANudger_NudgeUp, "BOTTOM", 0, -SPACING)
+ S:HandleButton(MANudger_NudgeDown)
+ MANudger_NudgeDown:Point("TOP", MANudger_CenterMe, "BOTTOM", 0, -SPACING)
+ S:HandleButton(MANudger_NudgeLeft)
+ MANudger_NudgeLeft:Point("RIGHT", MANudger_CenterMe, "LEFT", -SPACING, 0)
+ S:HandleButton(MANudger_NudgeRight)
+ MANudger_NudgeRight:Point("LEFT", MANudger_CenterMe, "RIGHT", SPACING, 0)
+ S:HandleButton(MANudger_CenterH)
+ S:HandleButton(MANudger_CenterV)
+ S:HandleButton(MANudger_Detach)
+ S:HandleButton(MANudger_Hide)
+ S:HandleButton(MANudger_MoverPlus)
+ S:HandleButton(MANudger_MoverMinus)
+
+ S:HandleButton(GameMenuButtonMoveAnything)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/oRA3.lua b/ElvUI_AddOnSkins/Skins/Addons/oRA3.lua
new file mode 100644
index 0000000..2f41394
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/oRA3.lua
@@ -0,0 +1,135 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("oRA3") then return end
+
+-- oRA3 r452
+-- https://www.curseforge.com/wow/addons/ora3/files/464284
+
+S:AddCallbackForAddon("oRA3", "oRA3", function()
+ if not E.private.addOnSkins.oRA3 then return end
+
+ local addon = LibStub("AceAddon-3.0"):GetAddon("oRA3", true)
+ if not addon then return end
+
+ AS:SkinLibrary("LibCandyBar-3.0")
+
+ S:SecureHook(addon, "ToggleFrame", function(self)
+ S:Unhook(self, "ToggleFrame")
+
+ oRA3Frame:StripTextures(true)
+ oRA3Frame:CreateBackdrop("Transparent")
+ oRA3Frame.backdrop:Point("TOPLEFT", 11, -12)
+ oRA3Frame.backdrop:Point("BOTTOMRIGHT", -32, 76)
+
+ oRA3Frame:SetAttribute("UIPanelLayout-yoffset", 0)
+ oRA3Frame:SetAttribute("UIPanelLayout-xoffset", 0)
+ S:SetUIPanelWindowInfo(oRA3Frame, "width")
+
+ S:HandleCloseButton(oRA3Frame:GetChildren(), oRA3Frame.backdrop)
+
+ oRA3ScrollFrameTop:Kill()
+ oRA3ScrollFrameBottom:Kill()
+
+ S:HandleScrollBar(oRA3ScrollFrameScrollBar)
+
+ S:HandleTab(oRA3FrameTab1)
+ S:HandleTab(oRA3FrameTab2)
+ S:HandleTab(oRA3FrameTab3)
+ S:HandleTab(oRA3FrameTab4)
+ S:HandleTab(oRA3FrameTab5)
+
+ S:HandleButton(oRA3Disband)
+ S:HandleButton(oRA3Options)
+ S:HandleButton(oRA3ListButton1)
+ S:HandleButton(oRA3ListButton2)
+ S:HandleButton(oRA3ListButton3)
+
+ oRA3ScrollFrame:Point("TOPRIGHT", -21, -24)
+ oRA3ScrollFrame:Point("BOTTOMLEFT", 1, 34)
+
+ oRA3ScrollFrameScrollBar:Point("TOPLEFT", oRA3ScrollFrame, "TOPRIGHT", 3, -19)
+ oRA3ScrollFrameScrollBar:Point("BOTTOMLEFT", oRA3ScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ oRA3ListButton2:Width(104)
+ oRA3ListButton1:Point("TOPLEFT", oRA3ScrollFrame, "BOTTOMLEFT", 0, -7)
+ oRA3ListButton2:Point("LEFT", oRA3ListButton1, "RIGHT", 5, 0)
+ oRA3ListButton3:Point("LEFT", oRA3ListButton2, "RIGHT", 5, 0)
+
+ oRA3FrameTab2:Point("TOPLEFT", oRA3FrameTab1, "TOPRIGHT", -15, 0)
+ oRA3FrameTab3:Point("TOPLEFT", oRA3FrameTab2, "TOPRIGHT", -15, 0)
+ oRA3FrameTab4:Point("TOPLEFT", oRA3FrameTab3, "TOPRIGHT", -15, 0)
+ oRA3FrameTab5:Point("TOPLEFT", oRA3FrameTab4, "TOPRIGHT", -15, 0)
+ end)
+
+ hooksecurefunc(addon, "CreateScrollEntry", function(self, header)
+ if header.inSkinned then return end
+
+ header:DisableDrawLayer("BACKGROUND")
+ header:StyleButton()
+
+ if header.headerIndex == 1 then
+ header:Point("TOPLEFT", 1, 0)
+ end
+
+ header.isSkinned = true
+ end)
+
+ local tanks = addon:GetModule("Tanks", true)
+ if tanks then
+ S:SecureHook(tanks, "CreateFrame", function(self)
+ S:Unhook(self, "CreateFrame")
+
+ local border1, border2 = oRA3TankTopScrollFrame:GetParent():GetChildren()
+ border1:StripTextures()
+ if not border2:GetName() then
+ border2:StripTextures()
+ end
+
+ S:HandleScrollBar(oRA3TankTopScrollFrameScrollBar)
+ S:HandleScrollBar(oRA3TankBottomScrollFrameScrollBar)
+
+ oRA3TankTopScrollFrame:CreateBackdrop("Transparent")
+ oRA3TankTopScrollFrame.backdrop:Point("TOPLEFT", -6, 1)
+ oRA3TankTopScrollFrame.backdrop:Point("BOTTOMRIGHT", 7, -1)
+
+ oRA3TankBottomScrollFrame:CreateBackdrop("Transparent")
+ oRA3TankBottomScrollFrame.backdrop:Point("TOPLEFT", -6, 1)
+ oRA3TankBottomScrollFrame.backdrop:Point("BOTTOMRIGHT", 7, -1)
+
+ oRA3TankTopScrollFrameScrollBar:Point("TOPLEFT", oRA3TankTopScrollFrame, "TOPRIGHT", 10, -18)
+ oRA3TankTopScrollFrameScrollBar:Point("BOTTOMLEFT", oRA3TankTopScrollFrame, "BOTTOMRIGHT", 10, 18)
+
+ oRA3TankBottomScrollFrameScrollBar:Point("TOPLEFT", oRA3TankBottomScrollFrame, "TOPRIGHT", 10, -18)
+ oRA3TankBottomScrollFrameScrollBar:Point("BOTTOMLEFT", oRA3TankBottomScrollFrame, "BOTTOMRIGHT", 10, 18)
+
+ for i = 1, 10 do
+ local checkBox = _G["oRA3TankHideButton"..i]
+ S:HandleCheckBox(checkBox)
+ checkBox.backdrop:SetInside(nil, 1, 1)
+ end
+ end)
+ end
+
+ local readycheck = addon:GetModule("ReadyCheck", true)
+ if readycheck then
+ S:SecureHook(readycheck, "READY_CHECK", function(self)
+ if not (addon:IsPromoted() and self.db.profile.gui) then return end
+
+ S:Unhook(self, "READY_CHECK")
+
+ oRA3ReadyCheck:StripTextures()
+ oRA3ReadyCheck:SetTemplate("Transparent")
+
+ local closeButton = oRA3ReadyCheck:GetChildren()
+ S:HandleCloseButton(closeButton)
+ closeButton:Point("TOPRIGHT", 1, 2)
+
+ local titlebg = oRA3ReadyCheck:GetRegions()
+ titlebg:Point("TOPLEFT", 6, -6)
+ titlebg:Point("BOTTOMRIGHT", oRA3ReadyCheck, "TOPRIGHT", -6, -23)
+ titlebg:SetTexture(unpack(E.media.bordercolor))
+ end)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/omen.lua b/ElvUI_AddOnSkins/Skins/Addons/omen.lua
new file mode 100644
index 0000000..c8586fa
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/omen.lua
@@ -0,0 +1,37 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Omen") then return end
+
+-- Omen 3.0.9
+-- https://www.wowace.com/projects/omen-threat-meter/files/404746
+
+S:AddCallbackForAddon("Omen", "Omen", function()
+ if not E.private.addOnSkins.Omen then return end
+
+ hooksecurefunc(Omen, "UpdateBars", function(self)
+ self.TitleText:Width(self.Title:GetWidth() - 16)
+ self.TitleText:Height(16)
+ end)
+
+ hooksecurefunc(Omen, "UpdateBackdrop", function(self)
+ self.Title:SetTemplate(E.db.addOnSkins.omenTitleTemplate, E.db.addOnSkins.omenTitleTemplate == "Default" and E.db.addOnSkins.omenTitleTemplateGloss or false)
+ self.BarList:SetTemplate(E.db.addOnSkins.omenTemplate, E.db.addOnSkins.omenTemplate == "Default" and E.db.addOnSkins.omenTemplateGloss or false)
+ end)
+
+ hooksecurefunc(Omen, "UpdateTitleBar", function(self)
+ self.BarList:ClearAllPoints()
+
+ if not Omen.db.profile.TitleBar.ShowTitleBar then
+ self.BarList:SetPoint("TOPLEFT", self.Title, "BOTTOMLEFT", 0, 0)
+ else
+ self.BarList:Point("TOPLEFT", self.Title, "BOTTOMLEFT", 0, -(E.PixelMode and 1 or 3))
+ end
+ self.BarList:SetPoint("BOTTOMRIGHT", self.Anchor, "BOTTOMRIGHT", 0, 0)
+ end)
+
+ hooksecurefunc(Omen, "UpdateBackdrop", function(self)
+ self:UpdateTitleBar()
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/openGF.lua b/ElvUI_AddOnSkins/Skins/Addons/openGF.lua
new file mode 100644
index 0000000..1778a3a
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/openGF.lua
@@ -0,0 +1,51 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("OpenGF") then return end
+
+-- Open Group Finder
+
+S:AddCallbackForAddon("OpenGF", "OpenGF", function()
+ if not E.private.addOnSkins.OpenGF then return end
+
+ ogf_OpenGF_MainFrame:SetTemplate("Transparent")
+
+ S:HandleCloseButton(ogf_minimizeButton, ogf_OpenGF_MainFrame)
+
+ S:HandleCheckBox(ogf_dpsCheck)
+ S:HandleCheckBox(ogf_tankCheck)
+ S:HandleCheckBox(ogf_healCheck)
+
+ S:HandleEditBox(ogf_noteText)
+ ogf_noteText:Height(22)
+
+ S:HandleDropDownBox(ogf_categorySelect, 200)
+ S:HandleDropDownBox(ogf_vanInstances, 200)
+ S:HandleDropDownBox(ogf_tbcInstances, 200)
+ S:HandleDropDownBox(ogf_tbcHeroic, 200)
+ S:HandleDropDownBox(ogf_wotlkInstances, 200)
+ S:HandleDropDownBox(ogf_wotlkHeroic, 200)
+
+ ogf_categorySelect:Point("TOPLEFT", 0, -100)
+ ogf_vanInstances:Point("TOPLEFT", 175, -100)
+ ogf_tbcInstances:Point("TOPLEFT", 175, -100)
+ ogf_tbcHeroic:Point("TOPLEFT", 175, -100)
+ ogf_wotlkInstances:Point("TOPLEFT", 175, -100)
+ ogf_wotlkHeroic:Point("TOPLEFT", 175, -100)
+
+ S:HandleButton(ogf_searchButton)
+ S:HandleButton(ogf_enlistButton)
+ S:HandleButton(ogf_unlistButton)
+ S:HandleButton(ogf_unlistAllButton)
+
+ ogf_searchButton:Point("TOPRIGHT", -192, -101)
+ ogf_enlistButton:Point("TOPRIGHT", -103, -101)
+ ogf_unlistButton:Point("TOPRIGHT", -103, -101)
+ ogf_unlistAllButton:Point("TOPRIGHT", -14, -101)
+
+ ogf_playerList:SetTemplate("Transparent")
+ ogf_plyContextMenu:SetTemplate("Transparent")
+
+ S:HandleScrollBar(scrollFrameScrollBar)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/outfitter.lua b/ElvUI_AddOnSkins/Skins/Addons/outfitter.lua
new file mode 100644
index 0000000..895d084
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/outfitter.lua
@@ -0,0 +1,441 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Outfitter") then return end
+
+local _G = _G
+local pairs, ipairs = pairs, ipairs
+local unpack = unpack
+local lower = string.lower
+
+local hooksecurefunc = hooksecurefunc
+
+-- Outfitter 5.0
+
+S:AddCallbackForAddon("Outfitter", "Outfitter", function()
+ if not E.private.addOnSkins.Outfitter then return end
+
+ -- ButtonFrame
+ OutfitterButtonFrame:SetAllPoints(CharacterFrame.backdrop)
+
+ OutfitterButton:ClearAllPoints()
+ OutfitterButton:Point("TOPRIGHT", OutfitterButtonFrame, -25, -5)
+
+ OutfitterButton:Size(30, 16)
+ OutfitterButton:SetTemplate("Transparent")
+ OutfitterButton:SetHighlightTexture("")
+ OutfitterButton:HookScript("OnEnter", S.SetModifiedBackdrop)
+ OutfitterButton:HookScript("OnLeave", S.SetOriginalBackdrop)
+
+ local buttonTexture = OutfitterButton:GetNormalTexture()
+ buttonTexture:SetInside()
+ buttonTexture:SetTexCoord(0.296875, 0.765625, 0.140625, 0.390625)
+ buttonTexture = OutfitterButton:GetPushedTexture()
+ buttonTexture:SetInside()
+ buttonTexture:SetTexCoord(0.25, 0.71875, 0.640625, 0.890625)
+
+ -- AboutFrame
+ OutfitterAboutFrame:StripTextures()
+ OutfitterAboutFrame:SetTemplate("Transparent")
+
+ -- OptionsFrame
+ OutfitterOptionsFrame:StripTextures()
+ OutfitterOptionsFrame:SetTemplate("Transparent")
+
+ S:HandleCheckBox(OutfitterAutoSwitch, true)
+ S:HandleCheckBox(OutfitterShowOutfitBar, true)
+ S:HandleCheckBox(OutfitterShowMinimapButton, true)
+ S:HandleCheckBox(OutfitterShowHotkeyMessages, true)
+ S:HandleCheckBox(OutfitterTooltipInfo, true)
+ S:HandleCheckBox(OutfitterItemComparisons, true)
+
+ OutfitterShowOutfitBar:Point("TOPLEFT", OutfitterAutoSwitch, "BOTTOMLEFT", 0, -5)
+
+ -- MainFrame
+ OutfitterFrame:Point("TOPLEFT", OutfitterButtonFrame, "TOPRIGHT", -1, 0)
+
+ OutfitterMainFrame:SetTemplate("Transparent")
+
+ OutfitterMainFrameBackground:StripTextures()
+ OutfitterMainFrameButtonBarBackground:StripTextures()
+
+ OutfitterFrameTitle:Point("TOP", 0, -6)
+ OutfitterFrameTitle:SetParent(OutfitterMainFrame)
+
+ S:HandleCloseButton(OutfitterCloseButton, OutfitterFrame)
+
+ for i = 1, 3 do
+ local tab = _G["OutfitterFrameTab"..i]
+ tab:StripTextures()
+ tab:SetTemplate()
+
+ tab:Height(28)
+
+ if i == 1 then
+ tab:Point("BOTTOMRIGHT", -6, -27)
+ else
+ tab:Point("RIGHT", _G["OutfitterFrameTab"..(i - 1)], "LEFT", -5, 0)
+ end
+ end
+
+ OutfitterMainFrameHighlight:SetTexture(E.Media.Textures.Highlight)
+ OutfitterMainFrameHighlight:SetVertexColor(0.9, 0.9, 0.9, 0.35)
+
+ OutfitterMainFrameScrollbarTrench:StripTextures()
+
+ S:HandleScrollBar(OutfitterMainFrameScrollFrameScrollBar)
+ OutfitterMainFrameScrollFrameScrollBar:Point("TOPLEFT", OutfitterMainFrameScrollFrame, "TOPRIGHT", 3, -20)
+ OutfitterMainFrameScrollFrameScrollBar:Point("BOTTOMLEFT", OutfitterMainFrameScrollFrame, "BOTTOMRIGHT", 3, 20)
+
+ OutfitterItem0:Point("TOPLEFT", 3, -57)
+
+ S:HandleButton(OutfitterNewButton)
+ OutfitterNewButton:Point("BOTTOMRIGHT", -8, 8)
+
+ for i = 0, 13 do
+ local categoryExpand = _G["OutfitterItem"..i.."CategoryExpand"]
+ S:HandleCollapseExpandButton(categoryExpand)
+ categoryExpand:Point("BOTTOMLEFT", 2, 1)
+
+ local outfitSelected = _G["OutfitterItem"..i.."OutfitSelected"]
+ S:HandleCheckBox(outfitSelected, true)
+ outfitSelected:Point("BOTTOMLEFT", 5, 1)
+
+ _G["OutfitterItem"..i.."ItemIcon"]:SetTexCoord(unpack(E.TexCoords))
+
+ local outfitServerButton = _G["OutfitterItem"..i.."OutfitServerButton"]
+ outfitServerButton:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ outfitServerButton:GetPushedTexture():SetTexCoord(unpack(E.TexCoords))
+
+ local outfitMenu = _G["OutfitterItem"..i.."OutfitMenu"]
+ S:HandleNextPrevButton(outfitMenu, "down")
+ outfitMenu:Size(16)
+ end
+
+ hooksecurefunc(Outfitter._SidebarWindowFrame, "Construct", function(self)
+ for _, textureFrame in pairs(self.Background) do
+ textureFrame:StripTextures()
+ end
+ end)
+
+ -- SlotEnables
+ S:HandleButton(OutfitterEnableAll)
+ S:HandleButton(OutfitterEnableNone)
+
+--[[
+ local slots = {
+ OutfitterEnableHeadSlot,
+ OutfitterEnableNeckSlot,
+ OutfitterEnableShoulderSlot,
+ OutfitterEnableBackSlot,
+ OutfitterEnableChestSlot,
+ OutfitterEnableShirtSlot,
+ OutfitterEnableTabardSlot,
+ OutfitterEnableWristSlot,
+ OutfitterEnableHandsSlot,
+ OutfitterEnableWaistSlot,
+ OutfitterEnableLegsSlot,
+ OutfitterEnableFeetSlot,
+ OutfitterEnableFinger0Slot,
+ OutfitterEnableFinger1Slot,
+ OutfitterEnableTrinket0Slot,
+ OutfitterEnableTrinket1Slot,
+ OutfitterEnableMainHandSlot,
+ OutfitterEnableSecondaryHandSlot,
+ OutfitterEnableRangedSlot,
+ OutfitterEnableAmmoSlot,
+ }
+
+ for _, slot in ipairs(slots) do
+ S:HandleCheckBox(slot)
+ end
+--]]
+
+ -- OutfitterQuickSlots
+ hooksecurefunc(Outfitter, "InitializeQuickSlots", function()
+ Outfitter.QuickSlots:StripTextures()
+ Outfitter.QuickSlots:SetTemplate("Transparent")
+ end)
+ local hiddenTextures = 0
+ hooksecurefunc(Outfitter._ButtonBar, "SetDimensions", function(self)
+ if hiddenTextures >= #self.BackgroundTextures then return end
+
+ for i = hiddenTextures + 1, #self.BackgroundTextures do
+ self.BackgroundTextures[i].Show = E.noop
+ self.BackgroundTextures[i]:Hide()
+ end
+
+ hiddenTextures = #self.BackgroundTextures
+ end)
+ hooksecurefunc(Outfitter._QuickSlotButton, "Construct", function(self)
+ local buttonName = self.ItemButton:GetName()
+ local icon = _G[buttonName.."IconTexture"]
+
+ self.ItemButton:GetNormalTexture():SetTexture(nil)
+ self.ItemButton:SetTemplate("Default")
+ self.ItemButton:StyleButton()
+
+ icon:SetInside()
+ icon:SetTexCoord(unpack(E.TexCoords))
+
+ E:RegisterCooldown(_G[buttonName.."Cooldown"])
+ end)
+
+ -- ScriptFrame
+ OutfitterEditScriptDialog:StripTextures()
+ OutfitterEditScriptDialog:SetTemplate("Transparent")
+ OutfitterEditScriptDialog:ClearAllPoints()
+ OutfitterEditScriptDialog:SetPoint("CENTER")
+
+ OutfitterEditScriptDialog.CloseButton:Size(32)
+ S:HandleCloseButton(OutfitterEditScriptDialog.CloseButton, OutfitterEditScriptDialog)
+
+ S:HandleDropDownBox(OutfitterEditScriptDialogPresetScript)
+ OutfitterEditScriptDialogPresetScript:Point("TOPLEFT", 291, -20)
+
+ OutfitterEditScriptDialogSourceScript:StripTextures()
+ OutfitterEditScriptDialogSourceScript:CreateBackdrop("Transparent")
+ OutfitterEditScriptDialogSourceScript:Size(422, 369)
+ OutfitterEditScriptDialogSourceScript:Point("TOPLEFT", 60, -51)
+
+ OutfitterEditScriptDialogSourceScriptEditBox:Width(421)
+
+ S:HandleScrollBar(OutfitterEditScriptDialogSourceScriptScrollBar)
+ OutfitterEditScriptDialogSourceScriptScrollBar:Point("TOPLEFT", OutfitterEditScriptDialogSourceScript, "TOPRIGHT", 4, -18)
+ OutfitterEditScriptDialogSourceScriptScrollBar:Point("BOTTOMLEFT", OutfitterEditScriptDialogSourceScript, "BOTTOMRIGHT", 4, 18)
+
+ S:HandleButton(OutfitterEditScriptDialogDoneButton)
+ S:HandleButton(OutfitterEditScriptDialogCancelButton)
+ OutfitterEditScriptDialogCancelButton:Point("BOTTOMRIGHT", -8, 8)
+
+ S:HandleTab(OutfitterEditScriptDialogTab1)
+ S:HandleTab(OutfitterEditScriptDialogTab2)
+
+ OutfitterEditScriptDialogTab1:Point("TOPLEFT", OutfitterEditScriptDialog, "BOTTOMLEFT", 0, 2)
+ OutfitterEditScriptDialogTab2:Point("LEFT", OutfitterEditScriptDialogTab1, "RIGHT", -15, 0)
+
+ hooksecurefunc(OutfitterEditScriptDialog, "ConstructSettingsFields", function(self, pSettings) -- Outfitter._EditScriptDialog.ConstructSettingsFields
+ if pSettings.Inputs then
+
+ for _, frame in ipairs(self.SettingsFrames) do
+ local vSettingTypeInfo = Outfitter.SettingTypeInfo[lower(frame.Descriptor.Type)]
+ local vFrameType = vSettingTypeInfo.FrameType
+
+ if vFrameType == "ScrollableEditBox" then
+ frame:StripTextures()
+ frame:CreateBackdrop()
+
+ _G[frame:GetName().."EditBox"]:Width(frame:GetWidth() - 1)
+
+ local scrollBar = _G[frame:GetName().."ScrollBar"]
+ S:HandleScrollBar(scrollBar)
+ scrollBar:Point("TOPLEFT", frame, "TOPRIGHT", 4, -18)
+ scrollBar:Point("BOTTOMLEFT", frame, "BOTTOMRIGHT", 4, 18)
+ elseif vFrameType == "EditBox" then
+ S:HandleEditBox(frame)
+
+ for _, region in ipairs({frame:GetRegions()}) do
+ if region:GetObjectType("Texture") and region:GetDrawLayer() == "BACKGROUND" then
+ region:Hide()
+ end
+ end
+ elseif vFrameType == "ZoneListEditBox" then
+ frame:StripTextures()
+ frame:CreateBackdrop()
+
+ _G[frame:GetName().."EditBox"]:Width(frame:GetWidth() - 1)
+
+ local scrollBar = _G[frame:GetName().."ScrollBar"]
+ S:HandleScrollBar(scrollBar)
+ scrollBar:Point("TOPLEFT", frame, "TOPRIGHT", 4, -18)
+ scrollBar:Point("BOTTOMLEFT", frame, "BOTTOMRIGHT", 4, 18)
+
+ S:HandleButton(_G[frame:GetName().."ZoneButton"])
+ elseif vFrameType == "Checkbox" then
+ S:HandleCheckBox(frame)
+ end
+ end
+ end
+ end)
+
+ -- ChooseIconDialog
+ OutfitterChooseIconDialog:GetChildren():Hide() -- backdrop
+ OutfitterChooseIconDialog:SetTemplate("Transparent")
+ OutfitterChooseIconDialog:Size(303, 367)
+
+ S:HandleDropDownBox(OutfitterChooseIconDialogIconSetMenu)
+
+ S:HandleEditBox(OutfitterChooseIconDialogFilterEditBox)
+ local leftTex, rightTex, middleTex = select(OutfitterChooseIconDialogFilterEditBox:GetNumRegions() - 2, OutfitterChooseIconDialogFilterEditBox:GetRegions())
+ leftTex:Hide()
+ rightTex:Hide()
+ middleTex:Hide()
+
+ OutfitterChooseIconDialogScrollFrame:StripTextures()
+ OutfitterChooseIconDialogScrollFrame:Point("TOPLEFT", OutfitterChooseIconDialogFilterEditBox, "BOTTOMLEFT", -64, -19)
+
+ S:HandleScrollBar(OutfitterChooseIconDialogScrollFrameScrollBar)
+ OutfitterChooseIconDialogScrollFrameScrollBar:Point("TOPLEFT", OutfitterChooseIconDialogScrollFrame, "TOPRIGHT", 6, -19)
+ OutfitterChooseIconDialogScrollFrameScrollBar:Point("BOTTOMLEFT", OutfitterChooseIconDialogScrollFrame, "BOTTOMRIGHT", 6, 19)
+
+ S:HandleButton(OutfitterChooseIconDialogOKButton)
+ S:HandleButton(OutfitterChooseIconDialogCancelButton)
+ OutfitterChooseIconDialogCancelButton:Point("BOTTOMRIGHT", -8, 8)
+
+ hooksecurefunc(OutfitterChooseIconDialog, "NewIconButton", function(self) -- Outfitter.OutfitBar._ChooseIconDialog
+ local button = _G["OutfitterChooseIconDialogButton"..#self.IconButtons]
+ local buttonIcon = _G["OutfitterChooseIconDialogButton"..#self.IconButtons.."Icon"]
+
+ button:StripTextures()
+ button:SetTemplate(nil, true)
+ button:StyleButton(nil, true)
+
+ buttonIcon:SetDrawLayer("ARTWORK")
+ buttonIcon:SetTexCoord(unpack(E.TexCoords))
+ buttonIcon:SetInside()
+ end)
+
+ -- OutfitBar
+ hooksecurefunc(Outfitter.OutfitBar, "NewBar", function(self)
+ local frame = _G["OutfitterOutfitBar" .. (self.UniqueNameIndex - 1)]
+
+ for _, texture in ipairs(frame.BackgroundTextures) do
+ texture.Show = E.noop
+ texture:Hide()
+ end
+
+ if not self.Settings.OutfitBar.HideBackground then
+ frame:SetTemplate("Transparent")
+ end
+
+ for _, button in ipairs(frame.Buttons) do
+ button.Widgets.Icon:SetDrawLayer("BORDER")
+ S:HandleItemButton(button, true)
+ end
+ end)
+
+ hooksecurefunc(Outfitter.OutfitBar._DragBar, "Construct", function(self)
+ self:CreateBackdrop("Default")
+
+ self.DragTexture.SetTexture = E.noop
+ self.DragTexture.SetTexCoord = E.noop
+ self.DragTexture.SetTextureOffset = E.noop
+ end)
+
+ function Outfitter.OutfitBar._DragBar:SetVerticalOrientation(pVertical)
+ self.Vertical = pVertical
+ if pVertical then
+ self:Size(53, 12)
+ else
+ self:Size(12, 53)
+ end
+ end
+
+ hooksecurefunc(Outfitter.OutfitBar._SettingsDialog, "Construct", function(self)
+ self:SetTemplate("Transparent")
+
+ S:HandleSliderFrame(self.SizeSlider)
+ S:HandleSliderFrame(self.AlphaSlider)
+ S:HandleSliderFrame(self.CombatAlphaSlider)
+
+ S:HandleCheckBox(self.VerticalCheckbutton)
+ S:HandleCheckBox(self.LockPositionCheckbutton)
+ S:HandleCheckBox(self.HideBackgroundCheckbutton)
+ end)
+
+ function Outfitter._ButtonBar:ShowBackground(pShow)
+ self.HideBackground = not pShow
+ self:SetTemplate(pShow and "Transparent" or "NoBackdrop")
+ end
+
+ -- MC2UIElementsLib
+ hooksecurefunc(Outfitter.UIElementsLib._SidebarWindowFrame, "Construct", function(self)
+ self:SetTemplate("Transparent")
+ S:HandleCloseButton(self.CloseButton, self)
+
+ for _, textureFrame in pairs(self.Background) do
+ textureFrame:StripTextures()
+ end
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._ModalDialogFrame, "Construct", function(self)
+ self:SetTemplate("Transparent")
+
+ self.Title:Point("TOP", 0, -5)
+
+ self.TitleBackground.Show = E.noop
+ self.TitleBackground:Hide()
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._Tabs, "Construct", function(self, pFrame, pXOffset, pYOffset)
+ self.XOffset = (pXOffset or 0) + 15
+ self.YOffset = (pYOffset or 0) + 3
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._Tabs, "NewTab", function(self)
+ S:HandleTab(self.Tabs[#self.Tabs])
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._ScrollbarTrench, "Construct", function(self)
+ self:StripTextures()
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._Scrollbar, "Construct", function(self)
+ S:HandleScrollBar(self)
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._CheckButton, "Construct", function(self)
+ S:HandleCheckBox(self, true)
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._ExpandAllButton, "Construct", function(self)
+ self.TabLeft.Show = E.noop
+ self.TabMiddle.Show = E.noop
+ self.TabRight.Show = E.noop
+ self.TabLeft:Hide()
+ self.TabMiddle:Hide()
+ self.TabRight:Hide()
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._PlainBorderedFrame, "Construct", function(self)
+ self:SetTemplate("Transparent")
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._CloseButton, "Construct", function(self, pParent)
+ S:HandleCloseButton(self, pParent)
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._FadingTitleBar, "Construct", function(self)
+ self.FullBar:StripTextures()
+ self.FullBar:SetTemplate("Transparent")
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._ExpandButton, "Construct", function(self)
+ S:HandleCollapseExpandButton(self, "-")
+ end)
+ local dropdownArrowColor = {1, 0.8, 0}
+ hooksecurefunc(Outfitter.UIElementsLib._DropDownMenuButton, "Construct", function(self, pParent, pMenuFunc, pWidth)
+ S:HandleNextPrevButton(self.Button, "down", dropdownArrowColor)
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._Section, "Construct", function(self)
+ self:SetTemplate("Transparent")
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._DropDownMenu, "Construct", function(self)
+ self:StripTextures()
+ self:SetTemplate()
+
+ self.Button:Point("RIGHT", -2, 0)
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._EditBox, "Construct", function(self, pParent, pLabel, pMaxLetters, pWidth, pPlain)
+ self:SetTemplate()
+
+ if not pPlain then
+ self.LeftTexture:SetAlpha(0)
+ self.MiddleTexture:SetAlpha(0)
+ self.RightTexture:SetAlpha(0)
+ end
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._PushButton, "Construct", function(self)
+ S:HandleButton(self, true)
+
+ self.HighlightTexture.Show = E.noop
+ self.HighlightTexture:Hide()
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._ScrollingEditBox, "Construct", function(self)
+ self.BackgroundTextures:SetTemplate("Transparent")
+ self.EditBox:SetTemplate("NoBackdrop")
+ end)
+ hooksecurefunc(Outfitter.UIElementsLib._ProgressBar, "Construct", function(self)
+ S:HandleStatusBar(self)
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/overachiever.lua b/ElvUI_AddOnSkins/Skins/Addons/overachiever.lua
new file mode 100644
index 0000000..ccd95d8
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/overachiever.lua
@@ -0,0 +1,79 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Overachiever_Tabs") then return end
+
+local _G = _G
+local getmetatable = getmetatable
+local ipairs = ipairs
+
+-- Overachiever 0.56
+-- https://www.curseforge.com/wow/addons/overachiever/files/443622
+
+S:AddCallbackForAddon("Overachiever_Tabs", "Overachiever", function()
+ if not E.private.addOnSkins.Overachiever then return end
+
+ for i = 3, 5 do
+ local tab = _G["AchievementFrameTab"..i]
+ S:HandleTab(tab)
+ tab:Point("LEFT", _G["AchievementFrameTab"..(i-1)], "RIGHT", -15, 0)
+ tab.text:Point("CENTER", 0, 2)
+ tab.text.SetPoint = E.noop
+ end
+
+ local leftFrame = _G["Overachiever_LeftFrame"]
+ for _, childFrame in ipairs({leftFrame:GetChildren()}) do
+ for _, obj in ipairs({childFrame:GetChildren()}) do
+ local objType = obj:GetObjectType()
+ if objType == "Button" then
+ S:HandleButton(obj)
+ elseif objType == "EditBox" then
+ S:HandleEditBox(obj)
+ elseif objType == "CheckButton" then
+ S:HandleCheckBox(obj)
+ elseif objType == "Frame" and obj.TjDDM then
+ S:HandleDropDownBox(obj)
+ end
+ end
+ end
+
+ local containers = {
+ "Overachiever_SearchFrame",
+ "Overachiever_SuggestionsFrame",
+ "Overachiever_WatchFrame"
+ }
+
+ for _, frameName in ipairs(containers) do
+ local frame = _G[frameName]
+ frame:StripTextures()
+ frame:SetTemplate("Transparent")
+
+ frame:GetChildren():StripTextures()
+
+ frame.scrollFrame:Point("TOPLEFT", 2, -2)
+ frame.scrollFrame:Point("BOTTOMRIGHT", -2, 4)
+
+ local scrollBar = _G[frame.scrollFrame:GetName() .. "ScrollBar"]
+ S:HandleScrollBar(scrollBar)
+
+ scrollBar:Point("TOPLEFT", frame.scrollFrame, "TOPRIGHT", 5, -17)
+ scrollBar:Point("BOTTOMLEFT", frame.scrollFrame, "BOTTOMRIGHT", 5, 15)
+
+ scrollBar.Show = function(self)
+ frame:SetWidth(500)
+ for _, button in ipairs(frame.buttons) do
+ button:SetWidth(496)
+ end
+ getmetatable(self).__index.Show(self)
+ end
+
+ scrollBar.Hide = function(self)
+ frame:SetWidth(521)
+ for _, button in ipairs(frame.buttons) do
+ button:SetWidth(517)
+ end
+ getmetatable(self).__index.Hide(self)
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/pab.lua b/ElvUI_AddOnSkins/Skins/Addons/pab.lua
new file mode 100644
index 0000000..43983d0
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/pab.lua
@@ -0,0 +1,102 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("PAB") then return end
+
+local _G = _G
+local ipairs = ipairs
+local unpack = unpack
+
+-- Party Ability Bars r7
+-- https://www.wowace.com/projects/pab/files/353353
+
+S:AddCallbackForAddon("PAB", "PAB", function()
+ if not E.private.addOnSkins.PAB then return end
+
+ if not PAB then return end
+
+ S:HandleSliderFrame(PAB_Panel_Slider1)
+
+ S:HandleCheckBox(PAB_Panel_Toggle1)
+ S:HandleCheckBox(PAB_Panel_Toggle2)
+ S:HandleCheckBox(PAB_Panel_Toggle3)
+
+ S:HandleScrollBar(PABScrollFrameScrollBar)
+
+ S:HandleDropDownBox(PAB_Panel_DropDown1)
+
+ _G["PABScrollFrameAbility name"]:Height(21)
+ _G["PABScrollFrameCD (s)"]:Height(21)
+ S:HandleEditBox(_G["PABScrollFrameAbility name"])
+ S:HandleEditBox(_G["PABScrollFrameCD (s)"])
+
+ PAB_Panel_Button1:Point("TOPLEFT", _G["PABScrollFrameAbility name"], "BOTTOMLEFT", -1, -7)
+ S:HandleButton(PAB_Panel_Button1)
+ S:HandleButton(PAB_Panel_Button2)
+
+ local function SkinIcon(frame)
+ if frame.backdrop then return end
+
+ frame:CreateBackdrop("Transparent")
+ frame.texture:SetTexCoord(unpack(E.TexCoords))
+ frame.texture.SetTexCoord = E.noop
+
+ E:RegisterCooldown(frame.cd)
+ end
+
+ local PABIcons
+ local ICON_SIZE = 30
+ local SCALE = 1
+
+ hooksecurefunc(PAB, "ApplyAnchorSettings", function()
+ if not PABIcons then return end
+
+ SCALE = PABIcons:GetScale()
+ PABIcons:SetScale(1)
+
+ for i = 1, 4 do
+ for _, iconFrame in ipairs(_G["PABAnchor"..i].icons) do
+ iconFrame:Size(ICON_SIZE * SCALE)
+ end
+ end
+ end)
+
+ S:RawHook(PAB, "AppendIcon", function(self, icons, anchor, ...)
+ local iconFrame = S.hooks[self].AppendIcon(self, icons, anchor, ...)
+
+ SkinIcon(iconFrame)
+ iconFrame:Size(ICON_SIZE * SCALE)
+
+ if #icons == 0 then
+ iconFrame:Point("TOPLEFT", anchor, "BOTTOMRIGHT", E.Border, -E.Border)
+ else
+ iconFrame:Point("LEFT", icons[#icons - 1], "RIGHT", E.Border, 0)
+ end
+
+ return iconFrame
+ end)
+
+ for i = 1, 4 do
+ local frame = _G["PABAnchor"..i]
+ frame:SetBackdrop(nil)
+ frame:CreateBackdrop("Transparent")
+
+ for _, iconFrame in ipairs(frame.icons) do
+ if not PABIcons then
+ PABIcons = iconFrame:GetParent()
+ ICON_SIZE = math.floor(iconFrame:GetSize() + 0.5)
+ end
+
+ SkinIcon(iconFrame)
+ iconFrame:Size(ICON_SIZE * SCALE)
+
+ local point, anchor = iconFrame:GetPoint()
+ if point == "LEFT" then
+ iconFrame:Point("LEFT", anchor, "RIGHT", E.Border, 0)
+ elseif point == "TOPLEFT" then
+ iconFrame:Point("TOPLEFT", anchor, "BOTTOMRIGHT", E.Border, -E.Border)
+ end
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/pallyPower.lua b/ElvUI_AddOnSkins/Skins/Addons/pallyPower.lua
new file mode 100644
index 0000000..6e07c44
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/pallyPower.lua
@@ -0,0 +1,93 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("PallyPower") then return end
+
+local unpack = unpack
+
+-- PallyPower 3.2.20
+
+S:AddCallbackForAddon("PallyPower", "PallyPower", function()
+ if not E.private.addOnSkins.PallyPower then return end
+
+ PallyPower.ApplySkin = E.noop
+
+ PallyPower.options.args.display.args.gapping.min = -1
+
+ local function scaleBackdrop(frame, scale)
+ local backdrop = frame:GetBackdrop()
+ backdrop.edgeSize = E.mult / scale
+ frame:SetBackdrop(backdrop)
+ frame:SetBackdropColor(unpack(E.media.backdropfadecolor))
+ frame:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+
+ local skinnedFrames = {}
+
+ local function skinFrame(frame)
+ frame:SetTemplate("Transparent")
+ skinnedFrames[#skinnedFrames + 1] = frame
+ end
+
+ hooksecurefunc(PallyPowerFrame, "SetScale", function(self, scale)
+ for _, frame in ipairs(skinnedFrames) do
+ scaleBackdrop(frame, scale)
+ end
+ end)
+
+ hooksecurefunc(PallyPowerConfigFrame, "SetScale", scaleBackdrop)
+
+ local backdrop = E.media.backdropfadecolor
+ PallyPower.db.profile.cBuffGood = {r = backdrop[1], g = backdrop[2], b = backdrop[3], t = backdrop[4]}
+ PallyPower.db.profile.cBuffNeedAll = {r = 0.5, g = 0.5, b = 0.5, t = backdrop[4]}
+ PallyPower.db.profile.cBuffNeedSome = {r = 0.5, g = 0.5, b = 0.5, t = backdrop[4]}
+ PallyPower.db.profile.cBuffNeedSpecial = {r = 0.5, g = 0.5, b = 0.5, t = backdrop[4]}
+
+ skinFrame(PallyPowerAuto)
+ skinFrame(PallyPowerRF)
+ skinFrame(PallyPowerAura)
+
+ PallyPowerAutoIcon:SetTexCoord(unpack(E.TexCoords))
+ PallyPowerRFIcon:SetTexCoord(unpack(E.TexCoords))
+ PallyPowerRFIconSeal:SetTexCoord(unpack(E.TexCoords))
+ PallyPowerAuraIcon:SetTexCoord(unpack(E.TexCoords))
+
+ for i = 1, PALLYPOWER_MAXCLASSES do
+ local button = PallyPower.classButtons[i]
+ skinFrame(button)
+
+ _G[button:GetName().."ClassIcon"]:SetTexCoord(unpack(E.TexCoords))
+ _G[button:GetName().."BuffIcon"]:SetTexCoord(unpack(E.TexCoords))
+
+ for j = 1, PALLYPOWER_MAXPERCLASS do
+ skinFrame(PallyPower.playerButtons[i][j])
+ end
+ end
+
+ PallyPowerConfigFrame:SetTemplate("Transparent")
+ S:HandleCloseButton(PallyPowerConfigFrameCloseButton)
+ S:HandleCheckBox(PallyPowerConfigFrameFreeAssign)
+
+ S:HandleButton(PallyPowerConfigFrameOptions)
+ S:HandleButton(PallyPowerConfigFrameAutoAssign)
+ S:HandleButton(PallyPowerConfigFrameClear)
+ S:HandleButton(PallyPowerConfigFrameRefresh)
+
+ PallyPowerConfigFrameAuraGroup1AuraHeaderIcon:SetTexCoord(unpack(E.TexCoords))
+
+ for i = 1, 8 do
+ _G["PallyPowerConfigFramePlayer"..i.."Aura1Icon"]:SetTexCoord(unpack(E.TexCoords))
+ end
+
+ for i = 1, PALLYPOWER_MAXCLASSES do
+ _G["PallyPowerConfigFrameClassGroup"..i.."ClassButtonIcon"]:SetTexCoord(unpack(E.TexCoords))
+
+ for j = 1, 8 do
+ _G["PallyPowerConfigFramePlayer"..j.."Class"..i.."Icon"]:SetTexCoord(unpack(E.TexCoords))
+ end
+ end
+
+ AS:SkinLibrary("AceAddon-2.0")
+ AS:SkinLibrary("Dewdrop-2.0")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/plateBuffs.lua b/ElvUI_AddOnSkins/Skins/Addons/plateBuffs.lua
new file mode 100644
index 0000000..a5dea12
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/plateBuffs.lua
@@ -0,0 +1,85 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("PlateBuffs") then return end
+
+local unpack = unpack
+
+local hooksecurefunc = hooksecurefunc
+
+-- PlateBuffs 1.5.4
+-- https://www.wowace.com/projects/platebuffs/files/447971
+
+S:AddCallbackForAddon("PlateBuffs", "PlateBuffs", function()
+ if not E.private.addOnSkins.PlateBuffs then return end
+
+ local core = LibStub("AceAddon-3.0"):GetAddon("PlateBuffs", true)
+ if not core then return end
+
+ local NP = E:GetModule("NamePlates")
+
+ local buffBars = core.buffBars
+ local buffFrames = core.buffFrames
+
+ local function StyleAuraIcon(frame)
+ if not frame.isSkinned then
+ NP:StyleFrame(frame, true, frame.texture)
+
+ frame.texture:SetTexCoord(unpack(E.TexCoords))
+ frame.cdbg.Show = E.noop
+ frame.cdbg:Hide()
+
+ hooksecurefunc(frame.border, "SetVertexColor", function(self, r, g, b)
+ local parent = self:GetParent():GetParent()
+ parent.texture.bordertop:SetTexture(r, g, b)
+ parent.texture.borderbottom:SetTexture(r, g, b)
+ parent.texture.borderleft:SetTexture(r, g, b)
+ parent.texture.borderright:SetTexture(r, g, b)
+ self:SetTexture(nil)
+ end)
+
+ frame.isSkinned = true
+ end
+ end
+
+ hooksecurefunc(core, "BuildBuffFrame", function(self, plate)
+ local total = 1
+ if buffFrames[plate][total] then
+ StyleAuraIcon(buffFrames[plate][total])
+ end
+
+ local prevFrame = buffFrames[plate][total]
+ for i = 2, self.db.profile.iconsPerBar do
+ total = total + 1
+
+ if buffFrames[plate][total] then
+ StyleAuraIcon(buffFrames[plate][total])
+ buffFrames[plate][total]:ClearAllPoints()
+ buffFrames[plate][total]:SetPoint("BOTTOMLEFT", prevFrame, "BOTTOMRIGHT", E.Border + E.Spacing*3, 0)
+ end
+
+ prevFrame = self.buffFrames[plate][total]
+ end
+
+ if self.db.profile.numBars > 1 then
+ for r = 2, self.db.profile.numBars do
+ for i = 1, self.db.profile.iconsPerBar do
+ total = total + 1
+
+ if buffFrames[plate][total] then
+ StyleAuraIcon(buffFrames[plate][total])
+ buffFrames[plate][total]:ClearAllPoints()
+ if i == 1 then
+ buffFrames[plate][total]:SetPoint("BOTTOMLEFT", buffBars[plate][r], E.Border + E.Spacing*3, 0)
+ else
+ buffFrames[plate][total]:SetPoint("BOTTOMLEFT", prevFrame, "BOTTOMRIGHT", E.Border + E.Spacing*3, 0)
+ end
+ end
+
+ prevFrame = buffFrames[plate][total]
+ end
+ end
+ end
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/poisoner.lua b/ElvUI_AddOnSkins/Skins/Addons/poisoner.lua
new file mode 100644
index 0000000..d73307d
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/poisoner.lua
@@ -0,0 +1,54 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Poisoner") then return end
+
+local _G = _G
+local pairs = pairs
+
+-- Poisoner 3.01
+-- https://www.curseforge.com/wow/addons/poisoner/files/301731
+
+S:AddCallbackForAddon("Poisoner", "Poisoner", function()
+ if not E.private.addOnSkins.Poisoner then return end
+
+ -- Minimap icon
+ if not PoisonerMinimapButton.isSkinned then
+ PoisonerMinimapButton:SetTemplate()
+ PoisonerMinimapButton:Size(22)
+
+ local normalTexture = PoisonerMinimapButton:GetNormalTexture()
+ normalTexture:SetTexture("Interface\\Icons\\Ability_Creature_Poison_02")
+ normalTexture:SetTexCoord(unpack(E.TexCoords))
+ normalTexture:SetDrawLayer("ARTWORK")
+ normalTexture:SetInside()
+
+ PoisonerMinimapButton:SetPushedTexture(nil)
+ PoisonerMinimapButton:SetHighlightTexture(nil)
+ PoisonerMinimapButton:SetDisabledTexture(nil)
+
+ PoisonerMinimapButton.isSkinned = true
+ end
+
+ hooksecurefunc("Poisoner_CreateButtons", function()
+ for poison in pairs(Poisoner_PoisonsEverSeen) do
+ local button = _G["PoisonerMenuButton"..poison]
+
+ if button and not button.isSkinned then
+ button:SetTemplate()
+ button:StyleButton(nil, true)
+
+ local texture = button:GetNormalTexture()
+ texture:SetTexCoord(unpack(E.TexCoords))
+ texture:SetInside(button)
+
+ texture = button:GetHighlightTexture()
+ texture:SetTexCoord(unpack(E.TexCoords))
+ texture:SetInside(button)
+
+ button.isSkinned = true
+ end
+ end
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/postal.lua b/ElvUI_AddOnSkins/Skins/Addons/postal.lua
new file mode 100644
index 0000000..2619e7e
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/postal.lua
@@ -0,0 +1,173 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Postal") then return end
+
+local _G = _G
+local select = select
+local unpack = unpack
+
+local hooksecurefunc = hooksecurefunc
+
+local INBOXITEMS_TO_DISPLAY = INBOXITEMS_TO_DISPLAY
+
+-- Postal r299
+-- https://www.wowace.com/projects/postal/files/454610
+
+S:AddCallbackForAddon("Postal", "Postal", function()
+ if not E.private.addOnSkins.Postal then return end
+
+ local Postal = LibStub("AceAddon-3.0"):GetAddon("Postal", true)
+ if not Postal then return end
+
+ S:HandleNextPrevButton(Postal_ModuleMenuButton, "down", nil, true)
+ Postal_ModuleMenuButton:Point("TOPRIGHT", MailFrame, -60, -12)
+ Postal_ModuleMenuButton:Size(26)
+
+ hooksecurefunc(Postal, "CreateAboutFrame", function(self)
+ self.aboutFrame:SetTemplate("Transparent")
+
+ PostalAboutScroll:Point("TOPLEFT", 8, -26)
+ PostalAboutScroll:Point("BOTTOMRIGHT", -29, 8)
+
+ S:HandleScrollBar(PostalAboutScrollScrollBar)
+ PostalAboutScrollScrollBar:Point("TOPLEFT", PostalAboutScroll, "TOPRIGHT", 3, -19)
+ PostalAboutScrollScrollBar:Point("BOTTOMLEFT", PostalAboutScroll, "BOTTOMRIGHT", 3, 19)
+
+ self.aboutFrame.editBox:Width(461)
+ self.aboutFrame.editBox:Point("TOPLEFT", 1, -1)
+
+ local closeButton = select(2, PostalAboutFrame:GetChildren())
+ if closeButton then
+ S:HandleCloseButton(closeButton, PostalAboutFrame)
+ end
+ end)
+
+ local Postal_Select = Postal:GetModule("Select", true)
+ if Postal_Select then
+ local skinModule
+ skinModule = function()
+ S:HandleButton(PostalSelectOpenButton, true)
+ PostalSelectOpenButton:Point("RIGHT", InboxFrame, "TOP", -29, -57)
+
+ S:HandleButton(PostalSelectReturnButton, true)
+ PostalSelectReturnButton:Point("LEFT", InboxFrame, "TOP", 8, -57)
+
+ for i = 1, INBOXITEMS_TO_DISPLAY do
+ local mail = _G["MailItem"..i]
+ local inboxCB = _G["PostalInboxCB"..i]
+
+ S:HandleCheckBox(inboxCB)
+ inboxCB:Point("RIGHT", mail, "LEFT", 6, -5)
+ end
+
+ skinModule = nil
+ end
+
+ local function setPosition()
+ MailItem1:Point("TOPLEFT", 38, -80)
+
+ for i = 1, INBOXITEMS_TO_DISPLAY do
+ _G["MailItem"..i.."ExpireTime"]:Point("TOPRIGHT", -4, -4)
+ end
+ end
+
+ if PostalSelectOpenButton then
+ skinModule()
+ setPosition()
+ end
+
+ hooksecurefunc(Postal_Select, "OnEnable", function(self)
+ if skinModule then
+ skinModule()
+ end
+ setPosition()
+ end)
+
+ hooksecurefunc(Postal_Select, "OnDisable", function(self)
+ MailItem1:Point("TOPLEFT", 24, -80)
+ end)
+ end
+
+ local Postal_DoNotWant = Postal:GetModule("DoNotWant", true)
+ if Postal_DoNotWant then
+ local function skinModule()
+ for i = 1, 7 do
+ local returnIcon = _G["MailItem"..i.."ExpireTime"].returnicon
+ returnIcon:StripTextures(true)
+ S:HandleCloseButton(returnIcon)
+ returnIcon:Size(26)
+ returnIcon:ClearAllPoints()
+ returnIcon:Point("TOPRIGHT", 32, -3)
+ end
+ end
+
+ if MailItem1ExpireTime.returnicon then
+ skinModule()
+ else
+ S:SecureHook(Postal_DoNotWant, "OnEnable", function(self)
+ skinModule()
+ S:Unhook(self, "OnEnable")
+ end)
+ end
+ end
+
+ local Postal_OpenAll = Postal:GetModule("OpenAll", true)
+ if Postal_OpenAll then
+ local function skinModule()
+ S:HandleButton(PostalOpenAllButton, true)
+ PostalOpenAllButton:Point("CENTER", InboxFrame, "TOP", -24, -408)
+
+ S:HandleNextPrevButton(Postal_OpenAllMenuButton)
+ Postal_OpenAllMenuButton:Size(25)
+ Postal_OpenAllMenuButton:Point("LEFT", PostalOpenAllButton, "RIGHT", 3, 0)
+ end
+
+ if PostalOpenAllButton then
+ skinModule()
+ else
+ S:SecureHook(Postal_OpenAll, "OnEnable", function(self)
+ skinModule()
+ S:Unhook(self, "OnEnable")
+ end)
+ end
+ end
+
+ local Postal_BlackBook = Postal:GetModule("BlackBook", true)
+ if Postal_BlackBook then
+ local function skinModule()
+ S:HandleNextPrevButton(Postal_BlackBookButton)
+ Postal_BlackBookButton:Size(20)
+ Postal_BlackBookButton:Point("LEFT", SendMailNameEditBox, "RIGHT", 4, 0)
+ end
+
+ if Postal_BlackBookButton then
+ skinModule()
+ else
+ S:SecureHook(Postal_BlackBook, "OnEnable", function(self)
+ skinModule()
+ S:Unhook(self, "OnEnable")
+ end)
+ end
+ end
+
+ local Postal_CarbonCopy = Postal:GetModule("CarbonCopy", true)
+ if Postal_CarbonCopy then
+ local function skinModule(self)
+ self.button:SetTemplate()
+ self.button:Size(12)
+ self.button:Point("TOPRIGHT", 1, 3)
+
+ local normalTexture = self.button:GetNormalTexture()
+ normalTexture:SetTexCoord(unpack(E.TexCoords))
+ normalTexture:SetInside()
+ end
+
+ if Postal_CarbonCopy.button then
+ skinModule(Postal_CarbonCopy)
+ else
+ hooksecurefunc(Postal_CarbonCopy, "CreateButton", skinModule)
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/powerAuras.lua b/ElvUI_AddOnSkins/Skins/Addons/powerAuras.lua
new file mode 100644
index 0000000..afd422c
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/powerAuras.lua
@@ -0,0 +1,331 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("PowerAuras") then return end
+
+local _G = _G
+
+-- Power Auras Classic 3.0.0S
+-- https://www.curseforge.com/wow/addons/powerauras-classic/files/452580
+
+S:AddCallbackForAddon("PowerAuras", "PowerAuras", function()
+ if not E.private.addOnSkins.PowerAuras then return end
+
+ local frames = {
+ -- Options
+ "PowaOptionsFrame",
+ "PowaOptionsPlayerListFrame",
+ "PowaOptionsGlobalListFrame",
+ "PowaOptionsSelectorFrame",
+ -- Config
+ "PowaBarConfigFrame",
+ "PowaBarConfigFrameEditor",
+ "PowaBarConfigFrameEditor2",
+ "PowaBarConfigFrameEditor3",
+ "PowaBarConfigFrameEditor4",
+ "PowaBarConfigFrameEditor5",
+ "PowaBarConfigFrameEditor6",
+ "PowaEquipmentSlotsFrame",
+ }
+
+ local buttons = {
+ -- Blizzard Options
+ "PowaShowAuraBrowserButton",
+ "PowaResetPositionButton",
+ -- Options
+ "PowaOptionsRename",
+ "PowaMainTestAllButton",
+ "PowaMainTestButton",
+ "PowaOptionsSelectorNew",
+ "PowaOptionsMove",
+ "PowaOptionsSelectorImport",
+ "PowaOptionsSelectorImportSet",
+ "PowaMainHideAllButton",
+ "PowaOptionsSelectorDelete",
+ "PowaOptionsCopy",
+ "PowaOptionsSelectorExport",
+ "PowaOptionsSelectorExportSet",
+ "PowaEditButton",
+ -- Config Main
+ "PowaBarAuraTextureSliderMinus",
+ "PowaBarAuraTextureSliderPlus",
+ "PowaFontsButton",
+ "PowaBarAuraCoordXSliderMinus",
+ "PowaBarAuraCoordXSliderPlus",
+ "PowaBarAuraCoordSliderMinus",
+ "PowaBarAuraCoordSliderPlus",
+ -- Config Animation
+ "PowaBarAuraAnimSpeedSliderMinus",
+ "PowaBarAuraAnimSpeedSliderPlus",
+ "PowaBarAuraDurationSliderMinus",
+ "PowaBarAuraDurationSliderPlus",
+ -- Config Timer
+ "PowaTimerCoordXSliderMinus",
+ "PowaTimerCoordXSliderPlus",
+ "PowaTimerCoordSliderMinus",
+ "PowaTimerCoordSliderPlus",
+ "PowaTimerSizeSliderMinus",
+ "PowaTimerSizeSliderPlus",
+ "PowaTimerAlphaSliderMinus",
+ "PowaTimerAlphaSliderPlus",
+ "PowaTimerInvertAuraSliderMinus",
+ "PowaTimerInvertAuraSliderPlus",
+ "PowaTimerDurationSliderMinus",
+ "PowaTimerDurationSliderPlus",
+ -- Config Stacks
+ "PowaStacksCoordXSliderMinus",
+ "PowaStacksCoordXSliderPlus",
+ "PowaStacksCoordSliderMinus",
+ "PowaStacksCoordSliderPlus",
+ "PowaStacksSizeSliderMinus",
+ "PowaStacksSizeSliderPlus",
+ "PowaStacksAlphaSliderMinus",
+ "PowaStacksAlphaSliderPlus",
+ }
+
+ local checkBoxes = {
+ -- Blizzard Options
+ "PowaEnableButton",
+ "PowaDebugButton",
+ "PowaTimerRoundingButton",
+ "PowaAllowInspectionsButton",
+ -- Config Main
+ "PowaTexModeButton",
+ "PowaWowTextureButton",
+ "PowaCustomTextureButton",
+ "PowaTextAuraButton",
+ "PowaRandomColorButton",
+ "PowaOwntexButton",
+ -- Config Activation
+ "PowaExactButton",
+ "PowaIngoreCaseButton",
+ "PowaInverseButton",
+ "PowaMineButton",
+ "PowaPvPButton",
+ "PowaInCombatButton",
+ "PowaRestingButton",
+ "PowaIsAliveButton",
+ "PowaIsInPartyButton",
+ "PowaIsInRaidButton",
+ "PowaIsMountedButton",
+ "PowaInVehicleButton",
+ "PowaTargetButton",
+ "PowaTargetFriendButton",
+ "PowaFocusButton",
+ "PowaGroupOrSelfButton",
+ "PowaPartyButton",
+ "PowaRaidButton",
+ "PowaOptunitnButton",
+ "Powa5ManInstanceButton",
+ "Powa5ManHeroicInstanceButton",
+ "Powa10ManInstanceButton",
+ "Powa10ManHeroicInstanceButton",
+ "Powa25ManInstanceButton",
+ "Powa25ManHeroicInstanceButton",
+ "PowaBgInstanceButton",
+ "PowaArenaInstanceButton",
+ "PowaRoleTankButton",
+ "PowaRoleHealerButton",
+ "PowaRoleMeleDpsButton",
+ "PowaRoleRangeDpsButton",
+ "PowaTalentGroup1Button",
+ "PowaTalentGroup2Button",
+ "PowaGroupAnyButton",
+ "PowaAuraDebugButton",
+ "PowaThresholdInvertButton",
+ "PowaExtraButton",
+ -- Config Animation
+ "PowaShowSpinAtBeginning",
+ "PowaOldAnimation",
+ -- Config Timer
+ "PowaShowTimerButton",
+ "PowaBuffTimerCentsButton",
+ "PowaBuffTimerLeadingZerosButton",
+ "PowaBuffTimerTransparentButton",
+ "PowaBuffTimerUseOwnColorButton",
+ "PowaBuffTimerUpdatePingButton",
+ "PowaBuffTimerActivationTime",
+ -- Config Stacks
+ "PowaShowStacksButton",
+ "PowaBuffStacksTransparentButton",
+ "PowaBuffStacksUseOwnColorButton",
+ "PowaBuffStacksUpdatePingButton",
+ }
+
+ local sliders = {
+ -- Blizzard Options
+ "PowaOptionsUpdateSlider2",
+ "PowaOptionsAnimationsSlider2",
+ "PowaOptionsTimerUpdateSlider2",
+ -- Config Main
+ "PowaBarAuraTextureSlider",
+ "PowaBarAuraAlphaSlider",
+ "PowaBarAuraSymSlider",
+ "PowaBarAuraDeformSlider",
+ "PowaBarAuraSizeSlider",
+ "PowaBarAuraCoordXSlider",
+ "PowaBarAuraCoordSlider",
+ -- Config Activation
+ "PowaBarThresholdSlider",
+ -- Config Animation
+ "PowaBarAuraAnimSpeedSlider",
+ "PowaBarAuraDurationSlider",
+ -- Config Timer
+ "PowaTimerCoordXSlider",
+ "PowaTimerCoordSlider",
+ "PowaTimerSizeSlider",
+ "PowaTimerAlphaSlider",
+ "PowaTimerInvertAuraSlider",
+ "PowaTimerDurationSlider",
+ -- Config Stacks
+ "PowaStacksCoordXSlider",
+ "PowaStacksCoordSlider",
+ "PowaStacksSizeSlider",
+ "PowaStacksAlphaSlider",
+ }
+
+ local editBoxes = {
+ -- Options
+ "PowaOptionsRenameEditBox",
+ -- Config Main
+ "PowaBarAuraTextureEdit",
+ "PowaBarCustomTexName",
+ "PowaBarAurasText",
+ "PowaBarAuraCoordXEdit",
+ "PowaBarAuraCoordYEdit",
+ -- Config Activation
+ "PowaBarBuffStacks",
+ "PowaBarBuffName",
+ "PowaBarMultiID",
+ "PowaBarTooltipCheck",
+ -- Config Sound
+ "PowaBarCustomSound",
+ "PowaBarCustomSoundEnd",
+ }
+
+ local dropDownBoxes = {
+ -- Blizzard Options
+ "PowaDropDownDefaultTimerTexture",
+ "PowaDropDownDefaultStacksTexture",
+ -- Config Activation
+ "PowaDropDownBuffType",
+ "PowaDropDownPowerType",
+ "PowaDropDownStance",
+ "PowaDropDownGTFO",
+ -- Config Animation
+ "PowaDropDownAnimBegin",
+ "PowaDropDownAnimEnd",
+ "PowaDropDownAnim1",
+ "PowaDropDownAnim2",
+ -- Config Sound
+ "PowaDropDownSound",
+ "PowaDropDownSound2",
+ "PowaDropDownSoundEnd",
+ "PowaDropDownSound2End",
+ -- Config Timer
+ "PowaDropDownTimerTexture",
+ "PowaBuffTimerRelative",
+ -- Config Stacks
+ "PowaDropDownStacksTexture",
+ "PowaBuffStacksRelative",
+ }
+
+ local itemButtons = {
+ "PowaHeadSlot",
+ "PowaNeckSlot",
+ "PowaShoulderSlot",
+ "PowaBackSlot",
+ "PowaChestSlot",
+ "PowaShirtSlot",
+ "PowaTabardSlot",
+ "PowaWristSlot",
+ "PowaHandsSlot",
+ "PowaWaistSlot",
+ "PowaLegsSlot",
+ "PowaFeetSlot",
+ "PowaFinger0Slot",
+ "PowaFinger1Slot",
+ "PowaTrinket0Slot",
+ "PowaTrinket1Slot",
+ "PowaMainHandSlot",
+ "PowaSecondaryHandSlot",
+ "PowaRangedSlot",
+ }
+
+ for _, frame in ipairs(frames) do
+ frame = _G[frame]
+ frame:StripTextures()
+ frame:SetTemplate("Transparent")
+ end
+ for _, button in ipairs(buttons) do
+ S:HandleButton(_G[button])
+ end
+ for _, checkBox in ipairs(checkBoxes) do
+ S:HandleCheckBox(_G[checkBox])
+ end
+ for _, slider in ipairs(sliders) do
+ S:HandleSliderFrame(_G[slider])
+ end
+ for _, editBox in ipairs(editBoxes) do
+ S:HandleEditBox(_G[editBox])
+ end
+ for _, dropDownBox in ipairs(dropDownBoxes) do
+ S:HandleDropDownBox(_G[dropDownBox])
+ end
+ for _, itemButton in ipairs(itemButtons) do
+ S:HandleItemButton(_G[itemButton], true)
+ end
+
+ local icon
+ for i = 1, 24 do
+ icon = _G["PowaIcone"..i]
+ icon:SetTemplate()
+ icon:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ icon:GetNormalTexture():SetInside(icon)
+ icon:StyleButton(false, true)
+ end
+
+ PowaSelected:SetFrameStrata(PowaSelected:GetParent():GetFrameStrata())
+ PowaSelected:SetFrameLevel(PowaSelected:GetParent():GetFrameLevel() + 2)
+ PowaSelected:StripTextures()
+ PowaSelected:SetTemplate("Default", nil, true)
+ PowaSelected:SetBackdropColor(0, 0, 0, 0)
+ PowaSelected:SetBackdropBorderColor(1, 0.82, 0)
+ PowaSelected:Hide()
+
+ local tab
+ for i = 1, 5 do
+ tab = _G["PowaEditorTab"..i]
+ S:HandleTab(tab)
+ tab:Height(29)
+ end
+
+ PowaOptionsFrame:Height(463)
+
+ PowaOptionsSelectorFrame:Height(390)
+ PowaOptionsSelectorNew:Point("BOTTOMLEFT", 5, 86)
+
+ PowaOptionsRename:Point("TOP", PowaOptionsGlobalListFrame, "BOTTOM", 0, -5)
+
+ PowaOptionsRenameEditBox:Size(88, 20)
+ PowaOptionsRenameEditBox:Point("TOP", PowaOptionsRename, "TOP", 0, -1)
+
+ PowaEquipmentSlotsFrame:Height(370)
+
+ PowaHeadSlot:Point("TOPLEFT", 11, -25)
+ PowaHandsSlot:Point("TOPRIGHT", -11, -25)
+
+ PowaOptionsHeader:Point("TOP", 0, -10)
+ PowaHeader:Point("TOP", 0, -8)
+ PowaTitleText:Point("TOP", 0, -8)
+
+ S:HandleCloseButton(PowaOptionsFrameCloseButton, PowaOptionsFrame)
+ S:HandleCloseButton(PowaCloseButton, PowaBarConfigFrame)
+ S:HandleCloseButton(PowaFrameCloseButton, PowaEquipmentSlotsFrame)
+
+ PowaBuffTimerCentsButton:Size(25)
+
+ PowaAuthorText.Show = E.noop
+ PowaAuthorText:Hide()
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/quartz.lua b/ElvUI_AddOnSkins/Skins/Addons/quartz.lua
new file mode 100644
index 0000000..a8bca44
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/quartz.lua
@@ -0,0 +1,48 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Quartz") then return end
+
+-- Quartz 3.0.3.1
+-- https://www.wowace.com/projects/quartz/files/441489
+
+S:AddCallbackForAddon("Quartz", "Quartz", function()
+ if not E.private.addOnSkins.Quartz then return end
+
+ local Quartz3 = LibStub("AceAddon-3.0"):GetAddon("Quartz3", true)
+ local CastBar = Quartz3.CastBarTemplate.template
+
+ Quartz3.db.profile.backgroundalpha = 0
+ Quartz3.db.profile.borderalpha = 0
+
+ local function SkinQuartzBar(self)
+ if not self.isSkinned then
+ self.IconBorder = CreateFrame("Frame", nil, self)
+ self.IconBorder:SetTemplate("Transparent")
+ self.IconBorder:SetParent(self)
+ self.IconBorder:SetOutside(self.Icon)
+ self.Icon:SetTexCoord(unpack(E.TexCoords))
+
+ self:SetBackdrop(nil)
+ self.Bar:CreateBackdrop("Transparent")
+
+ self.isSkinned = true
+ end
+ if self.config.hideicon then
+ self.IconBorder:Hide()
+ else
+ self.IconBorder:Show()
+ end
+ end
+
+ local function SkinQuartzUnlock(self)
+ Quartz3UnlockDialog:StripTextures()
+ Quartz3UnlockDialog:SetTemplate("Transparent")
+ S:HandleButton(Quartz3UnlockDialogLock)
+ end
+
+ hooksecurefunc(CastBar, "UNIT_SPELLCAST_START", SkinQuartzBar)
+ hooksecurefunc(CastBar, "UNIT_SPELLCAST_CHANNEL_START", SkinQuartzBar)
+ hooksecurefunc(Quartz3, "ShowUnlockDialog", SkinQuartzUnlock)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/questPointer.lua b/ElvUI_AddOnSkins/Skins/Addons/questPointer.lua
new file mode 100644
index 0000000..e915b7a
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/questPointer.lua
@@ -0,0 +1,15 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("QuestPointer") then return end
+
+-- QuestPointer 5.3
+-- https://www.curseforge.com/wow/addons/questpointer/files/438550
+
+S:AddCallbackForAddon("QuestPointer", "QuestPointer", function()
+ if not E.private.addOnSkins.QuestPointer then return end
+
+ QuestPointerTooltip:StripTextures()
+ QuestPointerTooltip:CreateBackdrop("Transparent")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/raidCooldowns.lua b/ElvUI_AddOnSkins/Skins/Addons/raidCooldowns.lua
new file mode 100644
index 0000000..48d903d
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/raidCooldowns.lua
@@ -0,0 +1,94 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("RaidCooldowns") then return end
+
+local ceil = math.ceil
+local format = string.format
+
+local GetNumRaidMembers = GetNumRaidMembers
+local GetSpellInfo = GetSpellInfo
+local IsShiftKeyDown = IsShiftKeyDown
+local SendChatMessage = SendChatMessage
+
+-- RaidCooldowns 3.3.5
+-- https://www.wowace.com/projects/raid-cooldowns/files/441967
+
+S:AddCallbackForAddon("RaidCooldowns", "RaidCooldowns", function()
+ if not E.private.addOnSkins.RaidCooldowns then return end
+
+ local RaidCooldowns = LibStub("AceAddon-3.0"):GetAddon("RaidCooldowns", true)
+ if not RaidCooldowns then return end
+
+ local mod = RaidCooldowns:GetModule("Display", true)
+ if not mod then return end
+
+ if mod.db.profile.texture == "Smooth v2" and LibStub("LibSharedMedia-3.0"):Fetch("statusbar", mod.db.profile.texture) == "Interface\\TargetingFrame\\UI-StatusBar" then
+ mod.db.profile.texture = "Blizzard"
+ end
+ if not mod.db.profile.fontFace then
+ mod.db.profile.fontFace = "PT Sans Narrow"
+ end
+
+ mod.configOptions.args.display.args.height.max = 30
+
+ local function onClick(self)
+ if not IsShiftKeyDown() or GetNumRaidMembers() == 0 then return end
+
+ local parent = self:GetParent()
+ if parent.value > 0 then
+ SendChatMessage(format("%s: %s %s", parent.caster, GetSpellInfo(parent.spellId), format(ITEM_COOLDOWN_TOTAL, format("%.2d:%.2d", parent.value / 60 % 60, ceil(parent.value % 60)))), "RAID")
+ end
+ end
+
+ local function HookTimerGroup(frame)
+ S:RawHook(frame, "NewTimerBar", function(self, ...)
+ local bar, isNew = S.hooks[self].NewTimerBar(self, ...)
+
+ if isNew and not bar.isSkinned then
+ bar.texture:CreateBackdrop("Transparent")
+ bar.texture.backdrop:Point("TOPLEFT", bar, -1, 1)
+ bar.texture.backdrop:Point("BOTTOMRIGHT", bar, 1, -1)
+
+ bar.texture:Point("TOPLEFT", 1, 0)
+ bar.texture:Point("BOTTOMLEFT", 1, 0)
+
+ S:HandleIcon(bar.icon)
+
+ bar.bgtexture:Hide()
+ bar.spark:Kill()
+
+ bar.iconButton = CreateFrame("Button", nil, bar)
+ bar.iconButton:SetPoint("TOPLEFT", bar.icon)
+ bar.iconButton:SetPoint("BOTTOMRIGHT", bar)
+ bar.iconButton:RegisterForClicks("LeftButtonUp")
+ bar.iconButton:SetScript("OnClick", onClick)
+
+ bar.isSkinned = true
+ end
+
+ return bar, isNew
+ end)
+ end
+
+ if RCDD_Anchor then
+ RCDD_Anchor.button:SetBackdrop(nil)
+ RCDD_Anchor.button:CreateBackdrop("Transparent")
+ RCDD_Anchor.spacing = E.Border
+
+ HookTimerGroup(RCDD_Anchor)
+ end
+
+ HookTimerGroup(mod)
+
+ S:RawHook(mod, "NewBarGroup", function(self, ...)
+ local list = S.hooks[self].NewBarGroup(self, ...)
+
+ list.button:SetBackdrop(nil)
+ list.button:CreateBackdrop("Transparent")
+ list.spacing = E.Border
+
+ return list
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/raidRoll.lua b/ElvUI_AddOnSkins/Skins/Addons/raidRoll.lua
new file mode 100644
index 0000000..748d303
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/raidRoll.lua
@@ -0,0 +1,113 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("RaidRoll") then return end
+
+-- RaidRoll 4.4.15
+-- https://www.curseforge.com/wow/addons/raid-roll/files/450070
+
+S:AddCallbackForAddon("RaidRoll", "RaidRoll", function()
+ if not E.private.addOnSkins.RaidRoll then return end
+
+ RR_RollFrame:SetTemplate("Transparent")
+ RR_NAME_FRAME:SetTemplate("Default")
+
+ S:HandleCloseButton(RR_Close_Button, RR_RollFrame)
+
+ RaidRoll_Slider_ID:SetHitRectInsets(0, 0, 0, 0)
+ S:HandleSliderFrame(RaidRoll_Slider_ID)
+
+ S:HandleButton(RaidRoll_AnnounceWinnerButton)
+ S:HandleButton(RR_Roll_5SecAndAnnounce)
+ S:HandleButton(RR_Roll_RollButton)
+ S:HandleButton(RR_Last)
+ S:HandleButton(RR_Clear)
+ S:HandleButton(RR_Next)
+ S:HandleButton(RaidRoll_OptionButton)
+
+ RR_Roll_5SecAndAnnounce:ClearAllPoints()
+ RR_Roll_5SecAndAnnounce:Point("BOTTOM", 0, 31)
+
+ RR_Clear:Point("BOTTOM", 0, 8)
+ RR_Last:Point("BOTTOM", -45, 8)
+ RR_Roll_RollButton:Point("BOTTOMRIGHT", RR_RollFrame, "BOTTOM", -65, 8)
+ RR_Next:Point("BOTTOM", 45, 8)
+ RaidRoll_OptionButton:Size(20)
+ RaidRoll_OptionButton:Point("BOTTOM", 75, 8)
+
+ RR_Frame:SetTemplate("Transparent")
+ RR_Frame:Width(185)
+ RR_Frame:Point("TOP", RR_RollFrame, "BOTTOM", 0, 1)
+
+ local rrframeLevel = RR_Frame:GetFrameLevel()
+ RaidRoll_Catch_All:SetFrameLevel(rrframeLevel + 2)
+ RaidRoll_Allow_All:SetFrameLevel(rrframeLevel + 2)
+ RaidRollCheckBox_ExtraRolls:SetFrameLevel(rrframeLevel + 2)
+ S:HandleCheckBox(RaidRoll_Catch_All)
+ S:HandleCheckBox(RaidRoll_Allow_All)
+ S:HandleCheckBox(RaidRollCheckBox_ExtraRolls)
+
+ S:HandleButton(Raid_Roll_ClearSymbols)
+ S:HandleButton(Raid_Roll_ClearRolls)
+ S:HandleButton(RaidRoll_ExtraOptionButton)
+
+ for i = 1, 5 do
+ local f = _G["Raid_Roll_SetSymbol"..i]
+ f:ClearAllPoints()
+ f:Point("TOPLEFT", _G["RR_RollerPos"..i], "TOPRIGHT", -15, -1)
+ f:Point("BOTTOMRIGHT", _G["RR_Rolled"..i], "BOTTOMLEFT", 45, -1)
+
+ local highlight = f:GetHighlightTexture()
+ highlight:SetTexture(E.Media.Textures.Highlight)
+ highlight:SetVertexColor(0.9, 0.9, 0.9, 0.35)
+ end
+
+ if E.private.general.replaceBlizzFonts and GetLocale() ~= "zhCN" then
+ local fontTemplate = RR_Roller1.FontTemplate
+ local function updateFont(self, font, size, flag)
+ self.SetFont = nil
+ fontTemplate(self, nil, nil, flag)
+ self.SetFont = updateFont
+ end
+
+ for i = 1, 5 do
+ _G["RR_Roller"..i].SetFont = updateFont
+ end
+ end
+end)
+
+S:AddCallbackForAddon("RaidRoll_LootTracker", "RaidRoll_LootTracker", function()
+ if not E.private.addOnSkins.RaidRoll then return end
+
+ RR_LOOT_FRAME:SetTemplate("Transparent")
+
+ S:HandleSliderFrame(RaidRoll_Loot_Slider_ID)
+
+ S:HandleButton(RR_Loot_LinkLootButton)
+ S:HandleButton(RR_Loot_ButtonClear)
+ S:HandleButton(RR_Loot_ButtonFirst)
+ S:HandleButton(RR_Loot_ButtonPrev)
+ S:HandleButton(RR_Loot_ButtonNext)
+ S:HandleButton(RR_Loot_ButtonLast)
+
+ for i = 1, 4 do
+ _G["RR_Loot_Announce_1_Button_"..i]:Show()
+ _G["RR_Loot_Announce_2_Button_"..i]:Show()
+ _G["RR_Loot_Announce_3_Button_"..i]:Show()
+ _G["RR_Loot_RaidRollButton_"..i]:Show()
+
+ S:HandleButton(_G["RR_Loot_Announce_1_Button_"..i])
+ S:HandleButton(_G["RR_Loot_Announce_2_Button_"..i])
+ S:HandleButton(_G["RR_Loot_Announce_3_Button_"..i])
+ S:HandleButton(_G["RR_Loot_RaidRollButton_"..i])
+ end
+
+ for i = 1, RR_LOOT_FRAME:GetNumChildren() do
+ local child = select(i, RR_LOOT_FRAME:GetChildren())
+ if child and child:IsObjectType("Button") and child:GetName() == "Close_Button" then
+ S:HandleCloseButton(child)
+ break
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/recount.lua b/ElvUI_AddOnSkins/Skins/Addons/recount.lua
new file mode 100644
index 0000000..60a130a
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/recount.lua
@@ -0,0 +1,152 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Recount") then return end
+
+
+local _G = _G
+
+-- Recount 4.0.1
+-- https://www.wowace.com/projects/recount/files/458517
+
+S:AddCallbackForAddon("Recount", "Recount", function()
+ if not E.private.addOnSkins.Recount then return end
+
+ local function skinFrame(frame)
+ frame:SetTemplate("Transparent")
+
+ frame.Title:ClearAllPoints()
+ frame.Title:Point("TOP", frame, "TOP", 0, -5)
+ frame.Title:FontTemplate()
+ frame.Title:SetTextColor(1, 0.82, 0, 1)
+
+ S:HandleCloseButton(frame.CloseButton)
+ frame.CloseButton:ClearAllPoints()
+ frame.CloseButton:Point("TOPRIGHT", frame, "TOPRIGHT", -2, -2)
+ end
+
+ local function skinMainFrame(frame)
+ frame:SetBackdrop(nil)
+
+ local backdrop = CreateFrame("Frame", nil, frame)
+ backdrop:SetFrameLevel(frame:GetFrameLevel() - 1)
+ backdrop:Point("BOTTOMLEFT", frame, E.PixelMode and 1 or 0, E.PixelMode and 1 or 0)
+ backdrop:Point("TOPRIGHT", frame, E.PixelMode and -1 or 0, -(E.PixelMode and 31 or 30))
+ backdrop:SetTemplate(E.db.addOnSkins.recountTemplate, E.db.addOnSkins.recountTemplate == "Default" and E.db.addOnSkins.recountTemplateGloss or false)
+ frame.backdrop = backdrop
+
+ local header = CreateFrame("Frame", nil, backdrop)
+ header:Height(22)
+ header:Point("TOPLEFT", frame, E.PixelMode and 1 or 0, -(E.PixelMode and 8 or 7))
+ header:Point("TOPRIGHT", frame, E.PixelMode and -1 or 0, 0)
+ header:SetTemplate(E.db.addOnSkins.recountTitleTemplate, E.db.addOnSkins.recountTitleTemplate == "Default" and E.db.addOnSkins.recountTitleTemplateGloss or false)
+ frame.header = header
+
+ frame.Title:ClearAllPoints()
+ frame.Title:Point("LEFT", header, 6, 0)
+
+ S:HandleCloseButton(frame.CloseButton)
+ frame.CloseButton:ClearAllPoints()
+ frame.CloseButton:Point("RIGHT", header, -6, 0)
+ frame.CloseButton.Texture:Size(10)
+
+ frame.RightButton:Size(18)
+ frame.LeftButton:Size(18)
+ S:HandleNextPrevButton(frame.RightButton, "right", nil, true)
+ S:HandleNextPrevButton(frame.LeftButton, "left", nil, true)
+
+ Recount:SetupMainWindowButtons()
+
+ frame.DragBottomLeft:SetNormalTexture(nil)
+ frame.DragBottomRight:SetNormalTexture(nil)
+ end
+
+ hooksecurefunc(Recount, "AddWindow", function(self, window)
+ if window:GetName() == "Recount_ReportWindow" then
+ if Recount_ReportWindow.isSkinned then return end
+
+ skinFrame(Recount_ReportWindow)
+
+ Recount_ReportWindow.slider:Point("TOP", Recount_ReportWindow, 0, -45)
+ Recount_ReportWindow.ReportTitle:Point("TOPLEFT", Recount_ReportWindow, 10, -75)
+ Recount_ReportWindow.WhisperText:Point("BOTTOMLEFT", Recount_ReportWindow, 10, 37)
+
+ Recount_ReportWindow.ReportTitle:FontTemplate()
+ Recount_ReportWindow.WhisperText:FontTemplate()
+
+ Recount_ReportWindow.Whisper:StripTextures(true)
+ Recount_ReportWindow.Whisper:Height(16)
+
+ S:HandleSliderFrame(Recount_ReportWindow.slider)
+ S:HandleEditBox(Recount_ReportWindow.Whisper)
+ S:HandleButton(Recount_ReportWindow.ReportButton)
+
+ Recount_ReportWindow.isSkinned = true
+ elseif window:GetName() == "Recount_ConfigWindow" then
+ if Recount_ConfigWindow.isSkinned then return end
+
+ skinFrame(Recount_ConfigWindow)
+
+ S:HandleSliderFrame(Recount_ConfigWindow_Scaling_Slider)
+ S:HandleSliderFrame(Recount_ConfigWindow_RowHeight_Slider)
+ S:HandleSliderFrame(Recount_ConfigWindow_RowSpacing_Slider)
+
+ Recount_ConfigWindow.isSkinned = true
+ end
+ end)
+
+ skinMainFrame(Recount.MainWindow)
+ skinFrame(Recount.DetailWindow)
+ skinFrame(Recount.GraphWindow)
+
+ S:HandleScrollBar(Recount_MainWindow_ScrollBarScrollBar)
+
+ hooksecurefunc(Recount, "HideScrollbarElements", function(self, name)
+ _G[name.."ScrollBar"].backdrop:Hide()
+ _G[name.."ScrollBar"]:GetThumbTexture().backdrop:Hide()
+ end)
+ hooksecurefunc(Recount, "ShowScrollbarElements", function(self, name)
+ _G[name.."ScrollBar"].backdrop:Show()
+ _G[name.."ScrollBar"]:GetThumbTexture().backdrop:Show()
+ end)
+
+ if Recount.db.profile.MainWindow.ShowScrollbar then
+ Recount:ShowScrollbarElements("Recount_MainWindow_ScrollBar")
+ else
+ Recount:HideScrollbarElements("Recount_MainWindow_ScrollBar")
+ end
+
+ local buttons = {
+ Recount.MainWindow.CloseButton,
+ Recount.MainWindow.RightButton,
+ Recount.MainWindow.LeftButton,
+ Recount.MainWindow.ResetButton,
+ Recount.MainWindow.FileButton,
+ Recount.MainWindow.ConfigButton,
+ Recount.MainWindow.ReportButton,
+ Recount_DetailWindow.LeftButton,
+ Recount_DetailWindow.RightButton,
+ Recount_DetailWindow.ReportButton,
+ Recount_DetailWindow.SummaryButton
+ }
+
+ for _, button in ipairs(buttons) do
+ if button:GetNormalTexture() then
+ button:GetNormalTexture():SetDesaturated(true)
+ end
+ if button:GetPushedTexture() then
+ button:GetPushedTexture():SetDesaturated(true)
+ end
+ if button:GetHighlightTexture() then
+ button:GetHighlightTexture():SetDesaturated(true)
+ end
+ end
+
+ local RecountLocale = LibStub("AceLocale-3.0"):GetLocale("Recount")
+ local function resetData(self) Recount:ResetData() self:GetParent():Hide() end
+
+ function Recount:ShowReset()
+ AS:AcceptFrame(RecountLocale["Reset Recount?"], resetData)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/sexyCooldown.lua b/ElvUI_AddOnSkins/Skins/Addons/sexyCooldown.lua
new file mode 100644
index 0000000..7829a41
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/sexyCooldown.lua
@@ -0,0 +1,46 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("SexyCooldown") then return end
+
+local unpack = unpack
+
+-- SexyCooldown 0.6.18
+-- https://www.wowace.com/projects/sexycooldown/files/424497
+
+S:AddCallbackForAddon("SexyCooldown", "SexyCooldown", function()
+ if not E.private.addOnSkins.SexyCooldown then return end
+
+ local function SkinSexyCooldownIcon(_, icon)
+ icon:SetTemplate("Default")
+ icon.overlay:SetTemplate("Default")
+ icon.overlay.tex:SetInside()
+ icon.tex:SetInside()
+ icon.overlay.tex:SetTexCoord(unpack(E.TexCoords))
+ icon.tex:SetTexCoord(unpack(E.TexCoords))
+ end
+
+ local function SkinSexyCooldownBackdrop(bar)
+ bar:SetTemplate("Transparent")
+ end
+
+ local function HookBar(bar)
+ if bar.hooked then return end
+
+ hooksecurefunc(bar, "UpdateSingleIconLook", SkinSexyCooldownIcon)
+ hooksecurefunc(bar, "UpdateBarBackdrop", SkinSexyCooldownBackdrop)
+
+ bar:UpdateBarLook()
+
+ bar.hooked = true
+ end
+
+ for _, bar in ipairs(SexyCooldown.bars) do
+ HookBar(bar)
+ end
+
+ hooksecurefunc(SexyCooldown, "CreateBar", function(self)
+ HookBar(self.bars[#self.bars])
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/silverDragon.lua b/ElvUI_AddOnSkins/Skins/Addons/silverDragon.lua
new file mode 100644
index 0000000..6ee5028
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/silverDragon.lua
@@ -0,0 +1,34 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("SilverDragon") then return end
+
+-- SilverDragon 2.3.4-6
+-- https://www.curseforge.com/wow/addons/silver-dragon/files/455169
+
+S:AddCallbackForAddon("SilverDragon", "SilverDragon", function()
+ if not E.private.addOnSkins.SilverDragon then return end
+
+ local SilverDragon = LibStub("AceAddon-3.0"):GetAddon("SilverDragon", true)
+ if not SilverDragon then return end
+
+ local ClickTarget = SilverDragon:GetModule("ClickTarget", true)
+ if ClickTarget then
+ ClickTarget.popup:SetParent(UIParent)
+
+ ClickTarget.popup:SetNormalTexture(nil)
+ ClickTarget.popup:SetTemplate("Transparent")
+
+ ClickTarget.popup.close:ClearAllPoints()
+ S:HandleCloseButton(ClickTarget.popup.close, ClickTarget.popup)
+
+ ClickTarget.popup:HookScript("OnEnter", S.SetModifiedBackdrop)
+ ClickTarget.popup:HookScript("OnLeave", S.SetOriginalBackdrop)
+
+ ClickTarget.popup.details:SetTextColor(1, 1, 1)
+ ClickTarget.popup.subtitle:SetTextColor(0.5, 0.5, 0.5)
+ end
+
+ AS:SkinLibrary("LibQTip-1.0")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/skada.lua b/ElvUI_AddOnSkins/Skins/Addons/skada.lua
new file mode 100644
index 0000000..026b0be
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/skada.lua
@@ -0,0 +1,117 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Skada") then return end
+
+-- Skada r301
+-- https://www.curseforge.com/wow/addons/skada/files/458800
+
+S:AddCallbackForAddon("Skada", "Skada", function()
+ if not E.private.addOnSkins.Skada then return end
+
+ if Skada.revisited then
+ hooksecurefunc(Skada.displays.bar, "AddDisplayOptions", function(_, _, options)
+ options.windowoptions = nil
+ options.titleoptions.args.texture = nil
+ options.titleoptions.args.bordertexture = nil
+ options.titleoptions.args.thickness = nil
+ options.titleoptions.args.margin = nil
+ options.titleoptions.args.color = nil
+ end)
+ AS:SkinLibrary("LibUIDropDownMenu")
+ end
+
+ hooksecurefunc(Skada.displays["bar"], "ApplySettings", function(_, win)
+ local skada = win.bargroup
+
+ if win.db.enabletitle then
+ skada.button:SetBackdrop(nil)
+
+ if not skada.button.backdrop then
+ skada.button:CreateBackdrop()
+ end
+
+ if skada.button.backdrop then
+ skada.button.backdrop:SetFrameLevel(skada.button:GetFrameLevel())
+ skada.button.backdrop:SetTemplate(E.db.addOnSkins.skadaTitleTemplate, E.db.addOnSkins.skadaTitleTemplate == "Default" and E.db.addOnSkins.skadaTitleTemplateGloss or false)
+
+ skada.button.backdrop:ClearAllPoints()
+ skada.button.backdrop:Point("TOPLEFT", skada.button, -E.Border, win.db.reversegrowth and 0 or E.Border)
+ skada.button.backdrop:Point("BOTTOMRIGHT", skada.button, E.Border, win.db.reversegrowth and -E.Border or E.Border)
+ end
+ end
+
+ if Skada.revisited then
+ skada:SetBackdrop(nil) -- remove default backdrop
+
+ if not skada.backdrop then
+ skada:CreateBackdrop(E.db.addOnSkins.skadaTemplate, E.db.addOnSkins.skadaTemplate == "Default" and E.db.addOnSkins.skadaTemplateGloss or false)
+ else
+ skada.backdrop:SetTemplate(E.db.addOnSkins.skadaTemplate, E.db.addOnSkins.skadaTemplate == "Default" and E.db.addOnSkins.skadaTemplateGloss or false)
+ end
+ elseif win.db.enablebackground then
+ skada.bgframe:SetTemplate(E.db.addOnSkins.skadaTemplate, E.db.addOnSkins.skadaTemplate == "Default" and E.db.addOnSkins.skadaTemplateGloss or false)
+
+ if skada.bgframe then
+ skada.bgframe:ClearAllPoints()
+ if win.db.reversegrowth then
+ skada.bgframe:SetPoint("LEFT", skada.button, "LEFT", -E.Border, 0)
+ skada.bgframe:SetPoint("RIGHT", skada.button, "RIGHT", E.Border, 0)
+ skada.bgframe:SetPoint("BOTTOM", skada.button, "TOP", 0, win.db.enabletitle and E.Spacing or -win.db.barheight - E.Border)
+ else
+ skada.bgframe:SetPoint("LEFT", skada.button, "LEFT", -E.Border, 0)
+ skada.bgframe:SetPoint("RIGHT", skada.button, "RIGHT", E.Border, 0)
+ skada.bgframe:SetPoint("TOP", skada.button, "BOTTOM", 0, win.db.enabletitle and -E.Spacing or win.db.barheight + E.Border)
+ end
+ end
+ end
+ end)
+
+ local EMB = E:GetModule("EmbedSystem")
+ hooksecurefunc(Skada, "CreateWindow", function()
+ if EMB:CheckEmbed("Skada") then
+ EMB:EmbedSkada()
+ end
+ end)
+
+ hooksecurefunc(Skada, "DeleteWindow", function()
+ if EMB:CheckEmbed("Skada") then
+ EMB:EmbedSkada()
+ end
+ end)
+
+ if Skada.revisited then
+ hooksecurefunc(Skada, "UpdateDisplay", function()
+ if EMB:CheckEmbed("Skada") then
+ EMB:EmbedSkada()
+ end
+ end)
+ end
+
+ hooksecurefunc(Skada, "SetTooltipPosition", function(self, tt, frame)
+ if self.db.profile.tooltippos == "default" then
+ if not E:HasMoverBeenMoved("ElvTooltipMover") then
+ if ElvUI_ContainerFrame and ElvUI_ContainerFrame:IsShown() then
+ tt:Point("BOTTOMRIGHT", ElvUI_ContainerFrame, "TOPRIGHT", 0, 18)
+ elseif RightChatPanel:IsShown() and RightChatPanel:GetAlpha() == 1 then
+ tt:Point("BOTTOMRIGHT", RightChatPanel, "TOPRIGHT", 0, 18)
+ else
+ tt:Point("BOTTOMRIGHT", RightChatPanel, "BOTTOMRIGHT", 0, 18)
+ end
+ else
+ local point = E:GetScreenQuadrant(ElvTooltipMover)
+
+ if point == "TOPLEFT" then
+ tt:SetPoint("TOPLEFT", ElvTooltipMover)
+ elseif point == "TOPRIGHT" then
+ tt:SetPoint("TOPRIGHT", ElvTooltipMover)
+ elseif point == "BOTTOMLEFT" or point == "LEFT" then
+ tt:SetPoint("BOTTOMLEFT", ElvTooltipMover)
+ else
+ tt:SetPoint("BOTTOMRIGHT", ElvTooltipMover)
+ end
+ end
+ end
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/skillet.lua b/ElvUI_AddOnSkins/Skins/Addons/skillet.lua
new file mode 100644
index 0000000..a539617
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/skillet.lua
@@ -0,0 +1,211 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Skillet") then return end
+
+local _G = _G
+local unpack = unpack
+
+local GetTradeSkillListLink = GetTradeSkillListLink
+
+-- Skillet 1.13 r167
+-- https://www.wowace.com/projects/skillet/files/438510
+
+S:AddCallbackForAddon("Skillet", "Skillet", function()
+ if not E.private.addOnSkins.Skillet then return end
+
+ S:HandleCloseButton(SkilletFrameCloseButton, SkilletFrame)
+
+ S:HandleDropDownBox(SkilletSortDropdown)
+
+ S:HandleEditBox(SkilletFilterBox)
+
+ S:HandleCheckBox(SkilletHideUncraftableRecipes)
+ SkilletHideUncraftableRecipes.backdrop:SetFrameLevel(SkilletHideUncraftableRecipes:GetFrameLevel())
+
+ S:HandleCheckBox(SkilletHideTrivialRecipes)
+ SkilletHideTrivialRecipes.backdrop:SetFrameLevel(SkilletHideTrivialRecipes:GetFrameLevel())
+
+ SkilletRankFrameBorder:Hide()
+ SkilletRankFrame:Point("TOPRIGHT", -9, -32)
+ S:HandleStatusBar(SkilletRankFrame, {0.2, 0.2, 1})
+
+ S:HandleButton(SkilletRescanButton)
+ S:HandleButton(SkilletShowOptionsButton)
+ S:HandleButton(SkilletRecipeNotesButton)
+ S:HandleButton(SkilletQueueAllButton)
+ S:HandleButton(SkilletCreateAllButton)
+ S:HandleButton(SkilletQueueButton)
+ S:HandleButton(SkilletCreateButton)
+
+ S:HandleEditBox(SkilletItemCountInputBox)
+ S:HandleSliderFrame(SkilletCreateCountSlider)
+
+ SkilletShowOptionsButton:Point("TOPRIGHT", SkilletRankFrame, "BOTTOMRIGHT", 1, -4)
+ SkilletRescanButton:Point("RIGHT", SkilletShowOptionsButton, "LEFT", -3, 0)
+
+ SkilletSkillListParent:Point("TOPLEFT", 8, -100)
+ SkilletSkillListParent:Point("BOTTOM", 0, 8)
+
+ S:HandleScrollBar(SkilletSkillListScrollBar)
+ SkilletSkillListScrollBar:Point("TOPLEFT", SkilletSkillList, "TOPRIGHT", 7, -16)
+ SkilletSkillListScrollBar:Point("BOTTOMLEFT", SkilletSkillList, "BOTTOMRIGHT", 7, 16)
+
+ SkilletReagentParent:Point("TOPRIGHT", -8, -75)
+
+ S:HandleScrollBar(SkilletQueueListScrollBar)
+ SkilletQueueListScrollBar:Point("TOPLEFT", SkilletQueueList, "TOPRIGHT", 7, -16)
+ SkilletQueueListScrollBar:Point("BOTTOMLEFT", SkilletQueueList, "BOTTOMRIGHT", 7, 16)
+
+ SkilletQueueParent:Point("BOTTOMRIGHT", -8, 31)
+
+ S:HandleScrollBar(SkilletNotesListScrollBar)
+ SkilletNotesListScrollBar:Point("TOPLEFT", SkilletNotesList, "TOPRIGHT", 7, -16)
+ SkilletNotesListScrollBar:Point("BOTTOMLEFT", SkilletNotesList, "BOTTOMRIGHT", 7, 16)
+
+ S:HandleButton(SkilletStartQueueButton)
+ S:HandleButton(SkilletEmptyQueueButton)
+ S:HandleButton(SkilletShoppingListButton)
+
+ SkilletEmptyQueueButton:ClearAllPoints()
+ SkilletEmptyQueueButton:Point("LEFT", SkilletStartQueueButton, "RIGHT", 1, 0)
+ SkilletEmptyQueueButton:Point("RIGHT", SkilletShoppingListButton, "LEFT", -1, 0)
+
+ E:GetModule("Tooltip"):SecureHookScript(SkilletTradeskillTooltip, "OnShow", "SetStyle")
+
+ S:SecureHook(Skillet, "CreateTradeSkillWindow", function(self)
+ SkilletFrame:StripTextures()
+ SkilletFrame:SetTemplate("Transparent")
+
+ SkilletSkillListParent:SetTemplate("Transparent")
+ SkilletReagentParent:SetTemplate("Transparent")
+ SkilletQueueParent:SetTemplate("Transparent")
+ SkilletRecipeNotesFrame:SetTemplate("Transparent")
+
+ SkilletFrame_SizerSoutheast:Size(20)
+ SkilletFrame_SizerSoutheast:SetScale(0.7)
+
+ S:Unhook(self, "CreateTradeSkillWindow")
+ end)
+
+ local scrollButtons = 0
+ hooksecurefunc(Skillet, "internal_UpdateTradeSkillWindow", function(self)
+ if not self.currentTrade or self.currentTrade == "UNKNOWN" then return end
+
+ local i = scrollButtons + 1
+ local button = _G["SkilletScrollButton"..i]
+ while button do
+ S:HandleCollapseExpandButton(button)
+ i = i + 1
+ button = _G["SkilletScrollButton"..i]
+ end
+ scrollButtons = i - 1
+ end)
+
+ local deleteButtons = 0
+ hooksecurefunc(Skillet, "UpdateQueueWindow", function(self)
+ if not self.stitch:GetQueueInfo() then return end
+
+ local i = deleteButtons + 1
+ local button = _G["SkilletQueueButton"..i.."DeleteButton"]
+ while button do
+ S:HandleButton(button)
+ i = i + 1
+ button = _G["SkilletQueueButton"..i.."DeleteButton"]
+ end
+ deleteButtons = i - 1
+ end)
+
+ -- Fix TradeSkill Link
+ SkilletTradeSkillLinkButton:SetScript("OnClick", function()
+ local ChatFrameEditBox = ChatEdit_ChooseBoxForSend()
+ if not ChatFrameEditBox:IsShown() then
+ ChatEdit_ActivateChat(ChatFrameEditBox)
+ end
+
+ ChatFrameEditBox:Insert(GetTradeSkillListLink())
+ end)
+
+ -- Notes Window
+ S:HandleCloseButton(SkilletNotesCloseButton, SkilletRecipeNotesFrame)
+
+ for i = 1, 7 do
+ local icon = _G["SkilletNotesButton"..i.."Icon"]
+ icon:SetTemplate("Default")
+ icon:SetNormalTexture("")
+ icon:GetNormalTexture():SetInside()
+
+ local note = _G["SkilletNotesButton"..i.."Notes"]
+ note:Point("TOPLEFT", 1, -25)
+ note:Height(22)
+ end
+
+ hooksecurefunc(Skillet, "UpdateNotesWindow", function()
+ for i = 1, 7 do
+ local icon = _G["SkilletNotesButton"..i.."Icon"]:GetNormalTexture()
+ if icon then
+ icon:SetTexCoord(unpack(E.TexCoords))
+ end
+ end
+ end)
+
+ S:SecureHook(Skillet, "RecipeNote_OnClick", function(self, button)
+ for _, child in ipairs({button:GetChildren()}) do
+ if child:GetObjectType() == "EditBox" then
+ child:SetTemplate("Default")
+ break
+ end
+ end
+
+ S:Unhook(self, "RecipeNote_OnClick")
+ end)
+
+ -- Shopping List
+ S:SecureHook(Skillet, "internal_DisplayShoppingList", function(self)
+ self.shoppingList:SetTemplate("Transparent")
+
+ local titlebar1, titlebar2 = self.shoppingList:GetRegions()
+ titlebar1:SetDrawLayer("ARTWORK")
+ titlebar2:SetDrawLayer("ARTWORK")
+
+ titlebar1:Point("TOPLEFT", self.frame, "TOPLEFT", 4, -4)
+ titlebar1:Point("TOPRIGHT", self.frame, "TOPRIGHT", -4, -4)
+
+ S:HandleCloseButton(SkilletShoppingListCloseButton)
+ SkilletShoppingListCloseButton:SetPoint("TOPRIGHT", 0, 0)
+
+ SkilletShoppingListParent:SetTemplate("Transparent")
+ SkilletShoppingListParent:Point("TOPLEFT", 4, -33)
+ SkilletShoppingListParent:Point("BOTTOMRIGHT", -4, 32)
+
+ S:HandleScrollBar(SkilletShoppingListListScrollBar)
+
+ SkilletShoppingListListScrollBar:Point("TOPLEFT", SkilletShoppingListList, "TOPRIGHT", 7, -16)
+ SkilletShoppingListListScrollBar:Point("BOTTOMLEFT", SkilletShoppingListList, "BOTTOMRIGHT", 7, 16)
+
+ S:HandleCheckBox(SkilletShowQueuesFromAllAlts)
+
+ S:Unhook(self, "internal_DisplayShoppingList")
+ end)
+
+ -- Merchant Popup
+ SkilletMerchantBuyFrame:SetTemplate("Transparent")
+ SkilletMerchantBuyFrame:Width(341)
+ SkilletMerchantBuyFrame:Point("TOPLEFT", MerchantFrame, "TOPLEFT", 11, 37)
+ SkilletMerchantBuyFrame.SetPoint = E.noop
+ S:HandleButton(SkilletMerchantBuyFrameButton)
+
+ -- Inventory Information
+ S:SecureHook(Skillet, "ShowInventoryInfoPopup", function()
+ if SkilletInfoBoxFrame then
+ SkilletInfoBoxFrame:SetTemplate("Transparent")
+ S:HandleButton(SkilletInfoBoxFrameButton)
+ end
+
+ S:Unhook(Skillet, "ShowInventoryInfoPopup")
+ end)
+
+ AS:SkinLibrary("AceAddon-2.0")
+ AS:SkinLibrary("Waterfall-1.0")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/spy.lua b/ElvUI_AddOnSkins/Skins/Addons/spy.lua
new file mode 100644
index 0000000..73391cd
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/spy.lua
@@ -0,0 +1,145 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Spy") then return end
+
+local _G = _G
+
+-- Spy 1.2
+-- https://www.curseforge.com/wow/addons/spy/files/442604
+
+S:AddCallbackForAddon("Spy", "Spy", function()
+ if not E.private.addOnSkins.Spy then return end
+
+ Spy_AlertWindow:StripTextures()
+ Spy_AlertWindow:SetTemplate("Transparent")
+ Spy_AlertWindow:Point("TOP", UIParent, "TOP", 0, -130)
+
+ Spy.AlertWindow.Title:FontTemplate()
+ Spy.AlertWindow.Name:FontTemplate()
+ Spy.AlertWindow.Location:FontTemplate()
+
+ Spy_MainWindow:StripTextures()
+ Spy_MainWindow:CreateBackdrop("Transparent")
+ Spy_MainWindow.backdrop:Point("TOPLEFT", 0, -10)
+ Spy_MainWindow.backdrop:Point("BOTTOMRIGHT", 0, 12)
+
+ Spy.MainWindow.Title:FontTemplate()
+
+ S:HandleCloseButton(Spy_MainWindow.CloseButton)
+ Spy_MainWindow.CloseButton:Size(32)
+ Spy_MainWindow.CloseButton:Point("TOPRIGHT", 3, -6)
+
+ S:HandleNextPrevButton(Spy_MainWindow.RightButton, "right", nil, true)
+ Spy_MainWindow.RightButton:Size(20)
+ Spy_MainWindow.RightButton:Point("TOPRIGHT", -22, -12)
+
+ S:HandleNextPrevButton(Spy_MainWindow.LeftButton, "left", nil, true)
+ Spy_MainWindow.LeftButton:Size(20)
+ Spy_MainWindow.LeftButton:SetPoint("RIGHT", Spy_MainWindow.RightButton, "LEFT", 0, 0)
+
+ Spy_MainWindow.ClearButton:Size(18)
+ Spy_MainWindow.ClearButton:Point("RIGHT", Spy_MainWindow.LeftButton, "LEFT", 1, 0)
+ Spy_MainWindow.ClearButton:SetNormalTexture(E.Media.Textures.Minus)
+ Spy_MainWindow.ClearButton:SetPushedTexture(nil)
+ Spy_MainWindow.ClearButton:SetHighlightTexture(nil)
+ Spy_MainWindow.ClearButton:HookScript("OnEnter", function(self) self:GetNormalTexture():SetVertexColor(unpack(E.media.rgbvaluecolor)) end)
+ Spy_MainWindow.ClearButton:HookScript("OnLeave", function(self) self:GetNormalTexture():SetVertexColor(1, 1, 1) end)
+
+ Spy_MainWindow.DragBottomLeft:SetNormalTexture(nil)
+ Spy_MainWindow.DragBottomRight:SetNormalTexture(nil)
+
+ local function SkinBar(bar, i)
+ if bar.isSkinned then return end
+
+ bar:GetHighlightTexture():SetTexture(1, 1, 1, 0.3)
+ bar.LeftText:FontTemplate()
+ bar.RightText:FontTemplate()
+
+ bar:SetPoint("TOPLEFT", Spy.MainWindow, "TOPLEFT", 1, -33 - (Spy.db.profile.MainWindow.RowHeight + Spy.db.profile.MainWindow.RowSpacing) * (i - 1))
+ bar:SetWidth(Spy.MainWindow:GetWidth() - 2)
+
+ bar.isSkinned = true
+ end
+
+ for i = 1, Spy.ButtonLimit do
+ SkinBar(_G["Spy_MainWindow_Bar"..i], i)
+ end
+
+ hooksecurefunc(Spy, "CreateRow", function(self, num)
+ SkinBar(Spy.MainWindow.Rows[num], num)
+ end)
+
+ hooksecurefunc(Spy, "ResizeMainWindow", function()
+ local CurWidth = Spy.MainWindow:GetWidth() - 2
+ for i, row in pairs(Spy.MainWindow.Rows) do
+ row:SetWidth(CurWidth)
+ end
+ end)
+
+ hooksecurefunc(Spy, "RestoreMainWindowPosition", function(self, _, _, width)
+ for i = 1, Spy.ButtonLimit do
+ Spy.MainWindow.Rows[i]:SetWidth(width - 2)
+ end
+ end)
+
+ hooksecurefunc(Spy, "ShowMapTooltip", function()
+ if Spy.MapTooltip then
+ Spy.MapTooltip:SetTemplate("Transparent")
+ end
+ end)
+
+ -- for backported version
+ if Spy.MainWindow.TitleBar then
+ Spy_MainWindow.backdrop:Point("TOPLEFT", 0, -32)
+ Spy_MainWindow.backdrop:Point("BOTTOMRIGHT", 0, 2)
+
+ Spy.MainWindow.TitleBar:SetTemplate()
+
+ Spy_MainWindow.StatsButton:Size(18)
+ Spy_MainWindow.StatsButton:Point("RIGHT", Spy_MainWindow.ClearButton, "LEFT", 2, 0)
+ Spy_MainWindow.StatsButton:SetNormalTexture(E.Media.Textures.Copy)
+ Spy_MainWindow.StatsButton:SetPushedTexture(nil)
+ Spy_MainWindow.StatsButton:SetHighlightTexture(nil)
+ Spy_MainWindow.StatsButton:HookScript("OnEnter", function(self) self:GetNormalTexture():SetVertexColor(unpack(E.media.rgbvaluecolor)) end)
+ Spy_MainWindow.StatsButton:HookScript("OnLeave", function(self) self:GetNormalTexture():SetVertexColor(1, 1, 1) end)
+
+ Spy_MainWindow.CountFrame:Size(20)
+ Spy_MainWindow.CountFrame:Point("RIGHT", Spy_MainWindow.StatsButton, "LEFT", 1, 0)
+ Spy_MainWindow.CountButton:Size(20)
+ Spy_MainWindow.CountButton:Point("RIGHT", Spy_MainWindow.StatsButton, "LEFT", 1, 0)
+ Spy.MainWindow.CountFrame.Text:FontTemplate()
+ Spy_MainWindow.CountButton:HookScript("OnEnter", function() Spy_MainWindow.CountFrame.Text:SetTextColor(unpack(E.media.rgbvaluecolor)) end)
+ Spy_MainWindow.CountButton:HookScript("OnLeave", function() Spy_MainWindow.CountFrame.Text:SetTextColor(1, 1, 1) end)
+
+ SpyStatsFrame:SetTemplate("Transparent")
+ SpyStatsFrame_Header:Hide()
+
+ S:HandleCloseButton(SpyStatsFrameTopCloseButton)
+
+ S:HandleButton(SpyStatsRefreshButton)
+ SpyStatsTabFrameTabContentFrame:SetTemplate("Transparent")
+ S:HandleScrollBar(SpyStatsTabFrameTabContentFrameScrollFrameScrollBar)
+ SpyStatsFilterBox:SetTemplate()
+ S:HandleCheckBox(SpyStatsKosCheckbox)
+ S:HandleCheckBox(SpyStatsWinsLosesCheckbox)
+ S:HandleCheckBox(SpyStatsReasonCheckbox)
+
+ function Spy:BarsChanged()
+ for k, v in pairs(Spy.MainWindow.Rows) do
+ v:SetHeight(Spy.db.profile.MainWindow.RowHeight)
+ v:SetPoint("TOPLEFT", Spy.MainWindow, "TOPLEFT", 1, -33 - (Spy.db.profile.MainWindow.RowHeight + Spy.db.profile.MainWindow.RowSpacing) * (k - 1))
+ end
+ Spy:ResizeMainWindow()
+ end
+
+ function Spy:UpdateActiveCount()
+ local activeCount = 0
+ for _ in pairs(Spy.ActiveList) do
+ activeCount = activeCount + 1
+ end
+ Spy.MainWindow.CountFrame.Text:SetText(activeCount)
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/stalker.lua b/ElvUI_AddOnSkins/Skins/Addons/stalker.lua
new file mode 100644
index 0000000..0b44f56
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/stalker.lua
@@ -0,0 +1,62 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Stalker") then return end
+
+-- Stalker 1.2
+-- https://wow.curseforge.com/projects/Stalker/files/442604
+
+S:AddCallbackForAddon("Stalker", "Stalker", function()
+ if not E.private.addOnSkins.Stalker then return end
+
+ Stalker_AlertWindow:StripTextures()
+ Stalker_AlertWindow:SetTemplate("Transparent")
+ Stalker_AlertWindow:Point("TOP", UIParent, "TOP", 0, -130)
+
+ Stalker.AlertWindow.Title:FontTemplate(nil, 12)
+ Stalker.AlertWindow.Name:FontTemplate(nil, 12)
+ Stalker.AlertWindow.Location:FontTemplate(nil, 12)
+
+ Stalker_MainWindow:StripTextures()
+ Stalker_MainWindow:SetTemplate("Transparent")
+
+ for i = 1, 5 do
+ local bar = _G["Stalker_MainWindow_Bar"..i]
+
+ bar:StyleButton()
+ bar.StatusBar:SetStatusBarTexture(E["media"].normTex)
+ bar.LeftText:FontTemplate(nil, 12)
+ bar.RightText:FontTemplate(nil, 12)
+ end
+
+ Stalker.MainWindow.Title:FontTemplate(nil, 12)
+
+ S:HandleCloseButton(Stalker_MainWindow.CloseButton)
+ Stalker_MainWindow.CloseButton:Size(32)
+ Stalker_MainWindow.CloseButton:Point("TOPRIGHT", 2, -6)
+
+ S:HandleNextPrevButton(Stalker_MainWindow.RightButton)
+ S:SetNextPrevButtonDirection(Stalker_MainWindow.RightButton, "right")
+ Stalker_MainWindow.RightButton:Size(16)
+ Stalker_MainWindow.RightButton:Point("TOPRIGHT", -27, -14)
+
+ S:HandleNextPrevButton(Stalker_MainWindow.LeftButton)
+ S:SetNextPrevButtonDirection(Stalker_MainWindow.LeftButton, "left")
+ Stalker_MainWindow.LeftButton:Size(16)
+ Stalker_MainWindow.LeftButton:Point("RIGHT", Stalker_MainWindow.RightButton, "LEFT", -3, 0)
+
+ S:HandleNextPrevButton(Stalker_MainWindow.ClearButton)
+ S:SetNextPrevButtonDirection(Stalker_MainWindow.ClearButton, "down")
+ Stalker_MainWindow.ClearButton:Size(16)
+ Stalker_MainWindow.ClearButton:Point("RIGHT", Stalker_MainWindow.LeftButton, "LEFT", -3, 0)
+
+ Stalker_MainWindow.DragBottomLeft:SetNormalTexture(nil)
+ Stalker_MainWindow.DragBottomRight:SetNormalTexture(nil)
+
+ hooksecurefunc(Stalker, "ShowMapTooltip", function()
+ if Stalker.MapTooltip then
+ Stalker.MapTooltip:SetTemplate("Transparent")
+ end
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/superDuperMacro.lua b/ElvUI_AddOnSkins/Skins/Addons/superDuperMacro.lua
new file mode 100644
index 0000000..b4d99f6
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/superDuperMacro.lua
@@ -0,0 +1,216 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("SuperDuperMacro") then return end
+
+local _G = _G
+local ipairs = ipairs
+local unpack = unpack
+
+-- SuperDuperMacro 1.8.3
+-- https://github.com/hypehuman/super-duper-macro/tree/d25b5fe50add9f03185bc09327144d450ffc85e4
+
+S:AddCallbackForAddon("SuperDuperMacro", "SuperDuperMacro", function()
+ if not E.private.addOnSkins.SuperDuperMacro then return end
+
+ local frames = {
+ "sdm_mainFrame",
+ "sdm_newFrame",
+ "sdm_newFolderFrame",
+ "sdm_sendReceiveFrame",
+ }
+
+ local buttons = {
+ "sdm_mainFrame_linkToMacroFrame",
+ "sdm_mainFrame_aboutButton",
+ "sdm_mainFrame_newButton",
+ "sdm_mainFrame_sendReceiveButton",
+ "sdm_mainFrame_newFolderButton",
+ "sdm_mainFrame_changeIconButton",
+ "sdm_mainFrame_getLinkButton",
+ "sdm_mainFrame_deleteButton",
+ "sdm_mainFrame_saveButton",
+
+ "sdm_newFrame_createButton",
+ "sdm_newFrame_cancelButton",
+
+ "sdm_newFolderFrame_createButton",
+ "sdm_newFolderFrame_cancelButton",
+
+ "sdm_sendReceiveFrame_sendButton",
+ "sdm_sendReceiveFrame_cancelSendButton",
+ "sdm_sendReceiveFrame_receiveButton",
+ "sdm_sendReceiveFrame_cancelReceiveButton",
+ }
+
+ local editBoxes = {
+ "sdm_newFrame_input",
+
+ "sdm_sendReceiveFrame_sendInput",
+ "sdm_sendReceiveFrame_receiveInput",
+ "sdm_sendReceiveFrame_receiveInput",
+
+ "sdm_newFolderFrame_input",
+
+ "sdm_changeIconFrame_input",
+ }
+
+ for _, frame in ipairs(frames) do
+ frame = _G[frame]
+ frame:StripTextures()
+ frame:SetTemplate("Transparent")
+ end
+
+ for _, button in ipairs(buttons) do
+ S:HandleButton(_G[button])
+ end
+
+ for _, editBox in ipairs(editBoxes) do
+ S:HandleEditBox(_G[editBox])
+ end
+
+ -- mainFrame
+ sdm_mainFrame:Size(670, 424)
+ sdm_mainFrame:SetClampedToScreen(true)
+ sdm_mainFrame:HookScript("OnShow", function(self)
+ self:Point("TOPLEFT", UIParent, "TOPLEFT", 11, -116)
+ end)
+
+ S:HandleCloseButton(sdm_mainFrame_quitButton, sdm_mainFrame)
+
+ sdm_mainFrameTitle:Point("TOP", 0, -4)
+
+ sdm_mainFrame_linkToMacroFrame:Point("TOPLEFT", 8, -8)
+
+ sdm_mainFrame_newButton:Point("TOPLEFT", 84, -30)
+ sdm_mainFrame_sendReceiveButton:Point("TOPLEFT", sdm_mainFrame_newButton, "TOPRIGHT", 3, 0)
+
+ S:HandleDropDownBox(sdm_mainFrame_charFilterDropdown)
+ sdm_mainFrame_charFilterDropdown:Point("BOTTOMRIGHT", sdm_mainFrame_macrosScroll, "TOPRIGHT", 30, -5)
+ S:HandleDropDownBox(sdm_mainFrame_typeFilterDropdown)
+ sdm_mainFrame_typeFilterDropdown:Point("RIGHT", sdm_mainFrame_charFilterDropdown, "LEFT", 25, 0)
+
+ sdm_mainFrame_collapseAllButton:SetNormalTexture(E.Media.Textures.Minus)
+ sdm_mainFrame_collapseAllButton:SetCheckedTexture(E.Media.Textures.Plus)
+ sdm_mainFrame_collapseAllButton:Point("BOTTOMLEFT", sdm_mainFrame_macrosScroll, "TOPLEFT", 5, 3)
+
+ sdm_mainFrame_macrosScroll:Size(256, 306)
+ sdm_mainFrame_macrosScroll:Point("BOTTOMLEFT", 9, 39)
+
+ sdm_mainFrame_listBackground:SetTemplate("Transparent")
+ sdm_mainFrame_listBackground:Size(258, 309)
+ sdm_mainFrame_listBackground:Point("TOPRIGHT", sdm_mainFrame_macrosScroll, "TOPRIGHT", 1, 1)
+
+ S:HandleScrollBar(sdm_mainFrame_macrosScrollScrollBar)
+ sdm_mainFrame_macrosScrollScrollBar:Point("TOPLEFT", sdm_mainFrame_macrosScroll, "TOPRIGHT", 4, -18)
+ sdm_mainFrame_macrosScrollScrollBar:Point("BOTTOMLEFT", sdm_mainFrame_macrosScroll, "BOTTOMRIGHT", 4, 17)
+
+ sdm_mainFrame_editScrollFrame:Size(347, 353)
+ sdm_mainFrame_editScrollFrame:Point("BOTTOMRIGHT", -30, 39)
+
+ sdm_mainFrame_editBackground:SetTemplate("Transparent")
+ sdm_mainFrame_editBackground:Size(349, 357)
+ sdm_mainFrame_editBackground:Point("TOPRIGHT", sdm_mainFrame_editScrollFrame, "TOPRIGHT", 1, 2)
+
+ sdm_mainFrame_editScrollFrame_text:Width(346)
+
+ S:HandleScrollBar(sdm_mainFrame_editScrollFrameScrollBar)
+ sdm_mainFrame_editScrollFrameScrollBar:Point("TOPLEFT", sdm_mainFrame_editScrollFrame, "TOPRIGHT", 4, -17)
+ sdm_mainFrame_editScrollFrameScrollBar:Point("BOTTOMLEFT", sdm_mainFrame_editScrollFrame, "BOTTOMRIGHT", 4, 17)
+
+ sdm_mainFrame_saveButton:Point("BOTTOMRIGHT", -8, 8)
+ sdm_mainFrame_deleteButton:Point("RIGHT", sdm_mainFrame_saveButton, "LEFT", -3, 0)
+ sdm_mainFrame_getLinkButton:Point("RIGHT", sdm_mainFrame_deleteButton, "LEFT", -3, 0)
+
+ sdm_mainFrame_changeIconButton:Width(144)
+ sdm_mainFrame_changeIconButton:Point("RIGHT", sdm_mainFrame_getLinkButton, "LEFT", -3, 0)
+
+ sdm_mainFrame_newFolderButton:Point("RIGHT", sdm_mainFrame_getLinkButton, "LEFT", -308, 0)
+
+ S:HandleSliderFrame(sdm_mainFrame_iconSizeSlider)
+ sdm_mainFrame_iconSizeSlider:Width(155)
+ sdm_mainFrame_iconSizeSlider:Point("BOTTOMLEFT", 111, 13)
+
+ local function collapseSetTexture(self, texture)
+ if texture == "Interface\\Buttons\\UI-PlusButton-UP" then
+ self:_SetTexture(E.Media.Textures.Plus)
+ else
+ self:_SetTexture(E.Media.Textures.Minus)
+ end
+ end
+
+ hooksecurefunc("sdm_UpdateList", function()
+ if not sdm_mainFrame:IsShown() then return end
+
+ for _, button in ipairs(sdm_listItems) do
+ if not button.isSkinned then
+ button.highlight:SetTexture(E.Media.Textures.Highlight)
+
+ if button.isContainerFrame then
+ button.icon._SetTexture = button.icon.SetTexture
+ button.icon.SetTexture = collapseSetTexture
+ button.icon:SetTexture(button.icon:GetTexture())
+ else
+ button.icon:SetTexCoord(unpack(E.TexCoords))
+
+ button.buttonHighlight:SetTexture(1, 1, 1, 0.3)
+ button.buttonHighlight.SetTexture = E.noop
+
+ button.slotIcon:Hide()
+ end
+
+ button.isSkinned = true
+ end
+ end
+ end)
+
+ -- newFrame
+ sdm_newFrame_input:Height(20)
+
+ sdm_newFrame_createButton:Point("TOPLEFT", sdm_newFrame_input, "BOTTOMLEFT", -1, -8)
+ sdm_newFrame_cancelButton:Point("LEFT", sdm_newFrame_createButton, "RIGHT", 7, 0)
+
+ hooksecurefunc("sdm_DefaultMacroFrameLoaded", function()
+ MacroFrame_linkToSDM:Point("TOPLEFT", 19, -20)
+ S:HandleButton(MacroFrame_linkToSDM)
+
+ S:HandleCheckBox(MacroPopupFrame_buttonTextCheckBox)
+
+ S:HandleButton(MacroPopupFrame_sdmOkayButton)
+ S:HandleButton(MacroPopupFrame_sdmCancelButton)
+ end)
+
+ -- newFolderFrame
+ sdm_newFolderFrame_input:Height(20)
+
+ sdm_newFolderFrame_createButton:Point("TOPLEFT", sdm_newFolderFrame_input, "BOTTOMLEFT", -1, -8)
+ sdm_newFolderFrame_cancelButton:Point("LEFT", sdm_newFolderFrame_createButton, "RIGHT", 7, 0)
+
+ -- sendReceiveFrame
+ sdm_sendReceiveFrame:Point("LEFT", sdm_mainFrame, "RIGHT", -1, 62)
+
+ S:HandleCloseButton(sdm_sendReceiveFrame_quitButton, sdm_sendReceiveFrame)
+
+ sdm_sendReceiveFrame_sendInput:Height(20)
+ sdm_sendReceiveFrame_receiveInput:Height(20)
+
+ sdm_sendReceiveFrame_sendBar:SetBackdrop(nil)
+ S:HandleStatusBar(sdm_sendReceiveFrame_sendBar_statusBar)
+
+ sdm_sendReceiveFrame_receiveBar:SetBackdrop(nil)
+ S:HandleStatusBar(sdm_sendReceiveFrame_receiveBar_statusBar)
+
+ -- changeIconFrame
+ sdm_changeIconFrame:StripTextures()
+ sdm_changeIconFrame:SetTemplate("Default")
+ sdm_changeIconFrame:EnableMouse(true)
+ sdm_changeIconFrame:Size(296, 357)
+ sdm_changeIconFrame:Point("CENTER", 107, 4)
+
+ sdm_changeIconFrame_input:Height(20)
+
+ hooksecurefunc("sdm_OnShow_changeIconFrame", function(f)
+ MacroPopupFrame:Point("BOTTOM", -4, 1)
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/swatter.lua b/ElvUI_AddOnSkins/Skins/Addons/swatter.lua
new file mode 100644
index 0000000..b89236d
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/swatter.lua
@@ -0,0 +1,30 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("!Swatter") then return end
+
+-- Swatter 5.8.4723
+
+S:AddCallbackForAddon("!Swatter", "!Swatter", function()
+ if not E.private.addOnSkins.Swatter then return end
+ if not (Swatter and Swatter.Error) then return end
+
+ Swatter.Error:SetTemplate("Transparent")
+
+ Swatter.Error.Scroll:CreateBackdrop("Transparent")
+ Swatter.Error.Scroll:Point("TOPLEFT", Swatter.Error, "TOPLEFT", 9, -18)
+ Swatter.Error.Scroll:Point("BOTTOM", Swatter.Error.Done, "TOP", 0, 8)
+
+ Swatter.Error.Box:Width(461)
+
+ S:HandleScrollBar(SwatterErrorInputScrollScrollBar)
+ SwatterErrorInputScrollScrollBar:Point("TOPLEFT", SwatterErrorInputScroll, "TOPRIGHT", 4, -18)
+ SwatterErrorInputScrollScrollBar:Point("BOTTOMLEFT", SwatterErrorInputScroll, "BOTTOMRIGHT", 4, 18)
+
+ S:HandleButton(Swatter.Error.Prev)
+ S:HandleButton(Swatter.Error.Next)
+ S:HandleButton(Swatter.Error.Done)
+
+ Swatter.Error.Done:Point("BOTTOMRIGHT", Swatter.Error, "BOTTOMRIGHT", -8, 8)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/talented.lua b/ElvUI_AddOnSkins/Skins/Addons/talented.lua
new file mode 100644
index 0000000..b0a0fdb
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/talented.lua
@@ -0,0 +1,196 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("Talented") then return end
+
+local unpack = unpack
+
+-- Talented r660
+
+S:AddCallbackForAddon("Talented", "Talented", function()
+ if not E.private.addOnSkins.Talented then return end
+
+ local function SkinButton(button)
+ S:HandleButton(button, true)
+ button.left:Kill()
+ button.middle:Kill()
+ button.right:Kill()
+ end
+
+ S:SecureHook(Talented, "CreateBaseFrame", function()
+ TalentedFrame:StripTextures()
+ TalentedFrame:SetTemplate("Transparent")
+
+ S:HandleCloseButton(TalentedFrame.close, TalentedFrame)
+
+ SkinButton(TalentedFrame.bactions)
+ SkinButton(TalentedFrame.bmode)
+ SkinButton(TalentedFrame.bglyphs)
+ SkinButton(TalentedFrame.bactivate)
+
+ TalentedFrame.bactivate:Point("BOTTOM", TalentedFrame, 0, 3)
+
+ TalentedFrame.editname:Height(18)
+ TalentedFrame.editname:DisableDrawLayer("BACKGROUND")
+ S:HandleEditBox(TalentedFrame.editname)
+
+ S:HandleCheckBox(TalentedFrame.checkbox)
+
+ S:Unhook(Talented, "CreateBaseFrame")
+ end)
+
+ S:RawHook(Talented, "MakeButton", function(self, parent)
+ local button = S.hooks[self].MakeButton(self, parent)
+
+ if not button.isSkinned then
+ button:SetTemplate("Default")
+ button:StyleButton()
+
+ button:DisableDrawLayer("BACKGROUND")
+ button:SetNormalTexture(nil)
+ button.SetNormalTexture = E.noop
+
+ button.texture:SetInside(button)
+ button.texture:SetTexCoord(unpack(E.TexCoords))
+ button.texture:SetDrawLayer("ARTWORK")
+
+ button.rank:SetFont(E.LSM:Fetch("font", E.db["general"].font), 12, "OUTLINE")
+ button.rank:Point("CENTER", button, "BOTTOMRIGHT", 2, 0)
+ button.rank.texture:Kill()
+
+ button.isSkinned = true
+ end
+
+ return button
+ end)
+
+ S:RawHook(Talented, "GetButtonTarget", function(self, button)
+ local target = S.hooks[self].GetButtonTarget(self, button)
+
+ if not target.isSkinned then
+ target:SetFont(E.LSM:Fetch("font", E.db["general"].font), 12, "OUTLINE")
+ target:Point("CENTER", button, "TOPRIGHT", 2, 0)
+ target.texture:Kill()
+
+ target.isSkinned = true
+ end
+
+ return target
+ end)
+
+ S:RawHook(Talented, "MakeTalentFrame", function(self, parent, width, height)
+ local tree = S.hooks[self].MakeTalentFrame(self, parent, width, height)
+
+ if not tree.isSkinned then
+ tree.clear:GetNormalTexture():SetDesaturated(true)
+ tree.clear:GetPushedTexture():SetDesaturated(true)
+ tree.clear:GetHighlightTexture():SetDesaturated(true)
+
+ tree.isSkinned = true
+ end
+
+ return tree
+ end)
+
+ AS:SkinLibrary("Dewdrop-2.0")
+end)
+
+S:AddCallbackForAddon("Talented_GlyphFrame", "Talented_GlyphFrame", function()
+ if not E.private.addOnSkins.Talented then return end
+
+ TalentedGlyphs:CreateBackdrop("Transparent")
+ TalentedGlyphs.backdrop:Point("TOPLEFT", 11, -12)
+ TalentedGlyphs.backdrop:Point("BOTTOMRIGHT", -32, 76)
+ TalentedGlyphs:SetHitRectInsets(0, 0, 0, 0)
+
+ S:SetBackdropHitRect(TalentedGlyphs, TalentedGlyphs.backdrop, true)
+
+ S:HandleCloseButton(TalentedGlyphs.close)
+
+ TalentedGlyphs.title:Point("TOP", 0, -15)
+
+ TalentedGlyphs.portrait:Hide()
+
+ TalentedGlyphs.background:SetDrawLayer("ARTWORK")
+ TalentedGlyphs.background:Size(323, 349)
+ TalentedGlyphs.background:Point("TOPLEFT", 20, -59)
+ TalentedGlyphs.background:CreateBackdrop()
+
+
+ TalentedGlyphs.glow:SetDrawLayer("OVERLAY")
+ TalentedGlyphs.glow:SetAllPoints(TalentedGlyphs.background)
+
+ -- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 512, 512, 315, 340, 21, 72
+ TalentedGlyphs.background:SetTexCoord(0.041015625, 0.65625, 0.140625, 0.8046875)
+
+ -- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 512, 512, 315, 340, 30, 34
+ TalentedGlyphs.glow:SetTexCoord(0.05859375, 0.673828125, 0.06640625, 0.73046875)
+
+ local glyphBGScale = 1.0253968
+ local glyphPositions = {
+ {"CENTER", -1, 126},
+ {"CENTER", -1, -119},
+ {"TOPLEFT", 8, -62},
+ {"BOTTOMRIGHT", -10, 70},
+ {"TOPRIGHT", -8, -62},
+ {"BOTTOMLEFT", 7, 70}
+ }
+
+ local slotAnimations = {}
+ local TOPLEFT, TOP, TOPRIGHT, BOTTOMRIGHT, BOTTOM, BOTTOMLEFT = 3, 1, 5, 4, 2, 6
+ slotAnimations[TOPLEFT] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = -85, ["yStart"] = 17, ["yStop"] = 60}
+ slotAnimations[TOP] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = -13, ["yStart"] = 17, ["yStop"] = 100}
+ slotAnimations[TOPRIGHT] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = 59, ["yStart"] = 17, ["yStop"] = 60}
+ slotAnimations[BOTTOM] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = -13, ["yStart"] = 17, ["yStop"] = -64}
+ slotAnimations[BOTTOMLEFT] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = -87, ["yStart"] = 18, ["yStop"] = -27}
+ slotAnimations[BOTTOMRIGHT] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = 61, ["yStart"] = 18, ["yStop"] = -27}
+
+ for _, animData in ipairs(slotAnimations) do
+ animData.xStart = animData.xStart + 3
+ animData.yStart = animData.yStart + 8
+ animData.xStop = (animData.xStop + 3) * glyphBGScale
+ animData.yStop = (animData.yStop + 8) * glyphBGScale
+ end
+
+ local glyphFrameLevel = TalentedGlyphs:GetFrameLevel() + 1
+
+ for glyphID, glyph in ipairs(TalentedGlyphs.glyphs) do
+ glyph:SetFrameLevel(glyphFrameLevel)
+ glyph:Size(90)
+ glyph:SetScale(glyphBGScale)
+ local point, x, y = unpack(glyphPositions[glyphID])
+ glyph:Point(point, TalentedGlyphs.background.backdrop, x, y)
+
+ local animation = slotAnimations[glyphID]
+ glyph.sparkle:SetDrawLayer("OVERLAY")
+ glyph.sparkle:Point(animation.point, animation.xStart, animation.yStart)
+ glyph.sparkle.anim.translation:SetOffset(animation.xStop - animation.xStart, animation.yStop - animation.yStart)
+ end
+
+ S:HandleCheckBox(TalentedGlyphs.checkbox)
+ TalentedGlyphs.checkbox:Point("BOTTOMLEFT", 15, 80)
+end)
+
+S:AddCallbackForAddon("Talented_SpecTabs", "Talented_SpecTabs", function()
+ if not E.private.addOnSkins.Talented then return end
+
+ local function skinTabs()
+ Talented.tabs:Point("TOPLEFT", TalentedFrame, "TOPRIGHT", -1, -40)
+
+ for _, tab in ipairs({"spec1", "spec2", "petspec1"}) do
+ tab = Talented.tabs[tab]
+ tab:SetTemplate("Default")
+ tab:StyleButton()
+ tab:DisableDrawLayer("BACKGROUND")
+ tab:GetNormalTexture():SetInside(tab.backdrop)
+ tab:GetNormalTexture():SetTexCoord(unpack(E.TexCoords))
+ end
+ end
+
+ if Talented.base then
+ skinTabs()
+ else
+ hooksecurefunc(Talented, "CreateBaseFrame", skinTabs)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/tellMeWhen.lua b/ElvUI_AddOnSkins/Skins/Addons/tellMeWhen.lua
new file mode 100644
index 0000000..012f447
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/tellMeWhen.lua
@@ -0,0 +1,89 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("TellMeWhen") then return end
+
+local _G = _G
+local unpack = unpack
+
+-- TellMeWhen 1.2.5b1
+-- https://www.curseforge.com/wow/addons/tellmewhen/files/448968
+
+S:AddCallbackForAddon("TellMeWhen", "TellMeWhen", function()
+ if not E.private.addOnSkins.TellMeWhen then return end
+
+ TELLMEWHEN_ICONSPACING = E.Border
+
+ if TELLMEWHEN_VERSION == "1.2.4" then
+ hooksecurefunc("TellMeWhen_Group_Update", function(groupID)
+ local group = TellMeWhen_Settings.Groups[groupID]
+ if not group.Enabled then return end
+
+ local currentSpec = TellmeWhen_GetActiveTalentGroup()
+
+ if (currentSpec == 1 and not group.PrimarySpec)
+ or (currentSpec == 2 and not group.SecondarySpec)
+ then
+ return
+ end
+
+ local groupName = "TellMeWhen_Group" .. groupID
+
+ for row = 1, group.Rows do
+ for column = 1, group.Columns do
+ local iconID = (row - 1) * group.Columns + column
+ local iconName = groupName .. "_Icon" .. iconID
+ local icon = _G[iconName]
+
+ if icon and not icon.isSkinned then
+ icon:SetTemplate("Default")
+
+ icon:GetRegions():SetTexture(nil)
+
+ _G[iconName .. "Texture"]:SetTexCoord(unpack(E.TexCoords))
+ _G[iconName .. "Texture"]:SetInside()
+
+ _G[iconName .. "Count"]:FontTemplate()
+
+ _G[iconName .. "Highlight"]:SetTexture(1, 1, 1, 0.3)
+ _G[iconName .. "Highlight"]:SetInside()
+
+ E:RegisterCooldown(_G[iconName .. "Cooldown"])
+
+ icon.isSkinned = true
+ end
+ end
+ end
+ end)
+ else
+ hooksecurefunc("TellMeWhen_Group_Update", function(groupID)
+ local group = _G["TellMeWhen_Group" .. groupID]
+ if not group.Enabled then return end
+
+ for row = 1, group.Rows do
+ for column = 1, group.Columns do
+ local iconID = (row - 1) * group.Columns + column
+ local iconName = group.groupName .. "_Icon" .. iconID
+ local icon = _G[iconName]
+
+ if icon and not icon.isSkinned then
+ _G[iconName]:StyleButton()
+ icon:SetTemplate("Default")
+
+ icon:GetRegions():SetTexture(nil)
+
+ _G[iconName .. "Icon"]:SetTexCoord(unpack(E.TexCoords))
+ _G[iconName .. "Icon"]:SetInside()
+
+ _G[iconName .. "Count"]:FontTemplate()
+
+ E:RegisterCooldown(_G[iconName .. "Cooldown"])
+
+ icon.isSkinned = true
+ end
+ end
+ end
+ end)
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/tinyPad.lua b/ElvUI_AddOnSkins/Skins/Addons/tinyPad.lua
new file mode 100644
index 0000000..9287ee2
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/tinyPad.lua
@@ -0,0 +1,38 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("TinyPad") then return end
+
+local unpack = unpack
+
+-- TinyPad 1.6.2
+
+S:AddCallbackForAddon("TinyPad", "TinyPad", function()
+ if not E.private.addOnSkins.TinyPad then return end
+
+ TinyPadFrame:StripTextures()
+ TinyPadFrame:SetTemplate("Transparent")
+
+ TinyPadEditFrame:SetBackdrop(nil)
+ TinyPadEditFrame:CreateBackdrop("Default")
+ TinyPadEditFrame.backdrop:Point("TOPLEFT", 0, -8)
+ TinyPadEditFrame.backdrop:Point("BOTTOMRIGHT", 0, 4)
+
+ TinyPadSearchFrame:SetTemplate("Transparent")
+ TinyPadSearchFrame:Point("BOTTOMRIGHT", TinyPadFrame, "TOPRIGHT", 0, -1)
+
+ TinyPadEditScrollFrame:StripTextures()
+ S:HandleScrollBar(TinyPadEditScrollFrameScrollBar)
+ TinyPadEditScrollFrameScrollBar:Point("TOPLEFT", TinyPadEditScrollFrame, "TOPRIGHT", 6, -17)
+ TinyPadEditScrollFrameScrollBar:Point("BOTTOMLEFT", TinyPadEditScrollFrame, "BOTTOMRIGHT", 6, 17)
+
+ select(8, TinyPadSearchEditBox:GetRegions()):Hide()
+ S:HandleEditBox(TinyPadSearchEditBox)
+
+ hooksecurefunc(TinyPad, "UpdateLock", function()
+ local r, g, b = unpack(E.media.bordercolor)
+ TinyPadFrame:SetBackdropBorderColor(r, g, b, 1)
+ TinyPadSearchFrame:SetBackdropBorderColor(r, g, b, 1)
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/tiptac.lua b/ElvUI_AddOnSkins/Skins/Addons/tiptac.lua
new file mode 100644
index 0000000..04985e4
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/tiptac.lua
@@ -0,0 +1,119 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("TipTac") then return end
+
+-- TipTac 10.05.01
+-- https://www.curseforge.com/wow/addons/tip-tac/files/427096
+
+S:AddCallbackForAddon("TipTac", "TipTac", function()
+ if not E.private.addOnSkins.TipTac then return end
+
+ if not TipTac_Config then
+ TipTac_Config = {}
+ end
+
+ TipTac_Config.barTexture = E.media.normTex
+ TipTac_Config.tipBackdropEdge = E.media.blankTex
+ TipTac_Config.tipBackdropBG = E.media.blankTex
+ TipTac_Config.backdropEdgeSize = E.mult
+ TipTac_Config.tipColor = CopyTable(E.media.backdropfadecolor)
+ TipTac_Config.tipBorderColor = CopyTable(E.media.bordercolor)
+ TipTac_Config.gradientTip = false
+ TipTac_Config.backdropInsets = E.mult
+
+ if not TipTac.VARIABLES_LOADED then
+ TipTac:ApplySettings()
+ end
+
+ -- Anchor frame
+ TipTac:SetTemplate()
+ S:HandleCloseButton(TipTac.close)
+
+ local tooltips = {
+ "AutoCompleteBox",
+ "BNToastFrame",
+ "DropDownList1MenuBackdrop",
+ "DropDownList2MenuBackdrop",
+ "DropDownList3MenuBackdrop",
+ "FriendsTooltip",
+ }
+
+ for _, frame in ipairs(tooltips) do
+ frame = _G[frame]
+ if frame then
+ frame:SetTemplate("Transparent")
+ end
+ end
+
+ local TT = E:GetModule("Tooltip")
+ local skinEnabled = E.private.skins.blizzard.enable and E.private.skins.blizzard.tooltip
+
+ if not skinEnabled then
+ S:HandleCloseButton(ItemRefCloseButton)
+ end
+
+ if skinEnabled and TT:IsHooked(GameTooltip, "OnShow") then
+ local elvTooltips = {
+ GameTooltip,
+ ItemRefTooltip,
+ ItemRefShoppingTooltip1,
+ ItemRefShoppingTooltip2,
+ ItemRefShoppingTooltip3,
+ AutoCompleteBox,
+ FriendsTooltip,
+ ConsolidatedBuffsTooltip,
+ ShoppingTooltip1,
+ ShoppingTooltip2,
+ ShoppingTooltip3,
+ WorldMapTooltip,
+ WorldMapCompareTooltip1,
+ WorldMapCompareTooltip2,
+ WorldMapCompareTooltip3
+ }
+
+ for _, tt in ipairs(elvTooltips) do
+ if TT:IsHooked(tt, "OnShow") then
+ TT:Unhook(tt, "OnShow", "SetStyle")
+ end
+ end
+ else
+ if skinEnabled then
+ E.callbacks.events["SkinTooltip"] = nil
+ end
+
+ local function GameTooltip_ShowStatusBar_Skinned(tt, ...)
+ local statusBar = _G[tt:GetName().."StatusBar"..tt.shownStatusBars]
+ if statusBar and not statusBar.skinned then
+ statusBar:StripTextures()
+ statusBar:CreateBackdrop("Default")
+ statusBar:SetStatusBarTexture(E.media.normTex)
+ E:RegisterStatusBar(statusBar)
+ statusBar.skinned = true
+ end
+ end
+
+ S:SecureHook("GameTooltip_ShowStatusBar", GameTooltip_ShowStatusBar_Skinned)
+ end
+end)
+
+S:AddCallbackForAddon("TipTacOptions", "TipTacOptions", function()
+ if not E.private.addOnSkins.TipTac then return end
+
+ TipTacOptions:StripTextures()
+ TipTacOptions:SetTemplate("Transparent")
+ TipTacOptions.outline:SetTemplate("Transparent")
+
+ local buttons = {
+ "btnAnchor",
+ "btnReset",
+ "btnClose",
+ }
+
+ for _, button in ipairs(buttons) do
+ S:HandleButton(TipTacOptions[button])
+ end
+
+ AS:SkinLibrary("AzOptionsFactory")
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/totemTimers.lua b/ElvUI_AddOnSkins/Skins/Addons/totemTimers.lua
new file mode 100644
index 0000000..97597bd
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/totemTimers.lua
@@ -0,0 +1,104 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("TotemTimers") then return end
+
+local _G = _G
+local pairs, ipairs = pairs, ipairs
+local unpack = unpack
+
+-- TotemTimers 10.2.4
+-- https://www.curseforge.com/wow/addons/totemtimers/files/454307
+
+S:AddCallbackForAddon("TotemTimers", "TotemTimers", function()
+ if not E.private.addOnSkins.TotemTimers then return end
+ if E.myclass ~= "SHAMAN" then return end
+
+ local SLOT_EMPTY_TCOORDS = {
+ [EARTH_TOTEM_SLOT] = {
+ left = 66 / 128,
+ right = 96 / 128,
+ top = 3 / 256,
+ bottom = 33 / 256
+ },
+ [FIRE_TOTEM_SLOT] = {
+ left = 67 / 128,
+ right = 97 / 128,
+ top = 100 / 256,
+ bottom = 130 / 256
+ },
+ [WATER_TOTEM_SLOT] = {
+ left = 39 / 128,
+ right = 69 / 128,
+ top = 209 / 256,
+ bottom = 239 / 256
+ },
+ [AIR_TOTEM_SLOT] = {
+ left = 66 / 128,
+ right = 96 / 128,
+ top = 36 / 256,
+ bottom = 66 / 256
+ }
+ }
+
+ S:SecureHook("TotemTimers_SetupGlobals", function()
+ for i, f in pairs(TTActionBars.bars) do
+ for j in pairs(f.buttons) do
+ local button = _G["TT_ActionButton" .. i .. j]
+ button:StyleButton(nil, nil, true)
+ button:CreateBackdrop("Default")
+ button.backdrop:SetAllPoints()
+ button.icon:SetInside()
+
+ for x = 1, 4 do
+ button.MiniIcons[x]:SetTexCoord(unpack(E.TexCoords))
+ end
+ end
+ end
+
+ for i = 1, XiTimers.numtimers do
+ local button = _G["XiTimers_Timer" .. i]
+ local icon = _G["XiTimers_Timer" .. i .. "Icon"]
+
+ button:StyleButton(nil, nil, true)
+ button:CreateBackdrop("Default")
+ button.backdrop:SetAllPoints()
+
+ icon:SetTexCoord(unpack(E.TexCoords))
+ icon:SetInside()
+ end
+
+ TotemTimers_MultiSpell:StyleButton(nil, nil, true)
+ TotemTimers_MultiSpell:CreateBackdrop("Default")
+ TotemTimers_MultiSpell.backdrop:SetAllPoints()
+ TotemTimers_MultiSpellIcon:SetTexCoord(unpack(E.TexCoords))
+ TotemTimers_MultiSpellIcon:SetInside()
+
+ S:Unhook("TotemTimers_SetupGlobals")
+ end)
+
+ hooksecurefunc(TotemTimers, "SetEmptyTexCoord", function(icon, nr)
+ if nr and nr > 0 then
+ local tcoords = SLOT_EMPTY_TCOORDS[nr]
+ icon:SetTexCoord(tcoords.left, tcoords.right, tcoords.top, tcoords.bottom)
+ else
+ icon:SetTexCoord(unpack(E.TexCoords))
+ end
+ end)
+
+ hooksecurefunc(TotemTimers, "SetDoubleTexture", function(button, isdouble, flash)
+ if isdouble then
+ button.icons[1]:SetTexCoord(.08, 0.5, .08, .92)
+ button.icons[2]:SetTexCoord(0.5, .92, .08, .92)
+ end
+ end)
+
+ hooksecurefunc(XiTimers, "new", function(self)
+ for _, bar in ipairs(self.timers[#self.timers].timerbars) do
+ bar:SetTemplate("Default")
+ bar.background.Show = E.noop
+ bar.background:Hide()
+ end
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/tradeskillInfo.lua b/ElvUI_AddOnSkins/Skins/Addons/tradeskillInfo.lua
new file mode 100644
index 0000000..0118453
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/tradeskillInfo.lua
@@ -0,0 +1,159 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("TradeskillInfoUI") then return end
+
+local _G = _G
+local unpack = unpack
+
+-- TradeskillInfo r365
+-- https://www.wowace.com/projects/tradeskill-info/files/449625
+
+S:AddCallbackForAddon("TradeskillInfoUI", "TradeskillInfoUI", function()
+ if not E.private.addOnSkins.TradeskillInfo then return end
+
+ TradeskillInfoFrame:Width(670)
+ TradeskillInfoFrame:SetMinResize(670, TradeskillInfoFrame:GetHeight())
+ TradeskillInfoFrame:SetTemplate("Transparent")
+
+ S:HandleCloseButton(TradeskillInfoFrameCloseButton, TradeskillInfoFrame.backdrop)
+
+ S:HandleButton(TradeskillInfoResetButton)
+ S:HandleButton(TradeskillInfoOpposingButton)
+ S:HandleButton(TradeskillInfoNameButton)
+ S:HandleButton(TradeskillInfoReagentButton)
+ S:HandleButton(TradeskillInfoSearchButton)
+
+ S:HandleDropDownBox(TradeskillInfoSortDropDown)
+ S:HandleDropDownBox(TradeskillInfoTradeskillsDropDown)
+ S:HandleDropDownBox(TradeskillInfoAvailabilityDropDown)
+
+ TradeskillInfoListScrollFrame:StripTextures()
+ S:HandleScrollBar(TradeskillInfoListScrollFrameScrollBar)
+
+ TradeskillInfoDetailScrollFrame:StripTextures()
+ S:HandleScrollBar(TradeskillInfoDetailScrollFrameScrollBar)
+
+ S:HandleEditBox(TradeskillInfoInputBox)
+
+ TradeskillInfoDetailScrollChildFrame:StripTextures()
+ TradeskillInfoSkillIcon:StyleButton(nil, true)
+ TradeskillInfoSkillIcon:SetTemplate("Default")
+
+ TradeskillInfoSortDropDown:Point("TOPLEFT", 53, -29)
+ TradeskillInfoTradeskillsDropDown:Point("LEFT", TradeskillInfoSortDropDown, "RIGHT", -21, 0)
+ TradeskillInfoAvailabilityDropDown:Point("LEFT", TradeskillInfoTradeskillsDropDown, "RIGHT", -21, 0)
+
+ TradeskillInfoListFrame:Point("TOPLEFT", 8, -50)
+ TradeskillInfoListFrame:Point("RIGHT", TradeskillInfoDetailScrollFrame, "LEFT", -3, 0)
+ TradeskillInfoListFrame:Point("BOTTOM", TradeskillInfoResetButton, "TOP", 0, 5)
+
+ TradeskillInfoCollapseAllButton:Point("TOPLEFT", 4, -8)
+
+ TradeskillInfoSkill1:Point("TOPLEFT", 4, -28)
+
+ TradeskillInfoListScrollFrame:Point("TOPLEFT", 0, -26)
+ TradeskillInfoListScrollFrame:Point("BOTTOMRIGHT", -21, 0)
+
+ TradeskillInfoListScrollFrameScrollBar:Point("TOPLEFT", TradeskillInfoListScrollFrame, "TOPRIGHT", 3, -19)
+ TradeskillInfoListScrollFrameScrollBar:Point("BOTTOMLEFT", TradeskillInfoListScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ TradeskillInfoDetailScrollFrame:Width(304)
+ TradeskillInfoDetailScrollFrame:Point("TOPRIGHT", -29, -76)
+ TradeskillInfoDetailScrollFrame:Point("BOTTOMRIGHT", -31, 37)
+
+ TradeskillInfoDetailScrollFrameScrollBar:Point("TOPLEFT", TradeskillInfoDetailScrollFrame, "TOPRIGHT", 3, -19)
+ TradeskillInfoDetailScrollFrameScrollBar:Point("BOTTOMLEFT", TradeskillInfoDetailScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ TradeskillInfoSkillIcon:Size(47)
+ TradeskillInfoSkillIcon:Point("TOPLEFT", 10, -9)
+
+ TradeskillInfoSkillName:Point("TOPLEFT", 65, -9)
+ TradeskillInfoDescription:Point("TOPLEFT", 8, -64)
+
+ TradeskillInfoResetButton:Point("BOTTOMLEFT", 8, 8)
+
+ TradeskillInfoInputBox:Width(217)
+
+ TradeskillInfoSearchButton:Point("BOTTOMRIGHT", -8, 8)
+ TradeskillInfoInputBox:Point("RIGHT", TradeskillInfoSearchButton, "LEFT", -8, 0)
+ TradeskillInfoReagentButton:Point("RIGHT", TradeskillInfoInputBox, "LEFT", -8, 0)
+ TradeskillInfoNameButton:Point("RIGHT", TradeskillInfoReagentButton, "LEFT", -7, 0)
+ TradeskillInfoOpposingButton:Point("RIGHT", TradeskillInfoNameButton, "LEFT", -7, 0)
+
+ TradeskillInfoFrameResizeCorner:Point("BOTTOMRIGHT", -1, 1)
+
+ local skillIconSkinned
+ hooksecurefunc(TradeskillInfoSkillIcon, "SetNormalTexture", function(self)
+ local normalTexture = self:GetNormalTexture()
+ if normalTexture then
+ if not skillIconSkinned then
+ self:SetAlpha(1)
+ normalTexture:SetTexCoord(unpack(E.TexCoords))
+ normalTexture:SetInside()
+ skillIconSkinned = true
+ end
+ else
+ self:SetAlpha(0)
+ skillIconSkinned = nil
+ end
+ end)
+
+ for i = 1, TradeskillInfoUI.cons.maxSkillReagents or 8 do
+ local reagent = _G["TradeskillInfoReagent"..i]
+ local icon = _G["TradeskillInfoReagent"..i.."IconTexture"]
+ local count = _G["TradeskillInfoReagent"..i.."Count"]
+ local name = _G["TradeskillInfoReagent"..i.."Name"]
+ local nameFrame = _G["TradeskillInfoReagent"..i.."NameFrame"]
+
+ reagent:SetTemplate("Default")
+ reagent:StyleButton(nil, true)
+ reagent:Size(143, 40)
+
+ icon.backdrop = CreateFrame("Frame", nil, reagent)
+ icon.backdrop:SetTemplate()
+ icon.backdrop:Point("TOPLEFT", icon, -1, 1)
+ icon.backdrop:Point("BOTTOMRIGHT", icon, 1, -1)
+
+ icon:SetTexCoord(unpack(E.TexCoords))
+ icon:SetDrawLayer("OVERLAY")
+ icon:Size(E.PixelMode and 38 or 32)
+ icon:Point("TOPLEFT", E.PixelMode and 1 or 4, -(E.PixelMode and 1 or 4))
+ icon:SetParent(icon.backdrop)
+
+ count:SetParent(icon.backdrop)
+ count:SetDrawLayer("OVERLAY")
+
+ name:Point("LEFT", nameFrame, "LEFT", 20, 0)
+
+ nameFrame:Hide()
+
+ if i == 1 then
+ reagent:Point("TOPLEFT", TradeskillInfoReagentLabel, "BOTTOMLEFT", 1, -3)
+ elseif i % 2 == 0 then
+ reagent:Point("LEFT", _G["TradeskillInfoReagent"..(i-1)], "RIGHT", 3, 0)
+ else
+ reagent:Point("TOPLEFT", _G["TradeskillInfoReagent"..(i-2)], "BOTTOMLEFT", 0, -3)
+ end
+ end
+
+ local collapseButtons = -1
+ hooksecurefunc(TradeskillInfoUI, "DoFrameUpdate", function(self)
+ if collapseButtons >= self.vars.numSkillButtons then return end
+
+ if collapseButtons == -1 then
+ S:HandleCollapseExpandButton(TradeskillInfoCollapseAllButton)
+ collapseButtons = collapseButtons + 1
+ end
+
+ for i = collapseButtons + 1, self.vars.numSkillButtons do
+ local button = _G["TradeskillInfoSkill"..i]
+ if button then
+ S:HandleCollapseExpandButton(button)
+ end
+ end
+
+ collapseButtons = self.vars.numSkillButtons
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/trinketMenu.lua b/ElvUI_AddOnSkins/Skins/Addons/trinketMenu.lua
new file mode 100644
index 0000000..c2b6f66
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/trinketMenu.lua
@@ -0,0 +1,56 @@
+local E, L, V, P, G, _ = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("TrinketMenu") then return end
+
+local _G = _G
+local unpack = unpack
+
+-- TrinketMenu 3.81
+-- https://www.curseforge.com/wow/addons/trinket-menu/files/305868
+
+S:AddCallbackForAddon("TrinketMenu", "TrinketMenu", function()
+ if not E.private.addOnSkins.TrinketMenu then return end
+
+-- TrinketMenu_TimersFrame:SetScript("OnUpdate", nil)
+ TrinketMenu.WriteWornCooldowns = E.noop
+ TrinketMenu.WriteMenuCooldowns = E.noop
+ TrinketMenu.WriteCooldown = E.noop
+
+ TrinketMenu_MainFrame:SetTemplate("Transparent", nil, true)
+ TrinketMenu_MenuFrame:SetTemplate("Transparent", nil, true)
+
+ hooksecurefunc(TrinketMenu, "ReflectLock", function()
+ if TrinketMenuOptions.Locked == "ON" then return end
+
+ local r, g, b = unpack(E.media.bordercolor)
+ TrinketMenu_MainFrame:SetBackdropBorderColor(r, g, b, 1)
+ TrinketMenu_MenuFrame:SetBackdropBorderColor(r, g, b, 1)
+
+ local a
+ r, g, b, a = unpack(E.media.backdropfadecolor)
+ TrinketMenu_MainFrame:SetBackdropColor(r, g, b, a)
+ TrinketMenu_MenuFrame:SetBackdropColor(r, g, b, a)
+ end)
+
+ local AB = E:GetModule("ActionBars")
+
+ local function skinButton(button)
+ local name = button:GetName()
+ local cooldown = _G[name .. "Cooldown"]
+
+ AB:StyleButton(button)
+
+ cooldown.timer = E:CreateCooldownTimer(cooldown)
+ _G[name .. "Time"] = cooldown.timer.text
+ end
+
+ for i = 0, 1 do
+ skinButton(_G["TrinketMenu_Trinket" .. i])
+ end
+
+ for i = 1, 30 do
+ skinButton(_G["TrinketMenu_Menu"..i])
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/vanasKoS.lua b/ElvUI_AddOnSkins/Skins/Addons/vanasKoS.lua
new file mode 100644
index 0000000..7b29bf1
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/vanasKoS.lua
@@ -0,0 +1,98 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("VanasKoS") then return end
+
+-- Vanas KoS 4.25
+-- https://www.curseforge.com/wow/addons/vanaskos/files/457856
+
+S:AddCallbackForAddon("VanasKoS", "VanasKoS", function()
+ if not E.private.addOnSkins.VanasKoS then return end
+
+ S:HandleTab(FriendsFrameTab6)
+ FriendsFrameTab6:ClearAllPoints()
+ FriendsFrameTab6:Point("TOPLEFT", FriendsFrameTab5, "TOPRIGHT", -15, 0)
+
+ E:GetModule("Tooltip"):HookScript(VanasKoSListTooltip, "OnShow", "SetStyle")
+
+ -- Warn Frame
+ VanasKoS_WarnFrame:SetTemplate("Transparent", nil, true)
+ VanasKoS_WarnFrame.SetBackdropBorderColor = E.noop
+
+ -- Main Frame
+ VanasKoSFrame:StripTextures(true)
+ VanasKoSFrame:CreateBackdrop("Transparent")
+ VanasKoSFrame.backdrop:Point("TOPLEFT", 11, -12)
+ VanasKoSFrame.backdrop:Point("BOTTOMRIGHT", -32, 76)
+
+ S:SetUIPanelWindowInfo(VanasKoSFrame, "width")
+ S:SetBackdropHitRect(VanasKoSFrame)
+
+ S:HandleCloseButton(VanasKosFrameCloseButton, VanasKoSFrame.backdrop)
+
+ S:HandleDropDownBox(VanasKoSFrameChooseListDropDown, 145)
+
+ S:HandleCheckBox(VanasKoSListFrameCheckBox)
+
+ VanasKoSListScrollFrame:StripTextures()
+ S:HandleScrollBar(VanasKoSListScrollFrameScrollBar)
+
+ for i = 1, 9 do
+ _G["VanasKoSListFrameColButton" .. i]:StripTextures()
+ _G["VanasKoSListFrameColButton" .. i]:StyleButton()
+ end
+
+ VanasKoSListFrameNoTogglePatch.Show = E.noop
+ VanasKoSListFrameNoTogglePatch:Hide()
+
+ S:HandleDropDownBox(VanasKoSPvPStatsCharacterDropDown, 119)
+ S:HandleDropDownBox(VanasKoSPvPStatsTimeSpanDropDown, 120)
+
+ S:HandleNextPrevButton(VanasKoSListFrameToggleLeftButton)
+ S:HandleNextPrevButton(VanasKoSListFrameToggleRightButton)
+
+ S:HandleEditBox(VanasKoSListFrameSearchBox)
+
+ S:HandleButton(VanasKoSListFrameAddButton)
+ S:HandleButton(VanasKoSListFrameRemoveButton)
+ S:HandleButton(VanasKoSListFrameChangeButton)
+ S:HandleButton(VanasKoSListFrameConfigurationButton)
+
+ S:HandleTab(VanasKoSFrameTab1)
+ S:HandleTab(VanasKoSFrameTab2)
+
+ VanasKoSFrameChooseListDropDown:Point("TOPLEFT", 40, -31)
+
+ VanasKoSListFrameCheckBox:Point("TOPLEFT", 200, -34)
+
+ VanasKoSListFrameColButton1:Point("TOPLEFT", 26, -56)
+
+ VanasKoSListScrollFrame:SetTemplate("Transparent")
+ VanasKoSListScrollFrame:Size(304, 278)
+ VanasKoSListScrollFrame:Point("TOPRIGHT", -61, -79)
+ VanasKoSListScrollFrame.Hide = E.noop
+ VanasKoSListScrollFrame:Show()
+
+ VanasKoSListScrollFrameScrollBar:Point("TOPLEFT", VanasKoSListScrollFrame, "TOPRIGHT", 3, -19)
+ VanasKoSListScrollFrameScrollBar:Point("BOTTOMLEFT", VanasKoSListScrollFrame, "BOTTOMRIGHT", 3, 19)
+
+ VanasKoSListFrameListButton1:Point("TOPLEFT", 22, -82)
+
+ VanasKoSPvPStatsCharacterDropDown:Point("RIGHT", VanasKoSListFrameToggleLeftButton, "LEFT", 5, -3)
+ VanasKoSPvPStatsTimeSpanDropDown:Point("RIGHT", VanasKoSPvPStatsCharacterDropDown, "LEFT", 25, 0)
+
+ VanasKoSListFrameToggleRightButton:Point("BOTTOMRIGHT", VanasKoSListFrame, "BOTTOMRIGHT", -40, 134)
+
+ VanasKoSListFrameSearchBox:Size(210, 20)
+ VanasKoSListFrameSearchBox:Point("BOTTOMLEFT", VanasKoSListFrame, "BOTTOMLEFT", 20, 110)
+
+ VanasKoSListFrameChangeButton:Width(99)
+ VanasKoSListFrameAddButton:Point("BOTTOMRIGHT", VanasKoSListFrame, "BOTTOMRIGHT", -40, 84)
+ VanasKoSListFrameRemoveButton:Point("RIGHT", VanasKoSListFrameAddButton, "LEFT", -3, 0)
+ VanasKoSListFrameChangeButton:Point("RIGHT", VanasKoSListFrameRemoveButton, "LEFT", -3, 0)
+ VanasKoSListFrameConfigurationButton:Point("BOTTOM", VanasKoSListFrameAddButton, "TOP", 0, 3)
+
+ VanasKoSFrameTab1:Point("BOTTOMLEFT", 11, 46)
+ VanasKoSFrameTab2:Point("LEFT", VanasKoSFrameTab1, "RIGHT", -14, 0)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/weakAuras.lua b/ElvUI_AddOnSkins/Skins/Addons/weakAuras.lua
new file mode 100644
index 0000000..459eef4
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/weakAuras.lua
@@ -0,0 +1,64 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("WeakAuras") then return end
+
+S:AddCallbackForAddon("WeakAuras", "WeakAuras", function()
+ if WeakAuras.IsCorrectVersion then return end
+ if not E.private.addOnSkins.WeakAuras then return end
+
+ local function Skin_WeakAuras(frame, ftype)
+ if not frame.backdrop then
+ frame:CreateBackdrop("Transparent")
+ frame.icon:SetTexCoord(unpack(E.TexCoords))
+ frame.icon.SetTexCoord = E.noop
+ end
+
+ if ftype == "aurabar" then
+ if not E.db.addOnSkins.weakAuraAuraBar then
+ frame.backdrop:Hide()
+ else
+ frame.backdrop:Show()
+ end
+ elseif ftype == "icon" then
+ if E.db.addOnSkins.weakAuraIconCooldown then
+ frame.cooldown.CooldownOverride = "global"
+ E:RegisterCooldown(frame.cooldown)
+ end
+ end
+ end
+
+ local Create_Icon, Modify_Icon = WeakAuras.regionTypes.icon.create, WeakAuras.regionTypes.icon.modify
+ local Create_AuraBar, Modify_AuraBar = WeakAuras.regionTypes.aurabar.create, WeakAuras.regionTypes.aurabar.modify
+
+ WeakAuras.regionTypes.icon.create = function(parent, data)
+ local region = Create_Icon(parent, data)
+ Skin_WeakAuras(region, "icon")
+ return region
+ end
+
+ WeakAuras.regionTypes.aurabar.create = function(parent)
+ local region = Create_AuraBar(parent)
+ Skin_WeakAuras(region, "aurabar")
+ return region
+ end
+
+ WeakAuras.regionTypes.icon.modify = function(parent, region, data)
+ Modify_Icon(parent, region, data)
+ Skin_WeakAuras(region, "icon")
+ end
+
+ WeakAuras.regionTypes.aurabar.modify = function(parent, region, data)
+ Modify_AuraBar(parent, region, data)
+ Skin_WeakAuras(region, "aurabar")
+ end
+
+ for weakAura in pairs(WeakAuras.regions) do
+ if WeakAuras.regions[weakAura].regionType == "icon"
+ or WeakAuras.regions[weakAura].regionType == "aurabar"
+ then
+ Skin_WeakAuras(WeakAuras.regions[weakAura].region, WeakAuras.regions[weakAura].regionType)
+ end
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/wowLua.lua b/ElvUI_AddOnSkins/Skins/Addons/wowLua.lua
new file mode 100644
index 0000000..eba8d5c
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/wowLua.lua
@@ -0,0 +1,88 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("WowLua") then return end
+
+-- WowLua r40
+-- https://www.curseforge.com/wow/addons/wowlua/files/448825
+
+S:AddCallbackForAddon("WowLua", "WowLua", function()
+ if not E.private.addOnSkins.WowLua then return end
+
+ WowLuaFrame:StripTextures()
+ WowLuaFrame:SetTemplate("Transparent")
+ WowLuaFrameLineNumScrollFrame:StripTextures()
+
+ S:HandleCloseButton(WowLuaButton_Close, WowLuaFrame)
+
+ WowLuaFrameTitle:Point("TOP", 0, -5)
+
+ WowLuaFrameDragHeader:Height(55)
+ WowLuaFrameDragHeader:SetPoint("TOPLEFT", 0, 0)
+
+ WowLuaFrameToolbar:Point("TOPLEFT", 30, -21)
+ WowLuaButton_New:SetPoint("LEFT", WowLuaFrameToolbar, "LEFT", 0, 0)
+
+ WowLuaFrameLineNumEditBox:EnableMouse(false)
+
+ WowLuaFrameEditFocusGrabber:SetTemplate("Transparent")
+ WowLuaFrameEditFocusGrabber:Point("TOPLEFT", 8, -55)
+ WowLuaFrameEditFocusGrabber:Point("BOTTOMRIGHT", WowLuaFrameResizeBar, "TOPRIGHT", -29, -6)
+
+ WowLuaFrameEditScrollFrame:Point("BOTTOMRIGHT", WowLuaFrameResizeBar, "TOPRIGHT", -29, -3)
+
+ S:HandleScrollBar(WowLuaFrameEditScrollFrameScrollBar)
+ WowLuaFrameEditScrollFrameScrollBar:Point("TOPLEFT", WowLuaFrameEditScrollFrame, "TOPRIGHT", 3, -17)
+ WowLuaFrameEditScrollFrameScrollBar:Point("BOTTOMLEFT", WowLuaFrameEditScrollFrame, "BOTTOMRIGHT", 3, 16)
+
+ WowLuaFrameResizeBar:StripTextures()
+ WowLuaFrameResizeBar:Height(20)
+
+ WowLuaFrameOutput:Point("TOPLEFT", WowLuaFrameResizeBar, "BOTTOMLEFT", -6, 7)
+ WowLuaFrameOutput:Point("RIGHT", -29, 0)
+ WowLuaFrameOutput:Point("BOTTOM", WowLuaFrameCommand, "TOP", 8, 9)
+
+ S:HandleNextPrevButton(WowLuaFrameOutputUpButton, "up")
+ WowLuaFrameOutputUpButton:Size(18)
+ WowLuaFrameOutputUpButton:Point("TOPRIGHT", 21, 0)
+
+ S:HandleNextPrevButton(WowLuaFrameOutputDownButton)
+ WowLuaFrameOutputDownButton:Size(18)
+ WowLuaFrameOutputDownButton:Point("BOTTOMRIGHT", 21, -2)
+
+ WowLuaFrameCommand:StripTextures()
+ WowLuaFrameCommand:Point("BOTTOMLEFT", 8, 9)
+ WowLuaFrameCommand:Point("BOTTOMRIGHT", -29, 0)
+ WowLuaFrameCommand:CreateBackdrop()
+ WowLuaFrameCommand.backdrop:SetPoint("TOPLEFT", 0, 0)
+ WowLuaFrameCommand.backdrop:Point("BOTTOMRIGHT", 0, -1)
+
+ local buttons = {
+ WowLuaButton_New,
+ WowLuaButton_Open,
+ WowLuaButton_Save,
+ WowLuaButton_Undo,
+ WowLuaButton_Redo,
+ WowLuaButton_Delete,
+ WowLuaButton_Lock,
+ WowLuaButton_Unlock,
+ WowLuaButton_Config,
+ WowLuaButton_Previous,
+ WowLuaButton_Next,
+ WowLuaButton_Run,
+ }
+
+ for _, object in ipairs(buttons) do
+ object:CreateBackdrop()
+ object:GetNormalTexture():SetTexCoord(0.125, 0.890625, 0.15625, 0.921875)
+ if object:GetDisabledTexture() then
+ object:GetDisabledTexture():SetTexCoord(0.125, 0.890625, 0.15625, 0.921875)
+ end
+ object:StyleButton(nil, true)
+ end
+
+ hooksecurefunc(WowLua, "UpdateLineNums", function()
+ WowLuaFrameLineNumScrollFrame:Point("TOPLEFT", 8, -57)
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/zygorGuidesViewer.lua b/ElvUI_AddOnSkins/Skins/Addons/zygorGuidesViewer.lua
new file mode 100644
index 0000000..f810fb6
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/zygorGuidesViewer.lua
@@ -0,0 +1,19 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("ZygorGuidesViewer") then return end
+
+-- Zygor Guides Viewer 2.0
+
+S:AddCallbackForAddon("ZygorGuidesViewer", "ZygorGuidesViewer", function()
+ if not E.private.addOnSkins.ZygorGuidesViewer then return end
+
+ ZygorGuidesViewerFrame_Border:StripTextures()
+ ZygorGuidesViewerFrame:SetTemplate("Transparent")
+ S:HandleScrollBar(ZygorGuidesViewerFrameScrollScrollBar)
+
+ for i = 1, 6 do
+ _G["ZygorGuidesViewerFrame_Step" .. i]:CreateBackdrop("Transparent")
+ end
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Addons/zygorTalentAdvisor.lua b/ElvUI_AddOnSkins/Skins/Addons/zygorTalentAdvisor.lua
new file mode 100644
index 0000000..52033c2
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Addons/zygorTalentAdvisor.lua
@@ -0,0 +1,59 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+if not AS:IsAddonLODorEnabled("ZygorTalentAdvisor") then return end
+
+-- Zygor Talent Advisor 2.0
+
+S:AddCallbackForAddon("ZygorTalentAdvisor", "ZygorTalentAdvisor", function()
+ if not E.private.addOnSkins.ZygorTalentAdvisor then return end
+
+ ZygorTalentAdvisorPopoutButton:Point("TOPRIGHT", -40, -39)
+ ZygorTalentAdvisorPopoutButton:Size(26, 32)
+ ZygorTalentAdvisorPopoutButton:SetTemplate("Default")
+ ZygorTalentAdvisorPopoutButton:GetNormalTexture():SetTexCoord(0.1875, 0.796875, 0.125, 0.890625)
+ ZygorTalentAdvisorPopoutButton:GetNormalTexture():SetInside()
+ ZygorTalentAdvisorPopoutButton:GetPushedTexture():SetTexCoord(0.1875, 0.796875, 0.125, 0.890625)
+ ZygorTalentAdvisorPopoutButton:GetPushedTexture():SetInside()
+ ZygorTalentAdvisorPopoutButton:GetHighlightTexture():SetTexture(1, 1, 1, 0.3)
+ ZygorTalentAdvisorPopoutButton:GetHighlightTexture():SetInside()
+
+ ZygorTalentAdvisorPopout:StripTextures()
+ ZygorTalentAdvisorPopout:SetTemplate("Transparent")
+
+ ZygorTalentAdvisorPopoutScroll:Point("TOPLEFT", 11, -70)
+ ZygorTalentAdvisorPopoutScroll:Point("BOTTOMRIGHT", -32, 70)
+
+ ZygorTalentAdvisorPopoutScrollScrollBar:Point("TOPLEFT", ZygorTalentAdvisorPopoutScroll, "TOPRIGHT", 6, -15)
+ ZygorTalentAdvisorPopoutScrollScrollBar:Point("BOTTOMLEFT", ZygorTalentAdvisorPopoutScroll, "BOTTOMRIGHT", 6, 16)
+
+ for i = 1, ZygorTalentAdvisorPopoutScroll:GetNumChildren() do
+ local child = select(i, ZygorTalentAdvisorPopoutScroll:GetChildren())
+ if child:IsObjectType("Frame") and not child:GetName() then
+ child:SetBackdrop(nil)
+ child:CreateBackdrop("Transparent")
+ child.backdrop:Point("TOPLEFT", 2, 1)
+ child.backdrop:Point("BOTTOMRIGHT", -22, 0)
+ end
+ end
+
+ S:HandleCloseButton(ZygorTalentAdvisorPopoutCloseButton, ZygorTalentAdvisorPopout)
+
+ S:HandleScrollBar(ZygorTalentAdvisorPopoutScrollScrollBar)
+
+ ZygorTalentAdvisorPopoutAcceptButton:StripTextures()
+ S:HandleButton(ZygorTalentAdvisorPopoutConfigureButton)
+ S:HandleButton(ZygorTalentAdvisorPopoutPreviewButton)
+ S:HandleButton(ZygorTalentAdvisorPopoutAcceptButton)
+
+ hooksecurefunc("ZygorTalentAdvisorPopout_Reparent", function()
+ if ZTA.db.profile.windowdocked then
+ if PlayerSpecTab1 and PlayerSpecTab1:IsShown() then
+ ZygorTalentAdvisorPopout:Point("TOPLEFT", PlayerTalentFrame, "TOPRIGHT", 6, -12)
+ else
+ ZygorTalentAdvisorPopout:Point("TOPLEFT", PlayerTalentFrame, "TOPRIGHT", -33, -12)
+ end
+ end
+ end)
+end)
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Libs.lua b/ElvUI_AddOnSkins/Skins/Libs.lua
new file mode 100644
index 0000000..1c31b2a
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Libs.lua
@@ -0,0 +1,1087 @@
+local E, L, V, P, G = unpack(ElvUI)
+local S = E:GetModule("Skins")
+local AS = E:GetModule("AddOnSkins")
+
+local _G = _G
+local ipairs = ipairs
+local select = select
+local unpack = unpack
+
+local hooksecurefunc = hooksecurefunc
+
+AS.skinnedLibs = {}
+
+local dropdownArrowColor = {1, 0.8, 0}
+
+local function SkinDewdrop(lib, libName)
+ local dewdropEditBoxFrame
+ local dewdropSliderFrame
+
+ local function DewdropOpen(prefix)
+ local level = prefix.."Level"
+ local button = prefix.."Button"
+
+ local i = 1
+ local frame = _G[level .. i]
+
+ while frame do
+ if not frame.isSkinned then
+ frame:SetTemplate("Transparent")
+
+ frame:GetChildren():Hide()
+ frame.SetBackdropColor = E.noop
+ frame.SetBackdropBorderColor = E.noop
+
+ frame.isSkinned = true
+ end
+
+ i = i + 1
+ frame = _G[level .. i]
+ end
+
+ i = 1
+ frame = _G[button .. i]
+
+ while frame do
+ if not frame.isHook then
+ frame:HookScript("OnEnter", function(self)
+ if not self.disabled and self.hasArrow then
+ if not dewdropEditBoxFrame and self.hasEditBox then
+ dewdropEditBoxFrame = AS:FindFrameBySizeChild({"EditBox"}, 200, 40)
+
+ if dewdropEditBoxFrame then
+ dewdropEditBoxFrame:SetTemplate("Transparent")
+ S:HandleEditBox(dewdropEditBoxFrame.editBox)
+ dewdropEditBoxFrame.editBox:DisableDrawLayer("BACKGROUND")
+ end
+ end
+ if not dewdropSliderFrame and self.hasSlider then
+ dewdropSliderFrame = AS:FindFrameBySizeChild({"Slider", "EditBox"}, 100, 170)
+
+ if dewdropSliderFrame then
+ dewdropSliderFrame:SetTemplate("Transparent")
+ S:HandleSliderFrame(dewdropSliderFrame.slider)
+ S:HandleEditBox(dewdropSliderFrame.currentText)
+ dewdropSliderFrame.currentText:DisableDrawLayer("BACKGROUND")
+ end
+ end
+
+ DewdropOpen(prefix)
+ end
+ end)
+
+ frame.isHook = true
+ end
+
+ i = i + 1
+ frame = _G[button .. i]
+ end
+ end
+
+ if not S:IsHooked(lib, "Open") then
+ S:SecureHook(lib, "Open", function()
+ DewdropOpen(libName == "Dewdrop-2.0" and "Dewdrop20" or "ArkDewdrop30")
+ end)
+ end
+
+ return true
+end
+
+local function SkinTablet2(lib)
+ local function SkinDetachedFrame(self, fakeParent, parent)
+ if not parent then
+ parent = fakeParent
+ end
+ if self.registry[parent].data.detached then
+ local i = 1
+ local frame = _G["Tablet20DetachedFrame" .. i]
+
+ while frame do
+ if not frame.isSkinned then
+ frame:SetTemplate("Transparent")
+ S:HandleSliderFrame(frame.slider)
+
+ frame.isSkinned = true
+ end
+
+ i = i + 1
+ frame = _G["Tablet20DetachedFrame" .. i]
+ end
+ end
+ end
+
+ if not S:IsHooked(lib, "Open") then
+ S:SecureHook(lib, "Open", function(self, fakeParent, parent)
+ _G["Tablet20Frame"]:SetTemplate("Transparent")
+ SkinDetachedFrame(self, fakeParent, parent)
+ end)
+ end
+
+ if not S:IsHooked(lib, "Detach") then
+ S:SecureHook(lib, "Detach", function(self, parent)
+ SkinDetachedFrame(self, parent)
+ end)
+ end
+
+ return true
+end
+
+local function SkinLibRockConfig(lib)
+ local function SkinMainFrame(self)
+ if self.base.isSkinned then return end
+
+ self.base:SetTemplate("Transparent")
+ self.base.header:StripTextures()
+ S:HandleCloseButton(self.base.closeButton, self.base)
+
+ self.base.treeView:SetTemplate("Transparent")
+ S:HandleScrollBar(self.base.treeView.scrollBar)
+ S:HandleDropDownBox(self.base.addonChooser)
+
+ self.base.addonChooser.text:Height(20)
+ self.base.addonChooser.text:SetTemplate("Transparent")
+ S:HandleNextPrevButton(self.base.addonChooser.button)
+
+ local pullout = _G[self.base.mainPane:GetName().."_ChoicePullout"]
+ if pullout then
+ pullout:SetTemplate("Transparent")
+ else
+ S:SecureHookScript(self.base.addonChooser.button, "OnClick", function(self)
+ _G[lib.base.mainPane:GetName().."_ChoicePullout"]:SetTemplate("Transparent")
+ S:Unhook(self, "OnClick")
+ end)
+ end
+
+ self.base.mainPane:SetTemplate("Transparent")
+ S:HandleScrollBar(self.base.mainPane.scrollBar)
+
+ self.base.treeView.sizer:SetTemplate("Transparent")
+
+ self.base.isSkinned = true
+ end
+
+ S:SecureHook(lib, "OpenConfigMenu", function(self)
+ SkinMainFrame(self)
+ S:Unhook(self, "OpenConfigMenu")
+ end)
+
+ local LR = LibStub("LibRock-1.0", true)
+ if LR then
+ for object in LR:IterateMixinObjects("LibRockConfig-1.0") do
+ if not S:IsHooked(object, "OpenConfigMenu") then
+ S:SecureHook(object, "OpenConfigMenu", function(self)
+ SkinMainFrame(lib)
+ S:Unhook(self, "OpenConfigMenu")
+ end)
+ end
+ end
+ end
+
+ return true
+end
+
+local function SkinConfigator(lib)
+ local function skinSlider(obj)
+ obj:StripTextures()
+ obj:SetTemplate("Default")
+ obj:Height(12)
+ obj:SetThumbTexture(E.media.blankTex)
+ obj:GetThumbTexture():SetVertexColor(0.3, 0.3, 0.3)
+ obj:GetThumbTexture():Size(10)
+ end
+
+ local function skinEditBox(obj)
+ if not obj then return end
+
+ local objName = obj:GetName()
+ if objName then
+ _G[objName.."Left"]:Kill()
+ _G[objName.."Middle"]:Kill()
+ _G[objName.."Right"]:Kill()
+ end
+
+ obj:Height(17)
+ obj:CreateBackdrop("Default")
+ obj.backdrop:Point("TOPLEFT", -2, 0)
+ obj.backdrop:Point("BOTTOMRIGHT", 2, 0)
+ obj.backdrop:SetParent(obj:GetParent())
+ obj:SetParent(obj.backdrop)
+ end
+
+ local function skinObject(obj)
+ if not obj then return end
+
+ local objType = obj:GetObjectType()
+
+ -- if objType == "FontString" then
+ if objType == "CheckButton" then
+ S:HandleCheckBox(obj, true)
+ elseif objType == "Slider" then
+ skinSlider(obj)
+
+ if obj.slave then
+ skinEditBox(obj.slave)
+ end
+ elseif objType == "EditBox" then
+ skinEditBox(obj)
+ elseif objType == "Button" then
+ S:HandleButton(obj, true)
+ elseif objType == "Frame" then
+ if obj.stype == "SelectBox" then
+ obj:StripTextures()
+ obj:SetTemplate("Default")
+ obj:Size(159, 22)
+ local _, _, _, x = obj:GetPoint(2)
+ obj:Point("LEFT", x + 15, 0)
+
+ _G[obj:GetName().."Text"]:Point("RIGHT", -26, 0)
+
+ S:HandleNextPrevButton(obj.button, "down", dropdownArrowColor)
+ obj.button:Point("TOPRIGHT", -2, -2)
+ elseif obj.stype == "MoneyFrame"
+ or obj.stype == "PinnedMoney"
+ or obj.stype == "MoneyFramePinned" then
+ local objName = obj:GetName()
+ if objName then
+ skinEditBox(_G[objName.."Gold"])
+ skinEditBox(_G[objName.."Silver"])
+ skinEditBox(_G[objName.."Copper"])
+ else
+ for i = 1, obj:GetNumChildren() do
+ local child = select(i, obj:GetChildren())
+ if child and child:IsObjectType("EditBox") then
+ skinEditBox(child)
+ end
+ end
+ end
+ end
+ end
+ end
+
+ local function fullsizeSetNormalTexture(self, texture)
+ if texture == "Interface\\Minimap\\UI-Minimap-ZoomInButton-Up" then
+ self.normalTexture:SetTexture(E.Media.Textures.Plus)
+ self.pushedTexture:SetTexture(E.Media.Textures.Plus)
+ else
+ self.normalTexture:SetTexture(E.Media.Textures.Minus)
+ self.pushedTexture:SetTexture(E.Media.Textures.Minus)
+ end
+ end
+ local function skinTab(self)
+ local frame = self.tabs[#self.tabs].frame
+
+ frame:SetTemplate("Default")
+
+ S:HandleButton(frame.fullsize)
+ frame.fullsize:Size(18)
+ frame.fullsize:Point("BOTTOMLEFT", 4, 4)
+
+ frame.fullsize.normalTexture = frame.fullsize:GetNormalTexture()
+ frame.fullsize.pushedTexture = frame.fullsize:GetPushedTexture()
+
+ frame.fullsize.SetNormalTexture = fullsizeSetNormalTexture
+ frame.fullsize:SetNormalTexture(frame.fullsize.normalTexture:GetTexture())
+
+ frame.fullsize:SetHighlightTexture("")
+ frame.fullsize.SetPushedTexture = E.noop
+ frame.fullsize.SetHighlightTexture = E.noop
+ end
+
+ local function skinScroll(self, id)
+ local tab = self.tabs[id]
+ if tab.scroll.isSkinned then return end
+
+ if tab.scroll.vScroll then
+ S:HandleScrollBar(tab.scroll.vScroll)
+ tab.scroll.vScroll:Point("TOPLEFT", tab.scroll, "TOPRIGHT", 3, -16)
+ tab.scroll.vScroll:Point("BOTTOMLEFT", tab.scroll, "BOTTOMRIGHT", 3, 14)
+ end
+ if tab.scroll.hScroll then
+ S:HandleScrollBar(tab.scroll.hScroll, true)
+ tab.scroll.hScroll:Point("TOPLEFT", tab.scroll, "BOTTOMLEFT", 18, -3)
+ tab.scroll.hScroll:Point("TOPRIGHT", tab.scroll, "BOTTOMRIGHT", -19, -3)
+ end
+
+ tab.scroll.isSkinned = true
+ end
+
+ local function skinControl(self, id, cType, ...)
+ local obj = S.hooks[self].AddControl(self, id, cType, ...)
+
+ skinObject(obj)
+
+ return obj
+ end
+
+ S:RawHook(lib, "Create", function(self, ...)
+ local gui = S.hooks[self].Create(self, ...)
+
+ gui.Backdrop:SetTemplate("Transparent")
+
+ gui.DragTop:Point("TOPLEFT", 10, -1)
+ gui.DragTop:Point("TOPRIGHT", -10, -1)
+
+ gui.DragBottom:Point("BOTTOMLEFT", 10, 1)
+ gui.DragBottom:Point("BOTTOMRIGHT", -10, 1)
+
+ S:HandleButton(gui.Done)
+ gui.Done:Point("BOTTOMRIGHT", gui, "BOTTOMRIGHT", -8, 8)
+
+ hooksecurefunc(gui, "AddTab", skinTab)
+ hooksecurefunc(gui, "MakeScrollable", skinScroll)
+ S:RawHook(gui, "AddControl", skinControl)
+
+ return gui
+ end)
+
+ if #lib.frames > 0 then
+ for _, frame in ipairs(lib.frames) do
+ frame.Backdrop:SetTemplate("Transparent")
+ S:HandleButton(frame.Done)
+
+ for _, tab in ipairs(frame.tabs) do
+ if tab.frame then
+ tab.frame:SetTemplate("Transparent")
+ end
+
+ if tab.scroll then
+ if tab.scroll.vScroll then
+ S:HandleScrollBar(tab.scroll.vScroll)
+ tab.scroll.vScroll:Point("TOPLEFT", tab.scroll, "TOPRIGHT", 3, -16)
+ tab.scroll.vScroll:Point("BOTTOMLEFT", tab.scroll, "BOTTOMRIGHT", 3, 14)
+ end
+ if tab.scroll.hScroll then
+ S:HandleScrollBar(tab.scroll.hScroll, true)
+ tab.scroll.hScroll:Point("TOPLEFT", tab.scroll, "BOTTOMLEFT", 18, -3)
+ tab.scroll.hScroll:Point("TOPRIGHT", tab.scroll, "BOTTOMRIGHT", -19, -3)
+ end
+ end
+
+ if tab.frame.ctrls then
+ for _, entry in ipairs(tab.frame.ctrls) do
+ for _, object in ipairs(entry.kids) do
+ skinObject(object)
+ end
+ end
+ end
+ end
+ end
+ end
+
+ do -- tooltip
+ lib.tooltip:SetTemplate("Transparent")
+ lib.tooltip._SetBackdropColor = lib.tooltip.SetBackdropColor
+ lib.tooltip.SetBackdropColor = function(self)
+ self:SetBackdropBorderColor(unpack(E.media.bordercolor, 1, 3))
+ local r, g, b = unpack(E.media.backdropfadecolor, 1, 3)
+ self:_SetBackdropColor(r, g, b, E.db.tooltip.colorAlpha)
+ end
+ end
+
+ do -- help
+ lib.help:SetTemplate("Transparent")
+
+ lib.help.scroll:SetTemplate("Transparent")
+ lib.help.scroll:Point("TOPLEFT", 8, -25)
+ lib.help.scroll:Point("BOTTOMRIGHT", -29, 8)
+
+ lib.help.content:Width(416)
+
+ S:HandleScrollBar(lib.help.scroll.vScroll)
+ lib.help.scroll.vScroll:Point("TOPLEFT", lib.help.scroll, "TOPRIGHT", 3, -19)
+ lib.help.scroll.vScroll:Point("BOTTOMLEFT", lib.help.scroll, "BOTTOMRIGHT", 3, 19)
+
+ S:HandleCloseButton(lib.help.close)
+ end
+
+ local SelectBox = LibStub("SelectBox", true)
+ if SelectBox then
+ SelectBox.menu.back:SetTemplate("Transparent")
+ SelectBox.menu.isSkinned = true
+ end
+
+ local ScrollSheet = LibStub("ScrollSheet", true)
+ if ScrollSheet then
+ S:RawHook(ScrollSheet, "Create", function(self, ...)
+ local sheet = S.hooks[self].Create(self, ...)
+
+ if not sheet.panel.isSkinned then
+ if sheet.panel.vScroll then
+ S:HandleScrollBar(sheet.panel.vScroll)
+ sheet.panel.vScroll:Point("TOPLEFT", sheet.panel, "TOPRIGHT", 3, -18)
+ sheet.panel.vScroll:Point("BOTTOMLEFT", sheet.panel, "BOTTOMRIGHT", 3, 19)
+ end
+ if sheet.panel.hScroll then
+ S:HandleScrollBar(sheet.panel.hScroll, true)
+ sheet.panel.hScroll:Point("TOPLEFT", sheet.panel, "BOTTOMLEFT", 18, -3)
+ sheet.panel.hScroll:Point("TOPRIGHT", sheet.panel, "BOTTOMRIGHT", -19, -3)
+ end
+
+ sheet.panel.isSkinned = true
+ end
+
+ return sheet
+ end, true)
+ end
+
+ return true
+end
+
+local function SkinAceAddon20(lib)
+ S:SecureHook(lib.prototype, "PrintAddonInfo", function()
+ AceAddon20AboutFrame:SetTemplate("Transparent")
+ S:HandleButton(AceAddon20AboutFrameButton)
+ S:HandleButton(AceAddon20AboutFrameDonateButton)
+
+ S:Unhook(lib.prototype, "PrintAddonInfo")
+ end)
+
+ S:SecureHook(lib.prototype, "OpenDonationFrame", function()
+ AceAddon20Frame:SetTemplate("Transparent")
+ S:HandleScrollBar(AceAddon20FrameScrollFrameScrollBar)
+ S:HandleButton(AceAddon20FrameButton)
+
+ S:Unhook(lib.prototype, "OpenDonationFrame")
+ end)
+
+ return true
+end
+
+local function SkinAzDialog(libName)
+ local lib = _G[libName]
+ if not lib then return end
+
+ local function skinDialog(frame)
+ if frame.isSkinned then return end
+
+ frame:SetTemplate("Transparent")
+
+ frame.edit:SetBackdrop(nil)
+ S:HandleEditBox(frame.edit)
+
+ S:HandleButton(frame.ok)
+ S:HandleButton(frame.cancel)
+
+ frame.isSkinned = true
+ end
+
+ for _, frame in ipairs(lib.dialogs) do
+ skinDialog(frame)
+ end
+
+ S:SecureHook(lib, "Show", function(self)
+ skinDialog(self.dialogs[#self.dialogs])
+ end)
+
+ return true
+end
+
+local function SkinAzDropDown(libName)
+ local lib = _G[libName]
+ if not lib then return end
+
+ S:RawHook(lib, "CreateDropDown", function(parent, ...)
+ local f = S.hooks[lib].CreateDropDown(parent, ...)
+
+ f:SetTemplate()
+
+ S:HandleNextPrevButton(f.button, "down", dropdownArrowColor)
+ f.button:Point("TOPRIGHT", -2, -2)
+ f.button:Point("BOTTOMRIGHT", -2, 2)
+ f.button:Size(20)
+
+ return f
+ end)
+
+ S:SecureHook(lib, "ToggleMenu", function(parent, width, isAutoSelect, initFunc, selectValueFunc)
+ local scrollFrame = _G["AzDropDownScroll"..lib.vers]
+ if scrollFrame then
+ scrollFrame:GetParent():SetTemplate("Default")
+ S:HandleScrollBar(_G["AzDropDownScroll"..lib.vers.."ScrollBar"])
+
+ S:Unhook(lib, "ToggleMenu")
+ end
+ end)
+
+ return true
+end
+
+local function SkinAzOptionsFactory(libName)
+ local lib = _G[libName]
+ if not lib then return end
+
+ AS:SkinLibrary("AzDropDown")
+
+ S:RawHook(lib.makers, "Slider", function(self)
+ local f = S.hooks[lib.makers].Slider(self)
+
+ S:HandleEditBox(f.edit)
+ S:HandleSliderFrame(f.slider)
+
+ f.slider:Point("TOPLEFT", f.edit, "TOPRIGHT", 5, -10)
+ f.slider:Point("BOTTOMRIGHT", 0, -1)
+
+ return f
+ end)
+
+ S:RawHook(lib.makers, "Check", function(self)
+ local f = S.hooks[lib.makers].Check(self)
+
+ S:HandleCheckBox(f)
+
+ return f
+ end)
+
+ S:RawHook(lib.makers, "Color", function(self)
+ local f = S.hooks[lib.makers].Color(self)
+
+ S:HandleColorSwatch(f)
+
+ return f
+ end)
+
+ S:RawHook(lib.makers, "Text", function(self)
+ local f = S.hooks[lib.makers].Text(self)
+
+ f:SetBackdrop(nil)
+
+ f:CreateBackdrop()
+ f.backdrop:SetFrameLevel(f:GetFrameLevel())
+
+ f.backdrop:Point("TOPLEFT", 2, -2)
+ f.backdrop:Point("BOTTOMRIGHT", -2, 2)
+
+ return f
+ end)
+
+ return true
+end
+
+local function SkinLibExtraTip(lib)
+ S:RawHook(lib, "GetFreeExtraTipObject", function(self)
+ local tooltip = S.hooks[self].GetFreeExtraTipObject(self)
+
+ if not tooltip.isSkinned then
+ tooltip:SetTemplate("Transparent")
+ tooltip.isSkinned = true
+ end
+
+ return tooltip
+ end)
+
+ return true
+end
+
+local function SkinZFrame(lib)
+ S:RawHook(lib, "Create", function(self, ...)
+ local frame = S.hooks[self].Create(self, ...)
+
+ frame.ZMain:SetTemplate("Transparent")
+ frame.ZMain.close:Size(32)
+ S:HandleCloseButton(frame.ZMain.close, frame.ZMain)
+
+ return frame
+ end, true)
+
+ return true
+end
+
+local function SkinLibCandyBar(lib)
+ local offset = E:Scale(E.PixelMode and 1 or 3)
+ local function setPoint(self, point, attachTo, anchorPoint, xOffset, yOffset)
+ if (point == "BOTTOMLEFT" and yOffset ~= offset) or (point == "TOPLEFT" and yOffset ~= -offset) then
+ self:SetPoint(point, attachTo, anchorPoint, 0, point == "BOTTOMLEFT" and offset or -offset)
+ end
+ end
+
+ local function skinBar(bar)
+ if not bar.isSkinned then
+ bar:CreateBackdrop("Transparent")
+ hooksecurefunc(bar, "SetPoint", setPoint)
+ bar.isSkinned = true
+ end
+ end
+
+ for _, bar in ipairs(lib.availableBars) do
+ skinBar(bar)
+ end
+
+ S:RawHook(lib, "New", function(self, ...)
+ local bar = S.hooks[self].New(self, ...)
+ skinBar(bar)
+ return bar
+ end)
+
+ return true
+end
+
+local function SkinLibDialog(lib)
+ local function skinDialog(dialog)
+ if not dialog.isSkinned then
+ dialog:SetTemplate("Transparent")
+ dialog.SetBackdrop = E.noop
+ S:HandleCloseButton(dialog.close_button, dialog)
+
+ dialog.isSkinned = true
+ end
+
+ if dialog.checkboxes then
+ for _, checkbox in ipairs(dialog.checkboxes) do
+ S:HandleCheckBox(checkbox)
+ end
+ end
+
+ if dialog.editboxes then
+ for _, editbox in ipairs(dialog.editboxes) do
+ S:HandleEditBox(editbox)
+ editbox:Height(20)
+ end
+ end
+
+ if dialog.buttons then
+ for _, button in ipairs(dialog.buttons) do
+ S:HandleButton(button)
+ end
+ end
+ end
+
+ for _, dialog in ipairs(lib.active_dialogs) do
+ skinDialog(dialog)
+ end
+
+ S:RawHook(lib, "Spawn", function(self, ...)
+ local dialog = S.hooks[self].Spawn(self, ...)
+
+ if dialog then
+ skinDialog(dialog)
+ return dialog
+ end
+ end)
+
+ return true
+end
+
+local function SkinScrollingTable(lib)
+ local function updateRows(self, num)
+ if num and num > 0 and #self.rows ~= 0 then
+ self.rows[1]:Point("TOPRIGHT", self.frame, "TOPRIGHT", -21, -5)
+ end
+ end
+
+ S:RawHook(lib, "CreateST", function(self, ...)
+ local st = S.hooks[self].CreateST(self, ...)
+
+ st.frame:SetTemplate("Transparent")
+
+ local frameName = st.frame:GetName()
+ local scrollbar = _G[frameName .. "ScrollFrameScrollBar"]
+ scrollbar:Point("TOPLEFT", st.scrollframe, "TOPRIGHT", 6, -17)
+ scrollbar:Point("BOTTOMLEFT", st.scrollframe, "BOTTOMRIGHT", 6, 18)
+ S:HandleScrollBar(scrollbar)
+
+ _G[frameName .. "ScrollTrough"]:Kill()
+ _G[frameName .. "ScrollTroughBorder"]:Kill()
+
+ updateRows(st, st.displayRows)
+ S:SecureHook(st, "SetDisplayRows", updateRows)
+
+ return st
+ end)
+
+ return true
+end
+
+local function SkinDropDownMenu(libName)
+ if not _G.Lib_UIDropDownMenu_Initialize then return end
+
+ local checkBoxSkin = E.private.skins.dropdownCheckBoxSkin
+ local menuLevel = 0
+ local maxButtons = 0
+
+ local function dropDownButtonShow(self)
+ if self.notCheckable then
+ self.check.backdrop:Hide()
+ else
+ self.check.backdrop:Show()
+ end
+ end
+
+ local function skinDropdownMenu()
+ local updateButtons = maxButtons < LIB_UIDROPDOWNMENU_MAXBUTTONS
+
+ if updateButtons or menuLevel < LIB_UIDROPDOWNMENU_MAXLEVELS then
+ for i = 1, LIB_UIDROPDOWNMENU_MAXLEVELS do
+ local frame = _G["Lib_DropDownList"..i]
+
+ if not frame.isSkinned then
+ _G["Lib_DropDownList"..i.."Backdrop"]:SetTemplate("Transparent")
+ _G["Lib_DropDownList"..i.."MenuBackdrop"]:SetTemplate("Transparent")
+
+ frame.isSkinned = true
+ end
+
+ if updateButtons then
+ for j = 1, LIB_UIDROPDOWNMENU_MAXBUTTONS do
+ local button = _G["Lib_DropDownList"..i.."Button"..j]
+
+ if not button.isSkinned then
+ S:HandleButtonHighlight(_G["Lib_DropDownList"..i.."Button"..j.."Highlight"])
+
+ if checkBoxSkin then
+ local check = _G["Lib_DropDownList"..i.."Button"..j.."Check"]
+ check:Size(12)
+ check:Point("LEFT", 1, 0)
+ check:CreateBackdrop()
+ check:SetTexture(E.media.normTex)
+ check:SetVertexColor(1, 0.82, 0, 0.8)
+
+ button.check = check
+ hooksecurefunc(button, "Show", dropDownButtonShow)
+ end
+
+ S:HandleColorSwatch(_G["Lib_DropDownList"..i.."Button"..j.."ColorSwatch"], 14)
+
+ button.isSkinned = true
+ end
+ end
+ end
+ end
+
+ menuLevel = LIB_UIDROPDOWNMENU_MAXLEVELS
+ maxButtons = LIB_UIDROPDOWNMENU_MAXBUTTONS
+ end
+ end
+
+ skinDropdownMenu()
+ hooksecurefunc("Lib_UIDropDownMenu_InitializeHelper", skinDropdownMenu)
+
+ return true
+end
+
+local function SkinLibQTip(lib)
+ hooksecurefunc(lib, "Acquire", function(self, key)
+ if self.activeTooltips[key] then
+ self.activeTooltips[key]:SetTemplate("Transparent")
+ end
+ end)
+
+ S:Hook(lib.LabelPrototype, "SetupCell", function(self)
+ self.fontString:FontTemplate()
+ end)
+
+ hooksecurefunc(lib.tipPrototype, "UpdateScrolling", function(self)
+ if self.slider and not self.slider.isSkinned then
+ S:HandleSliderFrame(self.slider)
+ self.slider.isSkinned = true
+ end
+ end)
+
+ return true
+end
+
+local function SkinWaterfall(lib)
+ hooksecurefunc(WaterfallFrame.prototype, "init", function(self)
+ self.frame:SetTemplate("Transparent")
+
+ self.titlebar:SetDrawLayer("ARTWORK")
+ self.titlebar2:SetDrawLayer("ARTWORK")
+
+ self.titlebar:Point("TOPLEFT", self.frame, "TOPLEFT", 4, -4)
+ self.titlebar:Point("TOPRIGHT", self.frame, "TOPRIGHT", -4, -4)
+
+ S:HandleCloseButton(self.closebutton)
+ self.closebutton:SetPoint("TOPRIGHT", 0, 0)
+
+ self.treeview:Point("TOPLEFT", self.frame, "TOPLEFT", 8, -33)
+ self.treeview:Point("BOTTOMLEFT", self.frame, "BOTTOMLEFT", 8, 8)
+
+ self.mainpane:Point("TOPLEFT", self.treeview.frame, "TOPRIGHT", 3, 0)
+ self.mainpane:Point("BOTTOMRIGHT", self.frame, "BOTTOMRIGHT", -8, 8)
+ end)
+ S:RawHook(WaterfallFrame.prototype, "ReAnchorTree", function(self)
+ self.treeview:Point("TOPLEFT", self.frame, "TOPLEFT", 8, -33)
+ self.treeview:Point("BOTTOMLEFT", self.frame, "BOTTOMLEFT", 8, 8)
+ end)
+
+ hooksecurefunc(WaterfallPane.prototype, "init", function(self, parent)
+ self.frame:SetTemplate("Transparent")
+
+ self.titlebar:SetDrawLayer("ARTWORK")
+ self.titlebar2:SetDrawLayer("ARTWORK")
+
+ S:HandleScrollBar(self.scrollbar)
+ end)
+
+ hooksecurefunc(WaterfallTreeView.prototype, "init", function(self, parent)
+ self.frame:SetTemplate("Transparent")
+
+ S:HandleScrollBar(self.scrollbar)
+
+ self.sizer:ClearAllPoints()
+ self.sizer:Point("TOPLEFT", self.frame, "TOPRIGHT", -2, 0)
+ self.sizer:Point("BOTTOMLEFT", self.frame, "BOTTOMRIGHT", -2, 0)
+ end)
+ hooksecurefunc(WaterfallTreeLine.prototype, "init", function(self)
+ S:HandleCollapseExpandButton(self.expand)
+ end)
+ hooksecurefunc(WaterfallTreeSection.prototype, "init", function(self, parent)
+ self.frame:SetTemplate("Transparent")
+
+ self.titlebar:SetDrawLayer("ARTWORK")
+ self.titlebar2:SetDrawLayer("ARTWORK")
+
+ self.titlebar:Point("TOPLEFT", self.frame, "TOPLEFT", 4, -4)
+ self.titlebar:Point("TOPRIGHT", self.frame, "TOPRIGHT", -4, -4)
+
+ S:HandleCloseButton(self.closebutton)
+ self.closebutton:SetPoint("TOPRIGHT", 0, 0)
+ end)
+
+ hooksecurefunc(WaterfallColorSwatch.prototype, "init", function(self)
+ self.frame:CreateBackdrop("Default")
+ self.frame.backdrop:SetOutside(self.colorSwatch)
+
+ self.colorSwatch:SetTexture(nil)
+ self.colorSwatch:Size(18)
+
+ self.colorSwatch.texture:SetParent(self.frame.backdrop)
+ self.colorSwatch.texture:SetInside()
+
+ self.text:Point("LEFT", self.colorSwatch, "RIGHT", 4, 0)
+ self.text.SetPoint = E.noop
+ end)
+
+ hooksecurefunc(WaterfallCheckBox.prototype, "init", function(self)
+ self.frame:CreateBackdrop("Default")
+ self.frame.backdrop:SetOutside(self.checkbg)
+
+ self.checkbg:Hide()
+ self.checkbg:Size(18)
+
+ self.check:SetParent(self.frame.backdrop)
+ self.check:SetAllPoints()
+
+ self.text:Point("LEFT", self.check, "RIGHT", 3, 0)
+ self.text.SetPoint = E.noop
+ end)
+ hooksecurefunc(WaterfallCheckBox.prototype, "UpdateTexture", function(self)
+ if self.isRadio then
+ self.frame.backdrop:Hide()
+ self.checkbg:Show()
+ else
+ self.frame.backdrop:Show()
+ self.checkbg:Hide()
+ end
+ end)
+
+ hooksecurefunc(WaterfallDragLink.prototype, "init", function(self)
+ self.frame:CreateBackdrop("Default")
+ self.frame.backdrop:ClearAllPoints()
+ self.frame.backdrop:SetPoint("LEFT")
+ self.frame.backdrop:Width(self.iconWidth or WaterfallDragLink.defaultIconSize)
+ self.frame.backdrop:Height(self.iconHeight or WaterfallDragLink.defaultIconSize)
+
+ self.linkIcon:SetParent(self.frame.backdrop)
+ self.linkIcon:SetInside()
+ self.linkIcon:SetTexCoord(unpack(E.TexCoords))
+ end)
+
+ hooksecurefunc(WaterfallButton.prototype, "init", function(self)
+ S:HandleButton(self.frame)
+ end)
+
+ hooksecurefunc(WaterfallKeybinding.prototype, "init", function(self)
+ S:HandleButton(self.frame)
+ self.msgframe:SetTemplate("Transparent")
+ end)
+
+ hooksecurefunc(WaterfallSlider.prototype, "init", function(self)
+ S:HandleSliderFrame(self.slider)
+ end)
+
+ hooksecurefunc(WaterfallTextBox.prototype, "init", function(self)
+ self.frame:Height(22)
+ self.frame:SetTemplate("Default")
+ end)
+
+ hooksecurefunc(WaterfallDropdown.prototype, "init", function(self)
+ self.editbox:SetTemplate("Default")
+
+ self.frame:Size(200, 20)
+ self.frame.SetWidth = E.noop
+
+ S:HandleNextPrevButton(self.button, "down", dropdownArrowColor)
+ self.button:Size(16)
+ self.button:Point("RIGHT", self.frame, "RIGHT", -22, 0)
+
+ self.pullout:SetTemplate("Default")
+ end)
+
+ return true
+end
+
+local function SkinLDropDownMenu(lib)
+ if not _G.L_UIDropDownMenu_Initialize then return end
+
+ local checkBoxSkin = E.private.skins.dropdownCheckBoxSkin
+ local menuLevel = 0
+ local maxButtons = 0
+
+ local function dropDownButtonShow(self)
+ if self.notCheckable then
+ self.check.backdrop:Hide()
+ else
+ self.check.backdrop:Show()
+ end
+ end
+
+ local function skinL_DropDownMenu()
+ local updateButtons = maxButtons < L_UIDROPDOWNMENU_MAXBUTTONS
+
+ if updateButtons or menuLevel < L_UIDROPDOWNMENU_MAXLEVELS then
+ for i = 1, L_UIDROPDOWNMENU_MAXLEVELS do
+ local frame = _G["L_DropDownList" .. i]
+
+ if frame and not frame.isSkinned then
+ _G["L_DropDownList" .. i .. "Backdrop"]:SetTemplate("Transparent")
+ _G["L_DropDownList" .. i .. "MenuBackdrop"]:SetTemplate("Transparent")
+
+ frame.isSkinned = true
+ end
+
+ if updateButtons then
+ for j = 1, L_UIDROPDOWNMENU_MAXBUTTONS do
+ local button = _G["L_DropDownList" .. i .. "Button" .. j]
+
+ if button and not button.isSkinned then
+ S:HandleButtonHighlight(_G["L_DropDownList" .. i .. "Button" .. j .. "Highlight"])
+
+ if checkBoxSkin then
+ local check = _G["L_DropDownList" .. i .. "Button" .. j .. "Check"]
+ check:Size(12)
+ check:Point("LEFT", 1, 0)
+ check:CreateBackdrop()
+ check:SetTexture(E.media.normTex)
+ check:SetVertexColor(1, 0.82, 0, 0.8)
+
+ local uncheck = _G["L_DropDownList" .. i .. "Button" .. j .. "UnCheck"]
+ uncheck:Size(12)
+ uncheck:Point("LEFT", 1, 0)
+ uncheck:CreateBackdrop()
+ uncheck:SetTexture(nil)
+ uncheck:SetVertexColor(1, 0.82, 0, 0.8)
+
+ button.check = check
+ hooksecurefunc(button, "Show", dropDownButtonShow)
+ end
+
+ button.isSkinned = true
+ end
+ end
+ end
+ end
+
+ menuLevel = L_UIDROPDOWNMENU_MAXLEVELS
+ maxButtons = L_UIDROPDOWNMENU_MAXBUTTONS
+ end
+ end
+
+ skinL_DropDownMenu()
+ hooksecurefunc("L_UIDropDownMenu_InitializeHelper", skinL_DropDownMenu)
+
+ return true
+end
+
+AS.libSkins = {
+ ["AceAddon-2.0"] = {
+ stub = true,
+ func = SkinAceAddon20
+ },
+ ["ArkDewdrop-3.0"] = {
+ stub = true,
+ func = SkinDewdrop
+ },
+ ["AzDialog"] = {
+ stub = false,
+ func = SkinAzDialog
+ },
+ ["AzDropDown"] = {
+ stub = false,
+ func = SkinAzDropDown
+ },
+ ["AzOptionsFactory"] = {
+ stub = false,
+ func = SkinAzOptionsFactory
+ },
+ ["Configator"] = {
+ stub = true,
+ func = SkinConfigator
+ },
+ ["Dewdrop-2.0"] = {
+ stub = true,
+ func = SkinDewdrop
+ },
+ ["DropDownMenu"] = {
+ stub = false,
+ func = SkinDropDownMenu
+ },
+ ["LibCandyBar-3.0"] = {
+ stub = true,
+ func = SkinLibCandyBar
+ },
+ ["LibDialog-1.0"] = {
+ stub = true,
+ func = SkinLibDialog
+ },
+ ["LibExtraTip-1"] = {
+ stub = true,
+ func = SkinLibExtraTip
+ },
+ ["LibRockConfig-1.0"] = {
+ stub = true,
+ func = SkinLibRockConfig
+ },
+ ["LibQTip-1.0"] = {
+ stub = true,
+ func = SkinLibQTip
+ },
+ ["ScrollingTable"] = {
+ stub = true,
+ func = SkinScrollingTable
+ },
+ ["Tablet-2.0"] = {
+ stub = true,
+ func = SkinTablet2
+ },
+ ["Waterfall-1.0"] = {
+ stub = true,
+ func = SkinWaterfall
+ },
+ ["ZFrame-1.0"] = {
+ stub = true,
+ func = SkinZFrame
+ },
+ ["LibUIDropDownMenu"] = {
+ stub = true,
+ func = SkinLDropDownMenu
+ },
+}
+
+function AS:SkinLibrary(libName)
+ if not libName or not self.libSkins[libName] then return end
+
+ if self.libSkins[libName].stub then
+ local lib, minor = LibStub(libName, true)
+ if lib and (not self.skinnedLibs[libName] or self.skinnedLibs[libName] < minor) then
+ if self.libSkins[libName].func(lib, libName) then
+ self.skinnedLibs[libName] = minor or 1
+ return true
+ end
+ end
+ elseif not self.skinnedLibs[libName] then
+ if self.libSkins[libName].func(libName) then
+ self.skinnedLibs[libName] = true
+ return true
+ end
+ end
+end
diff --git a/ElvUI_AddOnSkins/Skins/Load_Skins.xml b/ElvUI_AddOnSkins/Skins/Load_Skins.xml
new file mode 100644
index 0000000..072f13d
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Load_Skins.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Skins.lua b/ElvUI_AddOnSkins/Skins/Skins.lua
new file mode 100644
index 0000000..d6c518e
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Skins.lua
@@ -0,0 +1,39 @@
+local E, L, V, P, G = unpack(ElvUI)
+local AS = E:GetModule("AddOnSkins")
+local S = E:GetModule("Skins")
+
+function AS:AcceptFrame(text, onClick)
+ if not self.acceptFrame then
+ local acceptFrame = CreateFrame("Frame", "ElvUI_AcceptFrame", UIParent)
+ acceptFrame:SetTemplate("Transparent")
+ acceptFrame:SetPoint("CENTER", UIParent, "CENTER")
+ acceptFrame:SetFrameStrata("DIALOG")
+ acceptFrame:EnableMouse(true)
+ table.insert(UISpecialFrames, acceptFrame:GetName())
+
+ acceptFrame.Text = acceptFrame:CreateFontString(nil, "OVERLAY")
+ acceptFrame.Text:FontTemplate(nil, 12)
+ acceptFrame.Text:Point("TOP", acceptFrame, "TOP", 0, -16)
+
+ acceptFrame.Accept = CreateFrame("Button", nil, acceptFrame, "OptionsButtonTemplate")
+ acceptFrame.Accept:Size(75, 21)
+ acceptFrame.Accept:Point("RIGHT", acceptFrame, "BOTTOM", -5, 26)
+ acceptFrame.Accept:SetFormattedText(YES)
+ S:HandleButton(acceptFrame.Accept)
+
+ acceptFrame.Close = CreateFrame("Button", nil, acceptFrame, "OptionsButtonTemplate")
+ acceptFrame.Close:Size(75, 21)
+ acceptFrame.Close:Point("LEFT", acceptFrame, "BOTTOM", 5, 26)
+ acceptFrame.Close:SetScript("OnClick", function(self) self:GetParent():Hide() end)
+ acceptFrame.Close:SetFormattedText(NO)
+ S:HandleButton(acceptFrame.Close)
+
+ self.acceptFrame = acceptFrame
+ end
+
+ self.acceptFrame.Text:SetText(text)
+ self.acceptFrame:Width(self.acceptFrame.Text:GetStringWidth() + 50 > 200 and self.acceptFrame.Text:GetStringWidth() + 50 or 200)
+ self.acceptFrame:Height(self.acceptFrame.Text:GetStringHeight() + 60)
+ self.acceptFrame.Accept:SetScript("OnClick", onClick)
+ self.acceptFrame:Show()
+end
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/Skins/Utils.lua b/ElvUI_AddOnSkins/Skins/Utils.lua
new file mode 100644
index 0000000..f68d548
--- /dev/null
+++ b/ElvUI_AddOnSkins/Skins/Utils.lua
@@ -0,0 +1,153 @@
+local E, L, V, P, G = unpack(ElvUI)
+local AS = E:GetModule("AddOnSkins")
+
+local ipairs = ipairs
+local select = select
+local floor = math.floor
+
+local EnumerateFrames = EnumerateFrames
+
+local function round(x)
+ return floor(x + 0.5)
+end
+
+function AS:GetObjectChildren(obj, childID, list)
+ if not obj then return end
+
+ if not childID then
+ childID = obj:GetNumChildren()
+ elseif childID < 0 then
+ childID = obj:GetNumChildren() + childID
+ end
+
+ if not list then
+ return (select(childID, obj:GetChildren()))
+ else
+ return select(childID, obj:GetChildren())
+ end
+end
+
+function AS:FindChildFrameByPoint(parent, objType, point1, relativeTo, point2, x, y)
+ if not parent then return end
+
+ local childPoint1, childParent, childPoint2, childX, childY
+
+ x = round(x)
+ y = round(y)
+
+ for id, child in ipairs({parent:GetChildren()}) do
+ if not child:GetName() and (not objType or (objType and child:IsObjectType(objType))) then
+ childPoint1, childParent, childPoint2, childX, childY = child:GetPoint()
+ childX = childX and round(childX) or 0
+ childY = childY and round(childY) or 0
+
+ if childPoint1 == point1
+ and childParent == relativeTo
+ and (not point2 or (childPoint2 == point2))
+ and x == childX
+ and y == childY
+ then
+ return child, id
+ end
+ end
+ end
+end
+
+function AS:FindChildFrameBySize(parent, objType, width, height)
+ if not parent then return end
+
+ width = round(width)
+ height = round(height)
+
+ for id, child in ipairs({parent:GetChildren()}) do
+ if not child:GetName() then
+ if not objType or (objType and child:IsObjectType(objType)) then
+ if round(child:GetWidth()) == width and round(child:GetHeight()) == width and round(child:GetHeight()) == height then
+ return child, id
+ end
+ end
+ end
+ end
+end
+
+function AS:FindFrameBySizeChild(childTypes, width, height)
+ if not childTypes then return end
+
+ local singleChild = type(childTypes) == "string"
+ local obj = EnumerateFrames()
+
+ width = round(width)
+ height = round(height)
+
+ while obj do
+ if obj.IsObjectType and obj:IsObjectType("Frame") and (not (obj:GetName() and obj:GetParent())) then
+ if round(obj:GetWidth()) == width and round(obj:GetHeight()) == height then
+ local childs = {}
+
+ for _, child in pairs({obj:GetChildren()}) do
+ childs[#childs + 1] = child:GetObjectType()
+ end
+
+ local matched = 0
+ for _, cType1 in ipairs(childs) do
+ if not singleChild then
+ for _, cType2 in ipairs(childTypes) do
+ if cType1 == cType2 then
+ matched = matched + 1
+ end
+ end
+ elseif cType1 == childTypes then
+ return obj
+ end
+ end
+
+ if matched == #childTypes then
+ return obj
+ end
+ end
+ end
+
+ obj = EnumerateFrames(obj)
+ end
+end
+
+function AS:FindFrameByPoint(point1, relativeTo, point2, x, y, multipleFrames)
+ if not relativeTo then return end
+
+ local frame
+ if multipleFrames then
+ frame = {}
+ end
+
+ local childPoint1, childParent, childPoint2, childX, childY
+ local obj = EnumerateFrames()
+
+ x = round(x)
+ y = round(y)
+
+ while obj do
+ if obj.IsObjectType and obj:IsObjectType("Frame") and (not (obj:GetName() and obj:GetParent())) then
+ childPoint1, childParent, childPoint2, childX, childY = obj:GetPoint()
+ childX = childX and round(childX) or 0
+ childY = childY and round(childY) or 0
+
+ if childPoint1 == point1
+ and childParent == relativeTo
+ and (not point2 or (childPoint2 == point2))
+ and x == childX
+ and y == childY
+ then
+ if multipleFrames then
+ frame[#frame + 1] = obj
+ else
+ frame = obj
+ break
+ end
+ end
+ end
+
+ obj = EnumerateFrames(obj)
+ end
+
+ return frame
+end
\ No newline at end of file
diff --git a/ElvUI_AddOnSkins/core.lua b/ElvUI_AddOnSkins/core.lua
new file mode 100644
index 0000000..2010bf7
--- /dev/null
+++ b/ElvUI_AddOnSkins/core.lua
@@ -0,0 +1,627 @@
+local E, L, V, P, G = unpack(ElvUI)
+local EP = E.Libs.EP
+local AS = E:NewModule("AddOnSkins")
+
+local AddOnName = ...
+
+local lower = string.lower
+
+local GetAddOnInfo = GetAddOnInfo
+local IsAddOnLoadOnDemand = IsAddOnLoadOnDemand
+
+local addonList = {
+ "Omen",
+ "Recount",
+ "SexyCooldown",
+ "DBM",
+ "Skada",
+ "Auctionator",
+ "BugSack",
+ "CallToArms",
+ "Postal",
+ "QuestPointer",
+ "Clique",
+ "FloAspectBar",
+ "FloTotemBar",
+ "Spy",
+ "AtlasLoot",
+ "Atlas",
+ "FlightMap",
+ "WeakAuras",
+ "Overachiever",
+ "OpenGF",
+ "KHunterTimers",
+ "TellMeWhen",
+ "GearScore",
+ "AllStats",
+ "BlackList",
+ "GnomishVendorShrinker",
+ "ACP",
+ "EveryQuest",
+ "_NPCScan",
+ "MoveAnything",
+ "VanasKoS",
+ "BindPad",
+ "ZygorGuidesViewer",
+ "ZygorTalentAdvisor",
+ "WowLua",
+ "ChatBar",
+ "Skillet",
+ "TotemTimers",
+ "PlateBuffs",
+ "MageNuggets",
+ "InspectEquip",
+ "AdvancedTradeSkillWindow",
+ "AtlasQuest",
+ "AckisRecipeList",
+ "LightHeaded",
+ "Carbonite",
+ "Enchantrix",
+ "FishingBuddy",
+ "Talented",
+ "TinyPad",
+ "ZOMGBuffs",
+ "BuyEmAll",
+ "Doom_CooldownPulse",
+ "AdiBags",
+ "PallyPower",
+ "KarniCrap",
+ "TradeskillInfo",
+ "PAB",
+ "EPGP",
+ "EPGP_LootMaster",
+ "RaidRoll",
+ "RaidCooldowns",
+ "EventAlert",
+ "WIM",
+ "BigWigs",
+ "Outfitter",
+ "Poisoner",
+ "TrinketMenu",
+ "Stalker",
+ "ChocolateBar",
+ "EquipCompare",
+ "SuperDuperMacro",
+ "CLCRet",
+ "FeralbyNight",
+ "Factionizer",
+ "PowerAuras",
+ "Quartz",
+ "TipTac",
+ "Swatter",
+ "BeanCounter",
+ "Informant",
+ "SlideBar",
+ "AuctioneerSuite",
+ "Altoholic",
+ "LoseControl",
+ "SilverDragon",
+ "_NPCScanOverlay",
+ "Examiner",
+ "Mapster",
+ "ArkInventory",
+ "QuestGuru",
+ "QuestGuru_Tracker",
+ "SatrinaBuffFrame",
+ "LootCouncil_Lite",
+ "ElvinCDs",
+ "oRA3",
+ "RCLootCouncil",
+ "QDKP2_GUI",
+ "LootWonAlert",
+}
+local addonAlias = {
+ ["DBM"] = "DBM-Core",
+ ["Swatter"] = "!Swatter",
+ ["AuctioneerSuite"] = "Auc-Advanced",
+ ["_NPCScanOverlay"] = "_NPCScan.Overlay",
+ ["ElvinCDs"] = "!ElvinCDs",
+}
+
+AS.addons = {}
+
+do
+ local temp = {}
+ for alias, addonName in pairs(addonAlias) do
+ temp[lower(addonName)] = alias
+ end
+
+ for i = 1, GetNumAddOns() do
+ local name, _, _, enabled = GetAddOnInfo(i)
+ local state = (enabled and 1) or (IsAddOnLoadOnDemand(i) and 2)
+
+ if state then
+ AS.addons[lower(name)] = state
+
+ if temp[name] then
+ AS.addons[lower(temp[name])] = state
+ end
+ end
+ end
+
+ V.addOnSkins = {}
+
+ for _, addonName in ipairs(addonList) do
+ V.addOnSkins[addonName] = true
+ end
+end
+
+function AS:IsAddonEnabled(addon)
+ return self.addons[lower(addonAlias[addon] or addon)] == 1
+end
+
+function AS:IsAddonLOD(addon)
+ return self.addons[lower(addonAlias[addon] or addon)] == 2
+end
+
+function AS:IsAddonLODorEnabled(addon)
+ return self.addons[lower(addonAlias[addon] or addon)] ~= nil
+end
+
+function AS:RegisterAddonOption(addonName, options)
+ if not self:IsAddonLODorEnabled(addonName) then return end
+
+ options[addonName] = {
+ type = "toggle",
+ name = addonName,
+ desc = L["TOGGLESKIN_DESC"],
+ }
+end
+
+local function getOptions()
+ local positionValues = {
+ TOPLEFT = "TOPLEFT",
+ LEFT = "LEFT",
+ BOTTOMLEFT = "BOTTOMLEFT",
+ RIGHT = "RIGHT",
+ TOPRIGHT = "TOPRIGHT",
+ BOTTOMRIGHT = "BOTTOMRIGHT",
+ CENTER = "CENTER",
+ TOP = "TOP",
+ BOTTOM = "BOTTOM"
+ }
+
+ local backdropValues = {
+ ["Default"] = L["Default"],
+ ["Transparent"] = L["Transparent"],
+ ["NoBackdrop"] = NONE
+ }
+
+ local options = {
+ order = 50,
+ type = "group",
+ childGroups = "tab",
+ name = string.format("|cff1784d1%s|r", L["AddOn Skins"]),
+ args = {
+ skins = {
+ order = 1,
+ type = "group",
+ childGroups = "tab",
+ name = L["Skins"],
+ get = function(info) return E.private.addOnSkins[info[#info]] end,
+ set = function(info, value)
+ E.private.addOnSkins[info[#info]] = value
+ E:StaticPopup_Show("PRIVATE_RL")
+ end,
+ args = {
+ header = {
+ order = 1,
+ type = "header",
+ name = L["Skins"]
+ }
+ }
+ },
+ misc = {
+ order = 2,
+ type = "group",
+ childGroups = "tab",
+ name = L["Misc Options"],
+ args = {
+ header = {
+ order = 1,
+ type = "header",
+ name = L["Misc Options"],
+ },
+ skadaGroup = {
+ order = 2,
+ type = "group",
+ name = "Skada",
+ get = function(info) return E.db.addOnSkins[info[#info]] end,
+ set = function(info, value)
+ E.db.addOnSkins[info[#info]] = value
+ Skada:ApplySettings()
+ end,
+ disabled = function() return not AS:IsAddonLODorEnabled("Skada") end,
+ args = {
+ skadaTemplate = {
+ order = 1,
+ type = "select",
+ name = L["Template"],
+ values = backdropValues
+ },
+ skadaTemplateGloss = {
+ order = 2,
+ type = "toggle",
+ name = L["Template Gloss"],
+ disabled = function() return E.db.addOnSkins.skadaTemplate ~= "Default" or not AS:IsAddonLODorEnabled("Skada") end
+ },
+ spacer = {
+ order = 3,
+ type = "description",
+ name = ""
+ },
+ skadaTitleTemplate = {
+ order = 4,
+ type = "select",
+ name = L["Title Template"],
+ values = backdropValues
+ },
+ skadaTitleTemplateGloss = {
+ order = 5,
+ type = "toggle",
+ name = L["Title Template Gloss"],
+ disabled = function() return E.db.addOnSkins.skadaTitleTemplate ~= "Default" or not AS:IsAddonLODorEnabled("Skada") end
+ }
+ }
+ },
+ recountGroup = {
+ order = 3,
+ type = "group",
+ name = "Recount",
+ get = function(info) return E.db.addOnSkins[info[#info]] end,
+ set = function(info, value)
+ local db = E.db.addOnSkins
+ db[info[#info]] = value
+ Recount.MainWindow.header:SetTemplate(db.recountTitleTemplate, db.recountTitleTemplate == "Default" and db.recountTitleTemplateGloss or false)
+ Recount.MainWindow.backdrop:SetTemplate(db.recountTemplate, db.recountTemplate == "Default" and db.recountTemplateGloss or false)
+ end,
+ disabled = function() return not AS:IsAddonLODorEnabled("Recount") end,
+ args = {
+ recountTemplate = {
+ order = 1,
+ type = "select",
+ name = L["Template"],
+ values = backdropValues
+ },
+ recountTemplateGloss = {
+ order = 2,
+ type = "toggle",
+ name = L["Template Gloss"],
+ disabled = function() return E.db.addOnSkins.recountTemplate ~= "Default" or not AS:IsAddonLODorEnabled("Recount") end
+ },
+ spacer = {
+ order = 3,
+ type = "description",
+ name = ""
+ },
+ recountTitleTemplate = {
+ order = 4,
+ type = "select",
+ name = L["Title Template"],
+ values = backdropValues
+ },
+ recountTitleTemplateGloss = {
+ order = 5,
+ type = "toggle",
+ name = L["Title Template Gloss"],
+ disabled = function() return E.db.addOnSkins.recountTitleTemplate ~= "Default" or not AS:IsAddonLODorEnabled("Recount") end
+ }
+ }
+ },
+ omenGroup = {
+ order = 4,
+ type = "group",
+ name = "Omen",
+ get = function(info) return E.db.addOnSkins[info[#info]] end,
+ set = function(info, value)
+ local db = E.db.addOnSkins
+ db[info[#info]] = value
+ Omen.Title:SetTemplate(db.omenTitleTemplate, db.omenTitleTemplate == "Default" and db.omenTitleTemplateGloss or false)
+ Omen.BarList:SetTemplate(db.omenTemplate, db.omenTemplate == "Default" and db.omenTemplateGloss or false)
+ end,
+ disabled = function() return not AS:IsAddonLODorEnabled("Omen") end,
+ args = {
+ omenTemplate = {
+ order = 1,
+ type = "select",
+ name = L["Template"],
+ values = backdropValues
+ },
+ omenTemplateGloss = {
+ order = 2,
+ type = "toggle",
+ name = L["Template Gloss"],
+ disabled = function() return E.db.addOnSkins.omenTemplate ~= "Default" or not AS:IsAddonLODorEnabled("Omen") end
+ },
+ spacer = {
+ order = 3,
+ type = "description",
+ name = ""
+ },
+ omenTitleTemplate = {
+ order = 4,
+ type = "select",
+ name = L["Title Template"],
+ values = backdropValues
+ },
+ omenTitleTemplateGloss = {
+ order = 5,
+ type = "toggle",
+ name = L["Title Template Gloss"],
+ disabled = function() return E.db.addOnSkins.omenTitleTemplate ~= "Default" or not AS:IsAddonLODorEnabled("Omen") end
+ }
+ }
+ },
+ dbmGroup = {
+ order = 5,
+ type = "group",
+ name = "DBM",
+ get = function(info) return E.db.addOnSkins[info[#info]] end,
+ set = function(info, value)
+ E.db.addOnSkins[info[#info]] = value
+ if DBM.ReleaseRevision >= 20220412000000 then -- 9.2.14
+ DBT:ApplyStyle()
+ else
+ DBM.Bars:ApplyStyle()
+ end
+ DBM.BossHealth:UpdateSettings()
+ end,
+ disabled = function() return not AS:IsAddonLODorEnabled("DBM-Core") end,
+ args = {
+ dbmBarHeight = {
+ order = 1,
+ type = "range",
+ min = 6, max = 60, step = 1,
+ name = "Bar Height",
+ hidden = function() return DBM.ReleaseRevision > 7000 end
+ },
+ dbmFont = {
+ order = 2,
+ type = "select",
+ dialogControl = "LSM30_Font",
+ name = L["Font"],
+ values = AceGUIWidgetLSMlists.font,
+ hidden = function() return DBM.ReleaseRevision > 7000 end
+ },
+ dbmFontSize = {
+ order = 3,
+ type = "range",
+ min = 6, max = 22, step = 1,
+ name = L["Font Size"],
+ hidden = function() return DBM.ReleaseRevision > 7000 end
+ },
+ dbmFontOutline = {
+ order = 4,
+ type = "select",
+ name = L["Font Outline"],
+ values = {
+ ["NONE"] = L["None"],
+ ["OUTLINE"] = "OUTLINE",
+ ["MONOCHROMEOUTLINE"] = "MONOCROMEOUTLINE",
+ ["THICKOUTLINE"] = "THICKOUTLINE"
+ },
+ hidden = function() return DBM.ReleaseRevision > 7000 end
+ },
+ dbmIconSize = {
+ order = 5,
+ type = "range",
+ min = 0.1, max = 2, step = 0.1,
+ name = L["Icon Size"],
+ },
+ dbmTemplate = {
+ order = 6,
+ type = "select",
+ name = L["Template"],
+ values = backdropValues
+ },
+ DBMSkinHalf = {
+ order = 7,
+ type = "toggle",
+ name = L["DBM Half-bar Skin"]
+ }
+ }
+ },
+ waGroup = {
+ order = 6,
+ type = "group",
+ name = "WeakAuras",
+ get = function(info) return E.db.addOnSkins[info[#info]] end,
+ set = function(info, value)
+ E.db.addOnSkins[info[#info]] = value
+ E:StaticPopup_Show("PRIVATE_RL")
+ end,
+ disabled = function() return not AS:IsAddonLODorEnabled("WeakAuras") end,
+ hidden = WeakAuras and WeakAuras.IsCorrectVersion ~= nil or false,
+ args = {
+ weakAuraAuraBar = {
+ order = 1,
+ type = "toggle",
+ name = L["AuraBar Backdrop"]
+ },
+ weakAuraIconCooldown = {
+ order = 2,
+ type = "toggle",
+ name = L["Icon Cooldown"]
+ }
+ }
+ },
+ chatBarGroup = {
+ order = 7,
+ type = "group",
+ name = "ChatBar",
+ get = function(info) return E.db.addOnSkins[info[#info]] end,
+ set = function(info, value)
+ E.db.addOnSkins[info[#info]] = value
+ ChatBar_UpdateButtonOrientation()
+ ChatBar_UpdateButtons()
+ end,
+ disabled = function() return not AS:IsAddonLODorEnabled("ChatBar") end,
+ args = {
+ chatBarSize = {
+ order = 1,
+ type = "range",
+ min = 0, max = 60, step = 1,
+ name = "Button Size"
+ },
+ chatBarSpacing = {
+ order = 2,
+ type = "range",
+ min = 0, max = 60, step = 1,
+ name = "Button Spacing"
+ },
+ chatBarTextPoint = {
+ order = 3,
+ type = "select",
+ name = L["Text Position"],
+ values = positionValues
+ },
+ chatBarTextXOffset = {
+ order = 4,
+ type = "range",
+ min = -300, max = 300, step = 1,
+ name = L["Text xOffset"],
+ desc = L["Offset position for text."]
+ },
+ chatBarTextYOffset = {
+ order = 5,
+ type = "range",
+ min = -300, max = 300, step = 1,
+ name = L["Text yOffset"],
+ desc = L["Offset position for text."]
+ }
+ }
+ },
+ bwGroup = {
+ order = 8,
+ type = "group",
+ name = "BigWigs",
+ get = function(info) return E.db.addOnSkins[info[#info]] end,
+ set = function(info, value) E.db.addOnSkins[info[#info]] = value end,
+ disabled = function() return not AS:IsAddonLODorEnabled("BigWigs") end,
+ args = {
+ bigwigsBarHeight = {
+ order = 1,
+ type = "range",
+ min = 10, max = 40, step = 1,
+ name = "Bar Height"
+ },
+ bigwigsFontSize = {
+ order = 2,
+ type = "range",
+ min = 6, max = 22, step = 1,
+ name = L["Font Size"]
+ },
+ bigwigsFontOutline = {
+ order = 3,
+ type = "select",
+ name = L["Font Outline"],
+ values = {
+ ["NONE"] = L["None"],
+ ["OUTLINE"] = "OUTLINE",
+ ["MONOCHROMEOUTLINE"] = "MONOCROMEOUTLINE",
+ ["THICKOUTLINE"] = "THICKOUTLINE"
+ }
+ }
+ }
+ }
+ }
+ },
+ embed = {
+ order = 3,
+ type = "group",
+ name = "Embed Settings",
+ get = function(info) return E.db.addOnSkins.embed[info[#info]] end,
+ set = function(info, value)
+ E.db.addOnSkins.embed[info[#info]] = value
+ E:GetModule("EmbedSystem"):EmbedUpdate()
+ end,
+ args = {
+ desc = {
+ order = 1,
+ type = "description",
+ name = "Settings to control Embedded AddOns: Available Embeds: Omen | Skada | Recount ",
+ },
+ embedType = {
+ order = 2,
+ type = "select",
+ name = L["Embed Type"],
+ values = {
+ ["DISABLE"] = L["Disable"],
+ ["SINGLE"] = L["Single"],
+ ["DOUBLE"] = L["Double"]
+ },
+ },
+ leftWindow = {
+ order = 3,
+ type = "select",
+ name = L["Left Panel"],
+ values = {
+ ["Recount"] = "Recount",
+ ["Omen"] = "Omen",
+ ["Skada"] = "Skada",
+ ["Details"] = "Details"
+ },
+ disabled = function() return E.db.addOnSkins.embed.embedType == "DISABLE" end
+ },
+ rightWindow = {
+ order = 4,
+ type = "select",
+ name = L["Right Panel"],
+ values = {
+ ["Recount"] = "Recount",
+ ["Omen"] = "Omen",
+ ["Skada"] = "Skada",
+ ["Details"] = "Details"
+ },
+ disabled = function() return E.db.addOnSkins.embed.embedType ~= "DOUBLE" end
+ },
+ leftWindowWidth = {
+ order = 5,
+ type = "range",
+ min = 100, max = 300, step = 1,
+ name = L["Left Window Width"]
+ },
+ hideChat = {
+ order = 6,
+ type = "select",
+ name = "Hide Chat Frame",
+ values = E:GetModule("EmbedSystem"):GetChatWindowInfo(),
+ disabled = function() return E.db.addOnSkins.embed.embedType == "DISABLE" end
+ },
+ rightChatPanel = {
+ order = 7,
+ type = "toggle",
+ name = "Embed into Right Chat Panel"
+ },
+ belowTopTab = {
+ order = 8,
+ type = "toggle",
+ name = "Embed Below Top Tab"
+ }
+ }
+ }
+ }
+ }
+
+ local target = options.args.skins.args
+
+ for _, addonName in ipairs(addonList) do
+ AS:RegisterAddonOption(addonName, target)
+ end
+
+ if target.WeakAuras then
+ target.WeakAuras.hidden = WeakAuras and WeakAuras.IsCorrectVersion ~= nil or false
+ end
+
+ E.Options.args.addOnSkins = options
+end
+
+function AS:Initialize()
+ EP:RegisterPlugin(AddOnName, getOptions)
+end
+
+local function InitializeCallback()
+ AS:Initialize()
+end
+
+E:RegisterModule(AS:GetName(), InitializeCallback)
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Config/Config.lua b/ElvUI_EnhancedFriendsList/Config/Config.lua
new file mode 100644
index 0000000..e5e835b
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Config/Config.lua
@@ -0,0 +1,381 @@
+local E, L, V, P, G = unpack(ElvUI)
+local EFL = E:GetModule("EnhancedFriendsList")
+
+local function ColorizeSettingName(settingName)
+ return format("|cff1784d1%s|r", settingName)
+end
+
+function EFL:InsertOptions()
+ E.Options.args.enhanceFriendsList = {
+ order = 54,
+ type = "group",
+ childGroups = "tab",
+ name = ColorizeSettingName(L["Enhanced Friends List"]),
+ args = {
+ header = {
+ order = 1,
+ type = "header",
+ name = L["Enhanced Friends List"]
+ },
+ general = {
+ order = 2,
+ type = "group",
+ name = L["General"],
+ get = function(info) return E.db.enhanceFriendsList[ info[#info] ] end,
+ set = function(info, value) E.db.enhanceFriendsList[ info[#info] ] = value; EFL:Update(); FriendsList_Update(); FriendsFrameStatusDropDown_Update() end,
+ args = {
+ header = {
+ order = 0,
+ type = "header",
+ name = L["General"],
+ },
+ showBackground = {
+ order = 1,
+ type = "toggle",
+ name = L["Show Background"]
+ },
+ showStatusIcon = {
+ order = 2,
+ type = "toggle",
+ name = L["Show Status Icon"]
+ },
+ statusIcons = {
+ order = 3,
+ type = "select",
+ name = L["Status Icons Textures"],
+ values = {
+ ["Default"] = L["Default"],
+ ["Square"] = "Square",
+ ["D3"] = "Diablo 3"
+ }
+ },
+ nameFont = {
+ order = 4,
+ type = "group",
+ name = L["Name Font"],
+ guiInline = true,
+ get = function(info) return E.db.enhanceFriendsList[ info[#info] ] end,
+ set = function(info, value) E.db.enhanceFriendsList[ info[#info] ] = value; EFL:Update(); FriendsList_Update() end,
+ args = {
+ nameFont = {
+ order = 1,
+ type = "select", dialogControl = "LSM30_Font",
+ name = L["Font"],
+ values = AceGUIWidgetLSMlists.font
+ },
+ nameFontSize = {
+ order = 2,
+ type = "range",
+ name = FONT_SIZE,
+ min = 6, max = 22, step = 1
+ },
+ nameFontOutline = {
+ order = 3,
+ type = "select",
+ name = L["Font Outline"],
+ desc = L["Set the font outline."],
+ values = {
+ ["NONE"] = NONE,
+ ["OUTLINE"] = "OUTLINE",
+ ["MONOCHROMEOUTLINE"] = "MONOCROMEOUTLINE",
+ ["THICKOUTLINE"] = "THICKOUTLINE"
+ }
+ }
+ }
+ },
+ zoneFont = {
+ order = 5,
+ type = "group",
+ name = L["Zone Font"],
+ guiInline = true,
+ get = function(info) return E.db.enhanceFriendsList[ info[#info] ] end,
+ set = function(info, value) E.db.enhanceFriendsList[ info[#info] ] = value; EFL:Update(); FriendsList_Update() end,
+ args = {
+ zoneFont = {
+ order = 1,
+ type = "select", dialogControl = "LSM30_Font",
+ name = L["Font"],
+ values = AceGUIWidgetLSMlists.font
+ },
+ zoneFontSize = {
+ order = 2,
+ type = "range",
+ name = FONT_SIZE,
+ min = 6, max = 22, step = 1
+ },
+ zoneFontOutline = {
+ order = 3,
+ type = "select",
+ name = L["Font Outline"],
+ desc = L["Set the font outline."],
+ values = {
+ ["NONE"] = NONE,
+ ["OUTLINE"] = "OUTLINE",
+ ["MONOCHROMEOUTLINE"] = "MONOCROMEOUTLINE",
+ ["THICKOUTLINE"] = "THICKOUTLINE"
+ }
+ }
+ }
+ }
+ }
+ },
+ Online = {
+ order = 3,
+ type = "group",
+ name = L["Online Friends"],
+ get = function(info) return E.db.enhanceFriendsList.Online[ info[#info] ] end,
+ set = function(info, value) E.db.enhanceFriendsList.Online[ info[#info] ] = value; EFL:Update(); FriendsList_Update() end,
+ args = {
+ header = {
+ order = 0,
+ type = "header",
+ name = L["Online Friends"]
+ },
+ name = {
+ order = 1,
+ type = "group",
+ name = NAME,
+ guiInline = true,
+ args = {
+ enhancedName = {
+ order = 1,
+ type = "toggle",
+ name = L["Enhanced Name"]
+ },
+ colorizeNameOnly = {
+ order = 2,
+ type = "toggle",
+ name = L["Colorize Name Only"],
+ disabled = function() return not E.db.enhanceFriendsList.Online.enhancedName end
+ }
+ }
+ },
+ level = {
+ order = 2,
+ type = "group",
+ name = LEVEL,
+ guiInline = true,
+ args = {
+ level = {
+ order = 1,
+ type = "toggle",
+ name = L["Show"]
+ },
+ levelColor = {
+ order = 2,
+ type = "toggle",
+ name = L["Level Range Color"],
+ disabled = function() return not E.db.enhanceFriendsList.Online.level end
+ },
+ levelText = {
+ order = 3,
+ type = "toggle",
+ name = L["Level Text"],
+ disabled = function() return not E.db.enhanceFriendsList.Online.level end
+ },
+ shortLevel = {
+ order = 4,
+ type = "toggle",
+ name = L["Short Level"],
+ disabled = function() return not E.db.enhanceFriendsList.Online.level or not E.db.enhanceFriendsList.Online.levelText end
+ }
+ }
+ },
+ class = {
+ order = 3,
+ type = "group",
+ name = CLASS,
+ guiInline = true,
+ args = {
+ classText = {
+ order = 1,
+ type = "toggle",
+ name = L["Class Text"]
+ },
+ classIcon = {
+ order = 2,
+ type = "toggle",
+ name = L["Class Icon"]
+ },
+ classIconStatusColor = {
+ order = 3,
+ type = "toggle",
+ name = L["Class Icon Status Color"],
+ disabled = function() return not E.db.enhanceFriendsList.Online.classIcon end
+ }
+ }
+ },
+ zone = {
+ order = 4,
+ type = "group",
+ name = ZONE,
+ guiInline = true,
+ args = {
+ zoneText = {
+ order = 1,
+ type = "toggle",
+ name = L["Zone Text"]
+ },
+ spacer = {
+ order = 2,
+ type = "description",
+ name = ""
+ },
+ enhancedZone = {
+ order = 3,
+ type = "toggle",
+ name = L["Enhanced Zone"],
+ disabled = function() return not E.db.enhanceFriendsList.Online.zoneText end
+ },
+ enhancedZoneColor = {
+ order = 4,
+ type = "color",
+ name = L["Enhanced Zone Color"],
+ get = function(info)
+ local t = E.db.enhanceFriendsList.Online.enhancedZoneColor
+ local d = P.enhanceFriendsList.Online.enhancedZoneColor
+ return t.r, t.g, t.b, t.a, d.r, d.g, d.b
+ end,
+ set = function(info, r, g, b)
+ local t = E.db.enhanceFriendsList.Online.enhancedZoneColor
+ t.r, t.g, t.b = r, g, b
+ FriendsList_Update()
+ end,
+ disabled = function() return not E.db.enhanceFriendsList.Online.zoneText or not E.db.enhanceFriendsList.Online.enhancedZone end
+ },
+ spacer2 = {
+ order = 5,
+ type = "description",
+ name = "",
+ },
+ sameZone = {
+ order = 6,
+ type = "toggle",
+ name = L["Same Zone"],
+ desc = L["Friends that are in the same area as you, have their zone info colorized green."],
+ disabled = function() return not E.db.enhanceFriendsList.Online.zoneText end
+ },
+ sameZoneColor = {
+ order = 7,
+ type = "color",
+ name = L["Same Zone Color"],
+ get = function(info)
+ local t = E.db.enhanceFriendsList.Online.sameZoneColor
+ local d = P.enhanceFriendsList.Online.sameZoneColor
+ return t.r, t.g, t.b, t.a, d.r, d.g, d.b
+ end,
+ set = function(info, r, g, b)
+ local t = E.db.enhanceFriendsList.Online.sameZoneColor
+ t.r, t.g, t.b = r, g, b
+ FriendsList_Update()
+ end,
+ disabled = function() return not E.db.enhanceFriendsList.Online.zoneText or not E.db.enhanceFriendsList.Online.sameZone end
+ }
+ }
+ }
+ }
+ },
+ Offline = {
+ order = 4,
+ type = "group",
+ name = L["Offline Friends"],
+ get = function(info) return E.db.enhanceFriendsList.Offline[ info[#info] ] end,
+ set = function(info, value) E.db.enhanceFriendsList.Offline[ info[#info] ] = value; EFL:Update(); FriendsList_Update() end,
+ args = {
+ header = {
+ order = 0,
+ type = "header",
+ name = L["Offline Friends"]
+ },
+ name = {
+ order = 1,
+ type = "group",
+ name = NAME,
+ guiInline = true,
+ args = {
+ enhancedName = {
+ order = 1,
+ type = "toggle",
+ name = L["Enhanced Name"]
+ },
+ colorizeNameOnly = {
+ order = 2,
+ type = "toggle",
+ name = L["Colorize Name Only"],
+ disabled = function() return not E.db.enhanceFriendsList.Offline.enhancedName end
+ }
+ }
+ },
+ level = {
+ order = 2,
+ type = "group",
+ name = LEVEL,
+ guiInline = true,
+ args = {
+ level = {
+ order = 1,
+ type = "toggle",
+ name = L["Show"]
+ },
+ levelColor = {
+ order = 2,
+ type = "toggle",
+ name = L["Level Range Color"],
+ disabled = function() return not E.db.enhanceFriendsList.Offline.level end
+ },
+ levelText = {
+ order = 3,
+ type = "toggle",
+ name = L["Level Text"],
+ desc = L["Hides the 'Level' or 'L' text."],
+ disabled = function() return not E.db.enhanceFriendsList.Offline.level end
+ },
+ shortLevel = {
+ order = 4,
+ type = "toggle",
+ name = L["Short Level"],
+ disabled = function() return not E.db.enhanceFriendsList.Offline.level or not E.db.enhanceFriendsList.Offline.levelText end
+ }
+ }
+ },
+ class = {
+ order = 3,
+ type = "group",
+ name = CLASS,
+ guiInline = true,
+ args = {
+ classText = {
+ order = 1,
+ type = "toggle",
+ name = L["Class Text"]
+ },
+ classIcon = {
+ order = 2,
+ type = "toggle",
+ name = L["Class Icon"]
+ }
+ }
+ },
+ zone = {
+ order = 4,
+ type = "group",
+ name = ZONE,
+ guiInline = true,
+ args = {
+ zoneText = {
+ order = 1,
+ type = "toggle",
+ name = L["Zone Text"]
+ },
+ lastSeen = {
+ order = 2,
+ type = "toggle",
+ name = L["Last Seen"]
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+end
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Config/Load_Config.xml b/ElvUI_EnhancedFriendsList/Config/Load_Config.xml
new file mode 100644
index 0000000..10b3b74
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Config/Load_Config.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/ElvUI_EnhancedFriendsList.lua b/ElvUI_EnhancedFriendsList/ElvUI_EnhancedFriendsList.lua
new file mode 100644
index 0000000..9e9642c
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/ElvUI_EnhancedFriendsList.lua
@@ -0,0 +1,404 @@
+local E, L, V, P, G = unpack(ElvUI)
+local EFL = E:NewModule("EnhancedFriendsList", "AceHook-3.0")
+local EP = LibStub("LibElvUIPlugin-1.0")
+local LSM = LibStub("LibSharedMedia-3.0", true)
+local addonName = ...
+
+local unpack, pairs, ipairs = unpack, pairs, ipairs
+local format = format
+
+local GetFriendInfo = GetFriendInfo
+local GetQuestDifficultyColor = GetQuestDifficultyColor
+local CLASS_ICON_TCOORDS = CLASS_ICON_TCOORDS
+local FRIENDS_BUTTON_TYPE_WOW = FRIENDS_BUTTON_TYPE_WOW
+local LOCALIZED_CLASS_NAMES_FEMALE = LOCALIZED_CLASS_NAMES_FEMALE
+local LOCALIZED_CLASS_NAMES_MALE = LOCALIZED_CLASS_NAMES_MALE
+local RAID_CLASS_COLORS = RAID_CLASS_COLORS
+
+local StatusIcons = {
+ Default = {
+ Online = FRIENDS_TEXTURE_ONLINE,
+ Offline = FRIENDS_TEXTURE_OFFLINE,
+ DND = FRIENDS_TEXTURE_DND,
+ AFK = FRIENDS_TEXTURE_AFK
+ },
+ Square = {
+ Online = "Interface\\AddOns\\ElvUI_EnhancedFriendsList\\Media\\Textures\\Square\\Online",
+ Offline = "Interface\\AddOns\\ElvUI_EnhancedFriendsList\\Media\\Textures\\Square\\Offline",
+ DND = "Interface\\AddOns\\ElvUI_EnhancedFriendsList\\Media\\Textures\\Square\\DND",
+ AFK = "Interface\\AddOns\\ElvUI_EnhancedFriendsList\\Media\\Textures\\Square\\AFK"
+ },
+ D3 = {
+ Online = "Interface\\AddOns\\ElvUI_EnhancedFriendsList\\Media\\Textures\\D3\\Online",
+ Offline = "Interface\\AddOns\\ElvUI_EnhancedFriendsList\\Media\\Textures\\D3\\Offline",
+ DND = "Interface\\AddOns\\ElvUI_EnhancedFriendsList\\Media\\Textures\\D3\\DND",
+ AFK = "Interface\\AddOns\\ElvUI_EnhancedFriendsList\\Media\\Textures\\D3\\AFK"
+ }
+}
+
+local function GetLevelDiffColorHex(level, offline)
+ if level ~= 0 then
+ local color = GetQuestDifficultyColor(level)
+ return offline and format("|cFF%02x%02x%02x", color.r*160, color.g*160, color.b*160) or format("|cFF%02x%02x%02x", color.r*255, color.g*255, color.b*255)
+ else
+ return offline and E:RGBToHex(0.49, 0.52, 0.54) or "|cFFFFFFFF"
+ end
+end
+
+local localizedTable = {}
+for k, v in pairs(LOCALIZED_CLASS_NAMES_MALE) do
+ localizedTable[v] = k
+end
+
+for k, v in pairs(LOCALIZED_CLASS_NAMES_FEMALE) do
+ localizedTable[v] = k
+end
+
+local function GetClassColorHex(class, offline)
+ class = localizedTable[class]
+
+ local color = CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[class] or RAID_CLASS_COLORS[class]
+ if color then
+ return offline and format("|cff%02x%02x%02x", color.r*160, color.g*160, color.b*160) or format("|cff%02x%02x%02x", color.r*255, color.g*255, color.b*255)
+ else
+ return offline and E:RGBToHex(0.49, 0.52, 0.54) or "|cFFFFFFFF"
+ end
+end
+
+local function HexToRGB(hex)
+ if not hex then return nil end
+
+ local rhex, ghex, bhex = string.sub(hex, 5, 6), string.sub(hex, 7, 8), string.sub(hex, 9, 10)
+ return {r = tonumber(rhex, 16)/225, g = tonumber(ghex, 16)/225, b = tonumber(bhex, 16)/225}
+end
+
+function EFL:Update()
+ for i = 1, #FriendsFrameFriendsScrollFrame.buttons do
+ local button = FriendsFrameFriendsScrollFrame.buttons[i]
+
+ self:Configure_Background(button)
+ self:Configure_Status(button)
+ self:Configure_IconFrame(button)
+
+ button.name:SetFont(LSM:Fetch("font", E.db.enhanceFriendsList.nameFont), E.db.enhanceFriendsList.nameFontSize, E.db.enhanceFriendsList.nameFontOutline)
+ button.info:SetFont(LSM:Fetch("font", E.db.enhanceFriendsList.zoneFont), E.db.enhanceFriendsList.zoneFontSize, E.db.enhanceFriendsList.zoneFontOutline)
+ end
+end
+
+-- Status
+function EFL:Update_Status(button)
+ if not E.db.enhanceFriendsList.showStatusIcon then return end
+
+ if button.TYPE == "Online" then
+ button.status:SetTexture(StatusIcons[E.db.enhanceFriendsList.statusIcons][(button.statusType == CHAT_FLAG_DND and "DND" or button.statusType == CHAT_FLAG_AFK and "AFK" or "Online")])
+ else
+ button.status:SetTexture(StatusIcons[E.db.enhanceFriendsList.statusIcons].Offline)
+ end
+end
+
+function EFL:Configure_Status(button)
+ if E.db.enhanceFriendsList.showStatusIcon then
+ button.status:Show()
+ else
+ button.status:Hide()
+ end
+end
+
+-- Name
+function EFL:Update_Name(button)
+ local isOffline = button.TYPE == "Offline" or false
+
+ local enhancedName = (self.db[button.TYPE].enhancedName and GetClassColorHex(button.class, isOffline)..button.nameText.."|r" or button.nameText)
+ local enhancedLevel = self.db[button.TYPE].level and button.levelText and format(self.db[button.TYPE].levelText and (self.db[button.TYPE].shortLevel and L["SHORT_LEVEL_TEMPLATE"] or L["LEVEL_TEMPLATE"]) or "%s", self.db[button.TYPE].levelColor and GetLevelDiffColorHex(button.levelText, isOffline)..button.levelText.."|r" or button.levelText).." " or ""
+ local enhancedClass = self.db[button.TYPE].classText and button.class or ""
+ button.name:SetText(enhancedName..((enhancedLevel ~= "" or enhancedClass ~= "") and (self.db[button.TYPE].enhancedName and " - " or ", ") or "")..enhancedLevel..enhancedClass)
+
+ local nameColor = self.db[button.TYPE].enhancedName and (self.db[button.TYPE].colorizeNameOnly and (isOffline and FRIENDS_GRAY_COLOR or HIGHLIGHT_FONT_COLOR) or HexToRGB(GetClassColorHex(button.class, isOffline))) or (isOffline and FRIENDS_GRAY_COLOR or FRIENDS_WOW_NAME_COLOR)
+ button.name:SetTextColor(nameColor.r, nameColor.g, nameColor.b)
+
+ local infoText
+ if isOffline then
+ if button.lastSeen then
+ infoText = (self.db[button.TYPE].zoneText and button.area and button.area..(self.db[button.TYPE].lastSeen and " - " or "") or "")..(self.db[button.TYPE].lastSeen and L["Last seen"].." "..FriendsFrame_GetLastOnline(button.lastSeen) or "")
+ else
+ infoText = self.db[button.TYPE].zoneText and button.area or ""
+ end
+
+ button.info:SetTextColor(0.49, 0.52, 0.54)
+ else
+ infoText = self.db[button.TYPE].zoneText and button.area or ""
+
+ local playerZone = GetRealZoneText()
+ if self.db[button.TYPE].enhancedZone then
+ if self.db[button.TYPE].sameZone then
+ if infoText == playerZone then
+ button.info:SetTextColor(self.db[button.TYPE].sameZoneColor.r, self.db[button.TYPE].sameZoneColor.g, self.db[button.TYPE].sameZoneColor.b)
+ else
+ button.info:SetTextColor(self.db[button.TYPE].enhancedZoneColor.r, self.db[button.TYPE].enhancedZoneColor.g, self.db[button.TYPE].enhancedZoneColor.b)
+ end
+ else
+ button.info:SetTextColor(self.db[button.TYPE].enhancedZoneColor.r, self.db[button.TYPE].enhancedZoneColor.g, self.db[button.TYPE].enhancedZoneColor.b)
+ end
+ else
+ if self.db[button.TYPE].sameZone then
+ if infoText == playerZone then
+ button.info:SetTextColor(self.db[button.TYPE].sameZoneColor.r, self.db[button.TYPE].sameZoneColor.g, self.db[button.TYPE].sameZoneColor.b)
+ else
+ button.info:SetTextColor(0.49, 0.52, 0.54)
+ end
+ else
+ button.info:SetTextColor(0.49, 0.52, 0.54)
+ end
+ end
+ end
+ button.info:SetText(infoText)
+
+ button.name:ClearAllPoints()
+ if button.iconFrame:IsShown() then
+ button.name:Point("LEFT", button.iconFrame, "RIGHT", 3, infoText ~= "" and 7 or 0)
+ else
+ if E.db.enhanceFriendsList.showStatusIcon then
+ button.name:Point("TOPLEFT", 22, infoText ~= "" and -3 or -10)
+ else
+ button.name:Point("TOPLEFT", 3, infoText ~= "" and -3 or -10)
+ end
+ end
+end
+
+-- IconFrame
+function EFL:Update_IconFrame(button)
+ if E.db.enhanceFriendsList[button.TYPE].classIcon then
+ local classFileName = localizedTable[button.class]
+ if classFileName then
+ button.iconFrame:Show()
+
+ button.iconFrame.texture:SetTexCoord(unpack(CLASS_ICON_TCOORDS[classFileName]))
+ button.iconFrame:SetAlpha(button.TYPE == "Online" and 1 or 0.6)
+
+ if E.db.enhanceFriendsList.Online.classIconStatusColor then
+ if button.TYPE == "Online" then
+ if button.statusType == "" then
+ if E.PixelMode then
+ button.iconFrame:SetBackdropBorderColor(0, 0, 0, 1)
+ else
+ button.iconFrame:SetBackdropBorderColor(0, 0, 0, 0)
+ end
+ elseif button.statusType == CHAT_FLAG_AFK then
+ button.iconFrame:SetBackdropBorderColor(1, 1, 0)
+ elseif button.statusType == CHAT_FLAG_DND then
+ button.iconFrame:SetBackdropBorderColor(1, 0, 0)
+ end
+ else
+ if E.PixelMode then
+ button.iconFrame:SetBackdropBorderColor(0, 0, 0, 1)
+ else
+ button.iconFrame:SetBackdropBorderColor(0, 0, 0, 0)
+ end
+ end
+ else
+ button.iconFrame:SetBackdropBorderColor(unpack(E["media"].bordercolor))
+ end
+ else
+ button.iconFrame:Hide()
+ end
+ elseif button.iconFrame:IsShown() then
+ button.iconFrame:Hide()
+ end
+end
+
+function EFL:Configure_IconFrame(button)
+ button.iconFrame:ClearAllPoints()
+ if E.db.enhanceFriendsList.showStatusIcon then
+ button.iconFrame:Point("LEFT", 22, 0)
+ else
+ button.iconFrame:Point("LEFT", 3, 0)
+ end
+end
+
+function EFL:Construct_IconFrame(button)
+ button.iconFrame = CreateFrame("Frame", "$parentIconFrame", button)
+ button.iconFrame:Size(26)
+ button.iconFrame:SetTemplate("Default")
+
+ button.iconFrame.texture = button.iconFrame:CreateTexture()
+ button.iconFrame.texture:SetAllPoints()
+ button.iconFrame.texture:SetTexture("Interface\\WorldStateFrame\\Icons-Classes")
+ button.iconFrame:Hide()
+end
+
+-- Background
+function EFL:Update_Background(button)
+ if not E.db.enhanceFriendsList.showBackground then return end
+
+ if button.TYPE == "Online" then
+ button.backgroundLeft:SetGradientAlpha("Horizontal", 1,0.824,0,0.05, 1,0.824,0,0)
+ button.backgroundRight:SetGradientAlpha("Horizontal", 1,0.824,0,0, 1,0.824,0,0.05)
+ else
+ button.backgroundLeft:SetGradientAlpha("Horizontal", 0.588,0.588,0.588,0.05, 0.588,0.588,0.588,0)
+ button.backgroundRight:SetGradientAlpha("Horizontal", 0.588,0.588,0.588,0, 0.588,0.588,0.588,0.05)
+ end
+end
+
+function EFL:Configure_Background(button)
+ if E.db.enhanceFriendsList.showBackground then
+ button.backgroundLeft:Show()
+ button.backgroundRight:Show()
+ else
+ button.backgroundLeft:Hide()
+ button.backgroundRight:Hide()
+ end
+end
+
+function EFL:Construct_Background(button)
+ button.backgroundLeft = button:CreateTexture(nil, "BACKGROUND")
+ button.backgroundLeft:SetWidth(button:GetWidth() / 2)
+ button.backgroundLeft:SetHeight(32)
+ button.backgroundLeft:SetPoint("LEFT", button, "CENTER")
+ button.backgroundLeft:SetTexture(E.media.blankTex)
+ button.backgroundLeft:SetGradientAlpha("Horizontal", 1,0.824,0.0,0.05, 1,0.824,0.0,0)
+
+ button.backgroundRight = button:CreateTexture(nil, "BACKGROUND")
+ button.backgroundRight:SetWidth(button:GetWidth() / 2)
+ button.backgroundRight:SetHeight(32)
+ button.backgroundRight:SetPoint("RIGHT", button, "CENTER")
+ button.backgroundRight:SetTexture(E.media.blankTex)
+ button.backgroundRight:SetGradientAlpha("Horizontal", 1,0.824,0.0,0, 1,0.824,0.0,0.05)
+end
+
+-- Highlight
+function EFL:Update_Highlight(button)
+ if button.TYPE == "Online" then
+ if button.statusType == "" then
+ button.highlightLeft:SetGradientAlpha("Horizontal", 0.243,0.570,1,0.35, 0.243,0.570,1,0)
+ button.highlightRight:SetGradientAlpha("Horizontal", 0.243,0.570,1,0, 0.243,0.570,1,0.35)
+ elseif button.statusType == CHAT_FLAG_AFK then
+ button.highlightLeft:SetGradientAlpha("Horizontal", 1,1,0,0.35, 1,1,0,0)
+ button.highlightRight:SetGradientAlpha("Horizontal", 1,1,0,0, 1,1,0,0.35)
+ elseif button.statusType == CHAT_FLAG_DND then
+ button.highlightLeft:SetGradientAlpha("Horizontal", 1,0,0,0.35, 1,0,0,0)
+ button.highlightRight:SetGradientAlpha("Horizontal", 1,0,0,0, 1,0,0,0.35)
+ end
+ else
+ button.highlightLeft:SetGradientAlpha("Horizontal", 0.486,0.518,0.541,0.35, 0.486,0.518,0.541,0)
+ button.highlightRight:SetGradientAlpha("Horizontal", 0.486,0.518,0.541,0, 0.486,0.518,0.541,0.35)
+ end
+end
+
+function EFL:Construct_Highlight(button)
+ button.highlightLeft = button:CreateTexture(nil, "HIGHLIGHT")
+ button.highlightLeft:SetWidth(button:GetWidth() / 2)
+ button.highlightLeft:SetHeight(32)
+ button.highlightLeft:SetPoint("LEFT", button, "CENTER")
+ button.highlightLeft:SetTexture(E.media.blankTex)
+ button.highlightLeft:SetGradientAlpha("Horizontal", 0.243,0.570,1,0.35, 0.243,0.570,1,0)
+
+ button.highlightRight = button:CreateTexture(nil, "HIGHLIGHT")
+ button.highlightRight:SetWidth(button:GetWidth() / 2)
+ button.highlightRight:SetHeight(32)
+ button.highlightRight:SetPoint("RIGHT", button, "CENTER")
+ button.highlightRight:SetTexture(E.media.blankTex)
+ button.highlightRight:SetGradientAlpha("Horizontal", 0.243,0.570,1,0, 0.243,0.570,1,0.35)
+end
+
+function EFL:GetLocalFriendInfo(name)
+ local info = EnhancedFriendsListDB[E.myrealm][name]
+ if info then
+ return info[1], info[2], info[3], info[4]
+ else
+ return nil, nil, nil, nil
+ end
+end
+
+function EFL:EnhanceFriends_SetButton(button)
+ if button.buttonType == FRIENDS_BUTTON_TYPE_WOW then
+ local name, level, class, area, connected, status = GetFriendInfo(button.id)
+ if not name then return end
+
+ button.nameText = name
+ button.TYPE = connected and "Online" or "Offline"
+ button.statusType = status
+
+ if connected then
+ if not EnhancedFriendsListDB[E.myrealm][name] then
+ EnhancedFriendsListDB[E.myrealm][name] = {}
+ end
+
+ EnhancedFriendsListDB[E.myrealm][name] = {level, class, area, format("%i", time())}
+ else
+ local lastSeen, lastArea
+ level, class, lastArea, lastSeen = self:GetLocalFriendInfo(name)
+ area = lastArea or area
+ button.lastSeen = lastSeen
+ end
+
+ button.levelText = level
+ button.class = class
+ button.area = area
+
+ self:Update_Background(button)
+ self:Update_Status(button)
+ self:Update_IconFrame(button)
+ self:Update_Name(button)
+ self:Update_Highlight(button)
+ end
+end
+
+function EFL:FriendsFrameStatusDropDown_Update()
+ local status = (StatusIcons[E.db.enhanceFriendsList.statusIcons][(UnitIsDND("Player") and "DND" or UnitIsAFK("Player") and "AFK" or "Online")])
+ FriendsFrameStatusDropDownStatus:SetTexture(status)
+end
+
+function EFL:FriendListUpdate()
+ self.db = E.db.enhanceFriendsList
+
+ if ElvCharacterDB.EnhancedFriendsList_Data then
+ for i = 1, GetNumFriends() do
+ local name, level, class, area, connected, status = GetFriendInfo(i)
+ if ElvCharacterDB.EnhancedFriendsList_Data[name] then
+ local data = ElvCharacterDB.EnhancedFriendsList_Data[name]
+ if not EnhancedFriendsListDB[E.myrealm][name] then
+ EnhancedFriendsListDB[E.myrealm][name] = {}
+ end
+ EnhancedFriendsListDB[E.myrealm][name] = {data.level, data.class, data.area, data.lastSeen}
+ end
+ end
+ ElvCharacterDB.EnhancedFriendsList_Data = nil
+ end
+
+ for i = 1, #FriendsFrameFriendsScrollFrame.buttons do
+ local button = FriendsFrameFriendsScrollFrame.buttons[i]
+
+ self:Construct_IconFrame(button)
+
+ self:Construct_Background(button)
+ button.background:Hide()
+
+ self:Construct_Highlight(button)
+ button.highlight:SetVertexColor(0, 0, 0, 0)
+ end
+
+ self:Update()
+
+ self:SecureHook("FriendsFrameStatusDropDown_Update")
+ self:SecureHook(FriendsFrameFriendsScrollFrame, "buttonFunc", "EnhanceFriends_SetButton")
+end
+
+function EFL:Initialize()
+ EP:RegisterPlugin(addonName, self.InsertOptions)
+
+ if not EnhancedFriendsListDB then
+ EnhancedFriendsListDB = {}
+ end
+
+ if not EnhancedFriendsListDB[E.myrealm] then
+ EnhancedFriendsListDB[E.myrealm] = {}
+ end
+
+ self:FriendListUpdate()
+end
+
+local function InitializeCallback()
+ EFL:Initialize()
+end
+
+E:RegisterModule(EFL:GetName(), InitializeCallback)
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/ElvUI_EnhancedFriendsList.toc b/ElvUI_EnhancedFriendsList/ElvUI_EnhancedFriendsList.toc
new file mode 100644
index 0000000..e799038
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/ElvUI_EnhancedFriendsList.toc
@@ -0,0 +1,11 @@
+## Interface: 30300
+## Author: Apollyon, Bunny
+## Version: 1.09
+## Title: |cff1784d1E|r|cffe5e3e3lvUI|r |cff1784d1E|r|cffe5e3e3nhanced|r |cff1784d1F|r|cffe5e3e3riends|r |cff1784d1L|r|cffe5e3e3ist|r
+## SavedVariables: EnhancedFriendsListDB
+## RequiredDeps: ElvUI
+
+Locales\Load_Locales.xml
+Settings\Load_Settings.xml
+ElvUI_EnhancedFriendsList.lua
+Config\Load_Config.xml
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Locales/Chinese.lua b/ElvUI_EnhancedFriendsList/Locales/Chinese.lua
new file mode 100644
index 0000000..6ccd70a
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Locales/Chinese.lua
@@ -0,0 +1,32 @@
+-- Chinese localization file for zhCN.
+local AceLocale = LibStub:GetLibrary("AceLocale-3.0-ElvUI")
+local L = AceLocale:NewLocale("ElvUI", "zhCN")
+if not L then return end
+
+L["LEVEL_TEMPLATE"] = "Level %s";
+L["SHORT_LEVEL_TEMPLATE"] = "L %s";
+
+L["Class Icon"] = true;
+L["Class Icon Status Color"] = true;
+L["Class Text"] = true;
+L["Colorize Name Only"] = true;
+L["Enhanced Friends List"] = true;
+L["Enhanced Name"] = true;
+L["Enhanced Zone Color"] = true;
+L["Enhanced Zone"] = true;
+L["Friends that are in the same area as you, have their zone info colorized green."] = true;
+L["Last Seen"] = true;
+L["Last seen"] = true;
+L["Level Range Color"] = true;
+L["Level Text"] = true;
+L["Level"] = true;
+L["Offline Friends"] = true;
+L["Online Friends"] = true;
+L["Same Zone Color"] = true;
+L["Same Zone"] = true;
+L["Short Level"] = true;
+L["Show Background"] = true;
+L["Show Status Icon"] = true;
+L["Status Icons Textures"] = true;
+L["Zone Font"] = true;
+L["Zone Text"] = true;
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Locales/English.lua b/ElvUI_EnhancedFriendsList/Locales/English.lua
new file mode 100644
index 0000000..93b7f63
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Locales/English.lua
@@ -0,0 +1,32 @@
+-- English localization file for enUS and enGB.
+local AceLocale = LibStub:GetLibrary("AceLocale-3.0-ElvUI");
+local L = AceLocale:NewLocale("ElvUI", "enUS", true, true);
+if not L then return; end
+
+L["LEVEL_TEMPLATE"] = "Level %s";
+L["SHORT_LEVEL_TEMPLATE"] = "L %s";
+
+L["Class Icon"] = true;
+L["Class Icon Status Color"] = true;
+L["Class Text"] = true;
+L["Colorize Name Only"] = true;
+L["Enhanced Friends List"] = true;
+L["Enhanced Name"] = true;
+L["Enhanced Zone Color"] = true;
+L["Enhanced Zone"] = true;
+L["Friends that are in the same area as you, have their zone info colorized green."] = true;
+L["Last Seen"] = true;
+L["Last seen"] = true;
+L["Level Range Color"] = true;
+L["Level Text"] = true;
+L["Level"] = true;
+L["Offline Friends"] = true;
+L["Online Friends"] = true;
+L["Same Zone Color"] = true;
+L["Same Zone"] = true;
+L["Short Level"] = true;
+L["Show Background"] = true;
+L["Show Status Icon"] = true;
+L["Status Icons Textures"] = true;
+L["Zone Font"] = true;
+L["Zone Text"] = true;
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Locales/French.lua b/ElvUI_EnhancedFriendsList/Locales/French.lua
new file mode 100644
index 0000000..3e079e5
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Locales/French.lua
@@ -0,0 +1,32 @@
+-- French localization file for frFR.
+local AceLocale = LibStub:GetLibrary("AceLocale-3.0-ElvUI");
+local L = AceLocale:NewLocale("ElvUI", "frFR");
+if not L then return; end
+
+L["LEVEL_TEMPLATE"] = "Level %s";
+L["SHORT_LEVEL_TEMPLATE"] = "L %s";
+
+L["Class Icon"] = true;
+L["Class Icon Status Color"] = true;
+L["Class Text"] = true;
+L["Colorize Name Only"] = true;
+L["Enhanced Friends List"] = true;
+L["Enhanced Name"] = true;
+L["Enhanced Zone Color"] = true;
+L["Enhanced Zone"] = true;
+L["Friends that are in the same area as you, have their zone info colorized green."] = true;
+L["Last Seen"] = true;
+L["Last seen"] = true;
+L["Level Range Color"] = true;
+L["Level Text"] = true;
+L["Level"] = true;
+L["Offline Friends"] = true;
+L["Online Friends"] = true;
+L["Same Zone Color"] = true;
+L["Same Zone"] = true;
+L["Short Level"] = true;
+L["Show Background"] = true;
+L["Show Status Icon"] = true;
+L["Status Icons Textures"] = true;
+L["Zone Font"] = true;
+L["Zone Text"] = true;
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Locales/German.lua b/ElvUI_EnhancedFriendsList/Locales/German.lua
new file mode 100644
index 0000000..15c3ea2
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Locales/German.lua
@@ -0,0 +1,32 @@
+-- German localization file for deDE.
+local AceLocale = LibStub:GetLibrary("AceLocale-3.0-ElvUI")
+local L = AceLocale:NewLocale("ElvUI", "deDE")
+if not L then return end
+
+L["LEVEL_TEMPLATE"] = "Level %s";
+L["SHORT_LEVEL_TEMPLATE"] = "L %s";
+
+L["Class Icon"] = true;
+L["Class Icon Status Color"] = true;
+L["Class Text"] = true;
+L["Colorize Name Only"] = true;
+L["Enhanced Friends List"] = true;
+L["Enhanced Name"] = true;
+L["Enhanced Zone Color"] = true;
+L["Enhanced Zone"] = true;
+L["Friends that are in the same area as you, have their zone info colorized green."] = true;
+L["Last Seen"] = true;
+L["Last seen"] = true;
+L["Level Range Color"] = true;
+L["Level Text"] = true;
+L["Level"] = true;
+L["Offline Friends"] = true;
+L["Online Friends"] = true;
+L["Same Zone Color"] = true;
+L["Same Zone"] = true;
+L["Short Level"] = true;
+L["Show Background"] = true;
+L["Show Status Icon"] = true;
+L["Status Icons Textures"] = true;
+L["Zone Font"] = true;
+L["Zone Text"] = true;
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Locales/Korean.lua b/ElvUI_EnhancedFriendsList/Locales/Korean.lua
new file mode 100644
index 0000000..6bd9b2e
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Locales/Korean.lua
@@ -0,0 +1,32 @@
+-- Korean localization file for koKR.
+local AceLocale = LibStub:GetLibrary("AceLocale-3.0-ElvUI")
+local L = AceLocale:NewLocale("ElvUI", "koKR")
+if not L then return end
+
+L["LEVEL_TEMPLATE"] = "Level %s";
+L["SHORT_LEVEL_TEMPLATE"] = "L %s";
+
+L["Class Icon"] = true;
+L["Class Icon Status Color"] = true;
+L["Class Text"] = true;
+L["Colorize Name Only"] = true;
+L["Enhanced Friends List"] = true;
+L["Enhanced Name"] = true;
+L["Enhanced Zone Color"] = true;
+L["Enhanced Zone"] = true;
+L["Friends that are in the same area as you, have their zone info colorized green."] = true;
+L["Last Seen"] = true;
+L["Last seen"] = true;
+L["Level Range Color"] = true;
+L["Level Text"] = true;
+L["Level"] = true;
+L["Offline Friends"] = true;
+L["Online Friends"] = true;
+L["Same Zone Color"] = true;
+L["Same Zone"] = true;
+L["Short Level"] = true;
+L["Show Background"] = true;
+L["Show Status Icon"] = true;
+L["Status Icons Textures"] = true;
+L["Zone Font"] = true;
+L["Zone Text"] = true;
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Locales/Load_Locales.xml b/ElvUI_EnhancedFriendsList/Locales/Load_Locales.xml
new file mode 100644
index 0000000..998419a
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Locales/Load_Locales.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Locales/Portuguese.lua b/ElvUI_EnhancedFriendsList/Locales/Portuguese.lua
new file mode 100644
index 0000000..9265d8f
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Locales/Portuguese.lua
@@ -0,0 +1,32 @@
+-- Portuguese localization file for ptBR.
+local AceLocale = LibStub:GetLibrary("AceLocale-3.0-ElvUI")
+local L = AceLocale:NewLocale("ElvUI", "ptBR")
+if not L then return end
+
+L["LEVEL_TEMPLATE"] = "Level %s";
+L["SHORT_LEVEL_TEMPLATE"] = "L %s";
+
+L["Class Icon"] = true;
+L["Class Icon Status Color"] = true;
+L["Class Text"] = true;
+L["Colorize Name Only"] = true;
+L["Enhanced Friends List"] = true;
+L["Enhanced Name"] = true;
+L["Enhanced Zone Color"] = true;
+L["Enhanced Zone"] = true;
+L["Friends that are in the same area as you, have their zone info colorized green."] = true;
+L["Last Seen"] = true;
+L["Last seen"] = true;
+L["Level Range Color"] = true;
+L["Level Text"] = true;
+L["Level"] = true;
+L["Offline Friends"] = true;
+L["Online Friends"] = true;
+L["Same Zone Color"] = true;
+L["Same Zone"] = true;
+L["Short Level"] = true;
+L["Show Background"] = true;
+L["Show Status Icon"] = true;
+L["Status Icons Textures"] = true;
+L["Zone Font"] = true;
+L["Zone Text"] = true;
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Locales/Russian.lua b/ElvUI_EnhancedFriendsList/Locales/Russian.lua
new file mode 100644
index 0000000..d74ae2b
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Locales/Russian.lua
@@ -0,0 +1,32 @@
+-- Russian localization file for ruRU.
+local AceLocale = LibStub:GetLibrary("AceLocale-3.0-ElvUI")
+local L = AceLocale:NewLocale("ElvUI", "ruRU")
+if not L then return; end
+
+L["LEVEL_TEMPLATE"] = "%s-го уровня";
+L["SHORT_LEVEL_TEMPLATE"] = "%s-го ур.";
+
+L["Class Icon"] = "Иконка класса";
+L["Class Icon Status Color"] = true;
+L["Class Text"] = "Текст класса";
+L["Colorize Name Only"] = true;
+L["Enhanced Friends List"] = true;
+L["Enhanced Name"] = true;
+L["Enhanced Zone Color"] = true;
+L["Enhanced Zone"] = true;
+L["Friends that are in the same area as you, have their zone info colorized green."] = true;
+L["Last Seen"] = "Последний вход";
+L["Last seen"] = "Не всети";
+L["Level Range Color"] = true;
+L["Level Text"] = "Текст уровня";
+L["Level"] = "Уровень";
+L["Offline Friends"] = true;
+L["Online Friends"] = true;
+L["Same Zone Color"] = true;
+L["Same Zone"] = true;
+L["Short Level"] = "Короткий текст уровеня";
+L["Show Background"] = true;
+L["Show Status Icon"] = true;
+L["Status Icons Textures"] = true;
+L["Zone Font"] = "Шрифт локации";
+L["Zone Text"] = "Текст локации";
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Locales/Spanish.lua b/ElvUI_EnhancedFriendsList/Locales/Spanish.lua
new file mode 100644
index 0000000..776bebe
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Locales/Spanish.lua
@@ -0,0 +1,32 @@
+-- Spanish localization file for esES and esMX.
+local AceLocale = LibStub:GetLibrary("AceLocale-3.0-ElvUI")
+local L = AceLocale:NewLocale("ElvUI", "esES") or AceLocale:NewLocale("ElvUI", "esMX")
+if not L then return end
+
+L["LEVEL_TEMPLATE"] = "Level %s";
+L["SHORT_LEVEL_TEMPLATE"] = "L %s";
+
+L["Class Icon"] = true;
+L["Class Icon Status Color"] = true;
+L["Class Text"] = true;
+L["Colorize Name Only"] = true;
+L["Enhanced Friends List"] = true;
+L["Enhanced Name"] = true;
+L["Enhanced Zone Color"] = true;
+L["Enhanced Zone"] = true;
+L["Friends that are in the same area as you, have their zone info colorized green."] = true;
+L["Last Seen"] = true;
+L["Last seen"] = true;
+L["Level Range Color"] = true;
+L["Level Text"] = true;
+L["Level"] = true;
+L["Offline Friends"] = true;
+L["Online Friends"] = true;
+L["Same Zone Color"] = true;
+L["Same Zone"] = true;
+L["Short Level"] = true;
+L["Show Background"] = true;
+L["Show Status Icon"] = true;
+L["Status Icons Textures"] = true;
+L["Zone Font"] = true;
+L["Zone Text"] = true;
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Locales/Taiwanese.lua b/ElvUI_EnhancedFriendsList/Locales/Taiwanese.lua
new file mode 100644
index 0000000..1754951
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Locales/Taiwanese.lua
@@ -0,0 +1,32 @@
+-- Taiwanese localization file for zhTW.
+local AceLocale = LibStub:GetLibrary("AceLocale-3.0-ElvUI")
+local L = AceLocale:NewLocale("ElvUI", "zhTW")
+if not L then return end
+
+L["LEVEL_TEMPLATE"] = "Level %s";
+L["SHORT_LEVEL_TEMPLATE"] = "L %s";
+
+L["Class Icon"] = true;
+L["Class Icon Status Color"] = true;
+L["Class Text"] = true;
+L["Colorize Name Only"] = true;
+L["Enhanced Friends List"] = true;
+L["Enhanced Name"] = true;
+L["Enhanced Zone Color"] = true;
+L["Enhanced Zone"] = true;
+L["Friends that are in the same area as you, have their zone info colorized green."] = true;
+L["Last Seen"] = true;
+L["Last seen"] = true;
+L["Level Range Color"] = true;
+L["Level Text"] = true;
+L["Level"] = true;
+L["Offline Friends"] = true;
+L["Online Friends"] = true;
+L["Same Zone Color"] = true;
+L["Same Zone"] = true;
+L["Short Level"] = true;
+L["Show Background"] = true;
+L["Show Status Icon"] = true;
+L["Status Icons Textures"] = true;
+L["Zone Font"] = true;
+L["Zone Text"] = true;
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Media/Textures/D3/AFK.blp b/ElvUI_EnhancedFriendsList/Media/Textures/D3/AFK.blp
new file mode 100644
index 0000000000000000000000000000000000000000..845ce30c7e2d479ea4daf9a206fbe061a9ff8e66
GIT binary patch
literal 1540
zcmZ?r2{2-0U|?Y4U}O{k(jYvA1&CQ07_I>E6CnNq#3TWrfet_oF!Mn4C>RZa(GVC7
z0U|>{fME&4_r;D3456W+QyCZp1y`;5|Nrz}M-Ct#Xat0RX0HR3&&c4#FrTr}60E+4
z;X4F2f%sEJMgK!V_x}SL%)eK!hVlFVHzYND-M_A%0Sp-%qZl~i!$Lw}`WFH9i;9X)
zg{kj+w$QPg`TtcI|K+!)=52Q7SNj=3a6Th*HUmQl5HLJt0JGTi0-&;6hK`5Fa|
z(5Qd{kX*t{28N7h4jigqLqmabJTuuD7*zKvFccJph8C%R&HtJosLHn0fuq*ZGqjwc
V9Be+wKLJ6Zp+Kcz(7FU-9{|@hm0AD*
literal 0
HcmV?d00001
diff --git a/ElvUI_EnhancedFriendsList/Media/Textures/D3/DND.blp b/ElvUI_EnhancedFriendsList/Media/Textures/D3/DND.blp
new file mode 100644
index 0000000000000000000000000000000000000000..f017d3154829f21a7cb3259589064d05c2d4d045
GIT binary patch
literal 1540
zcmeHHF-yZh7=4$d5-5c@R0}S*C=Q*3I#~=l2~r|@M6n%GMVyLm3JTKS;2)@Ta`X>~
z1%*t47{w`4BSjqq(XHwE9qM8yo%6xt<8klaz59l5X5N`#05p>^i@L(0K}Z4DgoyA?
z_*0RgO&5OrR8K0IKr(@30{@zTg{sxrj`=tsgve;fp~k}DW*a8)a-XLKkKcN|vn{0$
zvK`rzs*ZeEqL{ABnhX_xe6t;AHa*QSg#E$S$(M-dgm9O<*gA(t>x&jwHV{H-V|gJT
z?qKSf;)mkoP-#CQcYMFO9FA3(T9Iojz#awqornBxumFDG00lY^Qx#;P!SjK#+ph;l
zi+5YH?yLU=qdM}q)a2Cq6>+y*J(0YN7P$Tlv!L?jPuU3hksdo_Xd6)}D%nQ0L3)2q
WY~U+W!v+>tg&6n_$aVpGUVH*tY<0>2
literal 0
HcmV?d00001
diff --git a/ElvUI_EnhancedFriendsList/Media/Textures/D3/Offline.blp b/ElvUI_EnhancedFriendsList/Media/Textures/D3/Offline.blp
new file mode 100644
index 0000000000000000000000000000000000000000..956bacc15ccae613d9579ed02513f39014a82f39
GIT binary patch
literal 1540
zcmZ?r2{2-0U|?Y4U}O{k(jYvA1&CQ07_I>E6CnNq#3TWrfet_oF!Mn4C>RZa(GVC7
z0TM#M0aE6CnNq#3TWrfet_oF!Mn4C>RZa(GVC7
z0TM#M09kEd`OE)`z;Y!tG?W)4UM}*#){#*G#E*ceV}ej1aw5Z1hVKmD4>E$}r;7fE
z0vBFI#1DXWknj+wUvz3{C`9$Y
z|BLw=7`eE(*Fudu|A@DNp`qbG1xT+p0}I0ep#GS+&`@x}2V^$@F;IKxvHu34KqdnN
z(Ea>C{(Em%h+~2L2S7fMLIVQZ3;u8T?<(d1bpO_+3=G)}|JnX?E!PA2CoXEk|AhYx
zK+(ti4h&1T0^P^;p4AIzf)bwtLqtqyr~}Iv|1bUyEXuq<^_h;LX$)at^AmvhL{Bnf=
literal 0
HcmV?d00001
diff --git a/ElvUI_EnhancedFriendsList/Media/Textures/Square/AFK.blp b/ElvUI_EnhancedFriendsList/Media/Textures/Square/AFK.blp
new file mode 100644
index 0000000000000000000000000000000000000000..3f947d3de34eb103cb83cbebe102b647c6e98d8d
GIT binary patch
literal 1356
zcmZ?r2{2-0U|?WkWMC8k(jYvAg@HkYm4U$oh;4w_1&B!j4M4>TK+J)Jfy_}b8Umvs
zFd70xgh0aI|Nr^@85lq`Lnwk~VEF(4&mR!q9|%BnsH>|hm<|mEs$*dI0|dzOtYGnk
zzX2%n3=I7LfhL0h8vO^zS1>$q=l|m9*&uWN|N8nBM9+=}sZaR(?d$*l4rd(x{=fYC
P|A9rnpZ|mE2U7n5bFy1q
literal 0
HcmV?d00001
diff --git a/ElvUI_EnhancedFriendsList/Media/Textures/Square/DND.blp b/ElvUI_EnhancedFriendsList/Media/Textures/Square/DND.blp
new file mode 100644
index 0000000000000000000000000000000000000000..5f01843e99ce12d32279f570e7ac77b03fd50b3e
GIT binary patch
literal 1356
zcmZ?r2{2-0U|?WkWMC8k(jYvAg@HkYm4U$oh;4w_1&B!j4M4>TK+J)Jfy_}b8Umvs
zFd72Hgusvg|M~ra3V}33C=$)^|NoyqAih5kfauWBP*Cv&q62_5!yh03@sZ@g`hoHw
z8Ya)c{~u^F2%yn_Kzsv+8~+za&j!l=`2XwcHxL~i4Oai->sKIs0x16Y`hSK6zn}es
I>IYK)0Sc8=SO5S3
literal 0
HcmV?d00001
diff --git a/ElvUI_EnhancedFriendsList/Media/Textures/Square/Offline.blp b/ElvUI_EnhancedFriendsList/Media/Textures/Square/Offline.blp
new file mode 100644
index 0000000000000000000000000000000000000000..b310b919e4960a9aed285a280896a25d7443e117
GIT binary patch
literal 1356
zcmZ?r2{2-0U|?WkWMC8k(jYvAg@HkYm4U$oh;4w_1&B!j4M4>TK+J)Jfy_}b8Umvs
zFd70xgg{^M|Ns2{3=ANeArwI~F#P}j=MRYQ4+Q_dry2eS0vHW4_zw^emSTK+J)Jfy_}b8Umvs
zFd70xguny-|Nr^@85lq`Lnwk~VEF(4&mR!q9|#_ZKVbh41TY$8@E;%`EYH9IH26Q*
yA!zg;AU}a|0ssHS(a~Uge|`N5qNAfh>L2ib{R*M~U%&pJfld1UKd62n^&bG7&tM7w
literal 0
HcmV?d00001
diff --git a/ElvUI_EnhancedFriendsList/Settings/Load_Settings.xml b/ElvUI_EnhancedFriendsList/Settings/Load_Settings.xml
new file mode 100644
index 0000000..66f924c
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Settings/Load_Settings.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/ElvUI_EnhancedFriendsList/Settings/Profile.lua b/ElvUI_EnhancedFriendsList/Settings/Profile.lua
new file mode 100644
index 0000000..945dc58
--- /dev/null
+++ b/ElvUI_EnhancedFriendsList/Settings/Profile.lua
@@ -0,0 +1,44 @@
+local E, L, V, P, G = unpack(ElvUI)
+
+-- Profile
+P["enhanceFriendsList"] = {
+ -- General
+ ["showBackground"] = true,
+ ["showStatusIcon"] = true,
+ ["statusIcons"] = "Default",
+ ["nameFont"] = "PT Sans Narrow",
+ ["nameFontSize"] = 12,
+ ["nameFontOutline"] = "NONE",
+ ["zoneFont"] = "PT Sans Narrow",
+ ["zoneFontSize"] = 12,
+ ["zoneFontOutline"] = "NONE",
+
+ ["Online"] = {
+ ["enhancedName"] = false,
+ ["colorizeNameOnly"] = false,
+ ["enhancedZone"] = false,
+ ["enhancedZoneColor"] = {r = 1, g = 0.96, b = 0.45},
+ ["classText"] = true,
+ ["level"] = true,
+ ["levelColor"] = false,
+ ["levelText"] = true,
+ ["shortLevel"] = false,
+ ["zoneText"] = true,
+ ["sameZone"] = false,
+ ["sameZoneColor"] = {r = 0.3, g = 1.0, b = 0.3},
+ ["classIcon"] = false,
+ ["classIconStatusColor"] = false,
+ },
+ ["Offline"] = {
+ ["enhancedName"] = false,
+ ["colorizeNameOnly"] = false,
+ ["classText"] = false,
+ ["level"] = false,
+ ["levelColor"] = false,
+ ["levelText"] = false,
+ ["shortLevel"] = false,
+ ["zoneText"] = true,
+ ["lastSeen"] = true,
+ ["classIcon"] = false,
+ }
+}
\ No newline at end of file
diff --git a/ElvUI_OptionsUI/General.lua b/ElvUI_OptionsUI/General.lua
index 9e3bb4b..6cb235d 100644
--- a/ElvUI_OptionsUI/General.lua
+++ b/ElvUI_OptionsUI/General.lua
@@ -370,7 +370,7 @@ E.Options.args.general = {
herocolor = {
order = 5,
type = "color",
- name = "Class Color",
+ name = "My Class Color",
desc = "Color of class colored elements.",
hasAlpha = false,
},