From b021339a8a72878bdd384c5349d9800044d42b06 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 28 Jul 2024 23:47:49 +0300 Subject: [PATCH] add window icon --- res/textures/misc/icon.png | Bin 0 -> 9306 bytes src/engine.cpp | 22 +++++++++++++++++++--- src/window/Window.cpp | 13 +++++++++++-- src/window/Window.hpp | 1 + 4 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 res/textures/misc/icon.png diff --git a/res/textures/misc/icon.png b/res/textures/misc/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ab91077d2579ddcec807aacb222f5639c01ef225 GIT binary patch literal 9306 zcmeHMc{r5q+ny*yG?r{pgR(Zvj2VWEec!V$S;ov@Y-5>WtcgO|%T^RAOCnTbO~{^5 zh>*QV)|5Sbqu%xVzJK2D_RzwqY0La^y;Eeacfrx?LI1rAEcLo5+!zCH`ijP$# zSN8o**wcu3Td}nHJ*Sl#cMy$!T=aN-ZetK_PUShg^)4vkRmCT0U62fb0NI*=a7_L!9L+ZlzLgcKs3K*)uh7g2~Ob|vePHN zXR} z>R#mmLv~sjYp2v4mgpu1uc1L~OXmyM4{v_kS~IE=20jyc%}gJiy@Y6awnAUsOG|Xh z@d?9)7Ve-92{_@KGLn=V(v!|{oGXG302#2fIhW_Km@E+R^;BznhN*bCntz$ha{tP) zcut4P3-40+AKJ7}(5cdv`O0jX`bDZW-M~ppSd>^-UNE^ZlWG$CF|gmvk7DCi()G?> zOAjpTp7(CRhH$^_ZW3YsBc4#V0ktARzD+DPhC`jR@H6 z6uJQ^w+|(2(i%xw84%j?4BBu@V_Iko_;m=AoR)yd>q0HIu9#$DZ-1Z@D8nemzlp0> z);B?P&&b=4f~soS=aduqyeI5?sdX`+&~t7y2pF7qFX9XPP}{dYO%JtCq~^e~r83uR zezHxubpt%zs~vMGxvb!c>4lBe@7*1|4?=X$k$pXzN4yeFUSgjgsNJwLkFas6V;Ff@ zYAt!l@vG;CV{i@k&GqN}Ufddw<1=Xl^yA-r(r6B1BKN3W?IC5DkWjCYqU8=f4;D#- zq^|Bd&Jvms=DA{W^c~au)1h79LF<;$pf>%Aa^m~JVF>ndaY-V@r`et`2YV`fV_J8k z30>uM5&kyDC+p5yVchs}zUiau6p|>*b#l|Z;%BSYa%joxX^^RQmodj1(5iGI4`T>J zrgFdMVac|t0H+$yP~~fM)(H{nqIA{l4D};PJZ?9G?i&doo<| zKKQgwlti+w08bJiw)NE~kg;|R`TEwh?ZuusP}{CJG@^&H%2JzAEn_HX-hR7#>cnij z6YkyZpq6hbyyQ=}IcZ28RK6*oT%4TixQMH`dgm0K%Ydy|+J%bME8grf z!e1;5B_6YeqEv<_$iRZy0kO=xkVxo{7SVCTord_^i*~J&9A}=*onc7ff6|;j)Nnb; zu-(Cmcj1<2lyo27Q;3UfJ=K{PQ4*6YoI2Oo1aP{d$g>?EmhYmX_x3v9K%Nh`yXmBZWZY;gZ{)_0Ap|b!(9xRSfc6K6o>WhNv&eEAsj})twNQ%9 zbjR|nNjZv@tbkCtHM^HLF>f;(2v@gAdMqCVRYy07JJBDMr4IaIFh*W;$C9O*4$ByAM{>EN!`h0AY zCn8gxB*eU})DB^4f1ju85o>t=J!3p0kKTL{RJgHApR6L!Bue)(TE73g<(|4X zbmDS+#I6h{)+C&fxzN^%eZ#|0Oi@GyGttJ~)?OPc% z;4~ZQu!9O;sdWdG?;-B4s(*r=hN1mwK?_(+3*9-x>jIA80hQXaXL`zQDM_4Bpi4`= z$AM?cIm9(OipIpN>y(xGz97#jA(pkRc&>;^MO(0}sz)AO{vfnYzd-9H!`K=SbyiRS93tCc1zfx%OM7AaNhPQ{m+qC(y?&32%)vRABgqI(XH`le| z8Ace@lO%Js+LdqJEt+D{AJ%+rQK`XOY`K**`BY^kp$4{_6q1`F=WHV)=GIo977pi_ zPs__#pSBA#U)_F_kI4{u3z$i&5?@iqUOlO&2gvoy;^ zTAsg2HVOB>&N*wGWsVTZ!rJOGAVT(e^o5>Q<8u1dug_yA@dmErI!ffjE&aQ1etb}{ z%@+{0X-;X-zhC#@I$st4(&W&WEio4H<=zX#7lmuJqQz&%^_RP{Qjc1blqs-v%^bq; z^i0E6VI&K067_<;JomcstYyIpn*J%P?`=GJ@SW+KZ2L(B`!UnR+@g|GUWFM^ zF_zj~UN41m6u-+tG7FgF3#@cKJJ{F~Qp}?_3pq~sjYyb=M_d&hD0D8QKl%RgGz6r6 zN5@r$)qdy-OdHf_AsDg3`wfoId(h&#P@~$QwC$X`Aj$;?S)Ern6;ZZ5c;kqXMNQ6~ z6xSfTRsJLW1hp@UW;^&t*7^o~_O)va@51aqYcTV_E(kU`4SaVb`LIE#wTVFi?4fXd ze^i8ogLQg$<64w|QS@giLrypsc4+fG`?(VT=|Gz|dnuA+jT29p-Q;>@L^py-NomzF z7uh+(^=lqZy)g!{GCy$TO1pjHa=wN#&m&PF!91VqtgT(3jokZtCdh2b&vT%o3=6O| zrU}is!m|@;{a5R@VZ#ul3dr&3Xv}uJ<&Etek5q@C;89DzJC|eZ;Ntjg)G~ZKXA>*A z#_MV8#;&7U!Kh z?qK}+9mhS1q?Az@B(vDlh%nUub|Sj$j81ZHt89_I%@Ss>3A{fmJ?!cskc^VzS2AEz z98}JN?L0XHzQHMPE>Q}mu?l3~7}f?Vw=cfSm|dkYQyOP;QPmQZ9qU@%ZdYF8PXK+6 z7g2L%kBU%>HB?AkkJr|UEiEkQ37e^O*~p~tKiM9k@0iz9Yxm$tgw9EnZM=Xh84J zE%b#xl=skw;cljPB#My*iKdK^hLhH=Wn}G57=8H;^UT8OfPj6v_eJ}Q!FL2c004)s z;MLTOb=1^;KRr{=%vqtyDD5U?z7_}DJQHyiXW$&LOx_xJ!lz%Hv+jgiUf%3)SUx56C8lSgexCg-rON^{eviMwpo z9KPla?a)MK*Caco&C@@Y2E+~Hf_2`Wd9yo(Jl&*B=5ih2pWS)yb6Z6DGf!3T$X+}h zWLGDsuB0U~{DtSlR85IkaKk4S$O^VSe?eE^cB2z3S?NCE742@NGWOkk2_>D^8btQ=@bZ%3qd3qZd`~mOf_ZtgT zKBUNKZz-rGM9R}s>aQMtL=Ar`$ZrY#uO5D8)TU6%1m{N}`C@Py{x~n9&|e|2m_Piz zNxmLG%fVu#a2_~Ms;M6}D)et5wR8-O|L{1Vzy}9d(r8L40{E0fWcN|GbojI7!2#VNPH;1_K4d zWu2YDNEtK?48=NQq@7_{EEa?L3zUwR9}(?^!5u(R!6orj99awmf|P|I!A=M?0t`pX z$$`;OoHQ8XgmsdGIwPTSSj1l-jC}D_RiZuqn$-ammI?)v#$eG9EC!4~$iTpGIkXcP z4VQ(25zaC)GP2GXv@8bx6AFuw*ChCQqN&S?_e8tkq`bXceoh<^F0W#&gA#;ELjD{v z_COPzsSYSXeY_Wm{O5!j-V#I=|QbUUdi263IDMjEgU^txm3?ikGNb2&VWg%!R4k-tb`#ZWH!I>C<_Qk2VP%EWYLlw}^ zYCxhtsTBLWb$~1GfF}qH4u(L%Fc~u#OkP?>9x5vVk(P%*1f~A-B|_w!p)e>GK~*7A zhN?$d3>fW%kOs>lWZ_tt3`7np{oe@uzn3Trh9S*h((=*>dARi7OH`0L*tmXQR0XO3 zvFyJL{<70isrfZV-9f1vveX|t@^73SDCIx+`b}>C!3b37e}nuZe*dNGU%LJg1OLeQ zUv>RU*FR$59~u9vuKzc>82{|)a9-4dUI4XY6WX+jr*?aEPI_AEfc=AaPF=xG>c~-V zZEHUOKvL-7bBLU$C+Zkz(0``q;}DWa=ZsjR4)G8*tcYp^&x6(g@bkoq!-4|v zL|4$kiPiEl3l{*uFt4MoVrJD;m#$a%X~;afes@o)yL!WdWL|6n^=0<+|Rd<-lthZ`>=JI>_haPz^jZ!~)S8MNiqhe3CizAO=)ihAG8*(Ta< zWPQ7|&}PHpWtnr9Z6v(@t@H8qy>*-5Qp%;MfE=YCBO-U;K2h(^6GA0d4`CKc(C=SV zoHOmrOEcQrvm8Ee-4{~XF}^b|GF3$y+j7N-DBTlR3P!e*9zA#I+OASLHSSSs#t7xY zk0w3Qt-Cq6n$^Euv@vN|vhB2^AuFuPFV| zk7agq*0xOtZa?VSG$|q&*exi~soVxRam$>1ZoXRMoxwQ3Tl~~&KGW~2Ujo>|25rg@4&X`!ktGAlro2KmZHCsbM5 z@k*0dV!*_6q5SY?ni9;=)`#qsGn`Pbn>Y5+Cj$4;QZ?gUshS;r_C3o|`%8N0%^Ay{ zi@JA5WH+i92FFLIiv?_>jdYcWg$$IJzE)+emk+sv-BJb)mjwB2W3AI@tZJ~X%uC}# z({F;#2^;)bW8A9eM*D5StPCy5I7PS)b6o^Oaq-gR} zwjJfJBWfC#FEYbbuA8K_qPw!PANPyLloxV8v-?mp_dFL__F=U%tPUR^m@U&16v?Y* z#~&y@!QuKL=&NGjAvN^-AW4Ulay7-xjY3Y=EH4)=yBQk$)H|xDP};0TqOFYL!1K`z zDaFM5th1x2#4k+Hs*S~&>w1o67g%k~b&uGz?r3WpTZ-yUcgwDS2wKbXng1Nsu(f*~ zaosP?=7_s;b9r$N!vL@A%F1N{kHgvL6o(gRjBHQ8>7C_B9k%K@rrBtfv2?_2()+yeU~7pKuiFKH**%2DyWCcEoyNPQr&GaNc-=?LE{%?b zH_sBIrcdh=)y@d_tUAlvy+FY;)3*_%JOrb*(`ewU#_~&}$u5mM;Uu~~g%YvWaHE9x zfo8n84sNh$8i_6L5R)TwfP?Nw@n=JCXVlq|p)F6AuKdv4_NbOF_E&6|uyN8WZ~NFB zv~+8Uw-@SouG_X)x|#bL)aScZ;u_ujF+o*p#`)?dp3bdD{PWe05N`K3Y7N|-WVu|n zl{<|C&GI}EMwR=EoerGAA>`%GO#hOaipD_}7g~X{7rnXNj|u=d-BA?r(F_KGoG!=m zq~LD*Ye;uIy%yNp-|wS0p)ok|;h_;hd!gObtD-_R{+;{x0Un8oIxpIe7=;0WgGs?cBd5;`t#d}U@#bY|%=9UD zT(w{_49co>EqMTS#O5sW*Y?r1vHQ2TFF-S|UXbjBB#hIQ3HG{`R7M!R$E$q_n%d?T z)_QQ1R~jlGM=L_x9hgt6P3reZn&OrsHFKXuyJGTb zZ_7&xuzu^L?5nRG9qBTe%=Z#L;_{ZYS{K8|on_MbmkOQYT1IPCxuRli1Xwx}(onl+ z+q|>1{ncKjuk=pG3D{>dG~PTdzwR*Nq!-P{w==r5HR@#vP*6UG9srt|buInKy4jgt z_Kj01`2E6Ls|)9fuJcHjsC?%S8_VHV4KS2QT{`o`AkhaoUcU4g*aEG$=8j_4(z?to z)Q8TetP8e2TLy?`1uv66co~RYor9F0V}hQ2wbj1$T;w88S#JBfWaiV2iO9AyM%`Dp zEE4N$-Y{Rk(D}CG?D~15o4WGlSy@>*jNR4)7n^x^wr8`qvcl*=n=7Z?3LAIcllY^X z?xOj0!~{cosz%FRGsPBP*%>_gLgXq-y29cQfyZ(SL!2GSy)JGg3jya1CGR+vs6mnL zg_PW0x422Y#4vR(R)|7rk-1H*fTmMIGdEAvW#NdTCqrJ=X;*Q#R}@Wroh8}Na;e53 zmoo~E;v>qVBrHpNN&KBPCVHAB_jPFX4Mta1M*zAVQ=y`{*J&sgHjm(}r@8{&=eAF= zq65}}^XC)~w{}JKpLKf}BPv%KmzkVFlb6B-!T@l0UCci9%gHLylmR-k5VJSTIb6W4 z)&q#?kOoIl_xx1VmAm(+G27^z3SEZeF6So5vAAjNI97N5Zml?y)vRQZKv}T_^?$^; zP@OB=GU3t3yH}g&U3$`PJSqfYUeX(h@n8g+!;5a{WIv$tMvZNP==zn3Rwkh+zgpoaIh;9d2@$3q86*G#_HR)2sVqfIwF z)g-6o9uK66-o0$Y*vhR=Dx&ORRwmhNpFYj(30c?NaX5cpYx^@{FDjd*uP0A(k0;~! zD;1! zZQ|q3)i!8eHk7+Bkv6j{ja#r2&RXkLv2uK8cTehg?PzRvtKi36lMMHZn@rQ$%l>{HQ`(*qe&d%FdS=Jf=>?Yi%=r?)=2@9a(*JzraXvHCb5 zG&gnigK732adO{udH)UlBE8~|$(7y5-yCpfKxsPW(HhjV5kN=7Q2nv0W5j;}9r4lv literal 0 HcmV?d00001 diff --git a/src/engine.cpp b/src/engine.cpp index 0c447096..c9da3e3d 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -64,6 +64,18 @@ inline void create_channel(Engine* engine, std::string name, NumberSetting& sett }, true)); } +static std::unique_ptr load_icon(const fs::path& resdir) { + try { + auto file = resdir / fs::u8path("textures/misc/icon.png"); + if (fs::exists(file)) { + return imageio::read(file.u8string()); + } + } catch (const std::exception& err) { + logger.error() << "could not load window icon: " << err.what(); + } + return nullptr; +} + Engine::Engine(EngineSettings& settings, SettingsHandler& settingsHandler, EnginePaths* paths) : settings(settings), settingsHandler(settingsHandler), paths(paths), interpreter(std::make_unique()) @@ -71,10 +83,16 @@ Engine::Engine(EngineSettings& settings, SettingsHandler& settingsHandler, Engin paths->prepare(); loadSettings(); + auto resdir = paths->getResources(); + controller = std::make_unique(this); if (Window::initialize(&this->settings.display)){ throw initialize_error("could not initialize window"); } + if (auto icon = load_icon(resdir)) { + icon->flipY(); + Window::setIcon(icon.get()); + } loadControls(); audio::initialize(settings.audio.enabled.get()); create_channel(this, "master", settings.audio.volumeMaster); @@ -99,8 +117,6 @@ Engine::Engine(EngineSettings& settings, SettingsHandler& settingsHandler, Engin addWorldGenerators(); scripting::initialize(this); - - auto resdir = paths->getResources(); basePacks = files::read_list(resdir/fs::path("config/builtins.list")); } @@ -171,7 +187,7 @@ void Engine::mainloop() { if (!Window::isIconified()) { renderFrame(batch); } - Window::setFramerate(Window::isIconified() ? 20 : + Window::setFramerate(!Window::isIconified() ? 20 : settings.display.framerate.get()); processPostRunnables(); diff --git a/src/window/Window.cpp b/src/window/Window.cpp index 174df4ed..bb266afe 100644 --- a/src/window/Window.cpp +++ b/src/window/Window.cpp @@ -323,13 +323,13 @@ bool Window::isFullscreen() { } void Window::swapBuffers() { + glfwSwapBuffers(window); + Window::resetScissor(); double currentTime = time(); if (framerate > 0 && currentTime - prevSwap < (1.0 / framerate)) { std::this_thread::sleep_for(std::chrono::milliseconds( static_cast((1.0/framerate - (currentTime-prevSwap))*1000))); } - glfwSwapBuffers(window); - Window::resetScissor(); prevSwap = time(); } @@ -375,3 +375,12 @@ bool Window::tryToMaximize(GLFWwindow* window, GLFWmonitor* monitor) { workArea.y + (workArea.w - Window::height) / 2 + windowFrame.y / 2); return false; } + +void Window::setIcon(const ImageData* image) { + GLFWimage icon { + static_cast(image->getWidth()), + static_cast(image->getHeight()), + image->getData() + }; + glfwSetWindowIcon(window, 1, &icon); +} diff --git a/src/window/Window.hpp b/src/window/Window.hpp index ff52982c..44e6e7b6 100644 --- a/src/window/Window.hpp +++ b/src/window/Window.hpp @@ -55,6 +55,7 @@ public: static const char* getClipboardText(); static void setClipboardText(const char* text); static DisplaySettings* getSettings(); + static void setIcon(const ImageData* image); static glm::vec2 size() { return glm::vec2(width, height);