From d5b33278ea846650a127e021bef85c77af795c5f Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Thu, 3 Feb 2011 11:04:32 -0600 Subject: [PATCH] Add logo, favicon. Thanks to Michael Sersen for creating images/Logo.svg. - Add images directory with original SVG logo, favicon, and some derivative PNGs of the logo for different purpose. - Note that license on images/* is CC BY-SA. - Add utils/img2js.py to take an image and generate a base64 encoded data URI string. - Add base64 encoded data URI screen logo to display in canvas when disconnected. --- LICENSE.txt | 4 + docs/TODO | 23 +- favicon.ico | 1 + images/Logo.svg | 687 ++++++++++++++++++++++++++++++++++++++ images/favicon.ico | Bin 0 -> 1150 bytes images/favicon.png | Bin 0 -> 453 bytes images/full_512x512.png | Bin 0 -> 23962 bytes images/screen_640x435.png | Bin 0 -> 20648 bytes include/logo.js | 1 + include/rfb.js | 12 +- include/vnc.js | 1 + utils/img2js.py | 40 +++ 12 files changed, 766 insertions(+), 3 deletions(-) create mode 120000 favicon.ico create mode 100644 images/Logo.svg create mode 100644 images/favicon.ico create mode 100644 images/favicon.png create mode 100644 images/full_512x512.png create mode 100644 images/screen_640x435.png create mode 100644 include/logo.js create mode 100755 utils/img2js.py diff --git a/LICENSE.txt b/LICENSE.txt index a2eb8eb..62213ec 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -8,3 +8,7 @@ docs/LICENSE.LGPL-3) with the following exceptions: include/web-socket-js/ : New BSD license. Source code at http://github.com/gimite/web-socket-js + images/ : Creative Commons Attribution-ShareAlike + http://creativecommons.org/licenses/by-sa/3.0/ + Uses of the work must be attributed + to the noVNC project. diff --git a/docs/TODO b/docs/TODO index bc6360e..6a0d272 100644 --- a/docs/TODO +++ b/docs/TODO @@ -1,5 +1,26 @@ Short Term: +- VNC performance and regression playback suite. + - WebSockets + - expand latency test + - add absolute timers (every 500 packets) + - try 1 ms delay + - stop at 4000 packets + - small and large packets test + + - JavaScript + - just base64 decode + - everything except Canvas + + - Full test + - Without WebSockets + - With replay from python tester + - add higher-resolution multi test + + - websockify test with echo and playback functionality + - choosen by client test page on connect + + - Keyboard layout/internationalization support - convert keyCode into proper charCode @@ -24,8 +45,6 @@ Short Term: Medium Term: -- VNC performance and regression playback suite. - - Viewport support - Touchscreen testing/support. diff --git a/favicon.ico b/favicon.ico new file mode 120000 index 0000000..45399c8 --- /dev/null +++ b/favicon.ico @@ -0,0 +1 @@ +images/favicon.ico \ No newline at end of file diff --git a/images/Logo.svg b/images/Logo.svg new file mode 100644 index 0000000..36a7ea6 --- /dev/null +++ b/images/Logo.svg @@ -0,0 +1,687 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/favicon.ico b/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c999634f0e9b5fd5250f34d13118104261346610 GIT binary patch literal 1150 zcmb_bK~BR!4D{}%NjX#s9JoSJg;IC}2M$OaxNv|cAf&!xD-=TC(J!=D`m@FM#>T2d zB?5_@acqyryU7ALyz3h9c@D1yz$pMUXc)psjw1kIZjC@DSJ!pvuZF$S5EEVD`sO-K zwz~vXl@a^8vuXCdXQVt?^|DBBs};`<&ZW>?Y2J;;?7QO=uH&8|a7?raW54z=y-+UK zVvcb1_^ff#m~1{1q4bC`vi{NXgX{e4l9BSnCkyj_O)k$bT-NXTtaW?GeaRR8=>9={ zI559(gopow&Y>}1=uA{k`xoEyx2KvRChM%TiVOhwVpN6^_0yNId8osL^rTNZQIULc_^3E@(-y%Spc5Q~vy(d8L!)(x1n*7)_*losOPO6XtxtI&bNw>fdLNZ8Dwf z$IIAo{quy`M$-j;DK3=%w?ZjAaObK&H{HAptRzKWIeQ7*KiU)h_)g-r{Sm_V_d7i@ ze&ymaw?pTfHml?IIZTe*dmMBUR5LfIWL5K>i#m4b+qJBy1&05xz4K!eX8XL_`Om8f zVbx5BqIT4GSlSgy?m1KRiH|?#SMyHA8TzN@`>bi|&VIbRcH2a6i~WBVl#% zWRl#M`RQ-2?~glB>Kmrt@$!yDk*4p)b3T2KBbe4c{Fv#s_FrD!=E(K=v)<*pOqy(B slDTM#cEa+F0UAq7I2|-YE9TfUc1w106`8X%0>hZW)78&qol`;+0Ig`bxBvhE literal 0 HcmV?d00001 diff --git a/images/full_512x512.png b/images/full_512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..1868e22425cc4a92f6127ecaa96028f1185e186f GIT binary patch literal 23962 zcmd?Rc{J7G_b>iF$C#PSGf6UsWF}D}L*{v&GtaZ55)zV-nM|R`JabBjV+ct)I0qqQ zp6C0VKHuN(-gWP~Ykhxz|5~fXd7o$4&wlS`53jwqI32Bfo*_z(8Rak4L_CHeL?Go<2@l>vGHx#0lM3xvd|R{dYR}jetSa`Ie`_zE;c0zC{!1 zNk>=v-`IEg^UpZNh~e;lzI7IUigUlaYz#fOiP(&${8et>Rq3YtL{3d5e3FPTZwjrt z?^MRKcTy;`+%BtOz<<9zZ)v$y;C}In->aeE)oi^|GIWE98V`*Li5x=^yO*37BbDXm zeQs{AjmdMYX^a<7RZh)X5DmZaU(p>xv2@zZ%tYZIYI z&t5#`kEEtfZm_2+Y0SO$o?LH7?jogPa_`nnFgzATMnwAG!T`%9yt^_#) zK#n;Lx7L*Td|=RDG%RnNYBo>QE&Kh@g*BH5>Jk+ljAmh83Ab4>!BqIKhHEvZ z7qa#Lbzo{UZ_Md`IPBZf&bqeAz9K#yCcP4@CEL!fEw_cA@t~wK{JVz5{}=N9o2U5y z&oJ8kR!GdO+PFxEPv4W}*~2rogu6F17bK~vT@v9+EZ0-jfA0jV7mv2B(vlFo9pS4s ze$Pzy_?@}1o*+H=k~UuTc{lfhPxJ9FmBJCFP6cl6_=k`)-hxj?n1Xh-vETYnmLP?1 ziVH;8N62t3;*WwArXvKJl37<%`UZ}S74oj-4I7zh%xwj6T3w+|?&gE)qTD1kn#}_| zvhl)*V~4Bf`jFaDDCCTF3TlCmKAwjrPKkBxSA(WZ4sYJDY~U9!%M@`KX%KDDz>zz~ zE`=lTvyzn+N44=lm2G@%-Bki8Z(%36bbEtHn830H*-yBsj&(rZLZGs@;PdnIJSlyZ z6fi*T$jHOeRQr2ab1a#)b-#MAmPrI$iX({m?!9}<8yiL%h}f^RB#;7ss``+1C!?3V zR<~h1-zL5F)y)VeSs;mz?jYRJWR#S$w_OM}#Y>D%eJ9xt6|sBBvlK2)nz$efbL1t# zXyt5#m z*9I+ERl}P|g2aDDHZUpWMpQB z>kw0UN6GvM(te`iC62Qg~D{%Xd7bUS;8-EI&hB4bLGoinX}aNaOQ^e zd8vFfs*QPav}A8-5i0!oRpL-CwMl?w8yYMq;HsH?pLdmJIfw*`AZ>1IXMkD3-cD1) z%Z0AC-fS+wi?VbY88k$=l6F@koxHThX+0T{sz~Og#lyppPWwk9feL9%V7FLSMeK0&rBhe%tGkfhg`}qwpdv@OQWX+Ip3?AM{6ru63OiAiA`cSiwinr^J1x9zZm>$(Q4n@el0A3^S=3s}JcA?D#%Q6(e<7^8br~4-<_(5` zYB{Wh)$7|D(J3Uw@^?*g*)LO{UzP9ozAB0R?c%sRPEnWhtb0QL_N4krbjYPe{8NSr z{@Es6&U6vu-D3Y3E0ukNZ%_xKa>;CgzEm@45gRXum6gjX$<6odp6Rtfv~U&X!aH&q zbwpakQlx)1CGG6&TrWA_7?W6DUiNkmeKtG27q>bcP@v;gnTPH9+dk5#if)iUlT~d= z?U;0EnSMhCV;N`r=31Z=J2NvwFi}=o^Qg%7{hst*nw^{5z$M6|4jLeaxOEl%VPD-^ z;YKi7tpFmR?K(BCvQ;uO(n2b~9>Wm>?oQcMA8VBnO%Gs7MM8X#-xHgphSn?KLHcwg2)u=o>yTf(kQ5j8VNydU9#|QD^m));j0C33Kn|yM5dlJB&!R;f z^s{hHq&Gt{h@&1~?W`PzOmIn}`_KCBgi*B!BKcqEV%cekvz#n2wZdhGPy$Vo4{?r4 z5FmtYGcS8CQF%#vb>5R@MrJggD=j(77+4TDO}d9L2O>}U|(1V0qg3NKJm-45(4O!0{vwn2plirAw-N&Cl)2c zt3eVV2ie!&6CLt;W&7%JDJ>S!L(~{>V^pMAOG-<7FTtd-RtUwAx>~7Ca%|9&BX0^< zIx4tMe3_@xl1dFH*SHjU6oncQhsD zgFN98OCv*Xk#xwoA*gVe_)VYx`6p3?=UuKvX)j zUT^gI7s9w0q8eeHyUtG3SPdj9I}2De`&ttqJZ!fC6&>JCf7IcVkjHPsYnmy{iH^E} zY590K)|x~kAfI|tB_~*{ger^^3m8tbDU6k=3Lp%lkm_!hR!|rMite6lO2F@KMu-|P z5ivjkV}MPB)Qe+lk!3@JZju#LRGc^l17hI=#4rbJIP#|D8rdP4R|{Yor<5N(LhVEc zdRcD5g|)@ zSvZ!!H_hp$z1Wz-bsjeoa0g z@iNi~d>?}#%~7?u+jQbg_8;n12T5S*aI0Ofm~_Z<&+BB4MH8O~w`vh@tuoR9xdbMi zc$e^|RlbcwsQik7Bfh_vq?|&9VvD{%X&Lfyk4L4VE}$a%B-@A>syG^KZ_3D5$k*NQ{0+Qxr2_Wym_f%eVUN?qZ9&g$Tpp@n#%H(rQ!~k66Z7WS(mzgRU$j9?R+|DVBTy>3P6Ex9fmfC;rFQ}Z z;Z+5U6R!V^7I#QZn3CMB3R&zeWY);(`R%2i4Cpe)b)ZF$mu;0s#ekf=NJy|Tp+BVv zy1Yr}Co@4?tQ(h{oJ=s`l3p=$Q#a9tuHLK^PLESX1rVpuI2x^iQ-pj-O(aW{z#GYY zfv^1wV&I-dFcjW2&n8s@dOv~$8udxlxWqt0aCl`?M2dmt`H8uxqCDlFomMKLhR@ON zd{WOPfQ1OVA%s6gW)6knsU4b&cD4o0-CHRHtbXP~m48^$*qCnYHb=EikM&nlGVScX zdYOX*M>)6yRk~&0?TMSnr8vGGns6`k;qKiVI07?uIJ2_3(c!{{^+X0M{TimZ-;0xJ z@RfFXsm|GSbb@=J4U0k+J$xPClJrG$TS}ZuEP6pg#ybkAAe{R|LlT`GjR7u?JMxRm ze2!&xvF`P`tvEf{I^j^kapO(*o!<@RRqcKX3IEwryWFVXOxrhgDm*2AJY!$RSS%x( z40bU06k)?48Fq7=9QSRk|;nB8y0$&o)4aZ@tXA z_k8@I5+R;dQ1|0Zzt?|vclXegHd(6(!qyrKN(S$q6MHdlUdevAsdw!Q6J7^F8&zq& zb**n8ck-W>#fywreZPM*oa#x56XquDFb@`!g~6mQ2lX@yuqU;i%Vd;DOXqLiHM%8K ze^|To$n+(Ba;A%vA4_cS{LcnW5NaKli{x%&U9F9<>?JqFvr6uBCle1`cbAu!f2zzS zmO-}QGr24&O&7%Ukzpub?av>p zq8lWTJ23gyCiLC5BV{`LlDce2Lu!)fKg-LPrjVt^f_EjD9m2x0-6U71j!;JvlrddA zDfhLLDCW1MCf(>mTi5Dl!iawM)=poNvXJq-GkC$RsS7z@NmeWR#ik=jUo9B#)BJ#s zmYbHuCX=^7htG@dLjReK{xH>7d$IA4`qJbB4ep<3MZpn-m{_ReRQ_yiI0Xg$Wa`{< z#gbs1hXdIjB+Z&D$Sh5d#Smw zxTNG_Hr-}l98n0u-`P#+id(k0;=02Rdks{&$hC|I$2xq;>p)k`z3Nx$HW$99kQdl; zwP)n|W8w0;27PUEy5wiz1~-A&)!?LvG#U<&59I=&GyeP+;=*(4ER&OF8Bc7R(s}7l_GH8ZN_qo9CS++>405c_8H$`B0fD8g!#)RYzVgN8?kJ2s%9{;CV`{_E4L=l=If|utN7l=N?(Ka$G?{!3xxv zKd>%kAd}QN*56q6Z`!2D{-H_ZfQ_MEHy>UBjya+8^>|X z8qmkT)Fk^}?y_$}CeZ{x%I-Dprqh!UY#+%%RbkyE!cvjsB0=Z6i|F4U8k4+wqz}X- zeuu#{VHC2i`Qg@}j<+)K4D*gF?3L>nO|LvI#OheKC5q!sr2I(-L|ZrP!SP6@$VF%!kF zL!Hdsm3BirdU?Hk&?DX4NrSKo{lRZo<- zq`&%S3%Ej>S&{(xk@mXa={%ma**zdC-TROV-ppFt@*1U>guM+TVe5L!>ie=>^pW`5 zVuKkqDHoSorRmrUG26ttyC!S$@ z$V~o7L}B9Jr3po|-o!_?<5XZnc>$*aopZ7jqwotV8t>X)38I)c zFFkI^$e6loU7R`{ET~=+Ha~hIo;W9PQLDHSyd;dYpNKL78iD1ON0GU3Eo#WS@@&M^ z;G8{VIX>NcC*hvgm)Y>24TI0fSz697klFw^d-q~rn@2fpX_ZKGm8G&9&=GclCW2{Q zUKvp6^RPh&)W`qE+dwDGCz>QwP^?61_Feb-7WNTYU1>hXCKT{FIko&Q&z&(5O z6c(}j#+{Xw8N~f<>QOm3-(= zyFe$&IuFgSsh^UEL)Re&tGY*b&_9EhqEkstX~6QkOAP5n!oAnR(|wOh8D#M6TdE&J<#s$nk!vdiM598B z-6EM`IctB;x9%b1cEvTU_X`<}sjYG0dHw(V~mLl`cgDb@w@LxD+T+vKokJyUOE^$OR zv{usP`&_q2;8CjGtpA{{Q|>n5p4xu|F77+_WXaVxg~vyI<1wRXmJ)N}Km+2hjPj#)fJ|ri!;%z>qB9-FnZf-Jrg8pC`NV8;W{8 z;+@1erQoH@6t@&7QR}VJXN{Kn`KdJ_H?9uO#_Vm4J^E2&-)B$!XZLnq>PORH?aXR) zWt?lQSM4is$;S`;*SIoY_K0LPN^O)mm{^22q*&oFp{bVo_S3(;tBj1XewxIP*Q3u} z>PoxikBRU3orS01;n2!2Dja+pN5@)i zAZ2Hh2iqgV-f}LbQuX_{nt%ozx=26aOU*94xT@jDTw(-HC-dDhREEpCl+A7&wZf0D zcCEs^TRh8G>yaf;&DrVr^nrhB47u6dlBO@8ZkNVvZR<_!?2btj5)qlS_?2ZoD852Q zZZfso%jI!6&3WrQ;-wP+W`Cv%7?p1yfRIHk2JN3N)!E{~CZgysuYGohE1xZV9zDF7 zoOCh0VOy6|T}`vF{r8CF$9t2)k_&ne=`6!#H&~a_CqB#<8BKRz)^=oKWwp1qMyMzo zeSAa|{dn+eEN_j8ngsLJj0d9_jJCG6?^vXUJ2*?r7cJTDqi+AzpzewvJBOHBGIDaD zYqx@?Hs1Ep_Suh)t+5Q6C;d{be|?3PB>4gFecqI(UFC_UnpI6|43plPZru1&-GxaB z6<71gKbSYujJY00aU6X1JIpIRN)6yVFGCH+LRQ z_U1BO~T;#bbWWhY^q-cpMh}nf}5d*JTAzfYNv;^X$f$;FCBhKgRSsN-T z5wo*4(NHo1IJK8z&(B2_+ZS~b<&?RURB$q@-l4Pj2ou&*yLPY_-MoJ9k@T_J((y`H zR~LXuhWD>=ui>P1u`DpoQNg^2TnD2XXgl40JBl~ODuF-H+c5G8=1%1**UV;@C7Ur&L zQ{l12Js5IAzU~|qOi2IG-SL<`+Vtg*xcwfIkb_Sy%!VC;6i2ph60GJ=taJMn){&S2&LA3~lH%{{H&}qY#_k=_d^V%$fwoZSep=nXI9Hijk+&)aLtT?aLdK z6=wOQ17xtg=F{s6rz5@cXe$ZV?RHQ0FMZcOK-pBHa&mts&sDxCl0X)`v|>%0Dj@L3M??b%*Av=xu-CeA0R(3*sSq{Rm+&e3RE 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 Z+p6%jB=)+fF&F}u_d&k{to_(4{{qfiCS3pk literal 0 HcmV?d00001 diff --git a/include/logo.js b/include/logo.js new file mode 100644 index 0000000..befa598 --- /dev/null +++ b/include/logo.js @@ -0,0 +1 @@ +noVNC_logo = {"width": 640, "height": 435, "data": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAGzCAYAAAC/y6a9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAStAAAErQBBHTWggAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7N13fBvlwQfw3522ZMm2vPdIGCFkA4GyoYyGsCmjk+7dQksHL2/H2/dtC4W2tLTlfelu2VA2lEILFCgQIHEGJCQkdjzkLdmWZGvfvX8oOkmJEy/pNO73/Xz44DtLzz2RT7qfnnXC8uXLZUxDlqfdnUYQhIP+bjbPn+5xhypzrmUf6rGzOc5cjzVduXN9/nTPyfRrMt/jzOcY05U5n3L2f95s/34LPW4m/p6FbLp/73xe+5nKnWuZs/07ZOOcnusx5nucbJU727LneuxslDmdTBxn/2NmusyEuZS7kHMxG/XP5Gf3TOVmQzY+u/PhPMnkMcSsH5WIiIiI8goDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHGMAASERERaQwDIBEREZHG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"}; diff --git a/include/rfb.js b/include/rfb.js index 71e419c..6bd575d 100644 --- a/include/rfb.js +++ b/include/rfb.js @@ -8,7 +8,7 @@ "use strict"; /*jslint white: false, browser: true, bitwise: false, plusplus: false */ -/*global window, WebSocket, Util, Canvas, VNC_native_ws, Base64, DES */ +/*global window, Util, Canvas, VNC_native_ws, Base64, DES */ function RFB(conf) { @@ -347,6 +347,16 @@ updateState = function(state, statusMsg) { if (Util.get_logging() !== 'debug') { canvas.clear(); } + + if ((Util.get_logging() !== 'debug') || + (state === 'loaded')) { + // Show noVNC logo on load and when disconnected if + // debug is off + if (noVNC_logo) { + canvas.resize(noVNC_logo.width, noVNC_logo.height); + canvas.blitStringImage(noVNC_logo.data, 0, 0); + } + } } ws.close(); diff --git a/include/vnc.js b/include/vnc.js index e064265..f7f83ce 100644 --- a/include/vnc.js +++ b/include/vnc.js @@ -32,6 +32,7 @@ function get_INCLUDE_URI() { extra += start + "util.js" + end; extra += start + "webutil.js" + end; + extra += start + "logo.js" + end; extra += start + "base64.js" + end; extra += start + "websock.js" + end; extra += start + "des.js" + end; diff --git a/utils/img2js.py b/utils/img2js.py new file mode 100755 index 0000000..058c784 --- /dev/null +++ b/utils/img2js.py @@ -0,0 +1,40 @@ +#!/usr/bin/python + +# +# Convert image to Javascript compatible base64 Data URI +# Copyright 2011 Joel Martin +# Licensed under LGPL version 3 (see docs/LICENSE.LGPL-3) +# + +import sys, base64 + +try: + from PIL import Image +except: + print "python PIL module required (python-imaging package)" + sys.exit(1) + + +if len(sys.argv) < 3: + print "Usage: %s IMAGE JS_VARIABLE" % sys.argv[0] + sys.exit(1) + +fname = sys.argv[1] +var = sys.argv[2] + +ext = fname.lower().split('.')[-1] +if ext == "png": mime = "image/png" +elif ext in ["jpg", "jpeg"]: mime = "image/jpeg" +elif ext == "gif": mime = "image/gif" +else: + print "Only PNG, JPEG and GIF images are supported" + sys.exit(1) +uri = "data:%s;base64," % mime + +im = Image.open(fname) +w, h = im.size + +raw = open(fname).read() + +print '%s = {"width": %s, "height": %s, "data": "%s%s"};' % ( + var, w, h, uri, base64.b64encode(raw))