From bde878232830a09b90d9dcb8a991ecb803c597c3 Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Mon, 21 Jan 2019 12:08:39 -0500 Subject: [PATCH] Add in LLLoadingIndicator --- indra/llui/CMakeLists.txt | 2 + indra/llui/llloadingindicator.cpp | 104 ++++++++++++++++++ indra/llui/llloadingindicator.h | 104 ++++++++++++++++++ .../skins/default/textures/Progress_1.png | Bin 0 -> 470 bytes .../skins/default/textures/Progress_10.png | Bin 0 -> 461 bytes .../skins/default/textures/Progress_11.png | Bin 0 -> 475 bytes .../skins/default/textures/Progress_12.png | Bin 0 -> 455 bytes .../skins/default/textures/Progress_2.png | Bin 0 -> 453 bytes .../skins/default/textures/Progress_3.png | Bin 0 -> 454 bytes .../skins/default/textures/Progress_4.png | Bin 0 -> 454 bytes .../skins/default/textures/Progress_5.png | Bin 0 -> 468 bytes .../skins/default/textures/Progress_6.png | Bin 0 -> 462 bytes .../skins/default/textures/Progress_7.png | Bin 0 -> 469 bytes .../skins/default/textures/Progress_8.png | Bin 0 -> 454 bytes .../skins/default/textures/Progress_9.png | Bin 0 -> 469 bytes .../skins/default/textures/textures.xml | 13 +++ 16 files changed, 223 insertions(+) create mode 100644 indra/llui/llloadingindicator.cpp create mode 100644 indra/llui/llloadingindicator.h create mode 100644 indra/newview/skins/default/textures/Progress_1.png create mode 100644 indra/newview/skins/default/textures/Progress_10.png create mode 100644 indra/newview/skins/default/textures/Progress_11.png create mode 100644 indra/newview/skins/default/textures/Progress_12.png create mode 100644 indra/newview/skins/default/textures/Progress_2.png create mode 100644 indra/newview/skins/default/textures/Progress_3.png create mode 100644 indra/newview/skins/default/textures/Progress_4.png create mode 100644 indra/newview/skins/default/textures/Progress_5.png create mode 100644 indra/newview/skins/default/textures/Progress_6.png create mode 100644 indra/newview/skins/default/textures/Progress_7.png create mode 100644 indra/newview/skins/default/textures/Progress_8.png create mode 100644 indra/newview/skins/default/textures/Progress_9.png diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt index 1ee716cb8..b00081882 100644 --- a/indra/llui/CMakeLists.txt +++ b/indra/llui/CMakeLists.txt @@ -44,6 +44,7 @@ set(llui_SOURCE_FILES llkeywords.cpp lllayoutstack.cpp lllineeditor.cpp + llloadingindicator.cpp lllocalcliprect.cpp llmenugl.cpp llmodaldialog.cpp @@ -122,6 +123,7 @@ set(llui_HEADER_FILES llkeywords.h lllayoutstack.h lllineeditor.h + llloadingindicator.h lllocalcliprect.h llmemberlistener.h llmenugl.h diff --git a/indra/llui/llloadingindicator.cpp b/indra/llui/llloadingindicator.cpp new file mode 100644 index 000000000..915571874 --- /dev/null +++ b/indra/llui/llloadingindicator.cpp @@ -0,0 +1,104 @@ +// This is an open source non-commercial project. Dear PVS-Studio, please check it. +// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com +/** + * @file llloadingindicator.cpp + * @brief Perpetual loading indicator + * + * $LicenseInfo:firstyear=2010&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +#include "llloadingindicator.h" + +// Linden library includes +#include "llsingleton.h" + +// Project includes +#include "lluictrlfactory.h" +#include "lluiimage.h" + +static LLRegisterWidget r("loading_indicator"); + +/////////////////////////////////////////////////////////////////////////////// +// LLLoadingIndicator class +/////////////////////////////////////////////////////////////////////////////// + +LLLoadingIndicator::LLLoadingIndicator(const Params& p) +: LLUICtrl(p), + mImagesPerSec(p.images_per_sec > 0 ? p.images_per_sec : 1.0f), + mCurImageIdx(0) +{ +} + +void LLLoadingIndicator::initFromParams(const Params& p) +{ + for (LLUIImage* image : p.images().image) + { + mImages.push_back(image); + } + + if (mImages.empty()) // Singu Note: We don't have default widgets yet, so let's just handle this here + for (int i = 1; i <= 12; ++i) + mImages.push_back(LLUI::getUIImage(llformat("Progress_%d", i))); + + // Start timer for switching images. + start(); +} + +void LLLoadingIndicator::draw() +{ + // Time to switch to the next image? + if (mImageSwitchTimer.getStarted() && mImageSwitchTimer.hasExpired()) + { + // Switch to the next image. + if (!mImages.empty()) + { + mCurImageIdx = (mCurImageIdx + 1) % mImages.size(); + } + + // Restart timer. + start(); + } + + LLUIImagePtr cur_image = mImages.empty() ? LLUIImagePtr(NULL) : mImages[mCurImageIdx]; + + // Draw current image. + if( cur_image.notNull() ) + { + cur_image->draw(getLocalRect(), LLColor4::white % getDrawContext().mAlpha); + } + + LLUICtrl::draw(); +} + +void LLLoadingIndicator::stop() +{ + mImageSwitchTimer.stop(); +} + +void LLLoadingIndicator::start() +{ + mImageSwitchTimer.start(); + F32 period = 1.0f / (mImages.size() * mImagesPerSec); + mImageSwitchTimer.setTimerExpirySec(period); +} diff --git a/indra/llui/llloadingindicator.h b/indra/llui/llloadingindicator.h new file mode 100644 index 000000000..b5e86c0ac --- /dev/null +++ b/indra/llui/llloadingindicator.h @@ -0,0 +1,104 @@ +/** + * @file llloadingindicator.h + * @brief Perpetual loading indicator + * + * $LicenseInfo:firstyear=2010&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLLOADINGINDICATOR_H +#define LL_LLLOADINGINDICATOR_H + +#include "lluictrl.h" +#include "lluiimage.h" + +/////////////////////////////////////////////////////////////////////////////// +// class LLLoadingIndicator +/////////////////////////////////////////////////////////////////////////////// + +/** + * Perpetual loading indicator (a la MacOSX or YouTube) + * + * Number of rotations per second can be overridden + * with the "images_per_sec" parameter. + * + * Can start/stop spinning. + * + * @see start() + * @see stop() + */ +class LLLoadingIndicator +: public LLUICtrl +{ + LOG_CLASS(LLLoadingIndicator); +public: + + struct Images : public LLInitParam::Block + { + Multiple image; + + Images() + : image("image") + {} + }; + + struct Params : public LLInitParam::Block + { + Optional images_per_sec; + Optional > images; + + Params() + : images_per_sec("images_per_sec", 1.0f), + images("images") + {} + }; + + virtual ~LLLoadingIndicator() {} + + // llview overrides + void draw() override; + + /** + * Stop spinning. + */ + void stop(); + + /** + * Start spinning. + */ + void start(); + + void reset() { mCurImageIdx = 0; } + +private: + LLLoadingIndicator(const Params&); + void initFromParams(const Params&); + + friend class LLUICtrlFactory; + + F32 mImagesPerSec; + S8 mCurImageIdx; + LLFrameTimer mImageSwitchTimer; + + std::vector mImages; +}; + +#endif // LL_LLLOADINGINDICATOR_H diff --git a/indra/newview/skins/default/textures/Progress_1.png b/indra/newview/skins/default/textures/Progress_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5d6efbfa2ae80add256e73a672d941a79d95e96d GIT binary patch literal 470 zcmV;{0V)28P)Px$kV!;AR7l6|l}k>-P!xv0Yghm#lHf?(flIh|1wul?V+1Qe#wJ2Z7%MB#iBJ-f z))n+F!6{C}shG$Pj+0vhl}FJSC;my(_O$2upTAWi!f)b$U&eoeoya5&N~u(iTALye z08MM7yV#ywnxAxV?as5kM-Is)%ps_zCTPyvQubG;$SqMyaV3TbUItAy!bYsm*(@= z77(jirPVg2{6tloeq{b&`w0NTBUsI_4)$X&ef&y zdi`fNLesgrwBP*}6}GHuJMqqXh{(#Z4PLJwdA)wHPdxSiPyX`+A0r~PEK?J8P5=M^ M07*qoM6N<$g2!Rf7ytkO literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/Progress_10.png b/indra/newview/skins/default/textures/Progress_10.png new file mode 100644 index 0000000000000000000000000000000000000000..28203324f1fcbe025c1d7f070ab325b6e27d70d5 GIT binary patch literal 461 zcmV;;0W$uHP)Px$heZFt`$Lzzv*w0ck=4xPlWPTZuqPSR*HZ6%>P^ zH|X5JBZw!E8;qMF!KT#$5@X`OndZ&Qyf^><{;3#aI3`XwGX8#nOk7YzVw0=Y+a-|o z{i&05U{ur0SJjnr>cALqwGIOy3n*Kx1T2Au?@uTDQna$`FlKKU$%%!;jj7{Y*MXJR zp;pRS0wuu9=g+TzA}|8FK;ZjR*Xs`yQ0R8rle83#Ek%JnOaT}68{h_5=W=HwuRqu{ z05C}SYN`TTjJdNxJK*Q?~-mNYxpp|-xte}BXPS19pgaCN!cG|t2G)NlLD7^ll z1T?oo>(0Zyn|e%BqG)LX&_8;E*?e&aP^*+5lZPx$l}SWFR7l6|l|fFzP!NW{F&qHH23O)z-FO4r6G#&h3M)MUuqL6Fgtg%W;HEqb zru78$CgNTqH+XIyNhK{(A|@vONz-KBbmq-J^G`)<%^`8bf${ef6w-_$lIm<(b_f*X zcy4C}-0W##TXxH`Z-Eiu#PK`=ihu>+y3HyO0(VLU<9#VwnD;}<*~5lUDkN=8lN1?R zs(=q%1C?_5bgyaDK7^fGa~2K%6R!%_niz)>^l- zBK!Tp$nOu@+u}*aHm#aDuK+6%InGG%rO95eyK|GnL=%Tv>kq(JPtR)#EWleXm(KG2 zy=5*G0W&tpT_t R0SEv9002ovPDHLkV1l3+%rgK0 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/Progress_12.png b/indra/newview/skins/default/textures/Progress_12.png new file mode 100644 index 0000000000000000000000000000000000000000..089d58b09049192ad9ad8a9ad1356615de711bd6 GIT binary patch literal 455 zcmV;&0XY7NP)Px$fk{L`R7l6|RY7XPKootyxU^tzU~kYP%$%SG1jnrO1ktsiMsQs`LAx>u1Y%E+ zIYJlOVmH+jm>Wzt6G*3y#Zd%~TIaWbU%kii}G;Rt9l6wcE_!xUVrBu%r*`G}B{mHab4oZ`p=OBn;1|S8nX}6l!K@=+hvfXNOe=>d3E##x&Kz{YItLIYP xv)4C#?ANPJMJ9qMPJ<{;PKihV|Kwj!@D4YBy5HZHTZsSw002ovPDHLkV1oK@!Y%*+ literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/Progress_2.png b/indra/newview/skins/default/textures/Progress_2.png new file mode 100644 index 0000000000000000000000000000000000000000..94cb73b1f7d3bdf3627fb388258882968c042e69 GIT binary patch literal 453 zcmV;$0XqJPP)Px$e@R3^R7l6|l|fFzKoo|*F&+SSxWk)FPXJ9wC~U+N6xJkQn{=(5K;7VIG?Ww2 z8>kC)3GN|sgSzk$v9tn4;)Xw&WSai(|L47VeN}NBvrX)=W$X-ABaY*5EAg%#f1>nj zy%h#p3`T!yASc(d?~6$zOH^x1Yi-rj4E8f(E`%HcT|j3D7l1QhUc$>HC(FQI2-Hfc zgACpSkORg*GmVgHpp*)M@Tal}Lf|QihUZy?C4=jmyWzYf=JtLp*<@h=xLR99d7dTt zX&KCbXoF5K$RaIn$)H*(+Y8w=B%8-H<$V6I2wWM{J6*d(B3zP7E=WdMH7)@;$Eh6y zO=EiDx?R+tU*dE+?RtLjE*Clgczt;;intB9vhM?G-C1-3Sk+3|o=zsNwBnn5AFk|k zfNM<81}uqL?#SeLQ0nUto*!sn2#h=J){*B2F%WgyEz5CgBPpR}OfOm-6`M@cd3U6J vM9lPx$fJsC_R7l6|l}$>+P!xr~Ck{KPJJ6wjdq`Gb0)?iX*sh@MSZHk_W9PyD^M`=>%gm&U}~xr5j+rHxVgFKzH{zNjEL})*x-lp_X#%B0b@*NvWUdM zlQG6$l9PW2B2trAcp7qm;yNXo>w2~}i2$yyhc#esjIkmT0iK977YM&c09+_hG@i`* z2m8B@#{G2>_$rGxo=ly?gT1Y7Ms0ci$ zp$)w+77B%iwXv_p)>j_WZZC9z7?^k3Cp$q<6~GP#mu?VL?^Qx~Fu1f|`q*g!fYt}k wTB)4ugRyumLl9KsAgGR3sb~KG$-hqU0vxoXTQoK1jQ{`u07*qoM6N<$f*T6Y+5i9m literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/Progress_4.png b/indra/newview/skins/default/textures/Progress_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a467098d8232e2b64bafa93e2b9c4b9aa3672b2b GIT binary patch literal 454 zcmV;%0XhDOP)Px$fJsC_R7l6|l|fDdK@de>8xMdtz?<}(Kqet!U?ZFWSeq!2utrY64u*t;@dVS? zz>T<)h>3H9a$%9+$S5F~m{`fAJKfdwyMER0F(Se-?Sv!S-v>BNFBoGookb)D5@U>? zvAp7}ifqz_F~*>r_w<%Yxl}ycreii0c_Y9YRSkf0 zsd&3Dz$c2@oo>9MNV766q4e)NRul(im zxvtN{qw1rs^BhojF7^R0E6Xq2Gzcmdh=F++4$p(2B7h6Sp=Yi4pcHz}#cr?1P6Lpk w*k;Oyoij*V5L99y3B#ekx03&VnZFM32IpPx$j!8s8R7l6|l|f3wP!NW{Cmx{QK#$-JUQS>NLes9=l^{av4Q!$7wkN2oCV@cf z3G$BM4U8*YSnLhPg;OXov9Vf2a3JJm-sGSB|Gb$P5n-Qpz@F{zCpgSIj4`FbVVul? zTC;KP73~+*^HT<4oV3F@kuXktb=3f?V7|Ot`#Tb4dLI?+jdC&7Bm(FUhHW5gHqKob zCkwz2PDHFe-&SQX1=9XtIA1Q86JVwOYoM;{6)+KzIgsi*)fgzq z2=JFLFZSy4;%IZT+29@+i^!|iCDY`^mEXK_QuX?S;j~O&5$UO1g;*l;kwJejOxGtx zW$2V8Fvg6(+y@Hkeyr0zlPCyUH$l*v?uu0?kplZ#n(ZPx$h)G02R7l6|l}}E>P!Ps{&u{=dfpsH^dIw)`00{|&m7D-vlYo%0Mos`L#l)ob z1nm*rsM~r1NbG*xOcPT6E0~!0CCy7albLznH#0RN!Xa_Qf${ef z-rrtlKz)sd5#Wo+VD8=BMA1wgw?#bHNwb|O^1Rxu=ha5LOzuXCG;mQxcC@Pc-d2Ue z*E2|xWN58B1p?q1Ad14^r^~JmxRc3!DM>yX+KL}QBb||Lv2>DCSnFCK1mY+PPpx%B zz(!GMwq16cc9Em!&Av52xgKZ6f7cdXr0D;b`RfV30Mm57WhfwyLI3~&07*qoM6N<$ Ef(10pwEzGB literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/Progress_7.png b/indra/newview/skins/default/textures/Progress_7.png new file mode 100644 index 0000000000000000000000000000000000000000..64fa2947714fd2ecacb4e60c8761ea9e6ca118ee GIT binary patch literal 469 zcmV;`0V@89P)Px$k4Z#9R7l6|l}~EIKp4e;Q#^n|T{qp-W!n>UasvZ`iQVW4YS)5R!L^D9(3O8c zFgHk!l5T53Z;)<2Aq|NR1s5%S5CSt_=KJ&Bo2WRBxg@T*Fn)i6LV7_dl^fh247WhB z*X`JOF=Px$fJsC_R7l6|l}%2l z{wlHUK?Jmc>DBek18@h-0T+nf$++VMp$3}$UUylwMGI+BEY37=DenL+AiHQZ=3Wr) z5&&3!NwT0LEocMU_gD4Yd<+b|AlwQsDKM&}A^;&Yw(Wrf+?KR>3efL$Un|R0Yiqqz z%4YLkn3*5}W?m4s=SPt1Toq zfhs2i$3t}v w%3zFnGoR39{(f>?kM>kl{Ve*w(f(e554GdKKn7J>i2wiq07*qoM6N<$f>SibiU0rr literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/Progress_9.png b/indra/newview/skins/default/textures/Progress_9.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e9723184fcbaba963de87fe3651b049b1e0b72 GIT binary patch literal 469 zcmV;`0V@89P)Px$k4Z#9R7l6|l}}2;KorJ*BVBe;PheLTt&85k$q8(r(A1SZfp%SJnnKnwCumoi zg3v+SH#f1Kz=GM23#U>;(?m-V!4DpRd2im|Z(fAfntkGcJ>%~OD5VdC5Shk~b2$Sl zQFLcz*`#M$+7{h$F0X(wU`NrN0xEz6@J4pO3pxi;<_C~%0s_vjaDcYhjfRvU>k|Zpb%Mv&OLZiO` zmO$u@{8a(~liVR2*ro-|BzcohPmhNwy#l)4$bU6+SpdC4ECPt*xdN1w*3e|01qHmg zgZ{8EO{KJECaV>~tjou>S_lO9(}%e^TAJ#&R`5whb0H5^BLHzB78S+)^x+1e({9~n zJ+xf|d>L}5-BM|P-`Yi5>xPjVt@Z0!{nR#tu9{c9^Rf%p997QhC)b^J%LXi + + + + + + + + + + + + +