From e44fe9f8ab039a5d167ce6e305d419e7f9651afd Mon Sep 17 00:00:00 2001 From: Willem Date: Fri, 4 Dec 2020 12:32:11 +0100 Subject: [PATCH] Added for reference --- .gitignore | 7 + .project | 11 + Makefile | 26 + data/font/fontawesome-webfont.ttf | Bin 0 -> 142072 bytes data/font/lato-blackitalic-webfont.ttf | Bin 0 -> 60592 bytes data/font/roboto-bold.ttf | Bin 0 -> 514260 bytes data/home-pulsefire.png | Bin 0 -> 759346 bytes data/home-tesla.png | Bin 0 -> 463167 bytes data/pulsefire-flash.png | Bin 0 -> 262375 bytes data/pulsefire-pwm.png | Bin 0 -> 133468 bytes data/vasc-list.png | Bin 0 -> 355485 bytes lib/imgui/imconfig.h | 54 + lib/imgui/imgui.cpp | 9848 ++++++++++++++++++++++++ lib/imgui/imgui.h | 1400 ++++ lib/imgui/imgui_demo.cpp | 2638 +++++++ lib/imgui/imgui_draw.cpp | 2393 ++++++ lib/imgui/imgui_internal.h | 775 ++ lib/imgui/stb_rect_pack.h | 583 ++ lib/imgui/stb_textedit.h | 1322 ++++ lib/imgui/stb_truetype.h | 3287 ++++++++ lib/imgui_sdl/imgui_impl_sdl.cpp | 399 + lib/imgui_sdl/imgui_impl_sdl.h | 18 + lib/soil2/SOIL.c | 2040 +++++ lib/soil2/SOIL.h | 433 ++ lib/soil2/image_DXT.c | 632 ++ lib/soil2/image_DXT.h | 123 + lib/soil2/image_helper.c | 435 ++ lib/soil2/image_helper.h | 115 + lib/soil2/stb_image_aug.c | 3682 +++++++++ lib/soil2/stb_image_aug.h | 354 + lib/soil2/stbi_DDS_aug.h | 21 + lib/soil2/stbi_DDS_aug_c.h | 511 ++ preboot.js | 40 + src/page/PageComponent.h | 106 + src/page/PageController.cpp | 76 + src/page/PageController.h | 45 + src/page/PageDraw.h | 15 + src/page/PageFont.cpp | 69 + src/page/PageFont.h | 27 + src/page/PageWindow.cpp | 130 + src/page/PageWindow.h | 65 + src/site/FFSiteBackground.cpp | 72 + src/site/FFSiteBackground.h | 16 + src/site/FFSiteDebug.cpp | 105 + src/site/FFSiteDebug.h | 23 + 45 files changed, 31896 insertions(+) create mode 100644 .gitignore create mode 100644 .project create mode 100644 Makefile create mode 100644 data/font/fontawesome-webfont.ttf create mode 100644 data/font/lato-blackitalic-webfont.ttf create mode 100644 data/font/roboto-bold.ttf create mode 100644 data/home-pulsefire.png create mode 100644 data/home-tesla.png create mode 100644 data/pulsefire-flash.png create mode 100644 data/pulsefire-pwm.png create mode 100644 data/vasc-list.png create mode 100644 lib/imgui/imconfig.h create mode 100644 lib/imgui/imgui.cpp create mode 100644 lib/imgui/imgui.h create mode 100644 lib/imgui/imgui_demo.cpp create mode 100644 lib/imgui/imgui_draw.cpp create mode 100644 lib/imgui/imgui_internal.h create mode 100644 lib/imgui/stb_rect_pack.h create mode 100644 lib/imgui/stb_textedit.h create mode 100644 lib/imgui/stb_truetype.h create mode 100644 lib/imgui_sdl/imgui_impl_sdl.cpp create mode 100644 lib/imgui_sdl/imgui_impl_sdl.h create mode 100644 lib/soil2/SOIL.c create mode 100644 lib/soil2/SOIL.h create mode 100644 lib/soil2/image_DXT.c create mode 100644 lib/soil2/image_DXT.h create mode 100644 lib/soil2/image_helper.c create mode 100644 lib/soil2/image_helper.h create mode 100644 lib/soil2/stb_image_aug.c create mode 100644 lib/soil2/stb_image_aug.h create mode 100644 lib/soil2/stbi_DDS_aug.h create mode 100644 lib/soil2/stbi_DDS_aug_c.h create mode 100644 preboot.js create mode 100644 src/page/PageComponent.h create mode 100644 src/page/PageController.cpp create mode 100644 src/page/PageController.h create mode 100644 src/page/PageDraw.h create mode 100644 src/page/PageFont.cpp create mode 100644 src/page/PageFont.h create mode 100644 src/page/PageWindow.cpp create mode 100644 src/page/PageWindow.h create mode 100644 src/site/FFSiteBackground.cpp create mode 100644 src/site/FFSiteBackground.h create mode 100644 src/site/FFSiteDebug.cpp create mode 100644 src/site/FFSiteDebug.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7573c65 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*.log +*.o +*.bak +ff-* +imgui.ini +.DS_Store +Thumbs.db diff --git a/.project b/.project new file mode 100644 index 0000000..61e03f2 --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + ff-sdl-emcc-test + + + + + + + + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a0495e0 --- /dev/null +++ b/Makefile @@ -0,0 +1,26 @@ +#CXXFLAGS = -O2 -g -fmessage-length=0 -Ilib/soil2 -Ilib/imgui -Ilib/imgui_sdl -I/usr/include +CXXFLAGS = -O2 -g -fmessage-length=0 -Ilib/soil2 -Ilib/imgui -Ilib/imgui_sdl -s USE_SDL=2 -Wall -std=c++14 + +LDFLAGS = -s USE_SDL=2 -s ALLOW_MEMORY_GROWTH=1 -O2 --preload-file data --separate-asm --js-library preboot.js + +SITE_CXX_OBJ = $(patsubst %.cpp,%.o,$(wildcard src/*.cpp)) $(patsubst %.cpp,%.o,$(wildcard src/*/*.cpp)) +LIBS_CXX_OBJ = $(patsubst %.cpp,%.o,$(wildcard lib/*/*.cpp)) +LIBS_C_OBJ = $(patsubst %.c,%.o,$(wildcard lib/*/*.c)) + +OBJS = $(LIBS_C_OBJ) $(LIBS_CXX_OBJ) $(SITE_CXX_OBJ) + +LIBS = -lGL -lGLU +# -lSDL2 + +TARGET = ff-site.js + +CC = emcc +CXX = emcc + +$(TARGET): $(OBJS) + $(CXX) -o $(TARGET) $(OBJS) $(LIBS) $(LDFLAGS) + +all: $(TARGET) + +clean: + rm -f $(OBJS) $(TARGET) diff --git a/data/font/fontawesome-webfont.ttf b/data/font/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..26dea7951a73079223b50653c455c5adf46a4648 GIT binary patch literal 142072 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 +|+&Vdls@0SAya!8#E9iVniRwHu0GY;H*n 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�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%0D0!#Bo^>xe$Z4SmykflG_VnkLvLv4@e#4_y4Q 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 Z;)gUoZPWZlq-jK$eh7U(eHYf@{|V5I2Oj_c literal 0 HcmV?d00001 diff --git a/data/font/roboto-bold.ttf b/data/font/roboto-bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8869666f245c6f474b98024327df7082e4c868b8 GIT binary patch literal 514260 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 >ARMc}S>bXGcId|*pz1bc4 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�$Gp(^HdA?v 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 z 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

fF9kqlmNmR|FtiYep4Y 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%0AQ2;T9Rn|^idIqUU4%R6I@n7Iflrg+Kl}RO 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 Kh+tKX`t4`lB6E)3MWvrVI29=<6?k zvHAKNE+c}be$mXC$}}Ai8WJO{DUrIFRix)1|Y@&03ZNKL_t(W$ixC3 zwY#z!z8139kR;-cMJH8*Ntu1N$P zC9w;|^E29E;Bzh9(OCq{qG=&4;6O~0`_21f7SFHP5gvOy z_C!C32wQ9F&M86AyB$rNJCYDFtD3czn25HBvtzj*oe_3kbu?z)t+ z5TgiFQg4097_?ttqn;QEM&MCP61DC0lXD;cANdUw^k64a^EdZR*Tg-_dPK} z%+SF_SXj(Wh+?i3J-EZw_08qGi~VL>>*Tdst)?h!;H@eq$$bw95|oETm~g%7KVGLt z+neETn>LpSCPG4(=9di-48aIM0)-26PI@ku5R%R#{*=TWRn^pVmPXHx;FPkrY91Pl zcwtqW-filyU;8&#x|@m`mRf3SB*Y|mjPxL~q`c_+2PgT#sq{TEp%4YF-kn;TO<6>Q zGkqoycr>%(!9)0X52l$1q3YT~hGqe`l4G&cf&iI#8*#wT1!nRb`^wb+f5^Mx`Mk9mW!W*Oc=;D0!M1 zl1oZ`UJR?1dVBNg^*HVjxmzqGH?7s?prR_lyhc|{1DR&VMiuLa`yN* z_zWg+a6)r0Q*D>qR-0CUPnU~FD4Z6jL@x?}*-N#mIJ008{V0gx`Kb({`yiH-h>xa^ zV;SCkMq)B^yo5xUDX*97kIu@E&vv)lc2{SJYqwYyt*snh-%f8XZXXPAe&UIg;E=?Z z{TX7}ZuZ-4t&NJ>IJIdiwK)K!EU6n(%3a@+h#XyS;XAqSD#sKj+P@x(JaUXEM@sS8 zrF%!OdxRFkF^6*}G>#v@6eTLGv+Fg;L;y}sVs7C}4niC_I>n;Lo|?obKBa z4GiXc3L-@D5Mh3gnYpuYT)gl576vZlPUL2j>R;FTMN4q9Ts}JMmnR>04?oK5r!=go zJ6)}_bjCQAawyZT7GUyuK;_Khh!!Ao5kLYYM=+l=^GGxv4&T1{_RBZl-5qw4Bqf%d zBr%W!6AFSVIv(Tpo^n=g9FfUWZ^$SGPk%9O=YaDnHviWu?SVwQcA70meRBi zLzm*_Eo2st#d#5{=B3tgn$((z)TTk%w+QIA7N**ia-AZmSJPN`n|+zgHDITRz)8B`7n(N(YpqEVkvwaL zh$JNle#`u%phZ}m{hs1t@WS`AaIU_}i;4Wm6wyj%^Rp7lT4PjY#s<0wL$ zBn#zC^C5<2##(TS<3wQ`-c4s_r1^##6L41zY~q6ergI#HR85-_8D%n6 zy?O88^!PJeo(W6WCv_di;$@yTi^TaIHLMiwtyVwspqV-6&P-ctQz?-b?uXUG$1gUU z50~%WyZg{D;`%;~hjKVft-8BNkkeA`dKNY_Ekzxgwx&%e$9EzSq?`@3*3uZ!SS@0I z*m>5WCnYn^8Qq;z>Xxfg>esJcZpyY>pM3cKZg)LqVt0(akH&@+JQ$1GYT)ed>4I?- zj{Z%2u>)ZgHSNe!3VilqY^Dv-`^DnLvuBHQyt!3iKrloQNr)~&oH%!R+)v;B?KgqF zXmyGm1aTf7Kji1 z{OkexW&1z=y#3pa?=p2CJz2a@?VnHo<7e_$zfXVf6Z%Py!+ZP7e{uNdzr-(3&({C> zvy&xl{_pF3rJ22hU}qbgKTU?$!I4D82}TTyry-Iy%46vFyr#Vd-YpTI>Pwa z6CuR}27fS?L}UTu2~Q-%L31@T3Mb%w74H9M>s@+nyRQ7c@tSiz_CAk$?t_=4NJ^zw zsVo_#vf~&Ck|2N)2XHfKIOzmI@)ew~kS~x<05_bZVW(vSF$@PVs$nOUM^&myR*8}* ziVu;z?|bff?7i1obIvhF8e{E4HlhY0Q4)FY;ofV_ImZA0`>iE+a&;EE<3}PQki{-a zn;mZ5zf@N$lWy)?KMvjf5wQT^{tNK zslF`59MxhU3URC9UYJGJHN6G98+eTqt*CuBjr<2iPt%S)xgfRb9Z)ppj;(2H%`6&u zfgL75W63ezN-WX*ieiw6;1PnZwi+r|0B1Op8YJdW=71Zq*zsN#b0>>q!J4)OQ-$M7 z>u3*hPFa%G8pm{Pt<8E|dNK#nef`ZLTC7Nk9Z{GpmB=OhV3Xa><72&uY7 zT{5iIL0eEnTb5;-4@|2_yf_>YP2Yj$idVt`V_bhze6kSh|UIp7<1*X^*GU1L0W2ga(VlU7xvj@tIe5` zTB}Qq|DmK5fi@8lp_KUigx|jJZ=I#>*d=zN6%p0UVl+q;C~5e*tZ*EcM9~rvYh6O! zeN4DIMa99<*3t?{pmc~hE+}^+C10foE|Qq2wH8PMRWq%4e6q(~Cmu?zDcE9wkR0DU zFX_Z(({(B5+^VW*0|PYx%sGijt!*g+lxnT2O;v#)o)Jx(ni8?3&d3lkKHvaWb*Tzn9*6D5-Irwn zv98OYUaL>bR9=-gm)F`rO$p)o({o9Ae|sx3eCPY$R)SZTSJUoLwGrMSfZZLm)wrof zi!ip-fX?AMLH0;3!`k1Dq-t4;6Pgtw7{-fnE5iv~Ek=S}pFw@CZ8I5oDQ#JnW+p6v zuIh}~Z@1?UzxACz`swXBeD>_C!|i_e;Oy}azu#|9{p@7p=lAMmE}Bj6)#;0BQ!Ur6 z+U?c&_rAs3(QVrx zmgRbW%~}VBd@@kY=!oF5Ik|svKX1oZ&p!X%Z+?Ee+l^`LM(O&FB{7heR$Hm9sW)?A z7F6=dhpV>^UmZT~|MIQVKilFT67+~*aPw>ZgabQp(x75zb7U&Ypoq#9o&^1_$?l~?&Kn?SJ!fQ3a)E{2i63K&FJyI~%2Fn^k zt;ge+NboYm%tff)kupT^C|*GXR920Ei^oC=5Dic<3RMK|iWXjH3lM|pdMYvlBytBr zH;AE>Rg0?}2YN>s12RTjYi+6-DRN85LgtRHsv2f`3Y)JtRXVntVh|CV7hwu;Pw+Ww zt4$jsr6kOPs|E_zwWc|Mf@9ToQ`^rM_^kq+on1V*z^;FLy!Q^Dop^WR>14CXeP6*# zski%m(T2i6;nf3=Zx#y)dmN`C(oTr5l3S-~`sB%HpS}2UE=!OcfryhJqtm*=38?9c z3PlL;IuV%$XVT~SFi(XzWPluHtWwId%(Ych2dG2|9hng#=k5fKB0?M;wlyTTxyww% zXhJJR|8BjG0EBl8qqS^o{`CXl*bGZR?yXrV=5D5hh=!_eW|D+}oBC4A<<;(&&+3yK zTAD^XWLZk9T2=clqq%epM9j_vL(gwrq~CiuoDE3`%oWUIA`=!Ja3hBZqsPSOSP(fj zgWV#?wf@2#B1#@F{6IXYH#8T3Mug@KfJ3gXR-+X~o?2~jcnjccDFxOA`T9gsH9}4) ztzI2>H?PaARr!mL$gn+rk2>kPt~CWeeh@-3bL8l*8iA-k9#@`by3}IeId}bVy1&^y z`TXPC>o=*(03MO1)>=5>bDtyBWNxk2stuV`%^Z;M?CdP%YzW3nVqqsmGpy=_m~+Z0 ziK>dAR&apSF(<;NhiN$+4%*z%hCZEv)#V_G|M1`W>)-qK59hjk^xKa<{naOSI1p2* zek>_qOhO_bCnBqQj2v7MP~BBqsmr=JI!ZR0wldA796)DXrdD?2X`Yu-XYDtApLzsR z)n%EMWtr*(0J-mpa47|ma~{6`qrdjSkAFBjeEG`{cVB$QkG^y9dFTrsmPi(lQy;o#E(%ajOG*QGop$(&O+Y{v1lAICg&OrmM~^7MO${CLF8 zHf4m?TANDoQmk21cjxQ<)F(T;cP7~ksqC<0f9ve@a5((#!;kmRU#hwmm~}=!*+Y8UDY2^7tP-9^XIB=L7p|ef6{Xlc##41l!ZBNj{qA zFIuYrmHeaW)w5xDh4ftn7dqK?SNq*3y7WUD5P;yaOpk`)t&{G9Q=F_le?491XWM+8 zmkSKb4ML^_fUPvGkR&BZX&mVBTO}p9e&b8=TGzsTjGV$icEmrUI}yc8H%1-nV#X{- zV!bv1S8IqQ!T=yE9Zi8kK#Rw#s>D>?R6`GJu4|_XDHI%QVCEZO+jytM`#!EswwiGL zu2gn6Cu8Q2SR<0JdwCKeFkI%vFAZA9*zf_!(49RPQD5pZmp2H&5YrDwwUF+SFq$bi z#6=>+h69K`joWa15cwzi*~TrWdvxSrRd`s7TscFlql;*LbCwUh`k zaJ}osL2~leR9n>+i^H|(0j>@~a45AMaj(cM%y(2BU;BXTCXqQMiWXBWM`L!y$i4=F zo7x(NS&^Q{M>Me??+SiAi+eZ+!O#tm-TY=c{8^)~RMLaDhV$WU7%ztN3)!A}zMnSt z`|UUYxj;t0jtya+=iB{$wjz=g$y9;Z5zL)QP}u31nhvZykrM&nez*J8ryqUx@-ugp zEGcCYc0ytV3M3^Q+mv6Mr)#Zt)FivBHf>eSG(tcT{V7$KWeFpkdIN;H93-bC5`ovo z)wB|0gmsdH2L)a+BwxZfY@5>8~ul2YosZWvEahH*6YsZ7hV z5MfR^MnH)<;BeD4-`>2reDi8QA9kfIt+r+$nEG@woFUV=8HcUh?3dkPNetX2Vmv+F zynV5G+---;OTWBErzAv<2|*+YQx;ws%e01yR=UB_#i`LlT`h#pBJQTE=bVs*Aq1Jt zAu697-@$1=zkap+;#v9Rs?IgOL%u9at<4=$N`#E)=%Ct2Qc7~ZrFYNM#inDTrj^iu z$<1wTK(m`tEL3qdSgbuZ#K>lunR~lahecK-mXAc3Q!?{bTQieV3!4*hP6?Ur(6KS! zPMJJDABcp=BHol}%^3%9IavB4k?5=dMu=cli!EP$sCAbfzn{j*JkLOB z9LH{Z+9muxyEpySFMhMz&j3#3L*E--t;<)oSi-6&kE_J0t?t2-q&m;c(cs zdhj}zdA_;1O5J#JvN=87SOXAGiHW(irOb0(T5SGv&Yh&L>+e5&=kfdBe)HH2EiY{$3X@?ktbKj(g|ZMi*^7n<0`ZeHx4JgrlOX*xYjc=M(bXUT3#fQ&S3#%>&v z43aVvx|!d9>-OPy=l)(L*5+Q_(NtBJW<{rcsRsGv-uC`QFZ{*s&Di&&Sa;DO>D9|; zSD$=YcY9(=mWV|X< zKb$b&&F(PmbQ$2KHo(^0cdjQ*JG7~R6mQo$Tia~XALQ{2sV6*x@BM`T{S&(o*j?f$ z|M&UNKHKeXwy)2xw+u(65u@uG;8inh4Uu!-(Zl^Tf90%=digQv&U<&9W>6_On2svb%Gmj^afsAjfJB-0bryV%#=uCgt1P} zBeonY%{8|MxWbY70}!Hkr1~mQjfUX5ZaNON*5fHN-|@gr0lnY zmKKvVSgZLlrikub$R&Z89Eeu5=z6z~`apD$*BhE1HvoZaq)-AxugKj+kOhg^!*pW&74Hys|3W(82>9=$MkYo$3usH;T8J()Q&G}WdJg3O+h zBx;Ew1W!cBr0&+5IkuwnTuhx-w9|2$XkJPQcq9=qlSq!4aji|&L@4C|Lm_|>A-EGU zi!vh-R5y`WLDrZ6tq#7}oEZki2plElaoFZGw4$vwkxpxkzAQ4QuIo43ezO6D!+zIV z?Yb_d#G#{H%PF)>%XD-3=Eax$`F7uyTC2Lvby;T3n)=NK0SxSLD2~*fY}~wI+n$}h z{ovvIXWNsTYkK+AmL=f!?9M1-9uUk_5kW|3HGUd^*IIc^xr4B*UD~6C43WT{i4?*X zu-c+v{cl`dZ};`Z^Y-Dh_ViHa5)?Nww`EzX`8aG?I40*&dKky<(LMRjBY*c4gwS2B zIWih}^cy54LX@sM=0!19>nm(GT%Sj&)=^0;@#kA>De;jNw_e^vR|RPjHb%6j5wwa8 zxS5CID!?`YLlI(kYfTv`bqQB|%UWh&fK||~TIXxH{M0)FdaoN!2-D$k0EgDJX)#kk zOo>G#GKN;Q*5&{#b~m7R@SE%Fn>SbHM#qkHsV!h3!!U|)T-|0^T2uG+#%%5>C+2YG zxPh5BAxb2av-J%Q4TC!isM=aHRSSq<&{}hre(2m|XbH@`*^IY`<<;w}lhdc?4oU&3g79tvkq1N`N|JT1M(=zFdFYRy(=0NCc0K;6>qLJiTp|Lf08Xtd<{@`!z#xq*l8PQzJ%U1<5Ro8i% z%i*xUxdGije*CS|`wy8Zw*{7cJzQ$p?GFd|>XL5ef!UDJO;XCt<4G4(rM6gU6&VOk zRa2K3m{Ax>6`<1j{QlYW!IgY*nSQ7~=(l)2RH~jQ( z^LMv~=lqzu%m20gn_twc|MKFmzlUcp%g^rf_ut2VFu)%Y3xGB_{P^S-|LW2I@Xvnv z#R!jk=xb|BYlPJ2o-lgC3Id3Y0CP^5^MY9B;_cE}IM@)G9h{IIE$Y5z=CE4mfCRzZ z8wBJ~!&w_1;fU77=p^!+ZlYJh1&*gT5{}b~ zsUNjbNJJ?~40K|CU|(BLjfx-NBnCxPdUw_VC{yof@jnML3uvavA~kz;pfjfA@^BS#^C zS(q)@F@{y!*SJukW7aj0S4c9igcH001BWNklAm-EkK^xV;Ka22HgEBsBQl3=s51at|2}Au0gcQOsqw4i-ZjfB-}eT57e{G7=>Q zw}`Lv(P+D_uo02*&cbHy>UP|auI;HnjWdHV15v9rUJ}pd`m@QeyJ7SAad&=pZ#a27 zZQr6zhv{Uq-FDkf@={wZ%Wj?!vFnG~%}gaFWUjt0aWN9^v2_b6EubUr_Se7p-EUvK zd8yXIAC_~+Ny7Xa)lcSizrTW58Lb(ZW4!H{ODT74t-xEf+NS+MA+*gXDXAL++F}e$ zOt7Yekcd)F<{FBQIJ~t|cenFAFS$!8bq3%_X3arqwdPq6(g6ff0&0(=t2P#n+Pjbh z8N|^LT}aHdH5DOM6PCCanFAvUVyl)?r|zv80(ZIJY);1UbeY?JzmIrcmpejL^4yR8 z=49Aza!REZcgs2FoMT3rB#{KhsZBRmHsFK?#W4$IuMIzs9*5uTiG`|TjPQ){Kw zC@iB0XMS}5;)f64-ISa3>N(h=!c4#p!OAc-TI~bOObBtBpnwy_IuFrPLO=RU@0M{y z9Mhecdaw6bcLs9v>;3Mlm+ix+<>_uNwIQOpX>0R5n?ueWvUE9xoK3B5x8uEw^!5Y& z&b_qhlaLS)n6AGFGgozHU@oN~LJT*Vg$U#4b0=#D2y90TwlzLE>ueXGwZ@WCN=;ov z*whiIwOVUKFhUN>bO_g(nK;FlFmWQVBP5WHD-n;65rF5M5WpQ+Nq{?e<@O_GxRiizS+srZol(N1Xq$V2w(E5zKF`wpNiKcSEanp7wQF zN?pn_*IK$RCl(}bYFKriCIYvr>{wDZhv&~;>~{NY*D;YQwN{aEKFnI7x)m+4dR_Lr z_W5s;FDA*}dZ#5h91c)zSz4)Z+K~2Bn`?k&9TeQ6D@C{(EIY|UiG_(7w4RN*zc|_5 z>~Hq_H`mM37VdDjyS;qzETRA4yYIgB=0AncD_9cFDHBpHP0gV-RP8u*ors{B_?UE&{g*~hn6FOqW+)GC zK;}+p9O&`vUbc`B+8zQgMtO!{i?~b_k)e$=B09`Azy)Ca8x*1P;&Ut&0txWnfSpzTv zy4&_+^y5Q-ZKlVr&2ckeD}N~l3Ahr$AP@&*m+lY!`{yTzLtU1g=5gpp+H9{&*)RN? ztKsbzySEzb+Sy^|rcE{25XgkYEJ=XLFq)XcDFYxe_bJ6mPTjR>Li$?F4Dby~)cUVd ziei(f{KWc<7??=bG)8RySLVCf+7w6k#5?1W9r)fOv zPccbRo60;bGcab!j-*YA6A-T9c}Ym@Om`}w=xaK_<>i}SfA-Of>(_uzOp+*fLc$oR zECOM2;?)Hkvqsa{VX9dS`yHK_Z3S?fnJvp)mSri6BQ|R}r%(U^qI$Dx0U9HNuFJ7- zWfvlJQvht*_WSv8yHFxz1|TFP29}Tt#tn-Isn%w0sx74mCJ`dkQgR*{@wj?+Lef@| z9NdK1%+N7L&IrU#U}P3-VIgF&+NE(APIB(cQs=q2ktqb&J@=V7b=@#*w*9y%%RJ48 z7|0#Nq9P(d(CTt^`TF(CPp=QJc4a;+y0kXe1;8mMk*uz@)@rV<^D?94)DN7~`Tf)H z-G7{KZt%-r*!4@1B$7LZK$9>+cr8U(j)J+BPX++)N3Ioo^WJjQ3o3vDcuFay#LSVY zb~P|q7X8(i*S~sZZ*I$Crp*AowmL6GTO;O_1Q69)-*sjnNyZ_+b%MWlCYvrZ3L_>t z`mlXH^toHB>SoM{lGo%!V4UNR$k8uu&F_-$YtUlN;JXO5)`+mnNxIZEA^@@$SuKF@ zy1Uz|PLr6Bi-@Y<#Sy+S&9j)%m}%%q34zd=B0*Vg_Xb{mj=<^uJ1pEKvDV_XBrGxG zsit*>(voTnstuBunW}aDK+AjtH^ACaLLf$Diava3E2PUP6bh^e>Jl8&T4uzMol|o` z;>=C_=K7YZbkciMCKQ&j>*MJdU}af~Fzt4(-kyB*Rm$D6RCizI{msp72tohg$KU(l z_uqN(ubKbskhfuYP{o8FkvMVfJo{#n{FJsapZ^Z;>m?FEC9p)P1-Q)z|SH`{JAZYW{1>JHkJkr-Kv9bT2`6@rZlK7*tpz7QEv z7J<|!N?rOJ!`Xkt|Ji%^pY(7K0Gw>hkADjCkM{rapVJrr`Tg&{&Hq)0KSj@h#sP%p zgnNV!wJ55CFOvo@eJhX zi|N|n<0M2x97`Vtx17@&Ju+ox)u0{fU05VGQz8Neae7z>QOF#M6IBc=tOFx6QM~vF zNlhcA9G!`E%#L8|{VyI~&MRIH)*X;LGmqmYC_Bue+RVJQO2nnq)MYnom6jWmF_+Z3 zfzpujeXcXqOLTB_z8mm|`}Wu;k7rP<*w%w%h=U?(W^3@m+?~7u;{9>>;B0z!)4#gi zTbT&PVc68U)Vclc+CR>zdZL``ytLNL5!{m`X39AMG6D$;@_K4yk-GvB5QWw6P9Jnk z_pc`7yJuQh`5YwL<8iW(oB<(Ij=g;7BH-A|AtHnrZ0NF-SQU#%Ti+rOe_xC~3Nz;f zen9 zK%n)n6dS{M^2eRP*I-C&SK$uhzW#hz9kdlSE!6$m^T&0no8k1~TjS~dZ9kr;{v7%X z86Whgr{kFlE7&wmhq^c+i&S;B$~iS{wHZk!5hq?vy%5fAB4#yx_VU%IUw(FZ`^sRY z^RH{c0E~eFf^)QMwXMnaBUTh_tH*J90ih<@V%;bUHc2ixW zadG9~V@L>)9jvw1RJjuo$`kr>&u0zfSd zz=b8gs;xCs7h*R=Fz^6n0U`9=X6(;$9$V8|6kH^WI6^F0Mfzdvhe24(YHbCPVs>R_ zDW#Nhm%Cc$o2#qq%O`Jkm)B)Cx7Mmtk}(bHE`2wiZn`0>!&2M4%t+XcgKY1eo}T{b z!GqJXq^~}PtJg??hzXql6LZQ80F30WxSGS(&{CW|2^ooC-MJ$Ggn`i=%2L;6OmJl# zt*NP*IibI}IsE#I*T4K~cRhmwH*;aGt(DTsQV=mEPLj+q{x8gOy6NA$hd;Q$`+ZNu ziBe7iZp@g3&B=6a2CdR|1z(nc3AYA!h3@!*6Rkz*V3GwOBOVAyel%-=nMzYfkUMhmC)>fCLwpN=GF%s*V)G8k4RChhfbBNbOZ~XSmbeg8t8WRyh*Jr}6XOAk&Ag6A- z*_@u9&C_&#cK*X3{qWKIj~`t;@4EE!pMA8H_Kk$B<8dYd?poDU(cMhTe3*APt+s&D zB4ZL6hCxUU(_Bj_wW?XR)OY>zmh?m$fxFTM%})w@FAOnZmR?Xj}KboAG2n zdDr#BgZurX2S9xL`nex&HPKW+wry4sP+O~|mQvNA zPzRec%Cx(GpB(MgtKo3_-EY17?eml0{qC24@mGIdmNFgYYBhD7vqxN}w(4LEjK~ze zE%Ve)AJqOnw*qt3Vp@SA85`Yh`tDxW{~h^He~f>>hx_OR7*=!s`1aSg%bv5j_QV(D z|Nc*2{`Y%Zwot3@**Z6jfv$st{RVveKnnyfN2H6y~5a!OchEu{oU^sdr) zd}6MonDspgNQ9tTYF%oLv}g$0QcB;%)*OHMD7e0ZqiX)m-+RzLS2cwyt$!w>LZ-T^ z&HzlkfiWEYHX(p^GtdTZQQ8NMNAF!_AzBM-d6Rh!dLOlyuwMCE<8{r~jx}(&i|(0A zz$4a=(>iQGaC1XP4|%gih=Nkp`txSLuBttsKX|;^K6PeHbMkR%+73#z+?`Q?ufX4)B4r(C!c)zyX)NzC+t!dVPrr;7Gfq? zwSn_ zwqI}c%zfYYedkWC=}NOAZLQT>;VAwl0tBqJEsL>WO5AaZf7pnIh~b00+pQlV-jbQr zELNPYMlXW^h#+@)o1`=IT1_p&da==@uJ609&nb&=t*w+|=6&DgoJ<=r=bXEg+p=7} zdGX@qrL(O&_Dlp_q%J| zs~DL!C#3y!h_FUV8QcSfBZTghQ@Xc3`PN1H{=;_O38NsOnQCh(iK(k;B;=x+V{YOM zup<6yt1F-j2$`Bz!4%Hv*a;9}t<@bwq?9ENug4B}6O2AClAEWL9aiJ#(O-3>OZ&Q~ z07OQC*6sj2s;br`2~pIN(b1XE6jBl-M*}l2SI=lX_iiKI84t`thiR&{wz`y3O07|M zQFmr3%e*>6n) z@Pr+AJ&d!91t*p$1A?T404b+hO09J%CC;kujiYAejhVNb&H264Zs>`r&qG_REq-=- z@y@s2dj9>{tNZ<~g^jTm2e8(r-C;RQ z+FB{gJkPDQ)b+Jia+^EJDdjwc-9=78&v8 za)c_6F8I;uo2lyUzUxxg^E}VBmfdc*EUg;dd-S#p-!0{^Ogm;8zO@}tulKM2_0Rr~ z%jeGk0a#$wQ6Y+i-f}f^I9Y?bC?TYrl62&?=wy!GusKL#bV~cv9_GKh`CI=1{}<=* z0UVD|h`5I@{+H+f^9(KT?c=K_FCKpM0sVwv>*$le_^|!se|q&leLg)wJx330M`3pY zhE-nxX4(|pTqqHcJ7_b`8IZtDSm^w|_d|RAl&)W+DVib4%IuDzNL<%~!)fc684=Ws zjt3(=?g(P|yb8isHL2YNr&gLHPy%s))|#~@$H!C7`EDw+zLmkr0+AJ(UaPf4`Dx9Y z<1w}4Zr0*L5#=#(g0x=T13lobrGz~Kxo_jcq3<_#PwgdzfC3?`k{jZrz>p#t=)XPi}QP;s-?MnG$iA z1xQ4Mm^g_f$vMYrZ(V-?1kcbhGFTcv$eeSWuI|>dch|*l+6Lq2q`InoV|&PqB0_`_ zF9QcPZ7r0A%(U)&?vhL^C_@#|;}{n$2(>$tG^p096~Dp0!i2&C0HqdH1qTbB0)$>C zh_>F`V;gffhl^vEnG=(K0~qwpo;eW$vPDcAOiklRW3AHhjHzy5YiCN`0Ksfc55%jm z8vbSBUzOH2efQwr>FJ~U`Rqc*6PGjY&bnb7Moe;;rmOw!u9loLi2y*Bo{`OL0jESD zVuXfKv&1+PfqO0W$;+=k{PY(~Q2+pz+$CZ{Mq(!>Bs6n}u+ffQuSAxO=HpfFh)QYskDKfi5 zZKWT()MxHOJpBHnw;z_9{b!&1?Mq=uDKmJNgyWy_3LvH<&MJ;d z0pFCB?RV@-$CakFcAWB}upr;1OO=SVnHxU4T>kX8ho`q~Y6Os&{IKk8ZGAw_8IfI^ zgKMdfWXO3l^p8&R`)7Q%5n-hDehq}AwE-9l2VoxoThlmNu`m(3TS8p#%p9#*thI;; zQrM~qVHL)QEy8^z2DquK2@C!GbZ%o#rmaPSLvm*1BpowXF9<+D7G|(;u7WcFJCdTXL?Yc7Df6;l#As$tIYV7C z5E4ww+`NTWffGBrG|rk4u{G0H=V?NsenzW?60A@R*&QMF~iOtT_lsqOaq z_IBQ%Y&NHl9(OsHHd$NtSI^sYbA7nFdGS;)Z?LH#qNL5qSvRKbgJHPmG_>i>9q_G)h3)U zvjfKYLRIHwA*h*BP91H}K%`2-tJkp1u$o}L-lQJ`KZt~x6M!Ds9H#pJL$QmQ3JFHR z_8TiUFte2);NEqeTX=Y3Z4MHxXH$_FpaC3-O3_3){*u6*QY_ZL25H7T2msXDky(Y2 z-*ktl&N%3_FLIgFspk!G78%KTnd<@ul0-N$rS+|>8h7ysgsI0(W=$=aul61Uchlwo zwy?cod+9d+VAwqw#!pn1GHcf%gGdL=(=t83p?k?r(}p?9lFZDK6C%+Od==cpK#&Qq z#Avg)K6)S^Q%dVu7SUbfXXWleaEPB9Gin2KJC3z1s4Edd4JITKM&JyNJTziLU^B(l z`v+>#DQhCOHuedT88N^=fVOUR1>9GpB)WN7mbxquR$^a^?h<2sq{zb}B8jXa2_!^l z@$9pJWzaXzk#PzkLJ|fu06~l2)Y=zZb%==M48dCRhK9%tfH7)w#0B}^I{s1>HpBf# z_fJnBK1`?gxgVT1l$(-Pqh^H649v)gt_~Q6X+fOJ z^5yfVAN}s*>%%Tdiq;!2q7Vxr`5H)DLHZu71vp+X!p^ydAx!~5gj&a=8nf?iaSRAex4UqV`6ZMR$r~v!9}{9B4{Dz#>@@|svuH zgpR70Rx1Y>QBi330pW~0~m&PC#q6nl-=czt_ee);3zIn25fdEvusx76|0)mPZs7|9b12S~o z>DWCy!EfL9ha1n5n9NPlP;z&tHH*ssx>hF)O^}%aV0_u*kQ3kK+BBBtEDRLroR#A2 zt9*0~Jj5AY`o3Q;R4a-B%`7oBZSDquQ4?M9Um<}$LM-^$gt{x>tk?>PVm7EY03%`| zZsv74(92H>BhuU4^&*LILGzrmx^;cWDT9mK1OP3JDiu)3jMi|^9r$lWT}K%N)=?c2 zk$~4yRMi6SR$F5gWJT~+mg?RdMWp9mQ?gvSLo!lR)TXm8r4V!6Ap(}Kst6|AQ3wxv z&~iB3T-9lomB^L)&FNQ{m)Z_juU}1vvOOJ!?WRuiZg*hj#MIncb8Af<%+y-dWdYN~ z)OTG@xztjYrIxbHbFHn_vew#(TC26h>bC(v5)M>$&iUTOz0GFBBsnEEO5GsC_>+J4 zZ~y40f9=JyPyXuP{-W$F11822D|%H^l`i>RlNgXw&biNLr~MCpz(4szz4sP^jf^K{ zKg?HpxN=J|ySORSbn`O5ygC_Ae(!Jo%}3vVKcAe%|FoQcyyp*TdRc#!mS3JR zV(L&0Nf86b-_#t5k}x5=qoHH(+ebG)`SaiW`Tu$H-~HbGfApQr+hf{Z)vHhEum0-l z%YX0QAN|*l|Kol8@L#<7KFCXE26D^WoG*NtwUwr(rp9b6iHH)VwVk)t zW}O)ME?{n^>$pV$L0d_-6T5UTQ!UBuVGqwHXbrShO3F-%1jvVqQv+m3UB`^l^<5r_ z2no8bV@^O!NgTkAVFnfmm~;4E5!at#aDQW=6z7|GTdP_~Xd)f=jr1qoMcLwU7k>>x z0$!JZ?(PO^HPWn2Ls-U=bEr&?(1$?I9x({+BH{pHVp7+6nM~C+eix1i=t%D7h$#XQ zjtIx8XJC%q!xC|{<~CI%k|goy1_0IO?&0=`2Y!rEB}r5g+lT%D1^1W_6N#ka-C6Q^G4%1;#+l(7$s%j*JgiEbxfXJBG znUN_HjKOLLfc<><^vlnF^W|q#IS@ncWZaCB1y&Y=Bf29Rta6p`X{$QI9SK%f)K|Dx z%!tWcYh9NAkE=K9wIsXl{MNL0M4WTS94a%5#o{crL{XM#LxNz#Xuxg*Zuf(q?T_GZ z;&0(MKiEbaMgwgFw%c$+mY|_2sl=Hq)?7K>yu&#sV(&HhVa2&cn{Q+#vu@_SCt~ll z{{P=^Sv-t@xQO;%N|6H8I}0E7xxPV72zJ&;MKCP{0pO_JOvB7IH?Y2H39{3#sDy+> zr4$x+Hz=ZJtu+X%r3hzA9fu()-w>f0EjoUtk*T;@YaLwEYU#&yFd#FH(|9(G8wl*J z?e@*pxnMTpYaOO(J58HXcLB+*001BWNkl$3Rjo0GP+<&*P*cG0@ZLJ8MpuQ3k{bgG zK|@nC3294J{Q>;m_w~UAmO9oV5FagvPxfuxeK|u_9DF{^H~ZN4 zXXn$?rw<@{nP(nmE;WUryW6`rH%;x$;#W@|5C7zMe@~`~kr2GKdEOr!sCSLqyVClY zYFpy-%g1Mr-k(lSmfPyf_hK_2=Ii;;Tk8ZkjD|va7*sWN1EM+=gy^jSW0ew))VJrm zAH1Poec-Qua`&=xI{*mCd*@I7>v#Ue@8J)${=S{lkK;$L;r8=>{Tn?zmh$9e`}Pj@ zZ`%9|k5`*btj;n*43DIGIADbDmmcnYQB|)}x6?@#2>>;lm&MJhkd(>~9`#c6)t5By zp*K*-M2LDX!op$^+B;(~W37dd%+ng|Afq$9`N6v;ZPO$_@sY@=(Z*bcWFp#Y_Rg%vER0ymcxz1Om+f7K{gA|0G9je--{lh7)u4HcpG-uH|^$iD(`eZ zyX`l#YvVe4twW4s-yf3MgTx-rSVanpFfkwmvag5>LZm>;ab1`Kg0QS-Q=rTar=^OR zBMFfnS^LeC*3oA16E`_W;pXD;aCuIfEtN|dFNWiZ>No~KCi$|yx_+N<4X*T5u&3t-0@S>B?R{z5fFe!00mg!6jsSJY3;eV!sG8#_ zfrxP&ODV#oN-+yncf;PTH#<%uDUDCz*j=@|Fqe`bQtG`O4*O+3MA$IYQn(1`-z6c4 zuvu4a9yU}VmdrM+1x|A&c37W9g&9F0Xc|wa>4FL8c~(UPl2TX(DRq!xnl_thQ%Y&A z&4^I}1%^qQcwLlkNE_7nyb59hSpk zPg2Ke7`NklkIpxT+y3P*=*1U>5(0xoV62re5OD4EWbzCnrCI>%i2VqFyeDO#Cy~PJ zs0qqvmjEFEwr+23mcRRW|BDxQce9fWt@py%)zwslv%5VEgQ^y(2sG4bEVv!ZlhgRU zua);s&W2i(>Q2BxK+Hu10(x%2mzZCKG*3-Ffj2l&xgYyBVS#6gs)Cc=AqVctaTXf?(V?X8HSW$nufEp({Y?i z9hkY4L5As1|LK4Jhd=oKkAL~ozxtcMz54QF3`gO&S8s-4l2WE|*o;G0ZOf7#1{MLF z+nEGd52mx;?2}Jk?S84#-81q5*IBO<2?FXG zRK(nQo0;~$-yIIj?tXc8kt2jmPj?Hz&RqEH0ul7pb4vfNsk>RX93&7TVweM<_uhpi z0`q;gzO%c!S-1;xat(Z4-}rq}AtLh4pUb=a1;6ccxqs*b1bAj0d_9N(glj@*c*U0n zIOIFJR8FcsxB(R;7A9HsKLDwgB!qAT3$=dR#>3xw#)7mkg`h&M-%VNu$rKbduFm@W(`m2`I|!R3>|l4Nbha zK&Hu_WxWkEGRT^QOL1SWBaQ%Pz>pP&cih}%z-~PpCT|`9VRWaz?nq|!K2S`Z1y@PuS!;&=s{iV%ycIUpPv65ZnGQa>=d zLF3cyqX!Qkjc1p`$(F_q)dyw!Xxa|LpaJu|-0t^=Ky`2gQ)Q`u*m?s(WTrZhup1q~E)SBh)uBgdi+0lw-+lEb<(GLFA0FvA+H zn|gG2OVU+BRRdks2?+^HLB!JgdY}|3%tb^9Iq&eo(ZL9WAn*uOLtL}S!a@-077+y^ zB}s@WbY~(QtJI+YgsDRWgd!SJP^>r>K!C^%Z{%hTF-aptRH|%;;cObu0(ieam<6G1 zHYb1_K(%hR(`Fbdi}cnGhXWCA$1OAEB&n2|Eclz-{oAY8%d#`K)|PJlZaFMw7G9@e zkkWgb=R-8wE&IdLsGtaMwrAgb`t%{*Jo@4{escptjKGLBi!GQFEEc8+B*wMS46vTA zj&%zrjPOL7dl(aCZ8K2-i0Gzf0LaVSKl-x$?MJ)k*N5&PT=H&kILt^K5xpr=GMivC zPE3+{%d>6y`dNJUo$~J4rk0uqra?;1K2t=nl60)+-SueQW{=R`c-=OHFj1mJ)2W4= ztp9b`B!U=(6oG0z|4=D9V=06p0j_V_c(hyVb*d*zfjgc365-7b&F-OeFKt zT5nz5ZCMWHQcGp#QtCJk*{*6aoB6UV`M+m8UxbohhwZQ|rAP&{?ruG}qBvG6!!RzJ zCC0E83JQuuLMX?if&~&5fiOmNvr?)%XkSXLrD`B};2?s8VJ<{~{PxZ5n{l^&vU%t7 z(L3jtACJ?mzxHm+vfSRjJ?!t$frv}3rB;ksc021mx_a;6o(o_mnx<)*1_0>uf*!8Q zM0Kdsw3()9Gj8j+k)e#6>D~9g@n`?^KQoMf^}qeg4}bm(EV9{5;47p~`y62i&V+?X zhH^Lk2T=)Bam|*@01^5Lbc-rcpUSN-N{#=v15YaNNgtZ7&4&ddUW&Y&n< zyg8spK?DbZ#_G&%2NW?-AVoXqf9L=D{}}$Ck>DAY-yeSX4g9B#p8omrqn|Br(Gh@_ z9w#^vG836OfVg8>2+mMD%4`?;y@DwmO&R%Dtr3p1Z49?IaSr?9)#cEFsd zkO;4DRs>{`^uw#WM`z-~l2N}SdJ5g0ah-+yb~gEVigE|fiC1pOR~1iIB*InK9Q}%N zAmT!Z(U!Ibxd_9lCcYpoe36qaFNF#S66DVYL|6bb5L24*2*Uv}$a?n!_8pF=+p)^R ztsP5viMd*#0ILUmwU;0P28NrVxjKe17a^G9K=W1C=4KE+)IuV)^hYOfaXY@+LvM|i zSqRV1w%>jSADwTQg$0QOne(QxDuMtU!ptKS;yAKfT{tW1CQEiAL)PQ$o*D&Eq@W`Z znX0NEm2+7rUPJFW>%Wh_txZfsZD#5s%sk|}gNTsWbGLS+dU|)_Z2$THm&FwTdB}o$ z%?qOph=|x?)=*)J)nE)B&OiXEYQg*6|+IGu?UjX2En&3@-hQU(im z50(-DrkWOAss)6C34lC2al8((Eb~A7^dCNZ^Em`aA!MpUAwdz5LMuL$z`?UekcG!% zAIk$VTvJs;j%Ga~0Ij#SXj|GsvT+Rd7j^;pi#`SL-|oggB)X@>{^&%7YQ+9wlX4_8$LHVXj5 zK#{4IaWh;@n+NXR=GL0mQc9^1NK}}4nl|GwAX4wmRZEpxg@{Zw2!)6NwD&hxub#jB z^srpd%YJ{@TXb_nrc&f&DyJ7`o9zY=9AUrAYKDTtI8K}C>E(mRz}puu4lkciQkhd0 zgiKgu)lM)0LeR0~v5E#g0`A2)2ml-b;Iz`<91!a;K%l9*xtV#h{ayU@v)jM>?C!cN z1mu$q2?1f6rnW4Zve4cO5lQAg0~yaY!#5tqAH2J{JROc02&zSZ5Zqet20c>zAjDGh z=4WA{>jgCcnre=aI#ZQM)fPrF!z1%^=u8BeQ);cPK?}3Ix3G|#Nm>1`xx=zj3MEwC zgAl)pRS^l3yD<@sH3B#(s{!{Rwfp>Rs(lAu`jhNuVI>-L1FY=YyJAxN7TJL~_7xecA7a z?MX(#UVZ-Ma(g)3Jl-7+AN=CyU%vcY3N#JXmK!c%Da<0=dpjKF9FX?D9NCXRL}RT& zWNP^Xq^itRxNN3Pk-FWS4%2BFhf?Jae)#Wy?~niF^H09`i~s9?C4g~LJwlsGE`I_U zG2D7@u|Dy694a6Z3nEA!+jnBbiNeu4AOmEQyg38| zP#k*L4wp7=x6uH+-yE*TZw+7c{m=C3@rM4>;mP~>M_k=JSCI zW2rWGWP-4yaJoAo60d=(q_XD-76Lp{0GH38uW;e_uB+A58KAD~V;$_c8#2fo4`NO} zIR6EiWyZ|?M3Eo_HSpA2SraN%gx3F)A+54JfS_djday?rqM^WJ(ZWstJzs)hV?EZ@1T zrO3gBN4~f?|Modv$}$SC)|VnAg2c6s>){H)&BMU}Scq2Da!&6P=$QeA+-@)u0-(E_ zt#7!@R3R2{&$I7p{tLf%5&l*@E+P_S!+B0KHTQN;d?-X5xV~y4$x04*RBGHW0hm{w z3nV#(-96Q z4FFJcK_(V8S0Ih}$l+c*FC;jcb={v`{RLL`iWD9DA02?#M#bBUCnntX-h zN+da|EgjeIPIy>^Y457tO(Qgdh_Q0=HGt@-FiHz2Mfkl%G>1kOk@+EA=0%&UMR=%o z2qvPugX2okh5Mrx0=S!5xML#SOBqYy`@}t_k}MIh89g#bh}7xknapiHzKIOAo@}Rw z+vzdF(0on>7g2t(r4E}?WEw{%nwLXwGqX(N2pFv`VLB8kMYQ$nH!okm{`B_l)!gUa zyINng89EZzDnqSmeLo)p!V%StOF7+aHz(uM^V9c+IQimd`sND`0K_6(3kjhRix5KO zQ!W6D2qAN!zBDz3z}%#Z2qGNCK}?i-v50^S2m+din)#>C+XtU5KYwwh>5xB)hOL=! zF;gO;RX_q+(G%fX>Z6m3@4X}6e%v3PZipy>y=e(_H%Dh)VnH zzPbHB(h__n;J7C{((}KXr5ch@xCkP;Yg#dd5HzB<#!PuY$>l-*d?bsRh_W4+AKeUN zMp$0v@|zrx{P$S;!Xo6Hkh)Z^*D7X;8iC}Qw{w_pulUQKAY+VM5t)X~?S2QG?P70T z(Y&|TnzptamYE5)YZomRX0Gb#B*`cE3Lu79i%TA=7685VwM9h~$9pFmkYgo8i6#cX zrSLdTryusNJI9)IKgumA3MHjm%glkB=*-CXZ(4h*2)oN(Ik$;o*gig?)m z=JxK3{oQj_PC!bqST880C2y(=vves=f5fK2Fsc^aYIN~EX7 z2`pR?q*Pb6Bf`zik&-aDs?Aqjr315A;@t9XeQa|aPghCU@?1O+1V+LT0Mi`^1P~sn zDuak%4xyDR2?2spYu*_g5QLe?YQa)gR79W`AyvZ&(*=M_L&C|B_f4U06?Ku{!K?#B$%9O01~r zR}jG?e|4QO4Z|SJSsF^HfU3D0Li#R`*6d89y9vuzz4s#(0@v~p9CJd9WWB5P9vHP0 zVg{m|d?F%|;2JE;6*dV`AgP6F?A(4@%LfE)E04}jpKZ?{*V7Z83gK4dd^|awPDiQc zwma;W)1qBmons0%7XQ#P8fBoXezy8NhU%lZXBEW@fEyO^K%oyP7 z{4awo`4~7JbMwRr2p;Q|BeJ&v&{bPstalGj-H1mdzoYk-(}>jzLShNz&9WQQk*47} z^~wyjTL9oN3=ovNdO#$}n>iw)TK6y!E>iPv6i_0llsvXa>vK(kGzTFaC7x>yA7MQN zLjaKsl@Ywi+3Du#W_pZ}>1k$4BOMY-t-~}7<1irMyv)lyhexS`0IfH7D@-C1YPVO< zU%mL%)$Yw=q1wB3$0)UKhJu1vWtc`}YObobs0GG!dODq)edF1?PsBGbKJ~X>GT1QG zA~Fak44sdu)oxaDpR>+!d_DF0y)^;X#8KMK-OU^Wfg-7!KF^{Ac+1 z+f=saXBQsEw^s*44<|==YrVJDTU*j+ghb(R*zfaZD zbZgWbwRv&V!yLr21!8KIZl#^zIB^+b^p0gaU7npjefM3{^7%)GA3u3p8oEti+tJ0R^3 zdi(OW;qv&&<;BG~40W7Nu(#F^t;aI=Xa-VndmfkXjE~=~jNLmTms;xCr3ZfU(cib- zEp!0D))x;gBLV>;QV;}~DpmB>4U`sV9ZpKEz)fq1nQpH2<=dqk=p>%u_WSUkoWT!q zok$SFIr{R;SFcgVDic9vl7f}#D0n8^Y&PyO?+<3SEb}yM@}*#jR%c`cSc?jUSr9;& zxfI`XH_hLKb05LSl^X=6lQusuglTv^O8F3phGEQ4b(q~pK@kGNJy4J_f(dd=OvI71 z@s-{XZUJZzj&6t`Liu=OqBOY4`hG${2Me}GfZHBIa5eyRBp;Li|^pzU>Kc!KghBz-P>+=yW8Jg3vr#MfVw}} z+`xhnU=T#NiAZ2Mxx3ce&C_pvufO^PZI?Sjl2WAPM0Qn}vE1+P@-&jE_jNz`)#S+m zq4$+T#!QGSuhrc=JUPbew`IL{qPe9S>I?`=gH-deF( z5$={5TQ%>kYj2Q`wS4R`h1zjIl?GhE%&dSNd!ulVQVU!mTg<{t=79i$7zmyk9qr_i z6HgDw*;UsS^k5zyjzGlN0Y7y8py~A_4^B_t*<3uS7aJTZ&%mJ~q_WJGh-~R0HU*Eh%CSereGL%wSgn-d=(3=of z5nmmWYpW>|iV^7H5Ez&h+)%KtZRtzyzrY=jr^(!bx<`tqvc{AX;y?&oPhhHg6jhnK zudDh9VobsaB=18cS3T>lFjXkRBFqHD0pa;~khy@>t?rovLZ&o68CV2hMrrOX!a~ec zPsV4{^iJNO5Cp>rfs2$L^7xi89FJ8<)|K#xHozCGIdsTA;bc?08 zH7tdgOMp6vE>47nc{^^NoSc07o$2dOp;RnGVIn{>HzW)IVlivIcK`$+k+291h|sH z-F~M{F?_S#PMa-408oO15os8zS)WxsEZn!#X4*_dhP6zaQ+0WMyWjQQe!lD456g_6 zu(>$;+vym0bq_~3CK`r8q##oS)?t`7TVat>Eu5t~pmn!M=pD30ufBXKpeL8ZSWYe< z^Se*qcZ=QY7kAfpx)`ps=Nu;hM)ngC5Xw*=zyIXn6VXPcAVbn!~Lmvh9cm+kh&O`|unEpC7GAN_|?Qc&Ho`7{a+@d3sNIgBwuiw7@!VY(p zgc&WoRNkCyhFX~j4dWP6i57Jzg^Eozh6z#Komd3w1Sd_$p}-$p#D8`A&;J0Oi5ViyJ$!||yGJVP&6~0)8`rh4y}q(VNCcUQ(sP0cZoAw4 z^&4%i*2=jW!gaBfx3@4`mS#+~6hcN8a7Q-qU@qC=0L&?L(g!iM=ptO!tkqYSt#nio z0y7rQ9;6`z3p25Zlu|e?AV@{LkeP)6xPhr+7=T4Mh6iY#;+&iyp4%_EnspY7BkPrW{ZxMLDtF-LnsCs;NH#2=s%%-AK#C7S@)-(v}5Lq!!|7 z>D1J24>7lBYU)71 zY>pqV@|m!Lu4eAc1-T>GM^=#TqNr$lkU}g32m!&A zhD{Gx;aB(lk31E59(Wzh&D;>f!?d@q4KN>c!N~c%O+5(!l)^_wiQl&|kW(G~PRv*;7eQtU({MvV0D&M8a@XD)tH(U|&u{0y`OV!IuhawF zt>-h!SH|tJ*pSH|AtGkL02C3VP38A4NqSfQPCPfH0SE&&w$j z8B4zRv&Gt2S`(J&^i-2A-EUGm9{Ev}geozzRUu zFL}HK8cF!<^rA;u?Dfrl=0IVo!zfaUl-8EkTJPQ6%zA4cQHgLI20l8j0b*I)T+LOr zC4n%Fa)D6H2$=xQAQms9Ov4DuK0;eGIe+sj3Hzb=uVJG)*}$TjtqR z%{&j6wMJ`PSwbqXBY?J^&g}jE@X1GC$gBGD!_R*Gvrn5TAaz~5Ep0xSDFO%!F$1hM z63Ko0$>}&uKuBCs3bPF36cJ0C)xo~=_UuL;pAYaZAxn|M zyv+N9#jLcyx;}jL(cRm-XJ7lqcmMcLA3k}%k`Dy?+uh5LKfihLfle0(9`9}r4<{y7X2o&iG~xC^Ts$dd;BW*6WVJXP=EGs`fPtW9X=5v+40U8; zS<@PEM;C~Q*R`5Xzo&mvOc^e=8-?#t60jD~S zaZ40Zxnf5%4+{>=(KbXb3y8TK9V#p&g)0*SF>&D>!AnK-e)G1yd8zXOF=(Y3M;=pz zm;jwAuxC5O%(F_55b1kgb9h9M(*=T@ZV_Xc+uESb*$m`LAH%qW2-ZrakRX&oy!PJ3 zjm(uINTT<}I&^bYb64#Rpd&azW+&X;vLEgdfD8d1Kw-qZF5JUPS$l{P;C?W2+bg_! zWmG$Dt!xnsmJzuGkb6LoBZbGB5%+Gr6>5XnMwHO!Lp$8??;(LTmhnv&!AeEazreihW7>!?fW8kfK3joC6MA#D&VNke-rz`OOH(L+N#{khv zwa$eFF+r>x_S_^Su}UaUf40KQ)D=Joi8#PbRnv@yKujK?Znz#JQvSI150WRI3Z4LP z$oDZj0{L37dK>UTlz-GF3NA;YO5>gq(Ou z>t<#cq2{W+)CvU1IFuT0S%eS3qh0}+kxO+`Gc^l@lEUvfQp2XxeUXYRhZpwHy;iVK8*ts_STq4qyU3QpKoq%UVd?RbG7U9 zqP<&RdJn`>ix8sF=4{JV97EljcXzAfwAr4$^YFp9x0llwAK~kdFgh_;se-^MUVxw+ zazbFNsZD?=a@1%#*s=b6M8vImo(RakMVocM#7|!C|MKHESGSEEnTnpmz;^|%-OUU=w9uetX6DWd+);i`EJyG=mgyd`E+*_N=>yI4~Pag3&ot>UL zT6nbGEK*AqkHBz7thKJ$g$OqXiS@FHUnPQx5Ph8WQi

)=^Dq6fUp1!F&TuH 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

NPF@X~A8e+IOvU4|;;9`WU;_?; z8BrSnsnBvUKgb8fRBC;Ac;IE>Qji%7m!;MvN=4skdXlk;SQij6(f#ELX1>1l0;m$z z!nH6H7N+>REO{vwP5sDC$1zgT435v}Q9&c7^KvGl-kQI7su4O#S%Kk1*EljFFgUne5OMDuUl@W0YIbg=&_#p#D zUpAV!8m5%O2qT)Rl;X^5p9~PQiTbplbwPl-EX3qXkMV=f@r%uO%6-nO=Xv#nyr~!K z;FBtk--*RWq|pUM9wL=}nt=g@ZVf|mi1AUw0eL#INFz*F6ZL?|h|LiUfCY(&U0O~B znR&d@t#?@XH=}zx=B_%{R>#0DSu8HE z)F?s%T4kn*Ecbc#FmM^DsL5`<(85TXu+1lCOon?U=Hj_f zX;V!MxQg}~_*IMMCKwsedsFGX?XB&I3v#T~T^qp67PQG=pm^)hdkBqu6+RZM$LTo{ z#E;b|g*{9?xFUxjUA16z2(L;sKmMFDFsUp;OFQyo6@i8W+4TqPgS3i>pumX5cf|8$ zo60-`MXqI82wj9>+rGi#BNi-$AJ1nI@l89DB4S}0C6S>k6lagfQLzjxmLw`66ikMg z6G5Ar`)O8Z!>kE&h|YcP+py^w%quM%=JV z5uh7x8=BeIug{g4K`K~5eRw!Mp3gsg_vZKSo__iGaNV}d&@)72Mg>L0H;)fL{P6bt zu!y$S@cj7n_;4bHFKac`m*?l}^UDq(BBS4~OXX6$l<~*5a3P|H^Z9nWIc2bk=oYE10$}*Vgvd-TAlo)_TXtf3tCDf9tq>1#BC;w{%t-F;Pks97?Ryf1A4GK#+_b zp_m+yC7&G8`0FAN;s`CBU~(a%i)00$^x2GDE=yS5@jPRW>Y2=-5V;ZtOeGfVI6*9N zj{7-kx!kik#hL4}mSyEqsW4YA>vB4u2&v_O!S7p8)g~rlqW!k@eKR#+a9=bN2E(0* z3s%lcA`pR?2r^9Xfuq@DdhE6TKQYxKxo&Yz(B(u_x1RqN_6(PnVlc)lhjJ zIm7-krkx+tT9^VIQ<1_v^xCt$BVV*}xf>$f6Pc%?COgI$F1b?8pm$;E6e!@?>oVYW zr7kBVRzp#3(ySBH0!SWHx-RAMyxz90t4uQOWcf_p`N%^YSF%4Ko+U7tafX<2f`9-b zI?9yMc-mkE6O_U}6wj3H!vQ__3~rzF<5EYyO-93y$eqK?@ycJ|<(0)A+DkURm&L%5 z^b5bW4}vMz2oFVUR!ev4@o-H=f8)7#oI~yr|7+3#l*`zW5Cq2rx(E^)sA^Xuz#7b5 z(|+6g-lZ#7`tPr!@4YMdHd$!-P8H=*XOOZ!W@LaLS1oL>S-w-e}4ae@BO={$9HcZ|MkE6 z#~*+Hd+7bwPakjlZi8K5#>{!vlO$Zwrx0aX*QFA%2Wh)OzXOQaZQHN6t&1pF7nQt@ zB*su^kqLBH?&I7|0ladmjw#o0OvKs_Oif#F>TBYIbK+9Ao*5E@FG?__NfWUid1Ams zGnUt%Kgv9N%W}wLSe+y9I}X4;M2n=q z*!H@-mzm2_yzLBQ-CbOy#j%fZG>!Rdj@VsOe9ZY%_6sDIVKO*?jpXA|2po4UrPfla z=SWgrDwVRXYh4#ZG_a?)4`S9-Z@o1&kNl3qDV8r|WoiRUaA=LySyw*m?o;?78}yWT zqR5zAOdDE6#0Ysy`xhOzZ;(SR*|$UTjdp-|V+G>xB_q~aUAZ-KWyea<5B6=}ulwd> zGEY~x%-PT(EQ{n9Fz~Ume-i9VC|^pJZ0HbFL57lQ1Z9qT#y}5@1s)mXG&pA#XDcG+ zac+TIauOmSngD_+7V>1_Fhlxn(xp2oz>{))5_aMRp_+gK0;y=1u5na&(h3SG5*4nsTE`Z&dQ|4(S%_%pR5-5-e0t{} z2LS+~PjQIUIea!^1n+qb^D#}wJU|caG2knk5~ffte#~H^(8aFXR`-4NELd?TvfhDr zMraNKQVGI75SP09YMuV3>#v{oZTs^1xp#RyKbrCLZR=*pJd47{A$J2PLd`?lRwdz|JO{d;Sz zM-sh@2()+Usup4?-`wF{F3sesxks_j{{au{!xZ*B*P}jm7~NUQvjz{3UM0&-m>@p| z#or)IzCKKugQKosQ=4F`E(=qi0pLogc;^(f$6F+FCIs>+33 zXA^_y^p28q#g@T*6l`fB$N$J{b*k;L1TcS zBG>4pvsb=L)`0P2nI&v7_nu^68srTbdhL`^*z71W3sX8KC(BHWf7On7fyl2- z@_$H`DOn_yODSB5J#QJEyfuiWfl&cVDe^$S;<4lPM4edO;XD^GFwuWfP~D&09M2v$9hy(M^HyX20Q^losQ#kfV+kO!yuQ+Gim;qz$o~I|Gq=2Mc039mlsw22FQc9HUuj71D%wPI^6LU_UKgoI@Jpwjnk z>s^Ko(B_-{zX@o#NB2xT7;(^*YBxUvTrJu~+TJ4x`}k>VZV7C(3URx6BhmZyc0~dv zU=-=s{d!rJA|1GtcW<7Uxr;DUt>t`LihIZlQ9)GetzEC}*N@L%zg$%W%$VyRfBc8u z<@59Nhp#W21P{=$V3So zl?EkH^X`Rph4dh>SS~RR6GjX*x?3M6b+Sx7{2g!amEJ2?iWuIBS8>sY^%Y;WB@RWJ zmedZq^PM6PKtUV2A4uJ)!lS-W3KB7mgY~Gc zR1r}C(Tq7dT8nTM%vU`wVD>~Rn8kGCU7`sPMu-&N#Qe14hZ|!gbwdXt?)%5rn!7-fEXp{uxBR3+Fc5`A%iaLi}0xJ-7br^>X{NcNG`qX0R&ZSd`3IM@-2!x*JRU$vfIm z!aP}R3K~3`GZ#S~Qm0gwaISar^L3sP0+Ds^fHBmU9`hFMherd&7vme`y^8?=qpFIp zKfs9CP$5H?0MygF?ay#PEa{>a5G)B4jH&m}36wN+ zny$~z;%NgU5Aq`{ghamXh@1oRQ9)L_7z$pT0Yx@ou|6srDl54E4863EBj#9is)~RT zVDG(z12hawdZP>UtHsPiaf{t-Q zj<^VzGT(3nHp2ZirYh6c=5C@u?08!mqZ&;As$XNd|4jWwlzLdO;A?O$-u>Z(8Xs~H zM-johlP;311W^@6s?5Fbt+ng*vR^lQ^MD0W<8GaBz2At3@W08%GN5|W7f zslm*Y3lm;%n@{2k^SUm~^>(|Rww?KAt#|99(xnfMuV-IM?_E?8bIYx*HBlY)N6*oz z-|xf>B)-UY`N;iK7hO;avnZq zz#5M8@h+X(WgT``Y3RMiG1K?dqk)jH95e3(MvV{#%`aWROB_T`B=;b91SI0Ma;eN* zAI}fJdsEgLzf(IPGM5kqZTo)Px9hF#t+(zR*jj6027|($)MYNg3S73yfD+@q7`6~O zM~RRC51>s%QW3cW!tY4-Gs*h^#E^`-E6wd*(>~N|;%vqI#0YhVngX#Qm=WE7LLR?2 z{&Vj=r#m5tXwp=qas_6~7(Q?Dj`1NOXdpnxVG(tDTziQ$G$aD^t)ixc=FVjugvnBg zn7lxO1YiN7x=CIPjdm4e0u1l?d0A_%4V>(KQv4-xWUd+l6kcjUpTHY=w3XfW&a-fMCLMo+nThto^FI%- zhp(NPn9xM6_inXD{<3y6W2E!Lxs(D#2HoT4kdX5Y^$ZB+f?dQPIUvFutl8o3%sbcx zX~2PaMoahwScY7o*&#=DPz^?C3^Cp94vrKJ7v0;DUG5z%5OQkX{Z(N=G$bI7Ora=J z6bS~&V99150v zdEH!X(^Y!6!=0bQ)HvF7nqWu-f`mA_;JoU(W8uh;?g52!#?J8=H6t*ks}|?~dyju^)U?7=ln2 zvojwmvGGQPV$`rq>v_LIDAxb}<&w+DJx)Xsz(e?Aws2Z_sbyJ~$Mxae165M#(#2U4Mh|YGg|22(9-b+6AUJ0KPmc7{+1=7lf&`IkLVyLR0D$$rgAsXBi7^{T zRY63xFdCq7Eo&*uvOGOLe*gB(`!8Sr%ZHDjo}a}O^$32JL=dNm2?2|UxM=_jkSZAY zof_Onb#6FCY+f#OvKTc)&Ntc9j0=WDDxt0BIiTSmfCz~Tni>HvOD%Vq zIVBK9WJ@A!-bdk!$kW~^(A-BZ)_5S#2x`fcAux)v`(ZQENI*-EKIr7yhKeZPrmREtLLNtT#V^*t@;kz^5; z9b`u4m|v3trt>c3$7XuuqT;Lg+A+X#U*|-+#uSy)JOuZ(8)wuh z-i*2LNE%VKX{>0IECydKTqlCp7_C{sfX~ASEeZRzp|chM47(u|te)Ovne;kor6)l% z8Th1JW8@v)aMkPe;zQ8h+rDpo-`n1ob&X#&vM2{4V^ZST9kyls^SrmZw%fj4c4^(i znIhaYyd!oWk%gYnr1uNl>DCt?0QZiBR3HLwCzG==vxxW;93FK7@3#HyFbF7@KO6hD zN!QzL`{m1*PnVb0dv}C5LSgoQk6y9XT1pX-)|x5+uGpIdT+qjFzHRqWV_X%EDDh3G zf0!O<5vzj;jMUle>DT`x`!T#niO%Ne*&z{Ou~SVyrZ98abQo!11ieDgS?|5K8V;3` z_ksKFAj1hFly+pZ#Nj1Y#wqN#k)ipN)^EYUPBEcL?_Eqxu+~!R!fT~<;dQBx>-uzB z&MPDKE@||`ZM$yQMnu|GnzYuP3F-R$L6!7179kRccgX=tL|B*(Y@i38P@L6BjAjJW zrilp2i49SBl~Tr(`RJ1n**8k6j%k5WzTCmYAVkgp%#mw0FadF2_-NU)}ca{0m_0pvK3Q9GFj0Y$os)@j_r(0*t zx?+#cqzbVNHVT9lOv||AoC-Q@;7g{7>^Rzx$Zb)*cYnZC6_7-%wWeUm+{K!jL#>R+ zolXwMNq3?GVSzfjFC32E>5Rj{-~cF@&l*Q)%9wJ#5;RL>(nvz`rUr z<`1uL$f+U`F%mezgkpmhkDq}NvKjW)-OPtdU}Q;qnBkF`%8gU1G>RFIWtnS?Ok9T+ zyx)XFa(+iq*|g(CT#ingG~J65e)AitWwL|x7&5!_uJ*V-}dw4iHJRaaty3-uC5GbsaD`S45wxWto3%;u3s;g%gy7$ zRF#mCItai7ULKM=k5?H#ZSPJ?{KTdotQr6m4m-t=U@uF3dO8PPAp=jm&F~|4sjFh& z_kG(p&!66I^67Hf$1AmlMB>0H0~3|tW!NE3 ziiK}dnQiV$=l^}!7k(p%>5dYTi@zaI8w0Q*mCE57zH<2;!E#UE{F(b zjW)x@#z(DvkOeVuM()Bc0O@wcNeL9FL;^EW1rb0a?>Cuhsq4dv%fd@p9@h2gRF>kc z$}p;K+xGJO(r%prwd;1-+P;}eVfF%jj2)L!5P^|+#9B}e`-$-0OFYDJnm+<2{^wZa`w|)2VRfq<1W`fi5BvgDhl;buOa_TlQ zRgsRs4&)znX*v#Wv?K7uCEqArb!2f2^NMQk;)xSLq@t1$xT4a<69!>8#T=ag`5KMV z{ocPnHXZ|331jfk!W+ssjvE4F~{HR{(J4|6 z7{Vka=GrzcKuk>(Pz&Y6&njz707xcg2Sr%hZ)>BI(l2$%?#M z!*)h1kGbzikq%1DH`yt%@d%2b43na>Bx5f$`x+n+%TBYRSqX%o8PABdC*8Ar# zA3wbR>D}9hr+1I%$My91fRrY$c|Ldt6pIHI=HSPy!TR1l|MKy}&+nfvm)pLHYS-Qe z8gRs!WmL$#COgPjB8KQM8Y0$GPU}(&otEW%TFX-EvN*Gbh-%G&6T!MJh}gD3n|hLk zskUvu-EK{!b={jh->zS;x4n1Q&yM{_w*8K6Q({(B1!Dk53_5Dj5cRf4T{WQ}lUQ~T z6Nc2x?)4>jB#?uo7J06*l3^BK)g9l#=E%(;Nm8OB6*Tgo0msrOx0W-v#SrZngT-1v zF}u5wM2+)xOZ^U6!5rSPe)52rV8 zpAfLOZmJ`^qW7j<2#kPQ7ZvXUUC=><=)HMiu7%yPQ)rf=XIk?;bIc6tvY3evS_s({ zvtv!1qe3sj#3rDVS5%Q5{2G5{)4~fUYVF>g2dDXOHr}1R3s`)=cRrpr>^<|tT~z?Ya9xcR9vVqCZ%Qsu?!#QAWnI!gUoJ# z44D!b#8<{|G$nzj7`>x~O22oB8^l7t(z^I&SNtdCa~Jp7JLU%t>AHs2M`4J;kK2NX z3dE)ujtpcY*ZfY`#N8DJhj}VEYvkxwLQ^CV90LkeG-SkzRBEZEoYzxjzO^2~pcV=d z19S(Z=c1q(GN4+RMWwr00n>teC?t-XFY&dJ-%BI>hfBd(KN}-%3>TBnv7#~|1s}4a z8mfYbq5-8YRYeG(6jl|VYajqIVh0ryk=T<0@)1#Y$FV)=FhJmH@2Cb2g6lyuM;N$< zyO7scPQQaQIj^XYkq}Tt(9D>eXe*+v%VH*7r1hLo>fIjlz?UOZ@yvBFJDpFh*4+Wg zP7;7=37WtiMlPsvc~ccA#W+gpi|znHjc$gtXna1#3yeX z(UgG`Jkp_v3b8BYJ>-9-CsvIC*=Rd-u9;FQ1@{Hh_`pI)HHKc^I3- zd=?_JaL==;$rso$&j|t~`fgdBq#}S?%s*c|$VI9GIFf>gu%z$()0a;_|Md6MvaE%f zxIQegjve0YP4v3A%k|cJBjVxR1b|WsQHhX-)9Rlf0=3pu?jR#esag#I_SSlrS4{t* z;&KH$guFWubmSjd^3A7QFJC5%awn13V>;?HPS)f{;lUCbXjk{4001BWNklld+)7*86ipQ(t3U+Rtr}yUjGHCiJf{%OJyR0 zAc9LS$_C;KMO3;N?19pz%p|RENK^`{x>}z-L=>PhzFU?q=TFzG+OR2w z+4M8>*`G9?^TzH+R*o z_bwhu7K@uqAwolRF_tH*pj*u~nb9`#Mn+~yfI}0SKq;3VWdY?CKf;U#PQ<`~Ec_9% zBT^{9M&Kf>V5O)nT$Z|=P747PL>0^N8mefMuBts~_{4<)v5R5v9^6zaH}wQD^(OV+ zq903{0r{e#tvOuoF+j>%C1fvAkjAxbU?}G1BJ83f+P1y#weKxZ{-SN)&6Fry=Kw?n zseAJ%7S1UkL?cS6thW|JTrh0v#|sg9xpYF~1eOW0lA|Hw3P+d{MTbmy{6+qbWNNkZ z>8v*pCbQxc$KIMqRduMr0W`+f=p)x~A(;WfQkVf{+X8lT)a$O7r=?b6zO{DUcLgIL zh=6v8{2?NDw5ZRy&9n)U;Q_;=SJ5#vxgxS@fgz62yxww)jm+g0fp#P_`HC29?9M1D z%3?N?s$Sn;p4>wx8ooQ`LRH zef;vbfBu*M_s{?N=T9Fl+f}pO&0rrqpabOFK_bG_=~N3NLMi36u0&+2#8gXhK%oC; zFlcS(LUpO7Ffpy`LIkbt0O0vctu;rJdO-WOZO<<+m+R$n-9Eo;A_f3mw2Nf=0)(kC zkAwBJ{Nw-hhd=(~?-{5dSnKcKzyFuNz3(7_aO)kwGKGb%wuwh+0hUtCTy%|-WEDLc z-rtdVs&OaLn;m_*Fr|ZQYk3+R={l5?rD-TLVe!3tP#olEA3Qq6UttJQku|G-PaQEB zu!6g1{*Wucn6E2{`bH42_?ac9Jw9|8*KkeS2Mj_FQ?NP z5kyo(wr$^T8>pd?w0^r>rHRw739xcGt*Z|_)31cYT!;ow%vCnNqwtC_IkF(yTWhse zDq#W{igGHM0dfxh)C+0jZys|VNsvp<7*qRWy?0~euLO? zEFcn$n!F2}KwY7Aha)#fXY9Bm&hf}%4_8SJfa3RxX+?%UwdoD#S$y?0fl zsjX3?THQ0u%udOn2%U|hP75>hd0i2ytC`tXK-t>h5)AybpTlVma2mBkDlCyk7-=7N z6wbM(vTPBLYj)_eDYyFmZ_FQoKPz2i+gt16xHSaS;f$WMVTeY`Sq84;&esuC@uH6o zA5k%Og(1}&RSUi<9R1ilfYs{jnQVD|&P)b?#T@tIi(F*pT6kHOg;-SF`lAK{s*Xw@ zlYKQnS^$dgiJBtf`E)`ofV&!qSQq!4>#JdasDy166@Yy19f&DsTjSwGx7>k`VQtPQ zMFj-uYWwFe`cw-ethZY0)e&|k-ApnQ!n}YSY@CLELn@lhNK{Os zYx-^p4>JA{znR3y+{nUV$Vjh9CiTQXb9^+qRFiclCG!2)-ANdAuQzL4i>hjtj>15=Y^P8P)BFXJR6~ zWgq6jSX&Re!jYjA|I|BiJTSSzdIbRh$#dxyL+B98f6I!*@c(EMB?o9U-fo@XLbC^O z{K?|!Pu~EjvMzC-X*>xO1bKou3vr^$B&i<5LFCeb$Rq)f-kTvA_x+{qO?xj26$uc! z$h#kZSRYQvoO2Qc{Ea!*Sl61!_VxMY=MTU9^{4;s|M)-uumAM_eEj-pYdg92#!XKN z*bC$=!MfJR@=%I1qAQ}7QrEgLGa{T%r}Oz-OCe@N=)L#ew{5G1)^%BGIX#@0^D4bf zR&@h#`|75u+wJ!9^89?gUYqQ@TyIW7kK7|jCdlY2MUl3D7Wmwya;XF-?K75WWZEbQVG;>r%<>~KTBQs@ zY%#eECPzSVqZ`%fHPE){`O_1xu zX_(=o%86nF?j!}sE)|MSm4G09fi%M~LcK60ciZ?^q<@4l3q7JcMI_Rm6EZGh148ke2Tj)7m^Fs@B~OH1l?a&d z#uFA%1lr;BfcBhrb^b?31H||^iZhWHeG{zx+Q8STt+xD01)*PGE61_&}7VjVR=NkmHe1dmuX2-S!l(q@i?L&oP);kQC4KuTnYd+%G{MNff5QBm-@GNoWSGCBR`B}Qf% zd^a_d?vx!%yP``D{XC63k1=xw2T3&#*jX`q$cp_zvczj(vTyFZbvVyiR1H8V_xOa! zM78izD~0g~Obw;u$j8fIgOuKoFQ42Ovu|7L9pmI7-_{*kr3iSSbzNJReQWs#(Qt~m zoi_Ik=D;vKKm$rtQthNhp8bL&8tnjx=X7dFVkVzI9`4N$HX%9p3r2#I8Hfm_fBN;X zKO*)ZjP$NI57beT8>0tK86%E$A)qQyO6wpE#l9jKvTpx|NHOv@q8);n^yn=2sDs_o z<+?(PaVel7GUOL@oU0Z(MDHj>6+jpeL2tMH%jd5QsH&~^+jiToFW>#)cMnfbyi_PW z52}vrBQ@wcS_g zh(N?|o}NzUlZrS4O~kp>eO;O{Umz@nmZdJsa<~VOw(YVv=dQu^ za=Tn^t%<1YU2glnckLprca1(Dxw5wz>8JDKLax{T;r*vSFMqpye)+@q@0K5b|NRf| zPJj5r%Rk*NFWawQUj*Zh%l-sPDH0(cPJP9JMNGDAC^`&~e1eme%Ft@g)tHEUJ2jne z#yJ@pVWi#6fmn8AW=-)PmR!+e`aAyE$GqLnQA9~%28E$ioxYK5sMY_%H^gbhmBfwA__Mb*LZ4#)MGSk#mX zOi+*rkP+8f3m3d+TPqkSbhX~CX>X=#wzbw(h&U$Hnc(eAFD3$_E^^z$no7*5LVEXu zP0SPzH@Uj+0uVqs;tE1zIM|*Ua*B#7BEWv)fK@b8BPh!vhI?<$;gD`X5^3HV+wj8+ zh*p@_imfV=c2$sY*QyGU<2fjI?$I3j!{9X4K#`5qV^_Bv(GDZV5i*i4zkPS1i5TJx z0i)0hqx3GKg{gQbIw+VTn!~z8CChs8z}-8_Xm`6F5C z^7vr4+tx_pVu`Sf%y1tHvy``awd$>kst}Qkgu=9rVt$tQvZ`Y7|65^(^q zKu^Co3C!=5+ZL{|d0us7cKMeOBe2N{pAZ|33vZAJMozY=s>ATaN9nW92JY^~lydrS zrF8nFO#^9Mb(pb9nqETRiTm&I^&{jF8M1*iIpw_zwN_$QwU?LcU-qA_*Zs?vFYkYO z|KpE;_~8$~fBWw3dOi`CbU_*bXmhs1e!E<^%k|~!*H0fly#Mh2U;gr!|NQ5_fB5

$69Fhp0L2TDQrIn7Xm;DSbuH($Y`gBQgMx~5kxtFAj{Cl;S>XZzr_<@_&0{GJ zs;E|-_*ub=mQZ@sl9-2AKvmGAbnEJnBseADDs{$)WQ{b?kV9%bl8Fe3#mvoNmho0I`!%+^ zujHr6&`~oG#n>2F43m>~J*K14;RTwEz_XaBFtd+gBPnIPPu_A9m?|EM1c9W;8r%ul z)I~Ib3H9|BARrg^LuvX6s{{OkunqE)3QFCPS<_!8RiIJy?0R==c9;7*MS_& z&xT@Hbhn2~uh+qz4w)*!0jZ}EOp}SrEhN*xT*``|+Pb8EaQ|OKi3Y zJXN%@D-7Vq)HV$(q1uLF6?E2eDum3-(R4t+juIk@LM5g(hn(zqq;gAQVCqn@%pwe-r;6ru zj%?nhc}FUu=&lLh>5EC^`|3e>$nSxM@hRgGj?X)2t%k0;9qz}Zz$Ev1$|jN?;|4+| z?A;WIV0;(*-Uu0~eEIs^TKn|r%a>1|-~8?8r^lzqhsRPYu?GYp65Vdw^>Vr0wte4U zUY9j7TP_53B8Lzi4a2>Y+s%ZK+y#0s|W{q38lAHM(Yhu{5(xc>8B|FZ3y_NZ1P z=Qty>JP>l+k_P7TtRUqMe@l4VgY7%jWOgvd(?{%!V~MFJr%P-suLd@9m@91BAtfv< zSE#Q-S#6?b;KV)gAB7vR^qU!**>9y&B9@TlAs2@VsYdUvf<&b*^|bJ^A{B7E_HsHs zJuIiiKzoZHs;aiuOtoM!#BLo_QMD3dK?dT&K6Og94KT6qm1`}cy?4bJ?bDn`J7xfp z?dth#u81{>%`rfvK_`>cUqOf$+=vW`jAA0rx&N7Rz0r*`hOW9~PD6*9zVOm834bQ-Wzy@HX5m^JtCp=n!W5SGx z9zJnUfNhkl^GrAZX91PeyE_{|F+b=u4|$CM!vg1j*HY^0)DU7HoD5fX7ZtN64we!H z*RWY1&^kI2Ge-Ae0IDV-lk>uc0L2ctA-u|{2g~_+Z0+J%PBFQpyeUGDaUcN_)yP1mB#2tFsjdNLy=#%A1F$)^y*WRW(|S5tA~x)$-jLn6{bC?g^G7*)N%j z(F`PIc7WS7K3CV(AyKM7$88k*zB%qKqLE?z+$NTg-6b9lJH-f$i^UM)I4F_=#E76_ zejX(ks0sOK`96L|#jE_xgU93Y3kk=(De#&K^ILK&s|B3Gze3Se&!7V@QPG&K)*6YB zXnX5Kye^9=+;02NzkK@i=~7EwYW1i$Gpn@{(ev}m<#G|x-sRWNpFVv0b#L3YZMW@4 z#5KlL%lYA<7GBqrpTEo`(p?p^?@f9Gfam?@3#`*=S!yAo$A^cdl)dezr8+6?w(pni zcKfoGQkYoHh~A%03nT6OzPIiqttQfY-&+$=e~coc2QVp$W@g284WJ|7*+i!ik2=14 z-?#U_d?bL+pT4T-zxszCfB4~dUF>qbZQHIrNQAx<+xFe_2(mDOVT33B%G|;Y5Z8Zg z`&6bV36J@X2q7*^r7WkltP3qQEHDq}$9HcZ-@aArx66zFtfWcrO+`SJd@QR5V%8PS z*oQ#?99atpYUmW_unhL;yG<~0^y_5k_I4-qPUPkhn+0U*x$2k#FEZ+unIDS*XQ>?RUbOh{QX{UOr2QUQ~B z4u*$moksH7$dw$+V@MbN!hAYCcnTlFAn2&6Ni?j!#7MQfpShYoZ03>W6yW$m6%k?y zh=myx+TN%rlmdwBLw#DyPi86|na#BI-c{0ZJV+VEbyI0+HA42WgNavO-idMsF8kzG z6QdPvsQ*NzOOUH$P3CzEE~7Lx^{J@yPE<0a8OJK}Aj;$p*N!;BZ}JmHVc{peCO5?o zYZqS{dU7Ekm`6MYjZoFZ*r!&^mCI6>!t7cZ^|IAK94x7_Z`X!c2&u3GcV~9OvxwBdk-wOp)<`wE6JZ0L;1w=W2-o42%uq@A9=c0Rk2# zKZfd3ORY#8l6@`(jJbl5=*1Df^h9g+y&=^f7(8I`>ni5O* z(%l%(|NB?rwt3LUhWsEZhlc(x#nq-hBjb4C*mxf0rPFI&dUcGY1IRHM4_(zTFQoD< z5`UD(-8#WG*CJw6{BW7?o|K0edZ;KDBfSS zF5A}5r&HnDyNdS9t+{fhwSK+c+>vm(UYm!Zfqi|sT=(9ZY^@>kQkS|^W@6@A>avu` zI58ul)~NL+(zk7Et;PBbH#V~ro zk(`IGToI|*91V)cJdqn+;&P1Un8sZ`KWqmXCHI5FN$p5HLewLB%FC=fZrS+L3aU$a z4#PH6aHvbIrIfPNQWpg)>-y&HyVLp6RJY6RcHO{?hP=xZ!A#UdQ8ZFv(KWnbf=4w9 z=P&vK$IX2%d(r98Gf4cPhF^RRQ;hhUVa6sZh{RO5#3dKvdqg6Qn40LK24u?bpJ^Ql z`FdMw*^JVyBL`tYllmqx+!~gsqyj=@cOJIE7~#h!?711}^Mj$k7!qDTw9^zD31V3~om zmg;Gngp2?p>QY`YbL3xFX^#9uM^pMt$Rc>jqq7f?reg&hEtOn#59A>fwbVK!=xrRR z_tWe_CPC0(-q=)`;8AtrhycWh%yPdFFd=c_!p?FgQp2tSgrG_Y%yn5-5fSO(8cd}# zaU}zg9*@0@g!3agdq5f;zXWDTe)(Z$pWT_b{B)Z?Rw5d1E(Hz81bD)6;=d(2F9K8! ziLMBCp(cGzxT5zb2e1yWL=vNQ?1deeP9+6ytFe1g6Xh8K0@W>}V(h?37))c;mlcyb~ zJ;=~rc)sL(=-H%@94&5KJ)(zCF~5_vFQDhW_^?t8(xXZ4$FzGa7T(dd04AH84`p5N z;XfW%rjN=y>P5Fn##qKY{EhAfYE#UxKqmlWP{Mx0+m~m0ScSRRQIBEo-N`{dQc{tf zx~N_+*S$3rB`Srelv+#WLY{Nr(=01Rq_^GxjhW2IwWnMP6P`}XyQjzRzkmC5KCP$q zw62AUw9bTUVI+LHZD5p2O7J_iciC>ci0221JJ&^%@QNTZW{T)?=$IzB>SRjw9a6|d zDv&A=0upZ9244uxm+a87pUNE$Kp{>Boj z9Nefo=)9FQs~;JSZnIzOX;~I3P6LNpm-FMpdOD%nzTMikfru-+F!LUxJW?bhKxWD- zk}y+u%}|*O8loCb(*=vj1E1PZQWirxGGsblWPnEa^mH;G-3}2}A=}|Jxb}132?j+G0GMKo5&V$r;$+{ch?`>cAKIYgpf=+ws_?`bF$^U! z6DeXQnFq@?6e_MEgD4T8sJmAX1zA8c9m{OFukcm$#!xj#hHEJtMCi+%Jb-}RT@;!u zkMhiTn1j0N3&sQLHL3ft)}$h*AIYTNVxM;J$0ui(AoChn+PF48L31)t^)r%+~x(KIjJCD31B78Hkxa?EJlsLsb zl`2iBwsZaTR3`c-PI6c-)=|$sG_GW3=UYRmGt4B>_G%?tIAX6W>a0Y*VxbfhRSKSF%gxqWW@r`7 za~-+N$Seaz8my6M^_e+k32M~qCP*Fyh)G}_zB|s{%)_UfXY{7nY z7E*|b2H108b=ri<8kXxIsH}RrbFeTf)WZsPgSEAYn_(}Y*TqFKwg5OGvFW=!tN}q} zz=%b!eD~3pV^#7f0F>xxG> z5z?{aYmTwD=i(C{-^X?rZ?}qSr<>u2Ih~$ae(+<^yrHj=Q?*(`rvek+Ko!Net-_bU z-3;?%=6>N97-K}lwB#By%W_|9E!0@ymSmnT8Hq%R4k|~f1iGNECQO(mk-C*l0f3UK z5^95h`Q54h3V!IQH(&-sEs+i9>`?~y*oL=l1IO!}Q{}fzOB`cdmyUtB*Yqdh`yH1A zxi9zIJy_ybMprZ^jkoST3tW7`&W;41!%Rl)$E`W^m$;ZO{^|%48I(JqTG)wnjPdeN zj|hR#*7Ku zYy9K)Z=dh`zGvtAw3YJ9|9(nukvrwxyKhMGdBN<*Ua9QLXWd!i(}Q1Cc0XbIg+KL} z_;UFm;<+QB3?vQTjH?b5tJxxvfH}QGrrqo$4%Tsp>#udH!5i6@wO5n|{$UpAo2Ihl zN`Su;u`;d^hX`2ugIL8qe7TKK_i!UKCPKm8bDi+;zkmGr`S}yeC#*G~FhzmrnG6Ri zkKgWVPW&^Xd|elgjO)5yBfm47Ypr$PZ})f)z2D60)h{_i6cBIAJG5|yhTbV9ry_Ls-VJ(Y(I5c8#>R$<&Li%{u%UL-(7Is&^;pU zd~Q5-#dpaC#i_l`C3`Isv1yJ&@P1}34gyC$JS|8Os;Xn?P^K6`InW1Z7|b`AGA(N{V0owhS*xmR}SlTl=|M8_Lo&*xKtpFnlsYozE#PS z4A^EQx|4ONCKaln{t0upK#fm=$_5Mq6;%~c^xSi$JR!mEIdbSvA7lJ= z>_(qiXDsPa>f)O{a}8Pb(s7x^yw~dk(U)#+Yt3s-b_;TjUM}S!ZTF|G#SyRTdg(Rq zwdUgMDyLh7(_A-QgIV0g&5ai9XNZLxDwoQtWQice%ty4*g|-^_AcRn(hnc@ZJ~OJB zDl5G&QGSeYA~PzQ+lQ*^_)Bx6M-?62Li0UiIBn25W0FcytvO9&%b+D7PMHVJz`BI| z44WdTA(}5z$Ls!SAMDETAPspC)=SEHR9kQw#oqXr-nH%I82hk8%g7e)SCcZlLmJKf ze!u_x@ne~{%f~9o#2vf8c)dtOEp^b)&FJ+Sz*f00cc1tBQbxD``F^K>En>dspL5-F zE%V!Kft43Am)#X=hyUF7oO7varmwbY@_=158;|Ai{@4E-APe48t1Pe}lIi7_R~88T zh!e$PYwyw_FH9;rLZUp`{=|Pcw_!PlmJ#i2-Ym{2F-!%C?%~%%2pDA2nVlQ1yS1lB z>Enl&znR!+Ee$^+cZvqLZL?8P@f&WH=OH4T(6Sb{oWa2|Y$m*QW+K;hK`5mn$|5Qk z7Oft%R;-CINY7}6q6m91F~EsAVsLiy@?{E@`uymYf*h?9;0<9>qMRWr+VB()3imOt z>m}h~aei=xd+vdRbd4v(34`5Nb`AKIvQqDr87ZAZEPv%y{ z7nB8+D?-#Glg7O&(*EYGVkE)1AU(j_DY`oJv7D+##5YO#Q?-O%o`Er^3uH-R%ZcEEL=%u$+x~i|d?;xi#Wc_dPqdKWT6T z7>IQb|4>U|ty43lAg&D%VL{eW2_lIr6Ol1gb-b=?EernmR;9t`MlFD>5qnRk35~4dD;AzD#Wp=62`R=jmOwo>5!JFM7V}n z$*bdprqtxib9b7eK3QZMxveA&v5xfeFgIgc>;b!KV+)9a-Bskeu0$e1spcF`JG>q$ zG7+JIuo>@Wl{F$hxID{d( zYTsmAIFe(UEWAM|$6yAeiCi0;#X9y#?XtQZR zF9;#0uc}UyJW_Mwr+`xfIvk89d!MLTQxt){%xIasUh|kv3+;$#cy7OJB~o|>>DXFe z6Bohb_{#HVEcbC>$9WKDDW!YSH>)N{eCZEpa;nE_-tFi20TVu0`q|5Y6&(2APB)Fc=<(x$d*%- zWP$~x=_6&bZm0U=L^D@v|=7~E?#8hD68F8tZ0u9o&bT1>8g#$zk$eB~)B3-;UHxj?IR0@yOup#QB z6k*JmJyJI4W;Q2ImPhi#BSDLfw2FcxVEu`yRl*E70I=ntyrl>i3162GueofQQ;_Bx zFRDt!B{^Zs*oC0b(F{Gry1%3VIs4!E2j^q%R1XFMvZSm? zzUkQI8d5g`{A4usyrj7v(YN{K6}h$|05lCl^Qp4<$YEDyi*I^wZuCtbrB;gDrp zw=^PhT?3`b7^56EGRC-6I*s=Ie*gUW`Qz`ur%fD(bI$v{e*FCW{CpEpnPW^?z*4kS zJLjCmmaSYypV=L-XnG$GC*@ zxUHMMhf<=A*-MAo7h^1{F4Z0}(8#+ur&`F8re$k@30gK+pB_ljoGU0qNmX7tL}W!) zE7-`nc?1cImaJpQK(cqf1nkW0%NwT&dtA*S$uff8YmdOq+i|yL3)7<%Rn{u^loT9R zsSfwDr)JAKj`a)`GPMt*QB7CY z7EROFho(fvXbaUf`M+grk7vX|fO&_BL>w&aoSDdux<)2uh5;g$Ee9;QCvyS0@w%?- zdL=br3}SH)RV9}Dp6}03Vq($+&n)M@r0WroT5yt?LoU7E^^ZcO{-%4QeXmZ$7=i@pH%W~c^~MOZY5t%Ubj zRU=-vW>)b_;B$asZOeu#vrKbUJcqk2Z&X3Va%XoPp}En_8Pm9~aSi>MgbnkszL|1t z)Ad>J1#1Zg5I2)HiXx{?DR5?g5D!w`S1}_SInlo&FiHJ)cb)j0kVQRF#}+1og5l;C zYN8=ghG24V-VPkrhZTq;)ZBr*i)xQo3PR4fCH502%bPP1M*tnC_o8imWklR0fcnQFE^@B6-Q z^L5YZMRl6@{QSHvGtpg$!3b!(i65*W%#X?u-ck`NtdDoWjnCI{R@Y-I^$e8HgesV| zA}=wf=bVy@il!>&LF-LjW=;Qld~*)Tm>;>z-K(_iGz%bO9tnZ z`>&L7`4JXd-oeUyd`J(Q2L-FOKbR&ILCO9&e+zVH6;gd1St7@RduN1r#DKekg2N3N ze-L-tN`)WS*d<}-x#pyckyP6q%dxk+!i>&%AW^v=`_NF%eJ)<(iPy5)hMLOhL^v`Wq>-YsyX~9f{Ntzalcm zP(*x)h$siSEzhfxhzO2!Uu=ii? z8Mz#+??(Tb8;2;5qaYDgcK10~A0av*I882!r`6N8fHv@f#DnRvdjlrnUd}H!b060j zuMaQ(K@m`-o5?W-3yCwU7zKv3dX3+H`+!>6os17xFZZN&<01O*=M2Z*VG|r%5Ga|H z7sq$r#j9r))HYUZQ^mHY9Nhm0Js~%5*ivO@l~RCw%`+`B!vjF`3_f$*a6F*K?UK6d za*nR=kaZ)Kv`o+B)>0EhJwI8gw=K0!mKN~T-1MPcJ7UNSC1)^%uJ;KPrepfal^37-S0Vn{QL}}W%K9HpAj(-YT_ZP zEMm*dY`U9;N{lhw15?+^V6C*Ef~R?=!ye)j+Pqm$@39@4jW2t$JV-b7-{rtiQ(NroG4NdG=jIW%C@^O6t0CVl+ld;S71f1F(}YsA zq1aDF#$$3%8seC`QhQf-S(ewsk>SlLDzb1%nT_Cs!lfOajbd698#Kzwa8a_8j&WV6 zxHAZ*U0dn?W&Aj#Btuk)J)`Ee{U)5)WTr+1NlJ%GfescD2gMj;&YPl4lTvX+HMMD5 z43^jlkVBA&o2DM6mQ6$_i=rh{%sgc5C_%>UEfL05V_^v7b)ZCQG}GGMZRk-VH@GT@ zY58Jf?OwSPcvA3%o2lG3J=JIxA3kbk_r+Yl5es_RJ&MZKgN6*GEa24=m&n|xIt@=% z0#uz94vpvG$!MrRaEgi|_kR3QEiNWQPID_eq$y5k zE5odUn|y=l>5!q)j-3%DTDHQ{0q$;YCP8Q|!%fCuCM;z+Tv;fv%km&%RD-p7QXv3g zJQ-n#z96j`iilieWVIO-;kJ?u=0WDZ*24JM0iPlAWh2EvVcH9kLe*{cU8r32itS;E)r zLv>i#=lh*mB!|~YNZ?H>GZJt?CDX`gc4y{~kB{GfPprR+bofo%z>APowor(qXOhJ3L(nyb4MXd-7e5oO6QWoD0-iKs*<{-2KZ|QTe=6AW*ca@6BYc^v zysmLw<8}S^{oD5t`CUg4-S_8z{qe8A{`|w%OvI7Lecx4G+kM~e?xALW&uM1CWVYV# zdpW8%1lNQvgZKlprMYaGxy2Ymlq_OpK2j{Rd(KUrO>A?KNm_mv$Ed}3XOJR;1a5QtrXGjK`$RkD4DO88cytsGa0TaO&q(`tVG%`KwUXML+;E2TNdOvy@DQL z)k9UrHG*kjuq~30qez;B5G%X!0T@t8+no}@Qr++AU_O$;8U@flzDKHE=k$YR^w75cbpJ{L)0`wXb0=8yq0((j^pg|VIj|kA44hzfs%rc8B$5<@T2&S@Zcj}u`W+~=Br?Sud2*~j1_5Yt~--% zb#f-JJq(E+&LI>wX(|i3Po8G$et&-Z_8}@fM6YY8n3)d!AOHQ|BJ|_0KR!R-sCc8e zbiiV{yT%aadrqsZJzO1;yJKH-fye7BF=K8%*MfD%%WaXK!8zxgC`C^b%R&F5QX*{K zU5PzvU|$r=u1!0uSOk-AXSNF{mP$_R!C1?fvS6Z4SR&>Kp(e3)TC<9X1dw%G8yayi z8QLoz?#AIDcnQ%#`u23OksL&hL!evo0N%teulwjwtRN4P_|#)zK&aa)Sl9gFs5r9M zgqbHcyanLI>yK+ah{knYGL+Z{e_Ug*N`$G(HLfum3OrV(|-h56&GCauYbIzj9m$tvI*KGG$+V4~aiZ^_^%+rmz=MW|#Xx@Xu zStcd*Dr#@S%+Bn~BM_|3q*U1n0<;M(s`f$9o{>gJ*`VCw(&fa~HAIWhrMR7Q6`ipd5v(JjoJa*irbkIHk^8OiaHcGagTUWbQH=!3<1-36q6_(1 zY~iJ~vI0Hb0m4DN52cBOvGMptM6MndeepQZ4AmL^Jcn zMWEC+9XT7PdPuj~P_is$9goU-H92rnQ*CJwtEJ798o!u;> zF2(P~BG<(bj;u9@h)SkjZn{f^Q<{04oQwLF`Dj~ognGBGd4GgsfHjQa(EI&P6r{lA zkWEKyZs{ILQzTO|abl{tPlgCm=b$r0+fJK+Q(ufQjWJ%Y>-%?+vDO-63`244&6Mgv zb?)8K`IyI?5w1g(NWvrNx~_lx{@YyZy%vNSP$QtG-2*Q6eYzjh3KO5H0mmoDBC( z=b=IpWqL=d0I24>T&927XeCZkQ@aOx+p>QPJZVthCXV#|e$V^<{QM-M_dQ?VK1B7t zCozf2&mVvP`Nv=P`;8I!e9w8`@B96}Z`|L@78S+`-`Oew?_BGiKn`2am4yXUqzLk5 z9(Nl^acfWpi$T8fg^||Wrf9a@gZX@zgnC8TVdxm;E3?Q2bMR2baoVeqFOr7Hi0uvV zkVg3)%I?bE=!rb0) zoR)!CdsYusCldDCA)bl%#KP{5TV%*kh;?+xHE@~?6~3-3Yq7T2W~2{t2U?a(r*h)s z<3&X8&$q2eJUBPwK6X%P(JRbMl*dqa%tst2BU)*p&I5|R_F`jnIv3p^LTap)EmZjR z`p9fu^t(bIFU6fdeWFH%yB0At;BWUf4oIv=f=Z-myNasV{*m0OF?tSW6r+3&X1DSE z@Ztb^2#H3TTq7cAt+m$Dk#>QUwP$*o<;3+sWfFOcr;D~Jwfu>8Y16SV3J))^2YF=W zlcr?+xrqaI%kiCPDkA}m3G2VPbybFQp}AdUf`tGJlVW0l+|rA(Bg#C4Rms;{w(cdw z#34dKA54rP8m@k_1vPpQiTlND7I80Hc9F<(oA2!S?-gbUjAs@n7nY$&E8$BM>Bf`_SOl)g*N-rQ!>*l z!U!@4^M6Ey*_sP6>RA&(JBXuO4QgB7Ysuz3A+n7w5l*KbHGLV0O0#Q;WKz>?u0`q*#oV+Dg>USQ zNgX45!s1w zDvQ!ysrJ2DPvw{Rwyms}oNOIgiLvvZbK6+=I39Rashmm_Z2|V-;i0SgfOjt09=c(9 zt->6t^6~BCr2|9R2rMn_U;qC1zyJM*482ql_`xF6*5}WkYu&h^=A3h_d){{;cX0@q zn|okVbx%MTeBp>a8U}OIN_nT+LUf?DW#KMF8}fQYYMpZ8ukzomev=X!ZESfCjB9bv zDyoAuQ#RUdvv0j)9Ny1I!(ihJ@7LBkBgygIp77_!&vpP+baFkNM7yX!4wFiz3y)oM z*HcF=$vP(AC;h9|#I+!5w?s<4jkctuy~Fc@RqWOVm{!Ud-iAx3I-c< zD@`G!XKWT>mQiwhhr#)s z_WZlT^m0(onPXJJe>-REz+)8&EVtN!1*^FeYY?rq8pM7OJX3}8Oq0mRi+^$ZbKsKY z<052m>GP=|aw8XW<`uk%=A7?a-g6=tq(RJw7;C45zyy zkrqUNcbpz4YbwgClFnXtCryP$4N>asqG#$HRrEpaJIt9q1Q5lPR#;A`C5I!2GvN@w z1_}SyfB*h}{V)6bR{g(U*TwE@PM4wC+HnM1vIyYN2oER&A|j^wGW+&H701Rb`tAGo zd(L~#dSj(RkCJInby7}&Fw>$EEkv@(bCllo*B2hCH;$OOV@GL&;pNnt?aF5ttlJfI zI;Mj{4oQ{OX(hG1Ru5uqg(Dnv*#F*Y((RP#r%8r~k1e?M!X18VgZ+6>i6 zKJRq6-FvH;8YjV9o7=6fdLzsn0U=lj)&h~tXXhIZaDC9Ei9GUpn0ox1t+&RG;BF3G z1xgeWl7;qgrK^eUFve6@vg2na3Ul&Y##8&(edE8l%k}JiPLyk@POBSnrw9uXRbOjq zo`M3^ZYsEwdY0qdD2rt3MCETMbETYP`L$$XF)&w}!IrT5r?H3I9Dtjq>L5zT z06WD9aSC&D!?_;lbRYPfOd1Q3T2gWx$zxt9&U#jv_iJ6sISUJ-p`%;fT$M_2F<9O5 z!Q*Zt3*iWT45}+k9n3Al*PNE4-5p6C2sbG>GWG$uV=%JvT52H;(jun2lL?btLo|d) zgw1Te-@T|Q)j z=5FRFK-~j6^YY+e0is2?lrPT23foG`GI|m#7h-x-q$7gZ(|HhPZtThyqyQk!xzGlz zxnx|;YU85Fdcq5HLS|KqGonLmEiErWu4n-OHDES@) zIHP4pyJBY9&9!?F*9_b}h*n~uB$&y9*v1&+bty*ssY~;g9F!kHuxu?qb!@gerqN8{ zs)L8^#?iY7~j8r z!%_M9{(Rqens~M+jwxcUh3T@n*)k+|n0Gk47}d6#$vr%!h;&48oR$>o_pU=B_e_YR z^E&BB+T-vi3}OGLPnC9gWvAVfJns&A2Ug*r-aL5raxVKhKgM{SkJ2|EDsPznhQlT? zh8`R#Iyh)$6lH3vTAhtYg&joU=11?;6wAlx=U70u7(6___<^Nf4{ktAYKQUvWiNUV z7uO^q5$A)>>1D}VTbReVUgH|CaUnkNKsieNDOpo<>aMyY+t7>K-Vw7v&Y`?IZQFvS_!3XKZP*Dn83eikop%N`y0_>cfA?B9IHwNDQ(-L% zR$4R508kM=hcSJzQaXc9c+)ArAQ2G{4>n)aX_%raIvBZ1nqrR(pYdqa!kG#o2PdJ} zL4W@7=g%KMhYpB>XAO0+3N1--X2cNKVP>g7qIkcjVd=>X2`q-dRA|}48MJO_yN5VK z$k`lNSFH)Cq|Bth*=;|n*r`I~w3f0u72b9!&>MTg1Tb0_&Dr6G6Ok8=V^3ZQW~)fh zPbwD<)%-6>Cfh<%O5r$U#SfJj@h1HT|DwIwu83G>LluZ%>I`v@bE-I=@8;36I3|HREo6lOKD5E5xi3VO+0CEJ-pw`&Ew^`MdLG2M>4n#z-7gyA~<$}Y`y`nHS^lNkP;EtE1!1~bwBhOYn0{5Z= zH_EV`d5d<-PcOne5Ki8~8L84flflR%lm*&k50l4aoxN_XLdh|_t=wK5NtT&|3{EwY zj?GMP4=8WZFI1Jdad#L`g;1MSaB1U(P^ANDNCYK5muk4PDw&0KP#C9v$(L2^WsX8h z(k4mbaqABmD(@XMN#qowNLHiQCDP2- znW_Emhr_*tz~v!m^haJB#(+*SZLOtq&Ur5;QXTj?Iz9^@d2)E2)|_shSw`%{!9qIp zA_}I=C_PZ38Rsk9?KIp;L?p-^s;4Za4)qf+TPZNegm11R515aPYY7V?9y-QQDXJm{ zoE60GX14Bmt>w#N8JY8TDjoD13jg`zuRs0-Zg;R;*OdtwN0tLUY*HN5!DdWEw%mQ8 z5*kD2G!I`3az^SYFf;60e9F%AhR#GBz%i=%?@n~bsJF|l-=>} z9Mp%BDdi5`8EOSf6sfL82#j%64$OE5JVQIBe%R|aAFf9kRZb@Qf5)&;=WDde>QtM^ zkdC@TiliqEAjP#`l3sRXU8)Co+FEyf@8e?48Xo@QT`Lob>7nl3@N^=lU+mHSR!o)*eDIb2M89+J@ptT>?xQR&%QW2ly* zS;|RYDSV=Kobd(SM_c5;+jm#2X+Hn%NO#kTNId1_TVX+au31jH4cYc5Nd0(h^i&yg z?$a_Sqf>QqDp;TXgZ`c9sX!D7{fD%%mPH`|jX-k0FSuM=tw$#)D}tED>-Eyy-qb~u zm*xR1Ign#~u!&AoaodvvH52U#R~E?(8uH#*b#5`(HnLqO9SGfzQA2nk!S0C`aKR!f zAc$lSEvza*Oe+YO3W-ZD6@eV9e+3a4*TpK(5}6qmKOV6_1qyUis0jVuiYvIUb<|1@m)va#~(Uto-n^ z^VQ7iLq$Th#gnb7u5A+;Ac-L`VSA+k=AsZMtF(GF&IsX_Wp8xglk6fo$IijB)4t;Z5F{v#F445Nk{XH7*LTh5Hf9MJlC|f?m0g{@85ni z83jxjm#B7L85Z1g&E>P8ZoT*iDnn4??tOn!+L^X>fGA>x4CNz7qS{Y!n zU1t?gOf0OPj03#=B6Q;^yFU;q63?>~WBx`vK% z#r)|`$a1dNp9)mH1-o&84e{8C(41>6gVH}7*UHWTYl{|&gJN$Ic>L8FrXHDkg|NBo zxWn;UD>@gB0@rX2#CH04B}$d5uHSP6fF_>0G^{Oe>$o1!xDEtcL3By_Vn&-#8Yu7Q z9CNtbRxll{NB);1e=F}~K$xpIE2Ua_BT(AnUr|c5$GKZ<21HVK5;swVWM&VVYdJP< zc_Vlg6_vKzAOniiiP@r>eS7u*iFyi~EPX!&P z)%?sC@u*1ce56vRBC1Xx{*5|)p*vMBFl3)9nJB*tkt8l1YWFj9dD~4kIpz3~x~7M* z_nd3?ysfUmXwc&xZN!Fo0Cdog%t-{S;`0rzz+rLsvd(RDn?0J(r z1&wd7Z$v)tnUzrF*sT0tBi}DfG@P*4+7J{jhW|!bFlyhbTXC%I`~@_q#CtVcio*`V zlQAwYrWqE$*e3^Dmo306@8yrV^T40%{$Oe--ys?)EvFxNn|LBOXk8A_@4 zR~|RXF%N}|AfQ;3(h{CCc21#uxz2I=i&u(XcBIM0+N0WvnB9p2I8#()t+ng@r}PM& zk{sND?5VoQ$e7MtOJ;#lwsN%K1d+Qlh4JF>Sj)oPf)?srixWZJ5k^!=lJ`A5Le`z^ z6P&w|;y)Kb1)mwZsRnIM04}BckuYPde9?S|V*{osIZKgT_$}~rkAPnC2~H>|V_M`y zip9caK8A3LgC1vu3Dcl*gCcSqX@`;!%Hx?x{YsEzhDq>Q9B%7!uEjZ%CLD08f=#sr z9GgBi_j|6N@6Tc5^?JRoSEY|<&SQYhn(?}HNLYEdlY$iREL)*cYlI;8Yex7$f{Lb> zgGp;)Z>ATt_1Ybly?oz*NYL`*q=vtQ8n)JAHD_~HkMQzPL!9V~A_J^hdWlYCzJC6F z-=E|LK9!l>_vE341NV%W+_axUfO>IQM4F|)F)tuZQ2Hx)mmOZKrLHq_xzyp3e3=B}k9JVVt z7KvK)wlQWm` zggAH_P+-Ahp`_&{tFcR^?e{ylBjoJczmXW?OiG)8R}UIR6tHl@gpyZUt92WiA|Y#43sM`9cu|WV_r^u07LzRH!?Sfsa*lR#%t- zrpQ`)wCTsAxuuLus)&XYVxpnoT}HxHu_V1Irs~0u+;Bv2zA>yGYs9Y%NZ?P9S zTe17aO&Uhf5N#Jx6gHQIq!XR^Xmo&U*xg%neOBCon*X6=vYK~tA0SO;t&yp2?+UCm zeQ-!YT-?Ki`Xs6Etl%n<^XbT{R@K8T%z})tH=|OX?pbr8gmW~!xH62Yyp-%0BN#Ev zC3Q&T5SON?X4oE7hX`#kH=n+wc6%l9*g3B~3Ko`-IL@XxZ1yK(Ci518NMsBY1ke{h zLM`|R?iEoGVuV>mhU!9jl%a|B)bS%KrwgpsKe}6Xh+YmIE+8Q%hH+WE-PRiEc!EhJ z$jon^;o#gUvqaWSC$dV2>z{X@bGC)2>(E3gaQj=LtO;C8IchLshb*P@n9dVC)uv6< zjl!M*T)M zRDha$x+S79#*fFMZX@f#eGf}ea+^D~Xrbi&P?+Xt;f8)IBLVBrbmk+F9KR#B$kZ-H z&gL0nA8Ks?1oqk3l4M3|!hW{z5za@)RaEnlg@GGC7U-f`_w5~#hPS7+u41-B=}2;r1Wd(vC`fd}l- zGrV(~BPob7qadAC$L^I5@cQ!!s|qUia420xFkCxwJwTvtS$Sokc<(8sip1 zc&5MAv*6~guEO}%*IMRQ-W%9g5kX6Up~xm)_IJiv)LIj6+QF;=e9hRM2m5hDqAy;A~fYJ_c(|KnL*rGq00+dgkw z%fsE5`=W@Ux;Xv6hsq}}=Qt8+elaw3bk$BWJ+o!7GxNOiy>JzUF^j%v6jFVwXD0oo z(OND(^J0uGoKieMq#5aYMgk!&hns0wha1Y8oE@a=Id^yIk!sB!7nG_ur2U5%0=CU) zM@4j!aJhvz2Q;Hc35bTQX0V7tPAwO%rc|l?m~H4d>9dFH-`%57ceE>!eyNYD;Gxpr z7?JE&>!)v=CKt)qOQ(TRZeA88m}hp9Mh&`6hmxP zjdW{h^gmQWluJxHbW2~(v`U>QjBAyH=^1kefWGn5`I_)?LGl?m(JiH7;^9?PK{MHp z(@t4T37O>Q-3~U)8I`H>c@8>j@r#iFbI8A<7UVmMfsPUIksX~x3`&y>6OHE5;W0cz z1o)AvLA^T5`3tp-AA1niCRI{=DV&K&1;MUSWTx|LJ7jnk;AzA$C^(I#TOmwg=3_)- zx&XOX9uzT|%-zEYIspZ0azsR|^lw;LradKIAX7CwD<|)5@h-&DIbuD;Za^FrkiebR zG#WjkkkfJ$t;8q~xF2nRAAvlLcae5|oR2&2Nqgbg?PMWu|0pIRlr#oD+=9VnTire> zkdM<~o9~mds5(<5MZ)3IH%jY^@1aeHy(h`&2!cBf$JCeLeNK)&H1SA^tIn}jlhoW! zUI`TxqnI8m=r)h=>y;5PiKNUxo+vK{$C3UGI6=J)J11z{|Cma_pBK6jopV&*sCs@} ziw7FJ`r}NHqr>~w&vU)Nx!X#P90?H@NU0;Im~3r1Y_;cUb;KcGYS zbA)9(SHmgCB(AlPQi=y=ax?QeNLdi!%q;8_%WSUo@$LKTx`N!+5)%={zb&e2W1%NT zMpRg4Su%^Lrwy0ROrWE@f)kRW1;cI1rFKkJBws1thA4Qv2Zb>XVRT=*ZBj_4YU=IW z)|y1Gti|0W-B6bD0ougyGLjm^X=$hN&;|kU4lFsz>E~Fl&-&7x=lHJTbXz^pk>81q z^$6A?Iz^xI64mz?%cJ6&Sm?20ph{~Mm{^(8@Oe(ej{%4?dAW|Vvl1AJbHPWX@*LWw zQPm^#G2uYHw~Lm>W|zMB@TbrN=$>~4wdl9w3rH9wW9|ZiVy8zpsmI$4N+DfiiS$eh zM(t{)Q6fCktO%hx)NRj(rYGF|sp`tW;!;N(OG#jqS}iWEs)2*ZBOO|J27OQBc`sK5 zIV&DyRM;V>kP}c)YxV=P=k*yjhX8$pZn&$T)T?bqMg+w(CM!0Wszl^?43G~-yl+!J zVo{OOT)E4gipnL2I2@khvHhWZq~-MD*#}Oj*$qS>xwSpYEx;6uDG0GVKU~+UXPH_Zz=9S86aKpqV%E8NfaLb2seJefv zQU28tlNoT4PB2e3Wjg>|(}6~a@WEbovpa_4gcqhMyf)?B{ajmVijm_2kzh;!QA?$>N9F2D+8#OD zY*w!?!UV?{s)`>6X#-4=i@>g6PnULV6L*^Vtq{otd+i)vu281r15*!JLrxGNf!ZU@ zp5SQQO`1aR_?p>uU9WE+NWMZ}Vea9qGOmlvd@g5kT2=^N0j9!B2XpL?s?_BJo7BZ< zIgptJKg1VSbr5UHtYmMk!_A8+lMSkCl1M4SbG;aWSJ-?}ABG-DJ%4HXy134`^FJxR_Iovfzqdj^457G&s-Ott;3G z-?S?>)xoXv+f+{~DS9g=TMg#S5AlX%Nu?MG@m{}jW9zpUPDIPw7GJ>VS?KtoC^~8^YdjV6 z7s(M04sV7dlWZADTFvt2k>(D^^Ii_#^Z}u=CgGLeTrp!3>TR`>Q0f%yXzSC)47Lwo zI;t6wN32g0Y{X$2<+2n!7qDgiqKCV>TTJ(0auzwx(jJoV<~i_*LSfnww>7mpFbz0k zJ7m3KONZYg557~Le=ZQdu$=`D^d@EF^7k}T$5-N7>I|dwZ_E@l4*zx>Na& z3e+tr{($3gbVlBY2064>yagJ34BHYg?cs?oQW<)M$hyNy$r&|utobk*DVPpV2&{O$@PJs?5A1!n}9qUdHu8408=?L#p)IG8m>69&SQ; zGe5$%7-@P`fLG_9A_>#+4?|Cht{8zaoCzFWp;|}1KrCEi-DWq5j4`h3dc9t%Iz&IN z>wdrg{_&SDtDdG{B+1=~j5Ht04lH?Dmg@PIJymNqP5`j3b>G9STD%z`d4e1VEKv}U zQBq@07P{9x&G5lbTbEzVRf#CxG7Ab3WmXCrqDwrM36Iwh^NjsY`P+fvhOAteJqf{7 zQa`CrGHqNfg)C4q57jXgXCwDFe%ulmM3V8eDd)Dl%cV0xPRhjw91Ef;35BjS7#`P+wcz9F!vp z1qcUW7K92Et+FIXQF+LD5^;`C5*SH=u!al@>g%$uRI1rF-Vi!@t-X>)L`li|_%PH| z=}fzwWhOTlWflE+ebjjGDtWP2K8$~v5y<{a<1s+WfJ{17=d|1BIKsf>6nFJ@wLj!z z#4ANri=IDG`BXdr|L4>Hkfte0jb2W%!p|IwJqLauC($anXOi|9g7wE)a4;v0W9!E1eG|d{ z^@z&CIwZ$G9uZ_DhMU)hjn}u2F)j{fl`%e4mEP}~`$Ua6tekZCX_-05SCuvCL&kwT z=X}54%JPMYx5ds!EMUf3AH0y7IPPC3+}SN%RyL7=&Hc(zvOW}yXJKJhrXXu$+n%we znn>H}laUNnM+eaLLZ#?RFT4AOJk`E8v4q_Ca{-nbo6!b7G=yuib;d)UlnRdvpQ1M|Y=?p$CjwDkd!RoWG0nB#1hI6HsM&O+Y zfb5S@mF(lWw{i)0qhJnE5!I(7Mw>FsCkk;JOuAe0@UXBW6pp_{Y7W)kzkUC>Uc&O8 z?->!xyw?i#)lg;s0eqK|b2mn&k=cgP6n3>WN@Tvla;0wKmHT#evJlt**7}$RIf)S`p$q$1bAq zj0X!Y8OFOS*ktM5(A7jas-Num@&>;Nklg%$#h_{2Av{H9jS3hF?t7HBevU{)-7Twz zq>Mg%BSb1^XI{ZQ#bw1I=Et^kpNja$Rd&E+1*8NrdHB#GAJ$0zI>&yb$Da&C?*por zycpCp`BOxOzOM0dx6O|zNaU}73lS}M#jh9VfQCE{S!a!=j)YMAH{9S{7*PfSnC(q@j&eb9IF)J)sY{8f#3F4w4WhNDh03#2io7YekO$r*ykrU;dA)VYf znVq|p4>g-Rw;Q6Ne3cOXhzs3|Me51?=I`bCTqJ3M!BI+e?vd+9_ed^oQ@JS%i((yQ9h*f_YZuK z8?4+g&wA^Qn6zm922%li;#mV%c1_a&^s_MX+-vD}^dGFj+emm#9Y9Z8u~O5!H&I33e0&w$@zI zwyjh#hQG#T*Nbu$-~o@dI|Z#}U>|VV*gLMQ|30{G`H6Rv&cXCh;gmiUPZ^`Wx&{ox zgWfx|Gdqag%zb$nWpPon{z{6o2=~D`S@gUyARIQMHM; z>5zq;FaCi$Z)N9Kh!Oq)?cO^#b_JC<ul+oTlejvJ)`VzIqIBy1J56 znpDP_Ok^)LQd$o7PsvVk*1LOhL-8NJBi@#%(%CDqBPnF4s_Kyu)jOONwMPApd@w}4 zrxd3$wdrd$GCe=8R$1_2_;{$!f1zzLbMP_cyc{%b45 z*ZKTobyNDKV?70H9Un}=-p=nvEe4o^@b3u8iSSDELw*dkjUs6^^LYlg@Gf$JV^UZ` zGq`hkAQ+BzWse`ke6_EFf-2DL>x5&&9BF3>0fxom9j~N4o-q57I0D1^;%kI z+3N6ib*1kQC?YvMiC^a9uhITGqX51 zn{`^DK6uZ`KYkF!{l4+?$3B20vqqG4s0exHdsP0JuLx%jRd(n0SQTzCxT)PmNog@( zTR!W4bThk#LX6^BJVSLUwJ}I%t(h%I<;?E;_GL^S;V_B$T5b;Qwp%zroF1ymn}y6w z#Hv{3)U&`l3vcr_>#!#VU7~d=?k0|=0Z|V%n@_(7!|b$^VSj0wCFnWp zji@-zoqBuTTU|PrsGtI`g4{_sjgj0EAxd)LfslycM}F{jEpD85`#kc=whZNz!%D|p z1`>tHsFhvt5j{u@3&zg>rd^4Dy&sNJN%9`?7^I}RP1Y|Hl3ct+%kB|7(d4SVHERdY z4&=+sJBnX)U9GSHowu4Ak6@?G)yX4T`kpORY*W1-AFQ;nZHpSV8{{xz(Jx@(JWpC( zQyW1#?QC3;5U8$d(&$Cp3q&g(^_dhkXKZrr1zynmT9!|oqaTSi@ktqK7 zRr#>WXHNSu=u5w5Jt3;-Zkt5PtP~mds5(Br39-E2pKd{zixTJURe!Y=v7HYA)=mjT zCevEg`SlayB7=|N-l6H=w`Nx%nGwOfK!z|obw5J28l-(3Rs~g?9+GYWM1<-k6nZ3; zRaYt<)q+P!IJ07puA+M2U~>-+4Uq^dbRSc&lV^saM~mUi*IM4&MnBsQ_xS36h5XIQ? z4L|v#{(p4ZSY=OlDQ2dE01V52=Hod0rR6ac_m)cgq9ON27G_N=kGA$=N$~~~02JNk zZ6v&9X_UC1z%$`)T%I8`h5^=TJ&=`}*1+ybe;uppVv@Y!2nPBb zJP?rndy#?o0jDFkcy84TF`6C3`p)L++j)Gt>ROQv9} zXl!-tV8*29%%e~fg_MIpK@6K>9HkbSQ!v{15fW8XSM|-{3BVjVE|%UhQNdPvd1x`X z!a87Ox%r5O&w!CU3ys;SK^aPzQjTth%l90bA%w7B*qTNd87rEx}U zG9$)ZnCK?Y3LS1lP&>^wi;_H{qQl7@WNLh3Me2Vbk723*B{?ooVye|L#cc!y1?}90 zjt&UoU40D<41JUYP9TsCgtZtds9G*M$;NiT%VkabRob?+hLj=cfXcgwkkN(~Aw~GA z5dfJ(ma|qzGz~O~8o*kt1S*ExMh{*z?`BPh}ht~>|^q84%6*SHf%$YPeeuc7GdrYvNgiPX<0jfmllVA z@&<}WUD%IPzOE8l`@Z;Mp~J2=*EaC?Dtz_xf;^YCGsxVID7(;!ZYth7LyWX zV-|3_!0{uZCsK*3$i6Nj0yqMA5cM%W*0Qkep%Fp46Nub4;9)Q5(=XKF(l&KBGp&_F z_g&d65j~~`HYpa|%=3tceFd^{iPcpQ%d0Yn7Fj!fuw!qj21F7E{8#Fdk#As z0s)1HvqLm<&*h!$TFYns6l5~HNer;-#mHc=AZ+!NiAIP30$_B`elYev5pScBAi_~8 zPoN-^gb2vK)KyhfT||$yT1N#dxbQl zQL`!@Qnqs6+dTH;gJNb!(`nfwGZ4vi+7a+x%>91tHO78MX_ugu<3tVwc5t+(S*R&z zT^k1rHtg5#^-3H}mN&e&%jJ9w=Bdb}o>b?OPI|jZjuC$}+XARlhiW_HPAY1;bq9k^ zFJ8Mo+<@I|5WjWOb)HXZsx2&_N~n}W7BFKzf~}Kd^7VK;uJbB(MWFh_s7}^ldWBE) zNN1@66OouJN6KI5;Muybk(q{Xpy>Y~BG+{~Ucm=2@n<cNYlpq35q*h6L_)+XbfxAZ&cx;y!~iRB zb0~SKr|zaiNSQDts+6JZL}A|Z(Gz(_gy_o0K3R~CF9_i2^ZDSl&ezEZAsN&l=MkoK z$q)z_2sZ>I#T5o38ny)&Ex6mut1$ypvR;ad2$+&1o4{(jX(jqlLqRilepxS_^V3t8 zX(G{Ls81Tykeqr|K3vC~s_sJtsSvyXgk94itLj?(cs`N&c&tD0^LRYe;M}rBUf22k z`)}XQmy6YS@i3oOnprn#THnHr_KO4G05FyK+2befpNME+c`;{Kl?t6Lths#N%n$o< z&^AVr2}3Xt-~{I&sM;NoT3+~DEc9KoI|X$e>I^uC7M7XEc|Q07>dh+lRJ0_($#Xy> zGgC72RR)$o-;#2Hh80y2U1Mn9tzI)rb#2lQ^CgP=VfH9fH;n@dwfBxr6?#Neuimh- zyj5l{CVKy$hNeoL(KH!*`LzDHISrE^Vk1UFg_63!ybIioz%=%;cYgcG79K$_4OgQY z$GOcG11VF$h!{0%$ZZK{BDoDUeKA??bokDcOx20a-M5u?*JE2;A{RksHxcl(0H{d@ z_u-s1*3cxCa7lslT(Wz2jR3?9V*#4cAGRKA$$8Z$Fv`W0fmxXxOVSr28^@dXRvd?| zAKjxJmmf0@wL1c#MY@m`#Eb|780142?~OR=WBws(fT2fVd<5h8=gn+;@AJHv`T2Yv zs*lIx@pv$CrA>L_uZSVQr^wzr1iB^$C}m45M|ZMzM&;YX0L`%$GgnhQG}=Atc89x& z)OR^+YG>kLBS|DK=Z6BHikXTM#doUHYk`li(kiPgmC z9aVWZoHp(xvYUe%V&;AGWZ^vWB9_BiP>jDLQ)>+OY!fTPb%?8TYBFO$#sKMdj18M| zDq5(tu34;FVUS{DC>!}8#zB8URRc3dHcw8AR}^cwDIz-TUwLRn5J;;#8rE%~z)S|@ z0n?J{gr3=Hn!vWjys2DJ-nTFfQCu+qASjNGm&ySN0#S~pXeBcvD#bw9>9A~>sf0Me zZqf8+CbE;O*we)hPy@Y0Jh0TvL^lUuGs8*3FsLAkW}Jh};d5&-uZR%w*RNl{{`C6C zbtv(19Lhw*V)Ac)`}e>9_ISKr*R`+f5|ynn!`4)$jNqbMw#h6+ZtkiSdf&l1gpiD$ zB6rq^3~TA0v)s^K+?*v;Eq9~E!vNA+i z`#N2?9E8uz0vk~{fM5|+YL@6{r{;7%L41Iex^M($K8^?2>GSnYI*GraE)hzrXJ0*t z_>VD}$~U|rSJj>qHqc;-S=kK+*0ZT5J4sOtIo%II_T zTkCvXPAT>6VS=bCH6?zOk|2l(=d^4NV>=N55s@7O<3G8#IHj|VsxBwlgk!mh1#v#Pt9efF^1V5M@VD<>0zbNXfoimHkD_gXACTGJp0uH0tg)(NJN z9qWkkSGpGTL-wSx0ij|8%J82`j{+H0-0-fl)nK2m*ZF$slsH6}fT`OKWoF~k%;DoY z^I}HSJCsaeB49 zvUDs45)^_+53WMrWVLe_X8J^AT@kcqITFasgEi4hOH70Y5~+b~5hOGsToRY3(Uz4KABsEU+Qp4h&A{UV6S{CGaT{_zi@a$cvH zK0iKQr~LZc-@m`Ub)Ioqx_&R&4eFsD_gvlaRq;B+%PmLs(n=m&f;n=GJ@U$2d|;ohSFhP?`b3a6iy{lcp8kh;*Z{ks9sX+|P;$Ey8Z)I*-T-7~ z##Uf`+X#x%aCd~O^?8G8NNND?TaSamAnE~FrD~&~!jnFYdKv0t{NOX{qyD1Q6=BPX> zzM_~SkmFk<9m@jN>5y1}YpW<3KNb;i zAq8;=fRT>HA0HpbL61epdXD4+SYgajFl~Ho*2$o9?W-j7fF`m}RoirYJf2@3pRe;ByBY$yBHjn!S9B{5t1ImxhTYk-(7c<^yYWKH@H-U7=?9j-~u zYIDcUPy(Z&y@d$X>sFCvadp8yFF`Qs_3 zp;;9(1tEjLNOZh-++)m!E@-hDF^idGy1bwMgeWO+h6GI|eW2%NeXx4t?C&jC1E4w0 zPV_k==X?lM422k&mg?n>X)p>9ztx=CB1I2q8Av5&jG;OO)wfhuP^m<|oT_6Yu>o*H z_0G8$4Ug+cOM}eY(Rxjik%l81aoSXoy~6cxhB6|pcEG61cJfD25^L#-B z90D<#5ijEFp~33RY+Xp|Fb1}F{W?6qf%wbGK|DoM-7 z)&CS1n>pw9SOm2kBLr33viD1LGb*Rt3vMwjv9Cl%Q#sGq>-GKDbHBD2voSor9_N;8 zUt%JPdtdHo*?YT-1dwKg-F!h3OVtzAOyZ4z4a9p&3D{6t<^Zs@TsM04T||OJ!Sv6- z7_k5VAOJ~3K~&KY;X@7pYT6KCaJ0xIAYnFy_978;;dh&Aw^7vyXIxcm0|@b6uKLEQ zqz&LqmNYHh4RPrQ?EG~IIFx~*-c#zMsc>_6mSkxr&QOe^*WB?yP-16jg}m0!fRpN3 zxkQKq@Le#7Tka$@3(5j{5EAE%QgSWm9T$%gU+X<{fkqPe)mu?$J3>j6a*bJ2n_s!9>jICX?A%Q3A;z(fkebTkZwzE1u~ z{8jNhlkbbnU-_W|2Ykn0*Ghck=s=r)=ZNk;1x?*DT8|!81dQllHh@(tIRI1ioQ;|u zt0@|`tAc{`6t(i+wnfNn9h`rAFjbwionNg<#7+2Hl^;}ZOb~w*4u=gUCS-T|cT~+4 z&I=Hqq%VJ&nTdIE$rsjI%!`G^AQUK_|y$Xbh3j}pyAk_pFNb?KA@@d)AqjVv&t9F zpphu)sY#7@qE|B~s}j}0W^QrsC3@N)EC7dsL`Z?bjRvV&W(LUAZ)Q3cAB&!k+7(m?E69r6ODnToJ-LRi4+9PRFM!wd{5|XQ;Iw?=Hpnz z$c)Eg*mNPx4ksN_vSlk!QE?FoK;AB%k?4z1i&cvMOz{S#paD#Ex=I|@A2n7i?n4}- zzTlwx#S3q1W+JcG`CM#FB61w;mQNEgQP0b zLw(~Nyg6MAT<_{CGz>J9j$k=6EoRF!b=?S_p{=5BkWlL?^sX6 z4w+7A_!zF5n%XY))sXs)sPc$Y^_fqBG|{o^u^aM1Xs&wVUXHI*v*V9>7$r`9!V_*p zbu+R^O|IW%@4cpnap1An3Nv7i609YeV;JF^jwDDAQP=oCFP-O#d2W8=cPFmFXZs*? z1B>ab!GSm(I@}cY;MOk#g!BOcPPh}B_Bp+#8bd|V#N~uav{@z zIEDa>*dficd@xYc%ED0<-|1)DojpU20H>u|MKh7*7NIknpFkA_CiBMmDZp5mu1G;` znHi8Fp`*<6162bJxYW(sojE=M7uc6vXl$_Zap{m)4StHK=TEt3l8Et$@y8gI*dV?R z)B8;=Zi9-E!OWZv`R}ol11f3<3nN1dOtdR&C34&%CqTeimh|~ZTJy>~4S?eW@ z;otONk|)XqY|1AolXt)-hi7 zW#JthtmT;k?>B;?G9m9+KW_F?MvKy^mdlo-aZ zz>AOPcSQizmE6u-VL0R1E-no733>XB0LTR4(1xz*6UD32ljhwT{?Qo5i#)N z<4H`f*Xz1oCfE1x-@d7kJg##az{kf25v#)Y&+~O{30NZ4oIYhBrId)D%5LQG_}1dk zjGM;491ku>HFOWQ738cpMZd%6oW6H2px-d#1q;ogO_|O*G^IkGe1?wDs=4f={9bB6 zHjWwT?@rY2j+}NV6ldC9w64n=g2>3?!7)%OrBhkBEaQm)Oh95NK^C8!bAqhG!f=q8 zs<)~VG8BGk0B$ZoWfvzG*a~VeRqFGy^AP6w1!+k_i;EucgdUF>)_?alYMR@+8(n=o z63${wN<;5cwUG4T^94Y9%MNZ|j%*1LDAg7=(oXgFL_S_gXnq}KBQ?y-Kr6RU4m=Ey zW>{xC`FzggD;@KQd&8)%lE9ZJ!K_5FT7ZZZ{#9P?WO#90;o#0xjmCCADtaTLd2zm4ObT2Mx^wQ1KyW0%Z%y ztg?PXP=q!T5pT0}UoMk*N-iS!5Wc?GMRX7olB(|OTF2qNg_D<=k8j^k{yf1p3cFz> z2Rm?!@=f$&w;QU9Tvbgb7Fpy8MvI5Jfl9*>p?Y1{bzNR$K|Yad1--qX#zeFz=!%l~ zcxInz#k4w*M1vDMPn;NpbVipklWTm!s0KI09Ht{Ejx^B?pcreaK(HqoXV6z`qwCmu z@pX)sJK6Yx0%7#6H`^2d5F^b%tKl>f6;tspoQP1(Ib}}Xb2)iE^O+-Q<*Cr#jo-XX zUi=}9QNKUyb+p#g810ST0tGsORVPY$dJn6Dsq0*=Df|%mkgDeCQZthqvmC^1djK%@ zymYMNq9pewxPo!;_>Pw(FzPMS(U@GfMWJ+g8;#dRqxndV&nV zfC6Ojd>kK71U%2v#1``+-mjOqPsZT&I?Z6aDTkLTs$N?Jfc#)IsJLH9o#L%E&*wEl z#I3wB4@S_pI@w=AX2kg{g4bt!64!mhSdrXy51WEl`HfquLR!F9&NLOS8)IBkZ z9wHhxI4X8|xRHo_vL3$_5+b=IzlUl7&Omt=8|DUJ?;SLvoDIAF8G$Hwo(QdWn!Rh= zXwuqT-;|-D)9$hDs1V`5ctx3=H0_yg?A`(N6bdEq7R0k|)g|(V*2>mYRwbYnONd&*4!3-Dq(HGGD^>x4 zF%zXAB`09e9CVL!QY#oY0+OoKds{A3wYm8%4vKkRM=UdJyE6bgaCNX)5M|50PKiBH znQ3e7sL9RBRVen7?PkSFBTGVkB2$QvCoUlz`}fk%mv^yPP7T4E4cR9&w`1AFdLZQQ zKiWuizlESV3ly<5d~5NOA0J+Qk*&CS*36R%u_@-%u@nJf?Go{!~ zqh-&oMR*z3BDR!nx%83qLoSOXMghI{rQ#7ZK2Wj9{zbej^pETJf9Ev{Cs_WA}53eR<*jD7ZF!)J1T=DgG{O^gd# zhObsDC1%=AaTFH!9Qqb%HA&omceq8YObHrOc{>bD&<*}GT&mt!k9x1EE41?wGV}Sy zzqq4at*J_?W}xAXv?}inESTmuB-IGuo9owV`%|+uSW|EQ|Dj~C2tiY|$_%;(_W8W6 znB6!AU@)YdqbSFzTfZa6!pl2Cbqx@5G8_s`^=&C3GC{UO!QW5sGvyar(zTnsYy^9? z1u7e-8Miz{b%jyTP6iqg7nJ7K%%?L-rQmTK*@*7Cm8xS<-F{qaw3bwgl5ncHa{wv2 zZvQzH-j$I6Av{2oy;VCiur>g5Fu8!ZR#tuFV(4!)jh#fq#7>%wlvb!=aQkmlonvK8 z0MED#r*T1{&;SAz4l-Jzt`(^UDvr5Sq>fLt*5p=yAtUI7!rn90QC6Uj2G!PhbH?zaa-wNi7m z_wk+s8YwW|K*xwTiN&h9PNboiGb4{^al@%ps*qLg&@DtFP+Kh(R0~&f2|)l*>J%^l z+qGe|d#I`!hz|h_*CNO?4x~E=0{n9%o&_Z!VN+urc~D##+n7ABOMHfXXEBvht<+d48VP>+|#5dL z-dD}=7q72hznZ~szkOb~3G$Mzu5Lof;v)|~agvAQ>QNCv^Uji>1wgk^C=f1UUeUg) zT&nxJ5CZ$|>c)VAIKG>?t}G8oG*tt^FhPd%7eXsYvG(x;4+;4=*6}=^iw{O72#ZaE zjL=U_L^BY}70L)n30Im=d;R&`rlc8Xm-B<-3Oleg817!P=6{2;0;D$ubdQ8@V&pgXnN|aGzx(m68AI$fzlst~ z!~WO1>)!5sP)JiQ<#yRRFY*n5ml;gcN|m`Qrb<{#)ZbA-<)e&~r1KVI zOhBP>Lo(~+`1+&X=s$DLLWx-!Xk{8Xb$tDk)J*MVXn? z^5qeSmBU_-u74HmY4Y=X?39rzd2!UH(0MgQ1OvD^OL{(flaVoV3idT}IBaBSI={w0 z(v-BOG&to`y<}?fz&i=HHrCNw!`OtVFa7<9?)gp}x}3jQ+zjb7Bn$z$=rS0El+%Kd zgZTjJo16;oGxNMDGupBx*Nc%7%gYNaH9*^@2!sxM{ zKmsO$0JGbD5c<}K#5*kcf2rV)9W%u02vv3Oi|T-KRswpKEg*T9?`jPsyEV57xQKr+ zZB~8slsYR%ra8c8#yqGzJRHK49mHMNvHQd_To^%~521(uN~5vRxu?&$+IVwru^EMg zjt@E|A>FlZjTctZ@a^@ zwBktp6o!t7w^7MK`65*nAZV3g&2?2x;5jJfOo`H>Fyn_8j5(}>o{{|ccs?G_=f{^X z&&TWA_tf^JD|#z z$h^SXpHf&%?|DRAf?#Wr0R!mPeQg%e4?;jxQHDsAuhm7~41{YjGq05pCIG;-9@pN< zBTqQIXFiESJ4qE4OG=reZiS(X*6?Rjq2u0E>XB77G)%d*?m>m?B5v^O%4Dg*fX~cR z>_NWwu2ZB#iCUkRn8gK@^MH-1wB*_`H8cq^xkc`lqUDfNxTgU=6G8_zB2V ziK$>uNRz5CA7~Vbn=aFcF+=tUJ(MHK9}L8FsBJ?7O{x628){@ddVL$cK0!uN7F#Rf z?{@9&;07f^GX|z6z5t-WKG$*l@ed#W(?9*g>-(>N`OClRei1FNE&cLCA0jflkI8?H zgO{L+XcmMwPf*e=YA)J3)|@|=@64@jiSLj6BVwlK;~$d-$8v*|JgyIE-h2@5ye8qEJdA?Tk6 z*(877Pjv824Gnv6+@yFvVe4obUSgYZ(FsPK+lRZs!kQLM^x$K82E}=vC-aw&FOSEu zm=iBbyw)MAUSF5@wUrG>}|R?u|QznR~@2BRq4_6>r<=;njB z?yU;N_T0%yYBSM!zKRl3epab@p@8Y(X2>>z&5O0 z;au+!?%L#LR8)gZ3=E`XoQT%Zb!q7UFzy_CM;!egWYwT>J9l%&Z8bTS*G1k+flx3& zn-!5Sn-AvVd;ms_^=JJ`H#N{*4K^!`DA}oCo>)Hr)PJSB4RHn$PBUQ2wual#^sUOo zac1@1Z|Y7Uz<6K0kCW`x004ayn)=~LeMw0Z;XqW3B=aO4MyPLl08#b-3&Eak_towko^LVN>2T@BV!H+x5hjt zKOj$qP=zM=d$CTwf6otY&<$@Z3o~0xYpv_L>akqjrXr#iP$WX8003P?RUbEXk`w}H zCTL^&JvdDR5gr+h1#|s56ftMP)OYxqdd0RFF9XnAtA>)MooE1SEuUEU*r$}9qS7N} z==?Yj*pe-X1Pci?c9C`N5$4zgA5Z@IPe1+h|MEXSzO29g<-fnae+K6{rt=ZMMZ@dm zTbTMxnrlLcGuPAm0J02Qt28knX3KO!L;!BHr;m@-6xEVH3JD7)54SN?X7YW2-39;- z*p$65GqCmK<%c^ZU5<*8<7F9+Oe+i65gAm#xOWBG6=c5iYb`Llk@KTrHIs0uWgErF0%wBW-5+dUF$gykrsh7+^Kj-;KNlQFeIj& zAEUXW7QsxJU3tHbbvz!A4fqW~UA>foNQb9H>>t8fyk*19?yiLWKDLK3bs72fq@@i< zoZQ#|Wu}5vd@h>dLQSMcRylJ>0ZPDtKw+vN#cN;Zbw0N|yk21@Ue5f(wz>lts_1oI z{;RmpU~k=`lEF;AQuVnO5#Hu?VKt#zd(0im^lf#&2Iw|YP;wz#tXwm|w0d`lNJ+@> z60a-N5R7X>V|6r5ka9&jX>rL@R@7bnSEk$}6SiI!OGHb3fhVhE&aUyp?KFAalv3F|ZW zu%VMx6xt{n2ghQ>b|u!^-r|yKC_*;_lX~ES7kJtk9B8ULG^lX|`A=8|^YCSrC_d}t zMp~xn&agyO9^ue(Z%8RcOszuo=ludz^p-jJiDHJ@>sQqo$_Fvyw>h442~F9;`;7>2 z5ab3x%U9;%8QBb=8F?{7M3P+3n{uTMA(W%k$O~!S6}HC#?^CC|1+<-i0BUwH1EPv7 zGr~}vm-HXXzxLLP>m;01a9z!ALe(~c7`+~@m9RhBh+?K&EgkCUR&6z}Fw40>={me^ zKySFP*cj!W1*$>t-8m5%+I3wHO*SAiLEK0vCs8M>mjp>7o7uh*>07P-+uc>3i}ihRkwHffvVfl2_-CxJWD{A7=ws~!`TV`+{3&? z>^OSJ3V3N~0IGKB#m2&{{#%)*ZhaFzh+{)%Vy3pYoaf8^xnd%+t%qBhcJ8oa`;Quj zm*12SsEn9`NB?DFfC}hlnjG1>Z4kgjb}a}jO+KO7Ms$~yIj+tkKw&W=pooumQO8E# z9n-*+xfn1;S*F*uWursmvJVC?NaI(~Wcg!lPNQT*LL(ho%C|h3F`=pDVDWfiMyz(4 zrk54|{3eSy-$d%L^&hftEu$IC027K!6>5z);bxSKx!A*s?Atn>FrZIdl>L(pJoiP@U=3HwWkHBH> zCcmW>kYm1NsBVggnRJK*wWb1%b4nJeuups5F~{j%44I6vBQfT~TP z$dnDI@mYt50BR7f=5cA{?twXaWaLcmwc&i2DC~sX`=gakOpiqvb-x>pwH|(7!bWnM zssXHgX?+y#k~A8-=o@ka-b(Q(+OemVNI)E9kSrabeZYYWQL!yDRN+o69L$lrhnQ<{ z?MJq>SWhc}u^!Es9r#d74HyW z$J0c;IJTbQF`=J{G6tUpMp}#Kq%a$*gLlQz3?7l=s#j5k2sY-hV}?&6Z4ThynJ>T5 zzh=i`d3ZdORhGS(i)aU2K0+!O#4yGC?=t&P%7rGNp5)l@!nwNmS4ZPByKZ&r(h zCCynHc7Q-?Cwzzrvlivznoae_u|HP3R%`dNblK<8DN=@Xh)X z#7DDvKT&q!DLZTEXe5L=7}pVN9spF@Vl!2_R77Q)iVbjXpU#<{;fl4bA-f}-yHrCY zBg+jPn1NiE844NMV$=m7viIKSb$%6Y>b$)son4Wek_WB#s zZzPlvMlUhE1CfZLwWQ$21NP{#@Bzi$j)4auDrHEYlVhkK61S{Joq@s+j-a<`mfoWYbZ5U=Rajg>mZ{aE2VOd+6U5ro6rR0wB)--&;vz``0%Nk%>HOk{=WuFfXyN(8a} z2_;5OVVmXQqjv-|LBD0A$n$@{)SqE5h+(MT5z=zBse1y0ZJEGj8mwJv0ww~g#{{91 z+%e1~Xw#14g6lmNNjNW?o0>o8H{{9yxXKb7XavvQB&xihw0yf58xu^-F$gdFRMb)C zjaj_$sw0YM95IlVm=UOO9Q=0B?)~uE1~gXG+WHi=kxJJcfw)-03ZNK zL_t)1{`~WwRN(*o-~SIem5&u;1oZ$DM&x|)aM;}`@}%NYjYxJM9e9I(?S1ZR?^9I} zDe^1H@(m%?TU2DOzi;eNk0azf`zl1E%L@|>&~bb?-h@|d)ne9LVm!?0D>GM2$2DSkE3J-#T#(XD4b!P%=0BiD1Ojn! z=yOdIX&xRKlndFYU)9}(xpSFYA-&l=b7Jf10eiFR(<%4N>v22`H*9A1u}r-k)`EqA zR}PS)X<#}L0aQd42@%(VMav|T6o|lAdjXBYHs-``%Iv(Z&+p&AK9}t4y3W_@WoBZs z_qq2)gev;|`{#9?*WRKMC!{H&F+vJ)-_2i`mA!w0E>WR@G7qpj5g=^2{1FAQ@87?L z9F5tE2xv4~&)aF9N!fuJR0B~%q+@X8I|TTarg!Ig{?6Ocn?Z=O=3Vy_@Q%&{ z#-dJZ#2vpaH!ChC?TS4`xS84}DckRb5j9iRU31Ms4gzUz>YDhF>(q!-3PxA4WFV~U zrI?B%Hk8Mj79hfO+f7ts=zicXD$T|zrjIZcSScE*42&*(V_9f94^N{HqK41atcYSn zK2IHD#i8*p(b(-Rsu@}RV>Vpi)@v*Dwlf$}3a%nF2_BQjx#YKxTH#jyS@z@-eCZoL zy8-?%s5L8M6B!4HADmTkuh+9DN>Em%+}r}H%Q{fhAcJA|_AfhVrr2mJxRL*IT7>mU zLgmN2lj6OSexvG_jhtLs7!Sz`q(aDZ5t@$z9d0ueYQ=PL0sk9dz0&sz)Tm&4i>OpM zNioav^}O|1cB_-232Rh|;A(y*Ph)n(zf^ioREJ=jnV-)Ow+o7FR$a@sh??$wn86l7 zrZ4oxt3c+pMIX<{KmEsl{`bFq|L_0h|5h;qPb5$U6n|Y5N-ZQk@U%kaYp0!~FIsjm z@_m=G+0_PSXlShlj=v2l1iGqD1*_^P!$SxiomxvnUw#a)TvRhT;mkoJ^^x>L7P=RR z-l3a-i3`36K}pcGC?=hHA%WIm+B?zq;kSy7jK+Exm>G&uJzDc{o1500(#)>Cy%cg> zqXWwKb&2S8?!7l4tmOz+tUc-2CO2t%ZX(`zcitwFb=Jh(Zj=nx02Nf+N!|`#trxY< zSww{8+ckvFR}O8^+*qXt8w1cHN(^=VsA`&5YnK>%URi>MOpN5zU~+FRB5kQk3ETFZ z0V;3Ttsh2Y6k1u>XsoK&KHH+8NVF=!-d{Eb?xVq67gEkQO6dlGVrF|2lL6T_S9^q1 z#pXi}DPoRr&D@;;=Ruq9oG5f_)35u&>qHUg@Zi*MIRDSRh<;Ld_yNGRH*8o-6Cf38 z`$!HMJ*tabf2e!1Mjz=RS!tFCpOdm79=(n_8xo2rS5x=xttZ^km^5%qEoP<>L{)2|$8IfNzK@FZtqA{*dLm0#-8d1u5*uHe5fil!*9Hs0095qVm2ME5>^bNuZdr&^ z{)a&0C<(RlsIRn?ib1b5(M#2G+DGvVGg8L0OoF1Co##coj^kLg+E<&}g}uegkk8l4 zz<4b_9%_4E`^%TF|KT70@o)e7*Kfc4LTk-TQ;!QI7g!`SJxnU z@t))B$~s2&0}CsBSG+)`L>R=t+{ef_pwZ0V&L_qlbG11h3dc}m&@|OdnRXcVu|Wzk zQwK2-fN)h|WXUQ4D~BLPB`5>XX?^MW8hr^;(N~d3%{(DMGN;2TKgnFc6QP#Z-q*Fy za|f;!aUH9S1s>0w(ml$-fL29$^X!xh16`62NQU=?Mg0d#e=lg=RanL-qBUfJNtj7> ziHpHw2F4W`Zao0VYFK0w5jd9uZ%HPGb&V^iA(5(F*R}U$@-WGHE}*Ceg$2s`PBjm+ z5xraD3T_j2lqvLb53s|0|NXKB4U*gy{X9FvbP$ch=NCE$K^Sv(O9oS@SZ>i z2nwsn2>X52Pszne7WJFn!IctZ>EN5O#1^0MEom-=+c;>$_1Mp~UA5|(m~pCqeE>G= z;`A*Am5q0A6_r@4P3BPFpjbFjKa_H((~OsaeNTB+LBv|9j_zwTEC@Ov#uSr6l~DK2 zt`;{Y9HNsKQd(72MNMB|-gGsFaAio*Korq~jbT`iqo7y2#SelJR^*G#<*lYcpfmtA z#M1g1L+1|$9$KYdMp5?w*5Ij>;ShpnpM-cIRe>Wq!iJ)HtoU5LQ<*cR?kj`>z*eOU zAMmoyM%@`V<9(A*iD00OJ*pzUsBg)!_xZ43ZGvqqvAW-|nZZc$ze*L=HDT2>UH+(y z3g2XoT_bdO>|ql(uFTwgZv#+UN#wCHb%)90z*amMXvTO1R5d;rBBu{j6nz#?%*iq8 zS)UmoS-jd$>u#6+YjnM21uwe-?U#pt=zweHpxwm&V*D}q_v zylP-#vIS|8!Lc4Hr*3^dpI?6ZFkp!^4SHob2ZB&S6YM=2}}V*x9HXs zr9dQz8W=F~ajbM^68oW5=rgPAy1){7L~6KoINp2Jo1u5_?GFJ0MLK&Xk*k*a2FA1! zJ982|ZBT>MhH;09nE;5H_@bMF9^!C-MCO=BxYoOD?G&!ipnM}8U1kP|VhZ~rq?pGf zLBoY=s&-xS{qytN_wU!WS3Fd1P(>d?MAsB;gxj{D77iXhog!I8i1-*6_HeRf>R74s z^oBx4Dw&i8+Q2vZnprM6!LB=ej9H6`HCmFGCFj9W`O`O)u21peQD9_31iQ}f-w+Oj zug{OidOVmfA|`q~j(wSfR4kwzw~biY9uKOl_;F2_h~g34v1qX7AaNK{bz*x46v4;Lt=h30|J% zP%}fHqL%hJ*H1dKCTj=*D&^q?QH?xD=&_J1-&zOdOELAT?pVjekMDKRajfTYy!0|a z#w93q#(N*@FDw(M+r#B1d~27+x(E6S!^xS%9FHd@1PF=D^`hakDCBRNm|T~VmzIZ3 zg>7tx^VD(*wAn~{r+Q9c0SvjZg|1gL+@tK6u(g(c`}VyYU*j6<`MGmWE3O`96=dt7c>B^c`kEpv;;T5ZfidQ8#)s>(UT<`fhp020f48;4`e(I_)(3u$m) z8s@u5;T`cmw`kZgm2BjExM=Ffs~s*O8KGK}dxsd@_o!O;I92ck;acl)EcP3aLLrKV zYIf~2dC{6Po`I-nY3|s1=AOTAl(eK&!#v9uD{WRXH`9lNK@djYN4`^jZUVlpLA1Ob zJrlz;jYEckd+fM@D$KeWYA*-xu>MHa%C8W-PPY(Rn#;B(I<@LpBt%_RDyj-(c2W!a zm~rM!7yTmm1~je>uT?F1lDTRjBIZnm95~b9wnP2Pcn|1p$8y>}bLie{l-q(PQ072x z^(S5gmuyqpTLE^m2Te_h4UNJ%qN)z1-Em5oijrn-{e=g;`A1P3O9SncY7uVwE7Frs!%d zpQdVy{wyQ{3Q`7L^(buFa=y-e?(39uZ&hO-48Zg*K~9hSlqN_INR5qg4i5n7o?MZW zFxFw?s##zrKX|OP5=T}{zQ~loFq<36IrPpi-2)#6fNNA?2^@;WQH}q~ltf7;^At-^ zVK7wv!yo>rvfT*nzDkJlEj9}xeN;!a4FyioV&%;;y;?w3U5jIuYG_Di0%A(2h(>yy zr|u6|ICy4`-=+z)fh$jKn7luo*w>XgffYgQ{M#c=qrhca)%r8-Z~hE_X`y(JaT7K18@IepMD zMD(3m6bYDidtWfTmo~5qP+^6Tpsc`ldVSfbmf`8naU*+tn26U4sgZ9tV2s?LGa)*T z5Qz|tLMiX51Q_lCI+)$;>ve%(66)ntk&2X<`iddQE+`r5M9N_~moQMH?khDt%65{U|68~E`>|KCV^iv&X@HciBdSsqL;xK#R zOJ)WF3Q9oC2cl_k>xz*M6NZW_~`OYq5Vp zB66Om8t~x=F#f|IemYP2^>6?F+b@4N6Q_987b&`lC@{8jqmrkKn2P9i?d!UHVx0QG zR;cQhjl4Y493nIbOTg>ns{{gg+Khu?Bbr^4#@Nb&8q=87zcqApDW=U2n1C4AXOI%N zfI4L*_MTWFl^RiGnc*HD#?R?PZRIk2@5?EKUiWI{p(N_FjYLS_3O7^MXv9!-xwKmgNZs> zq1>SN7tk735OWPLBJ)^|{q5c4rC$Ab;aAGjlAfKfeV(V!w!NStWD2x`hQ~t0Wer5M znE8^eiiGPp)c5H+=#kAh2}3_1g_#z6cTL%{2E;rJu2wM^plZF%Xd6ES7gsGA4Q3{? z0f-5gu>lI0nC*xm3^A5dhCI9=Elu7I`;kX#MzoIO*!z0D&f|fFHn}bGh;X2=rt}-{ zk-*f{K6r~;DHyDExEhWWw!B{ar3J53<2T6ep8<0O6g_vy5}2t}78>rzXk%LTu4<@^ zeCvw)1?(=xS5ZDP`SScDsQ&Wp^B4KMNRA3hq!qo}kBrLtv~;%QaT?Ydxy3-OA@0=0 zfZw88Y55uo=vqLn!N*;=Hgbxz_py`4J~ig~0*5X+vRQq;04%9NS3>r4e zr0U&M%w*jMY=K}6ohSn-s^~3RI~5V}OA!*~LjB;ih@Qt|t>x`86B~eEf}K;5i_yty zP8?q(CqPD*0)U}c7-p!19M+UP)*N>hzW91h#^}=Jo|^3t=Hps4g!t36W;9MXO<>nh zV3eryE$nh2f59VDbBP{I19uXn<~w>1GYhZgY=-@!RJGuKftvYCmP2D)u0xV*J690% zkP4PhqSk}1ZoQ?i5Z0JOjhx#cNMy!?{U9#(u}5>}Cr89;N8?%cPMOo*)DR%k8&$V{ zA0z^%5O+tM3i~f18Ak(#wsp%zv=PzZ!D|tLs$Q2EZUb76$6EZypMNG^zx?f&zx~@^ zKY#msEE#epNW{$KD3qC#>gpmhb=6K&nnZ2KQK_+l^ZaIiSA6;7{V*oNm`uU)$~Uzr zmi*py=SE&Ru|ADL0&ZOLGFjm8E`bIB08q^bn1!*5yE(27L|1gEg3R$d=9V7juw4Pb z#XyRcS4B5Rl0q9(s*WyF1S**AYhTyp@7Utyrn!Ti;<(jJbb}hNWe}9)oA`6M4t$hF zz0ZXjzvF*)bExs!_^KTSEd% zV`yJdM4`FP*@Qcc)YLvb$Vf#*4ql6JOv89)4G3)wl}CE z3A7`pIE_N~$Sgy45E*PMkQ0GPazOwN_?!4kK2{>E#10Sk-p4XS>^Z7WA zOG3*smp)D&A$*hhw=7F;4&=q_SJk*3HOi8Lo4`6(OlTy=}-O7_vTr-&MTR zI6_2V#U=?Wh31%Snd&~bsWX(@(VCbq4cKlA>X5QG3PMjec92dL0WW7#lKNi0p`qj%g4g40e;>v6C`yOsM_3k$xERcuL?n> zLTf5(BX_a_*+zzZ5%x=sC?fu@RT0BLT8Dz#C`*g35&?J-695PRi|+@MZP~y4 z{g;=gWTV(l7;T2dV4)zbGp)P)Y6Ku5-e%i%8d=X^H6M6PHHP)nm)f%DS*0%zYAJdB&0oOX7$CHr(XssoCU)N=3kH_OU*5V~9vc)yr zi6%F@S%A}Hodc{SyT^@}H3fxD8Icbnm*a(sm&k{&8KCi&J|xm9Pw{vVEhJ9fsex^k zy)!Hl(0^>aPP$&G57397JQWmvWSD>iwFtNRVL&oM!0`6t zL1=rE_L?_U^6;#V$dv78t^v+j4u#S+u%Qm8U_ejAnWUoXl=@QXRHfurrZ3BGqqW57 zMxietCVOA|a+C=ZE`DZ@B;_SHm#Bnfc^b;BOp6u3ST6@eQcH!SC;1)5ZPFQl;5q2? z&x-NY;AQ!GCJi(dW^5XugHWu&0M6$A%PK}Tg1pD%auf~trm~xu@;Hc85XmH;;gm&M z%1=9H7$P4UIz(mw{PNDn`5GWH^Kl#q$VA8UWAk;&zOEhmpBNt4)7VKFvp|OpJ;f0Kwu?N}UA&f|!}3Aw>f_Sa9cpYmkVwJ6;o)?pQoznd#(ml6MAtj45C^_bq+w{BI4zqYD9dY4_Yt3)P z-hs%JYVTM~v%vLzd=MiiS8ZMcvloOygsJLUn3j6V0K$^nVj|`eW#Jmj%)&d?V&>=L z>Ea&Sf`;E@i);|9WZVMHMR66(od$0C(_LPwupi*<$^G$CDXii&zxXsY8wN7NCmNL%*s4x=Ur$sTMzn$u;q4+KV8>!QaJh^%jH(){Pu1{a z&aCYK{Sl8W#Ik=z`XD5evV%P0_0cd}Jl0yvf7!K;kB^V%^Mjd~X{~k6RRs|sX zF(MNwaYYV*p<21P7#%x}#7Ka^afsQdP=P}dCeWHrY;hZA{0877`_g4E9EMo1QK&?sU@etHSm|s+0=#W=8fBA|bn-%SXTHw^17-@tOWQ+7jg4d@pByon zfp-<2E!O;!IW01zL`sI$MAId1U<-j38DN4AViu$DhViI5O@tukz3;bd==!W#xoO0B z6OLhfs64%x7o)1|faCigs3CXtJsHs=a_YOg$|qSh66CUh@=!hrhELerd^VSBqHrM* z69S4Dk}|N%#ywPr!RWfaMCO_Tz@Pu|PhkJ)I$!_qzx)dkUVDq`s_jC`6Q*P*GB(5= z-{P5lK353ZQ=l1$n7z!ytomzqH6v+LaZWSkqNcOCclV?MG{iV9fXwGY;OnYPlE||C zmOzjaqrfcSP~o~}l4+&rFW)WS0qNem0=Y9ytmcbRamNAfkGq=(Au8MoC$o$~T)d9s zIM%V4(EykgaG#f7&$;XfNk}d@+&!4nxa6&P<42WhS}7-Z6QR!p@i+LY&E&G0Xa|z} zp0!|3w5H;BWb%jSLu)Fqo7mFYAgGz-ysmIs*-JdDq|o@DNcGN%a3+g6y9>y+v&2tOz>{qqkbM7EzM|ao8Pa)L6K(zL#z(MyBx{ zd2>(9fMmWXR9z`n2NOuFFd)$5;N$T0khP9ut$l5iozBvh;urWdUJ9^xsgYT&xgZ;@ zag5fI42wBhD_2uc*$_x>oFkTs@(3nW(>oJ8R1rFZ{?Nfq_0SW(0lMlU?_}{=K$?|c z!2QnGzRv6NFDRT4A??a9qZj54VsC~$gi#z?)IP=uc2gWc`Sr#@>P1PezX^!C>dyZ+ zd3YX`I}4XSLGlXU#Arle=K5*cOHP zs$?4maHHY@sOouLq8kZc$BBerzI;Sy=tRT7griRle%y-AmsHInpA$kv6|2=s7Befx z)A+u6vuuGT0=w zt2i`c9g7$3*CxiF|NQem{cr#Ab)LWe`pdZ`jcD1}84R{c&J@kiK-D$cIWZxuK+9SV zIa9s|jMOgZ{CJZm{${jHvTOf&adptZfXtX+%x)~tv>a>2{)w<;RYBySDF3%?P%I0a z7BG0w4F>Aa_1K80sN|QDw_gr#AKE>rQ2L6jVB*Jd9P2or@}! zMbRfU9k(Y$>?1SZTN1|%i-_&_+$GayGU@rb{u^;65zCcn!zIOrv=GE5ZHf@aHbL8Q zP?E2~Wgyi(T0JJFiYSX2q+&!xMI(zYP1{5eQi=Rp)N0mkO@Rbcw`|J)&(@nYNs=Ym zdAeNlh{&wHyJs-ukOE-%|Nji%C=|g137|3PneMDjC-yA>03ZNKL_t)l%nWzCs)`3) z&9g-YklrdY!rkm%UC#NAiI&3M&;M>541t0~a7jrE2mm6IHxT~eFfRlW5%f%lwH7Z~ zJDc)23TP3E2LL31H@${+?ZlsHp~278YsaELBFNuW#_@(cS;ScK=;8&bnTzS$h~oip#h{69h%kiwcE8C+FOep!fL!1c03UdrWf z4Cs{Gj8t{ocDapj|G_wKK)ID2ObxNYdmH;>OA4=Y*aN-Bab8_dVPJ( zUQV_5SFtu3UVF?A?P*AF^OeY+{IXcZ=K<>U292qzpUNBrasn`;T=K?4lF{ivW&6x` zGM(0)Ee*~aP%HE*0CK>fqxmS*etI}*ArZmKC5IKzCUNC}SsZ3b*r5KDxmeFQdT$yx zx3_+aIX^!w`fGNgMZ=S-My)#$-{0woC(mOI3i;qYFfwdz617qr`yl&Vc=m-KP z%;~vC9;??G5g7OR3mnJcx*ijO1wZ}r(;xonk6-@FJHR{hLPYo7W%)~Rorw5@6@`l_ z*d-{Oh!zEE)oT*&kl?(T1$&atHdTv(vk}p1c0KMp-bMX>#G{r5I}9KV!t>< zG2t=|{vE1844jxonHvs^X~z?hf!Q}Shj?OC1Q8lD)CR?_O_kuW*6ZurZ7s;^P4?b< z`xe_TpD!9tWFk)CT!CyZZGys{wD38RC{wjz0ElyohZm07jn zrhP073QqLv1xj>)`^B6xq)4fD1R4`8j97KNbmrJo2MEV?11Ac{oi~>U$!*jQ3?U{| zpk{eMA~ap54{Az4qKe+M#E?~0^%N0jTdD3XNCBEk(=^H!F-f=v69b$(7+i-?wd2)Fp=$I`LQ## zC%<#7gl17OoKh}kb)UqrFBJ50$eXTf&5Pfd91tHub1%}+5I_^@nHgy&z*g>ItZzR6 zd6fsJ1&L^Np>H0MELk?Srtlw$9m08@v6Cl6Edm#Wq76W?QlI>mGOMxBkp8%_CO?+8 zA7S@;nlaCaOa}ITe}8{GTr2r<9Jkv+8TK+0=)c_sr+qcI0qnV`fzWWQ)C!YXoj)0N z)3N0fW83L1n6keZ+>loaaWA1EGgWNqjEnUWSYvM$%K;rS&(t_JQ&-iaDK8~lu|F+z zpp=lynqg3QLY-df?hq^0jqGhp)g1koJ0lDnZGpOc0?nK+vB5P_rvbrGSY34?bn(Pv zVN@z=mk@%f=_zI^2BxCbYg!soqTAm#a!t^h$KJjSGw^H;2(J^2tSECY8xfu7DI$yc z_HuLlce4HiFi*h#{O^4y1l6sE$6^Aw9mmhV{PI8k{BOU0`ou96I?$`;lfT$|B@QW-kA?jwRp&De8*~SxhZ;u*ZyfTP|L#{)Ks>N+Sve+`Q`+?XxGDz zsvhYiD(4sprpC?!d5S(b;yQ@eIuI9R#fW3^J!U|L|Jq}EQxfIM(Y`%M@P*+4{LXB{Vh84(mALrqga?VVA? zL4cZgFGWO#*#!jy5eh~JAp|5POEfYu^WO6Q^?tt{@Avn|{o(QeB9yJAkW(}Nw|*4F zbBj6=J6`RkTiNmV1F4VXhiC1})Iz1ihG}SsbJEPV1jvxeuAYCFmIK^!X$!#qJg^Zs z^fg4N%yc^zA*!6F8*KLCequSFPZ7<}4pUj{*s9xQchH(1GL+CS#B|MH)_ShA3LmTm zCSDS-F+=gviymuJPk(nn1{C&HC#MugAW9??Aq|CLW;;QWq%9S!bQy-jNbw6bNTL}+ zvQ~j%2*Drr36Pf35zUMpLJ{^Rg3D@An`znj@_CFJjU6KN^E{-}^W^P(6EIBTb8?}f zq75%GLeN0~es|`GwLZctquY@IrlQxF#YlAY{LVXnRx=( z@J}oQN*a^sDFl67+|dv3>XHErA%rc~g8<2<))FE;xqTFvMhD7kO!Se+ha-uNpo*2O z&;*+?IAQ%&bBT4>1M%u6hA!O;Ulo?wl5;2^A$p41-W$@37Mi|qGJLc`KVt!n11FiN zY%7q?l<)SzE}1P_34p39x|fpaJeI_9DUQFIwFOipSsQ4t`nGu6*)qLp#YW&8mV1=!E;W{L4HK5!V8LkOttMaR=So^mD4yuZdA zX{C`E02p&4)pKv)2}rq_vy#@-Kp?isHD+(kP<$JfdPqWKiVT2UE=NAymOa+$Ql!mT zxKlyN(WcTr+R6|GlSZ#hY`eI)WM zOGlUs?A@&6dQ#OCHMDcpQTVp+vX)ZCGS_$Fc8F@iF&9Jm4lF8L!(hZCr1_hYoq(QG zu4*Er3M!^D27R%SA);d~G;kO<0lG+{@&v#XQUF>1pm^bKhQUdxIgo`epaYDpoTQKg zjD9GFyCv%1Knhg`7etkswNi~mQ?uGc4EHHxy)&tLjt9J#mpDbWQC_)i0#LP|b80u! zMcqX`psHyWHUe!{b7N{Y?zUmPD9ukr(_ZVV7*A!+I^^SwfKFBNTb7aYk?;c?hRM03 zrR%$~1T@f)vh+}J=&S1RAF~PTB%joMqX8j}5hy~-!sz0j3v5e7i2$O8?+o1SVug0Y0A6~aIY%t9RBni@vOgdw_Bkh2*8^9wUNjKiX#`p&#vE!; z%T2Vag`(NG5NnE35L#kcG$o9hck2`?Tz+eyZ zFCs2Rsbv!)lc=CxTCYk{s%Qh%h{y3+hpG`8A}(51E~PY^RS@;Wy(A~vAxD4+$8n?- zOdgLrm;e+KKmGK>?|=BiU;gX68?a4nS(G3t}E|& zgv?N*?PDNPv-5HC;^VmaXA{Y2h{v&**WUJi7cY4|_mY$>vk%K9H?gQbc0;wmS%uyX z8sueV#iNQ|$*XeDTXmnfPdpAF z31S5RnjUMtzTSwxc$?ux47GZVtt-jx2hg0-rO7@<1AgjU@AtIfG?!@(sVk5Bn>(E+1Htb;sDOH-9A zxTp^Z##(sv@STZ1x3mMS+T#`o=%-g%o)b{)#gMAzHRfYD%hS{*`0dhd_74*@bw9tJ zq&PL!00m_gRgWvKs4RPO#71QTM5N;Wb+sIg1RjFW>g&oc53XhegNrY+Rf5P1X>Ada zyN~`BuZ&rUaeE8Qt3Da>G7%M(g}}%okU`7dQi8;Mcbxo5NMK^q;){q(iOp&P7ma$_sTF6=x{hfxvbTwU#cf2hH6TamP?wvL+{20y&M z?JXZ(Uw{1Z<6r;vc0SIj}T67QJQ=Sj@Iw{~Z^b}JK)etpUjc^0Z< z3tf>LV52o>Vq#I*`y^WV7@7``hGwOLhz3q)M1>$y`-`H5y2DJZjzObN^JgqF*-Xs8 z!6ev%ClJRk>zcTzh9%qXNLlx1(lPg@5+^hf5-{&Y1fWL%mF`|nbd`fNi z$99>6gwG)K_^C9CB0tJhvZs)T+UU;__jTnLA($>vZ^h*kXT)bb{ts*ZA=)BxRUrgg zTpPW*Kd=&yf=Ct@X}r8@o))|i$-VP=??pmIK3bNMMXunlfi`8G;DpQ)m}6^GZ0;|x z|3l|aPz?xTO-kt%@}ZWIJM7jvh&jv>%n``F_f4HjNb5L>*?SCcIV|4BL<=A>aY@{# z8pBU$H}R{2KtU=K-g1B8K!nz%5YBFe;*c1wY1!-$)@ zg<3llP!OJM|9;7�M*~0fK|(cMRpZ5yhICj+r{gwoap5g8pD@EgnA=5xOH8a;Tl! z+m3kwEvYc3YS4&C6{dI6%ruqqmHPE<>_=-vhMvGD{Y}A`S}TMh81vYY7-04Qh6n&< zz=ZSHzGjxpJ2l7N$!8xC$N70anHD23pb=CNt7X_Ozu=Q=Dpj$|qDaVz@YV*;z({c) zS3ZC#y2`m3I#`0xv1qzv&OCEN>>`d$3b8)<2cx}E!x}8Wh9)I+v{mw^u@Xdwu=GFF*hFmrswcU-cR_FKSyyDE8$*ce*GM5f_av zo7GH(t`sYbz=1LOvq1iY-OwzafVCDWoqPLXFYdheKx&u4bq3jRo_Z29n8iNC0_2vvoWEXN5+ZhA0L+ZvmFtKccXMd0Alrs3{uovoTLktQqK&47tw^Uy>?K5qYoZS~!qYeHdJe zpd((g4re%gZu;A%;%_|>Dr`|D7+aFsVi?G_c>sksIL`FU#s*tV7uT5o;mj7Fxi;X# z?SL*_#7IZ>VMb)X62?YSEuC(~qj#y33L_wCtR0Eisa3?Zoa^W!NI7Mn+sr(l9lhBi zeTtIJ)5e#cR0!;7L$whh(D@`-`EC^z;@MgiALR$Fxbyp3pu{t50)WdE$KXDALL)TP zEpk52_pis}aSI)enrK_6nRu~^?DJtJK2D9!2q_bL{MeB=y9}8L(ADHJso%~xLhz*l zR!({{S+L5-YdM0MV)b_dYYQ60sf~3?|l>mcjLvz(8FdBf0Ca3u~$_Hg$L3G~30P zrcg=ycdTi8SV;K^gkB*RmRR;E9L&X0F{9t#V?7yFE9IZjE2g;KFbrsFg`(_Oi$My3 ziXl&6Vk>JF@o^jxdk09wxpf9GqdGe@EK8VI8D6S(12CuAuC>OUXOtFVCT3zM#y-wX z?{`Gn=Vo3%eEzyAK)r%yE*7S%0Vk{IbFWW2f&6ilv_A%Fg(giZjlcQu3= z)>=zJ4Ly##u@j5L+?i88hl`HfXZv8i?f15ZXf`NAz|+wYp?$`9Q8bn80k8d+@7ts&|4 zuZ8L~GL3Vv3_fWYL-2G;eCn9 z0ffvG(AII#S^&hncpY2L)A!?|4%~vS?y{}3N+*B|HN&H=06apbCIP{Q8B&}S@^^Ii zrD(>E2DNV!`(r@vG-fLfU_~Ctcs?N3hDs4ASIGop13>zm?O?FVa`@* zbf%u0-t$OvR+)$5QNo*gSC>&5nbvmJse*o4#+PBzXhF4xJdVtec`+HF zh~i*{n)l<>OUEiDYxEMRh%}=kV6rO>8Hwufs^MwVNuKDNHLGtkQzJ&w(U(93RbxW2 z@aE)9H=l6qF;9iQhEfVcs^eOjHaUhoIkN~|bdlRbeabg?UB$i3ZKGczZ~=O0qh#NtoDUeO)c?I@8*65P^S3Vql`=ao`Bz zDx{>`gi=?;4479^(eq#{YBoWsb1EDP(NisnnU32Hkwg^$x5)i|_Zi&nc>53k;U6Af z@At3o=l!k(swP2h*K8JJIBcMVbQ}w-I1NRlQ4cvRkIAah!vd1as`!FjJnIBhFHA)& zuL=mwt6NC>-OFN&z>^c}6}5<+3#g(0TLVxu338o=i_i>BJQlIIXOli0<4FKrKBf}H z*$c*jB|g4@-btltJr%_nyffq;j!{HnA|XRHFe0i{Vpm*MjJ*G)iwH(Fg{H2h?xeot z+aaM{7KjstjO3}p1|xC}%3Wm*N1waMFpAHi?9$E6qX!E3 zWO3dB`VN&40B>G2JPAR}d2F(4q^BcSbPV(P0z}S-QLHg+HE#7MXBA+LBftxgke7+5 zm~0U>f3ei!4Pa)}7?vcNO0+h;P`x&_tkXL}_t-*o219vj8PE{B%@EBFj?$1D`xmHF za$sOcobLrXx}_#OcM=i06<{4W2aJ=@m_0T;|Y^oQcrxqYX_MMg|h3*Vwc0(y2{$l`5O{q{?kJ zL>>*?YN|4um%i8|%Pfa4?mJG(5rD}YaN>w_9zJ5KkxB54%?RWFby}->2#{;Vw5>k5 zmgxn4rWd*XH%1R*$=R5LO2McgfFQB3XGRtx%%+vO2w~$pj|e6mwJrcfrRct0O0s;W z=GLE&c(p%|h|8$R&_GM|@1GJO8F`H=2_}ppnsa;T^<@Nr*1r5Qf=Qepjg103aw!a` zsq)o)ek%WA9IkjRL_G}6;;mP^GDQdIk!m$G_=V6RuE@O1l13i$%hJuE7dJRHQmR-` zS*Jj0&iy=`4GAx)mhMU}QCsm+YeMU>w}mzk4PqX~p_4&dfeUinu&SMpGr|+Y76XB; zj?b0=faCcHaVv~4A50=B8mOqCRGpXda^K`J5@#R7%&XoFHT(GS!$1EY|NQB%pZ@2c z|C^cvfK;8S;_0I{9PvTj_p(b94CfQ6Dw(bRCxs~+)9p)v6}I#EUd-iq2#hH;$d^yR zxYBP2ya%mQfn(O8!Qv0*O1Aqk263>Hn#AGlJcH|D>e(>nb(G3bO}O~VB&T`>>~~xz z=APMnwJ7;4*+}m~1T=|2(%?MCwHMVf&B?91E)wMz2}JSx`ex)QOUf$rsim)=9qK*< zEh>5gvqaIxGsZu@)^eY)$Sx7#WICIH3oCuXBs$`U)8pk*t?`0m`M*ZEsN>?CSthbY z!6dzz!QI?n`GM4y8e5G)6?_|5+MxMoynvV8{^BqaFJ5rN^L~$M1#t>g zspokBs-li`cehUFWk>MSC6vV{iHg8O2AZq|>~$w4m0}6-&}GeY-jOqU|fX4EB7eh2W*_a37MxN&uA1)YDE3MHtPa>;$#!`Jjv}f_CH99wjOEDRWe{D!eDYLFPwd)8F zZHP_V{b@auQg6~Rq4p&{LxPxZ)iI|--&UV|aIK0gp}FMtB@vNYL{li5B|<%FM7MZb zW?2?m&MQoeFDUkGSLuk_#T-7GjYfK3m>onW*?$tbPq@3B3yiU9KP~AMQAlud*p3Ux zike-Bzr~zYg(c*-rGf+{PHK*o9-Q~fwfk(l3s(>ukT5&)q9C-1Nz~oAOGop|KEQ7^tb!_7fC9ImUcWp9Pg_h zr%~K1h$Ac&YMNh0?E2=MhvegefREz9%EgC9726y+Hw~zbb|ryQ)d%&KJJpLx84bp3 z2mWGNuU+n->iQ)AuQV5qi2nPFikK+$pss9sBNQyNPZP0$yc_|>xMCwLz2cm^xDXK` z%}h_{G-8g^{cCMoU)Lq!L&zHUvb@XvdEp5X=$D%U#0))CXb)S82Fas22}jn^H4hXK z{?5NcwfZ#(2~-5EV9I_0QA*hwB;m(1&NxX6EX5Xyj3grM(YjaXOI7kA%JexOUCwZe zva1a)i=jbs=0@^3n8B8P?k#G7i}_$)NQ7#S$z!am zU6yel2&o|-3T5Zo#C#&MbTA3u#e8=t-3SEm#tG-Zn$jC#wM>q-DU8cCH?XM> zJ;W&L=v85WZCyk+SsU1v?H*(ao^}i5A+=luU#g+-{A6hSt!V_NrwwoYQ)ZRQI3x}s zO)2AoJDm(8CaQyV@+i>gRx%Z@H!hKdTJfpakoJpE9wrF7++JKQp z2Duq1mcVeB9HHWyY;;`-bOVH|?cga(6H~#bGoM%OqPk0&x3;GwG$SPtm+GL|g|NP5OfBfU0{`}|vf4?h4dRXBH#Cax2=;{eWU~+kAF7|Q2 zYgN@E#WUkfh=8mC8yrIF^q1B`%RQ1FkrC6o1Px(o*gNXCt(`7nM;`)T$s0?VY;n zt%k_&lBOsw~`xxBX&h0Qc(?5K@dd1 zmu_aN>Jd-O4*~+Ul(f|{CwlJ6FrBei*pAlNV$L8}gPBe~DeEvMiE(bbRIB#Y0+vw? zQOZtdajV&^Pz0HQ(58_7`6~0+7Ypv>bdvSCYVey4FV}gB(jxZ;P|Y!qT8O0~3%^86k9f8VvSMD=P1}mUh?!qs zUwM(Kp67Y)t-8;B?rr0%P7q0rjwlYUV1*NB7GC&O5-VusII7I}B5Bo_59^x_)1@_^ zr8MIg7!tNIHTu=8lgV7;n^~CGkk(A)!{SqD6)12)(_PdHHYbZCL3B%C&y34LSU$@V0eWGU1JNL&mk``aGj8@Q9?gv;GdsR@b(s0}+cYBA@~k0mg)A#9-nf$I!AkOo=oG)6FXN0G_x$ znB{3GRS^kh`T=GGglZZoJ&1fPf1j8+O&_7xBG2vM<))Hq*u~T#mHv5bqKDJM5D@7& z4kW&Rd0z+r<3IiBZ=e4C*WZ5iZJ&FF6jW4lT2{YLM<+*r9b>#k=Z!cN2w{87S9te3Ze`L27iaAatyRrhJkaei7VP7;x{>^5^AoEzbnE0Vi8C?KMu5d@G40bK z#g{|S$4?=nArwi=LldgPGsTQG8V06WvqL?N+K&QA}Nrr>xp3zLQ58dfhi&^Sc>KREn!*Y$y!gYr7O!=?9WNh0 ze*fL~Kdj>bL|%+|<8?4Ee-{b)<>l1?4L*N<+Qt@BRYh+hB4(7q_eBGCqgAm@| z@A&?%KxQg?+l7V}Rxj+dQ%xge&MD0UX5+dIH|_8yCk$MnCKs4Wo2;}lTWln^SdJuT zcx54%$*cksW+r9fMuTiN^SVam?sEgI?J?Gyl7t8K_0cR)0D*x3P*v(5DTbsCF)VsU zV81j_WM+*FIttTbh#fKYuwkCch@}X5&pRTAxP_1OYZOVJqSD~ocmtgojw^2t!x@1| z=+Ug+oQ3)uJjR4^Kz(LSPyidd?~>BIkV1|*cC=2x?ag<^X!rzv;9qRW z#1e4gCu}B_QXD#BibTxuU;8J4ghYHChl4k3heWt?A8&@RP2b<&*II0BfJplwro|sV zeh@i-`0@L{{_Wo%=NV6`>bcLo&x&!$RbAo^pTjYXvw*BA4j^4Kq>^x)DS=L~%v%Hj z)GdltdtdB1(3S<)ius$Nl)TD_n*qxet1B530P2O{1qaixuk2UI$aFi%g&8XRvRVPA zb;3jQghfQ=MaZ1Qs)1uI6O{u&*$}rG55$pwt)Mx4O^Glwqk-5S4#W{ug(D+2ox^zw zQxfeh4R7sf(iDe{;~=9=JnGo#A!?;WO|nBrW%S{Y2ITOKLhVxAuFzBc6tSg9tR#5I zUVKv~EG-A?;YDZRY#|H(%2Vyq?vs+GR_s{L6dk2&W5%aB`|*jj8!C{A*ILX>Os--C z6Q4bc=ssmJEauyBFnOax1RCq+1pm@CoY=6OQKklhSxCovs1(btv2rvCdRrTPR8Y5U zPD3d?x!Q|%&u=mdXjke50XQLKxSZ6N&4wwU59~p`LL+9+h+w33thEmbnc)CKWMc~I zO93jU*d!Hu2GIb`=LS{F=GT9qMOIFHV`fq>Yvpj8T?1#T4oHp^VfVB-DD9ksLj7D_ zP@R8{k(XF7Xe@77C8Q+m5N351g#{8h&tLQcV2vj{6Up#W;lUF!r6w>#NfB2@NVoC2 z@3XAu+$)QSpny+%#^mf6*~MR3l#r^#GK|&dD-i^6o+p^z4z7#3zKCgk_4k~q8OoMq zv97`{v$U)*r^YSAXIla?$YgC~9^;~TnLWhnI^+fb6D?>4dLj)}L}Y;Y9qlIp!$12^c>%aKu096*RT>b$zxh`TaJB4g$1?t zCrkvcJV=dRrh-sK5fSluI$40jS{WKwt%Lyoz6enj^onAo&cGUhMObt0+#?MJhoh=W zjzzp~#|txio&#nZRvj;;|^l-H7GC>GlxMW)MDrtBUL4a$wG~T!6%ql#+VLuuc2b-!|_?;1A_#RxDzpT z=dfdwG@Ag+ob5b%kqC{Rb|~;P&JDo_q7kW>s>wce;WY~a3Y;m@oOdExYpr!8w#ulv zvhCU+W+RmI5qXtk8-J=K? zU1oTx6@VK1Y{imj!*JDh>8B>ciJR-@We9a*NQdJZ!(P$VV;0YeN9t-q%g{{Z!infV z4mx?p;uvTlVCY5s31Ay0R9A4j7?{lPet&%Z`cCTuF`LQWrU+MiGOaP5cp;}OUOXDxPrsO7R^Mqe2R@~ zCVN*~6vKEpfBt;liW$#l&Vkn~?#uu9)8>TiK|9On@a9pHM zWapAkU5`QY!M_P)u1f{mb+XgIWqIIOO2Q!nlkD1>yWp1QE^eaH5n@pRm~yD#cBVlS zhn6!Ef3VEXkcFdv>~jW?0nj-9uafzi>N&<%MbK?Z#ee{nA0Ow0OY_f*>LN{aWm20h zyk7QPY4yy6@$kE1-*gu-mgqz8`vDIoGds^mjITt!Sg$`;wVDk-4^TBU2$~S@t~!f* z5t#qz)`<{+FN3Iz9tXya{l zgxrPcW3{G6Y-?I7Pe9eyh)WMBw|+iyIhctS6S>jRMaem(TNJ=q@DX6g{6$)(yfK9BTQzVneI|;HUbNda0yluJF`sZPa<}5TCvix6D*M zTZ9oPMge2FRpbt@=X5U1k%)PjnfTHLk&qQ-HdTluvJqt9IU+k4+K9woF zKq0QN@+&xVUIi<*-Eqt!f(Yv%1i1VDC~Hb0VhW}d6E37Jgz4dBX0^(>wXy|8PcU+S ztBHyLQy*@HwOSN#5vP71z%G&+1PVDX()6E!?>c!QsEY=WiI@#w%NE(roG?+@=Q=kK zA+4V1#*)upTn2sE7K?N3!u`yr9W9Mvagl*_9MyI4-ss8dmAVwbFoU%c(t61Qfc#9} z$znU(Hzfm`X~?BBRMTA5b=pYglZN3l945%<8cl%8iXUi7BWy>wI}Q`O!*x?;L^DIH zup5Ow{p_`yDdl{FFG9dx6JwlNQaFUh!E+1Vsty)&ok=(YrnA|=$_5-cJfRV{+SXJ- z;M*e9^YoR;u5N)k{?cz)6^T_8lh154xw>vnAVBH~ct=2611>L2G`*e?z0F^hYN zTyUe>Ew8&1R{;=R?rp~6lx0I+ppJXHGGneg~hTb&>6goZp3R1^0l!hw-aLr z*k&_kPp+u^MLdBElU9Q47_|TiL{k(jmq-lsq>GUV0izV2U4Bq4r+KC3A}Kb*2s+An zp!<0>qVar3XT@ztWL5ooekG>0j)nr{(2j}Lad>kUWn#_}#q@lY3J!AL+}ZC4k+g5Jg+?>RHe$aimEm!Q)(lP%PwOW6;nWT)LFVs zQ58-RV?aPL1u+8he9Z*FN0Rr~`~7jAK4pv!7&_m^HF@r4Oaqp|1CX%f$mL03`vHmkv={dyj(ssyB>xviKR85ot zjz#U{a#9O`2k%VHe#^@$j{;)zSWNly;drY{#hprXzMtKm^`fGW^Na*TLSA%xxiRtM z{f>kxdY&h!<(CEQHb4{EOVmuh{mn(cR~(T=7r zH2cWv7M+XBhKp(8apQGxlIomob;4rT+k+~IgsGGmeTPgOr!%S~P9WkzTsyBTt>e-Jj-{|O955ut2$RBmLB~Q<*9%AW zM3x!U@n;`H)Ef=RbreQy41ZP^tCfadZ^Tu(FhlmcGMu=HM zVbg;+%+g8=w&s-p}oD=IublA$c*W# zlUADw^VupDAw<)c&bv&Qm+( zn(vkl=2PrGT(m+!rbGY-v$re3J~m`TV_r@K(s;!vDTt6LPrwQY%ZGpp^Bfa=Do>i# z|I{V+o)pTA9-u-q?H2frBv4T-u( zBw|2dj+uN;;jQ#K4Qa$u!hR!`t{`)qtu`XEZ{^pqh)ErK7~@N69;*lh>I{0v)f!|7NY5D|OVs$lqp zO0b4UsCZ^y&Tf#A1g)mJ>5|0Knb9=~Cl+ctnA4Td92fo!^aB;Wd^wQh)gE|18_?8@ zClxga@|~mw$UR_b4 zqyn3D(aCAxWCKx2OjUMN5_+vY{8x}*`%&)m!?thH_s;!CE$SQyH^99ZMVy)-;!15? z=hiw3X(-9&c*!Lup6?!IgpJB7BffD^-wJCRsC1EQ>T`PtMg$2}muM|)>tMVoCBrDx zFjB&shDrwW)xZu(i)dG^aXA89<{yPD>1)&dZP|yU(Qp|EAw_9smq~U7k3?!l<#she zv*H$nmUhx|S7cT)Cpwp|Z+?!qUkKN5Q)Kv1I*JkBhAHZfSuQgB z<-xzaZy`9cw`g)#=Ww{wD%zK1LwD*ouj+=N;ycMQw;N<_(;`~Tw__cya0lYpUV5)( z&gWnxbLDlYbO)jYz*Iu>Xy#B6SJbKs)#8)WDwdjeCPXAgB!uHQjLp7qH@c7z_-sjgd@Xcyl@E zaYj_KG#c@&@=bX8H@lm;_6GlUW$<*t!Q}t<%`OevW7^1!D0zfUx_gi9X9(( zfb$#(3GjP>iJJ?N%@ySJo2czNjs265ys#2?lH>T$+~)MiGOV_QE)_`TJv0#_IvrP2 z>jRz){j^3Zey8SXUHel@ymJl0ty;Jcq6TGFRXy^77fH}H$KEikB^R92vuNyfY=I z5ufA42$;LnDDgqSHN-ImRxp6&F(O2S3TnU+HIz@QhrAjz4%K?Ek#XYw9a5pMi`*Tw zd&riA3Rh&8$urm}bqx&8^DG}z8Ito~pttzGC>4=t_%J9T;pDm=EWU>EyCr85o}Y@Y zp|c9i^iKpt3=XjSdxTi=V&=7&lN3t4XszSrw!Zt0koo29_0w;^|NE!EeEFaM9|61` zHvp4!$GY9UN>SBdRXkw}(-4FDBc92Fp+lNIX!=F_>b``sW;oR7nP>1wpKgw=vMe4U zjxL|@Q^twZS`(j8D|6LfoSGP}_+ncldpHTIIezewH)8M`O!qzkfh5tcIofO4H2@lJ zk5lpQrvlgNuA22!{0j=~ttm>H2aSWPhBnj4EeB)FaXA6eGD1SS-Hv1NvH10NJJw2EYIgk@M+l?AAa%h+XBR4*SHrie>dQ57Ou2j6ao zEVg59FjXT!W@ppOh?BBwC2HzHC6;;EM2YNhQrR?u1y=saEUKi80l`wAW7nD^C-LU#_K@l0MvU8sfH`p8D`9EBQ-e_)nYb0GeK=; zDdz40++=6A)_T&x%#Iy1iXbiMR$DN)x@A<8XL*xP4+ySH{V^pjwdlx=0RvJf;%}Yg zkQy7zm{3A86_`9Z8rX3LM8cwg7 zv1EM#H9H>n-kq?armDo$Re@ zHf1nVHgk1(fNS^qvF_dSD6pPV5$oj)#si^&Z8=Rrd}%^lp#Ih$qSX(Hfb7Flk#0W# z)o|m6(%THcy03CYpe!L ztf(+poT&)Cj=c4ui)xYikP;Gl53$DIRrr5mCYurIYYVnZJS& zU~02QSWUVA2Gtc4<(!cjF_H((3fCAx%$Vr)<+j%G_V((9)yLPjx7%xYKx7l4souYQ z+4nnUoBdF0S=1`a`2qjWG4Aw#bcB>15DxBwj&_h3bK!juQ?Y4+R z@aQW{HQjQGJUrRqxbfOd??8lXUAo2%o^4F065x5k%n;Y`TJ&qz2P>4u&yTL*xoY z3ExJUqkGBX&dD|0fEI+5xT zKAOs88|YVrkwVl96pKxBsISKIXnekytS>T9R~-1$${81Uf#YE&Q&yjv#Ue<~N%NO0mM4XbV7(4*DXD?3DaCZRqnxGz2voWph z(X16Tu7=q#hOzxa0qJNVW|pnYobvPD zF!CZGR8u7dr4&V&qeq$j_a^mOwJIVRpo)n|0=%Gd)FD~_T}+Q;+K^umt<+`EijC}0 zlY)UFF(ay}MCECT#_;T9QxU9u%rTlWg<2xp;9x@|OJGQctn*-8` zh|S(!UcUS8!`p|~<2VrTw$_i|egEP0quT~u>UaP8<#&aE&;s-0WU6+#m;r7*Wd+>Dr>`| zlPQEH2pJcYAn)%W0W(9(001BWNklDc6=Go=5t=PMEOfu%p6c3{#RHzM4Wq~5-A$Y8~D5iQ&bqqL* z)?5S(ljq@*-2UqZKzLwNB8AX~lC#mT4(H5)TxY)2YzD3_)zao?2~;j%PiRz%MM2D8 zt>-bGUKzt-;+m8qB?Pl2gaxKSoPqELpah5t3JK0Ov>Ci}8GJ&e>uL}mAgr7ts3~at zIAl(hepYlM0^s5`nENDgJk=}!rMY60#G7r z-vpMyJ4)@$PDPCeg1~HpYy-r_A%*h~fY3l0*f&>T_ITV)<>eL3NcILo#HA_#Yo8|~ zzP%p*@DG3ZPyh0t{_S7?+n@i-|7)TzA3iWI=k_9$%+KlGk>cP(!vXz6$L3SUsI_4x zV=U*ev=UX<;-+3;r-Rkg;KeR88Gcq9)E(S(Klk?n*m#loiP5{T;ox?YzW9liIucju+vt-4&-3r1Ke{l zHoQQfaZAIXmG%-xF+KT!b~)wL5R5rh$e^M_P@Ibnb_9=w-5m@)fXLNl`FRrpD(Z+h zv;+xQMXb6L6jfacQUcQs{ze!?`(ePecqqZhz*Ggx*qhPiCGGMtletSLV*cW=743*9 z7f&&h5v1Rc(m$XGoTQGh@=%T>?c#7I7>jSZB^)KU}>{Hy@y(2Ee^o zbdfK^$AJK9UPht;WP~JIXH(5k2+u+q!O7W$ONcBG%=r|=EUsV(y>K1pVB_nJN0G?@ z;QfC0CxnSkKsex7m@?$VqL@Zy+_c6k+W7LX$^0s=48gXtgKQPi#Hpt7O!s*j5+znX z2EIQ29y`J4zI^-{81+GM3~E5jClUI*M<4QqEoLZxr~+ZKT=1A!zieJ#Z?Ctt79#;M zeE0F~$M1eT)^YIh`r(CXfx_c)SJk(-50976_uqaaAWyq`D*JrJ?rehaibEg0+q<|B1FLRd_2yFPlPI}s|#of?IkHPF_;=Pp#zXCd6ICI{d*y^ZM(-} zt#xro*t|>;P%EPwp$i3d3e(=sh`+7HZZ9<@YMeo{sxfp~IJ`5-JOn_~Jk!yk1F2n5 zhY?xE{bh^gQr9xQgIGOp)_L2$d;vo4^SWI6{(CA+h+@9mS?de~i^eLpwm-YEDNR#r zl+jdTXnObOD>)vgj+E;ao0?}aT3^}Ek>#O+D#vriuzQqMCVGXcMAB;AF}^AJa>9sf z1jjSe014}?p!%6}rxXzdv#iB*+QPhFQ)7PdTDm#Hz%IQ|*gPxnxzbS;E~E^a0yVlo zcQLfJ&|4bHMV4>Q;sv4t1=RShzl97!elFa75NU(7=YKdh6aV5W1?=-jqE#WpQ6e_& zY*^U+tX!O!5nL{L@lM4unYz%*p>PMv;X`~0gK%vXLFN78%#HFPOm_T=fC>bai5&)} z6s9;&A}eDvoq41M#Yuf*S00L<2ZxzjpU~m(Ea|W>8i1)NC>+NkWPdT4VsMlnpdlGM zu1D2kLL1?L=lKAzwT?}2=q6^74af$fN(gwn@lQX0|MM@u{QF-{b&@PC_pPX?Dkvc# zn}O(#B&I+)66en}O*u)Q4N9n6NiU;p@afbpi`g}O&s_bn5XGH?ZBNpS0rSC<)X=B= z8#U?4bIHd?3o-qT6!aap?lT_%C=Z|eVx)|RpP%;Lx#K~%gL(19#9(Lwy8Hw&^7SJV z0-SrR#D$@jkbme!dbMwn(UkErBjCLO(8Uq0;zN^DgYi65$7-1&7!v_fiU+-=RL6Rz zxTThZfyg7eC=D_oD{lisOBgGnT@Zf}D#FKNW_)=$KD-=j(aX#6^7``n_TlFrfBx{{ zJKeU34qi+|2Q$;-eg`!GlCADBW+qj8JkG7MEqq7y^7qJxB7^4nFiq--f6UB;Mj zJhB~VNT=$TuV25u-(MCz9*-|yzPu40uQv?CEdqe}(}0GA$epn&u|kGCPZJH<9Qh2D z$smYgU_EhhYM=G;@^Typxay$3G6W(vL(?$hc^ww2J_9CNjD#Vx^??BauC*2~%Z;MQ zmM!f2M-?E3`aS`+p4)@r0Uzfnt{)!>cmB(gmk?9}0BSiN*02zs+Ty3p;AmuNQc z*K2Z48B1X9e#(47VD6ZpePVct$B9O|3S(>(pZVpTm0wJ@sH0*crHvwZF1>k`Y5n&m zg)oQKR&bV*`q$MB;GZ#Ga*(HE(M!s;cQQzk!XX%kG*;?FuJkUQVUFB5?V7z7oRLFS z1XO3PIT|ElAIBnIf3+$N;j)M?F8(vQ-T_A`-l)wBS|Nf9pKOP@Ges_DhEnWUhxUp<8ef;jj=ilDEZJ|__$7zdXKx?tj9$J-^(w6`j<^dL} zUM57g9&jd<5&^|Tg_0?Q#Gn^$oDYkj-8Lqew(LqNj+!jS?IWG3Qp2bHE0J``pAz6S(UZ<9bmi$a3`uO4PU_Q?+kA2s7CQ@S0%V7+DxZiC|d;o3%O~uPF zlVQF@xwwgRpO{si`RW$ooJ3_V&ii z3a}CJJZY_C-TYA$wa0l9;#xN-d|(lqS_aYdase9$iB3$GZiGhmpg zziS?1mI$SHHWQVScVDcsT1er7hA^|wbt7oSD-rU1*a*@=RP7-1KvZJm<1@?1-=?P7 zUNCPRbx*lFiQ$HC9y!3vUWL1y(bb?8A3}C1^sgvp7%T4{1;+9bBa;n5OUE9vUM3N# zRZsq-unr;)ZDm<8GP8PyW}-{TBe@66i_> zk??lA0oeQdR#h_h6~$}zlxN@v6MQUM~_f-xcul4rwDsS-XZ@+&2{qy_%9`+Tr^-8J%&B}mX zS4D-nLCbPM6kBf}>JGk98t)xAGAQA(mBo=Po4F<52&(Gjsue~9;R4#hGv#m!9%`l# zd9Go`8XzJCAld*VgMVqOQY*W1hOxE;5fnYrv| z@q%TqFE1~*+rEDZ91a>Wk;PEc6QbfA(MZYgfkDEU!?_u_(Ae?!y^}#7@gIsQAS;2G zZjpU%Q9aL1d=}r?!+N}|Q1$4U?UA_5co^yiLG4`lkvr>-+8IliR{4l&Lj&Kz8=w&) z(J4xx?2$p^!L7~6$Tb)TuL`>6l1P2oDM8yAOzlr^PHq%;IyA0e%u>J-E;#!Lk zx9Z2Y*Pnj)$$wa4k{xfkh@R(uzu&!jFg0E)0ytAeg@lAm!%}ZeMun$n2W#IawXNJJ zEnK3i#4F!Lt9>{+7B8GDb|Gyh8rPd{FBmeCv7wAOlAaA*?9k3R1s&;B*-IKqs(wcR za*~u1M2|tab5i4l_B22Mm*C_syfj1E%$TsWotPoQmX_rUHvKpNK=stf4WY@=1W)*N z8+zvY*`TPDM;S+!4kqZ&D;kT?dMV6j>J1f2saJG^2ky1y=K` z($buJOt!cG8fu@qV3^RuR$KF>f5hDgn>%Y`+{7cU*O z-46}Np9;|OI;C~Qv1?JlY1qKLOzax@DXweptwRN+_N>)?QXh9BH8U~Zj`ems*5cc7 zdwcu1*6p~xyu5x`YaPeSLI%L|bh$JTqVE{cCn!v+B3rg9AQG>0pBk`7&N|y=pP;71 z)JrM4`$umfq>a4ESU2FaC|5`m|RjN{FAQ|p}nf(`L1|X=q zsZ~-+M`VOMV8h13O&zeiESpn3(k58iN)TRq-j9d2eOgwin`lUbP;krrLQ_ zmNTJ+3u6<7l?aq?>(~sgmckSsqfN~R3^b`vs-**fkrN|a1-dYDJV3&?6(NJjbWRXK z#1QE7hvCkarKW0hzpT>Da7(xgLy z_hB-(Mn;c`!bA47+hNqA+Na29QJOF$W{(h! zL&oF2tGOcpSB{Q2prInYa)oN91A7kPI`oP()L27Q7iZ}}bt}w? z75cNrv8(0U!TX;G^F!$2a0n`4nKX#7c*yJ?Fn&sPaRUy6m--T(W|UKp%G%!<1eFfz z$+KiC>S+>wt&58Ez(5h2xnn|dOp1|SPPFdxV_EG00H(ZLbKH}g#^(HD|nMR(Sjqjb%4Mw;`jUo&mjvs;vmBh({q-F=k3RU2OVA zSSZGs>fh}q+JT5I_c4F`sy#u=a*;kALfo+$h|Dx^t%avb`ki@2jFmht|0 zxc`|U!J9*V8_>T2$fYsIv$Vevg~l_*5c9(!-fG=zJ+{r6qEGv=*PXfU^{8C8ZQtvj z_>K_dW*G#;SWDUW{r&zb+K91G1yOR#T%0dag^z802!XOiiHgJ%{>mz|pfJH^ZdX@o zLQUjqO`XpQNJd_?+@796?0kRi{ZvCDhTaSeeJN=`7-&Tbw?tB4jLd26JX6mDLcd&{ zlgI%p7Q+T0Y2q&yLLf1^$2ls+h&@J8bw@3SUr5*Z#x(N>@x|W{RF&5K89&=qxB7(p z`(5_kwtMSx0s*LrI3iSsm)s}Nwff32+>5H=n{b0z;mU>MUnpMLi<%L$s3M|2AEH{f zx^D#$x5A&EpFcf+KI(C7+h1R9zkGS2TDTO>?@quj>F3qn@ArRv|M7qS0$Ro{LMI2nCa!M| z(tPH#H6}VI%x;!2 zFhY(%JAmH11ROCxv=Qq>J{gVeuRWyEK5T4tz>X5*GRR>ogkw4f^2zbJHO!ehk#`G# zYD&Zf2NPm2mCeH_gqVPcsbZ!>#ct4h;s6aq52&ifkwQpdHIV_mT|+H9zH03PL|{|V z_0g@6c-bJR1g8mx_3zIW_i#QeRC7R3deq^pp_1`nxs%TWZEe|*yRbK+=VR?{09&nN zWn!u#otVM1V@BrHqEEKp6^Z^ITlAt}S-3U}mj%74aa!I4j}d z1YAuIe?FHNM=qdQVFr%=RYY9-(z}VO^e!R_;QoLis93EPtG_xX-_kK-mDXT~k#>i} z%*=#Fy1Ek)XUtVTWEwe<8Y=*to|5Pf%~oao2TAgxl^}Hb5ui0iA|G)QQ7y$IXqc%o zy&T8qm*=hSrS7$E$9}uro|(#spz0!KGS(XIz@mc8%|MvRx=bOBFy_-MngjE|pU&gXP$y&MbiisLl|9|k*- zN0_~4xwbe~HOUuVA3Ogluxe59BIh1Ag;%EYsQozu)Mpn=Qw zDs7datLbpLGPBRN`-FkV!Oua{RKL$HajI;Tic1}oUX;jSiQk`cqeWy$oGu8@_Ek|; z<}f~b{xgE9L~1PAZv=5=iJ3L-pwZOqD2G`0SlZ#a&dSV^af?>Qz z28d7y#B6Gq67`8Od0z4zALCyh)ZJ=EYAV-x)ly5Xt+n$!Yc1@O0svL1bwi_eUR3vE zzY*~pVC!1zwjYOF!leY4$(+3cL%|jp8)M3`F z2srZnU|6CMXxSxX+Fb6oY)MIvz@$L9AtKd6wQyy6+UsrKD|@|F5UG}}a2<8F=W`MI z6HKjjk*1(s8jzNP(5<)L`oJGB%vnPC!8k~7!=5v=cz&G0G{U9fzaT-Oachc3Wh5Cu z$wR8927rZYr|to54#n_1A6I)Z855!sGW6&*lMIC9E2|mO;#-?B)fm(cM<4<+#pA)_ zT5{GGYC^xlzM!TeO;s6r&B9H?EV@i2lqjYy4h1CO#4jOH?;^d6a4FBv2jaoEPhYmD zzxMv~{fv&?b3SpXN^lqa-P;&xv+c6YAL0%i1yxm?P+Sq zUMsVS5HlLI*2sW~rC;a$UWkFH^?vp1JkRU8L`6lrbVRDh{__0t`RkXjpPo0iFHhV5 zuKd6MkE*Dasw%yAOe3hLsN%FWlS@0qm6S{?Wy-@|l2+_e21^!oeruFA#JIBQ5q$*t z6%!JLmlq#GB-fYPtqUJ5mM%LPfiYk%!btV~TC%`E12~I(dJCrBDz5+B`N0q*ZBLYe8gPhK0W;YhZouFY%W!NoO(7vuSfnhb$6 z`TLPS=e#Tbr!;L;G?q{<*DNE)$qYi+Z?R4raV5;Y`vY;OugS2Ff6H5 zM2v~wT!UZ6-b z`_V$xJ*+ZW=1igJq{+u_(V}9C#|z^^n{VJ6iN>B`q`jMn5EG)zWx)uu$?)|7TxP~v zeQm;s(8Uy5n*abH07*naR74oM(G`d*99Qwq2_C_cv+H)uz42uz`S?u&Q-HB&uX> zB5-1=mcv`bAYJ1ctz92=A|N*VW8`%XTZr%a>pH<#T5;04h{UK|+<5c3R7( zSxVt;+gv}22)zpc5>vmL#myB@2{G1M3$v;AE;P1d5I|l+?9#pS?ydhM>b(g->+SXR z?Y!=&ZD)2B}&*VFT{ZS>#%`nfWb86o_5f4i={y@oy9)(d`+y&tAN ziP|eT?@T0$mF^L)&{_sGd3^2@ymtEpU62%7q z=J8FbN?c{yl)2Ott3O+ySvXfQi3TJ~mliG{@ZqdLf1EfrZX&(AgAcJ3G9xYkoovQ! zE2NvoGH=l{a&g9{WWj3$AS-JvCPom0`@x!_c-=`&2DTtkZZXjxs8t>$*u_SG29jbm zX3mF!GB6-^%K(#xFa+{h-VGl^4t~%Xhr^CKM3G>os8~b$ViRTPb(rV_Kh{ab@Sql* zm_yTLSOB9e7}89Sg!*&1rwc=U{Jc6zY4WBmBl_HQqhnKvL`7{X4RTQf)8OsnPnxl4 z7QkGZpjgiNkdNsBG(sxYJ&|C3%4wgsaO-C=#LRMcSgPA)No_DHW-Nxk45Nt|$-6mZ zmUwr4+<}9sn+6ws2p(c)Brd>f{SxOi;EeVIa3#V0&g6 zV=QQ0WtaxgsH#=2)|(pD%2e|+$`Kp-z*78Dd$i2h6f7f%pM@?}K|_KzM)f}e5I@)wM`MtlWb^%Jt>v}{ zBohsoxG>jJZ@0t!r~AI|`@vko?E)y#IpQqRU2uY`+PX;4eU|~JLePmU0c)5BbyEPc zw5GZo14mxRH~~HToRHLvGsj7M%&69SJMVWO=yHO{bw96mbrB@m$|k)LGE*to1tYiC zXP_oMDf1u9?>-JuGysnN!2hf6`Q4bgB&cv?29SfthO8PQ$zkcW%*kX#BRh5s2%O{s z$#E9#?YesFD%!8MZ55!v#51Qg$bhK0fN9%mt<^Yw3`6$1ikulyC=_j`Djfhzt);Sa zCND5mVJ@ZAZ7W^mY?p|1=?EC>VKWtroj?Fb06fHj@OJF)Z+2bx>$=YCeqNUuh(K>D zYAOP7UFZ4Z#~%jIb*uZf|N84E>HX)=pRaFkt0_cttvsjxD>mHWb2wmQGy_tMR^jU7 zzssgeisA>H-O?@*#A<2i^Dt5)iNTX{9H^>~-o{l4ZaA{N5CPbS9Ajxe?#+c(z08dk z)>2TZ^5tEifvZE#SI@DO3!SQO^rqrZF8~zgLM#}$ZD}=(Q+wtM0hmOPR>szl zKl0(c&Vy(S-JLj-hgPl&JkERwo>bkt`sc)-NLQKEv6&Dw?QZtK;FzACM@H*18d&LW zx=e;BI`-r&j734$J|GjW68mtdmcp@FG@JB_$?HWMH=@Cqa}PFp)CDO?ThL+zb0lvM zVyv-(PDfe}`H}=@rXqw`)WD)xF+?3I@yRe1iO|PEk3}w}_{pq^4#9gK`wy^JH4&vSa;j+%yD%ey)h* zG4%>oYV|qCOw)5M2*Suf5D_*M^z;k1rzU3wL}B?DFS zwFnpPtxIp2GO)-wMo1Q8?`}D-BBCnf-g>7gaPj`O*6N>gt^!R#JyrmDkjgVXE99Ib zEr3A7P3HeD5)rcV3%n0vVre2~yphhnDy}FIccEhILIC@|m!iE(FH(P_UmfWI~pj_=q9DdD;*doQ#Ea^T~`-VBnp*Kbo&XUhY3J(0|c34K4{6` zjh09(QwgUJKn=(gOawAXi;#&65hH+tbdmdcne^gF)Kd3-lct@NQB1+NR>|1ZaV!(L z9AfafV}(R!jIsJHmC<{=AD z3#&lCM7q=<2pE7t*T@(xyzd7smCCpa!MZZL0_>xpUlW zd3kyI?YFPLfBXLZXA?87)y%<)Fe6jK&k;Uk1@OR&R5peta&WFA7Aa3)0QA6&Wp|Hj zuzCz0AW4z2i&<(qGm4Qh5lU=;BFGb%%EFh?Wft|(E@w8C2CEDE(N_pbGSa~cQJq;2 zGtDxW|1dZ#IKy8=d+X|i6iJ2m*l>x6GoCGlTM8Db!4&n1E$X!3Il&a3@-iNz7({tw zwR=F7;l5 zb(mJhx9hx5&ob&=n2obG=h>aipht* z0buyxVjWHobIT~tMQNzza>L)np#Xs#1j15^P2xhhXxurKb$uA+-6gFe$PDP4A{?00 z&0$NAMCPU45AK8uoW17lrnm^+bwo~2y5)$bN~{Ddfe)tcVIo3Nz4{fY5hj*sen{yf zBD?8wtF_izxwPK7U~7^uGKr{kWyby3T#Qm{&CWqZw3Gra+gUQ8e71{f;?o&5CT6Zg z4y&`+6ld9_CRmB7P#F}9;#*GdlYHw*#QVP0QhVq^{@@#V|3j(1@rWy;sa-5 zKU?y1jiSou>KT;orIcuN5(;3x)aYHZ#-GchEZ)M3BW9%9y422KS~~5vfq^RYE}{a` zjbSK*R7BMfNxJmjpf#-9QHmkx)EI$>7td6pz-Q-N$EUpBn!rrg@GoLXEd+ZMBfDqG z-`|i4=2_uu6ftY9Net1EkxJp?c5GWMg#nBK$l!jSUHZ$X+tc$w-+p*I?X20f2WiIj zj=!`#YePVjE(KefikKIuxDNw^xa6%l@j}v}wI?5GEF-T8$VGqx!`AO9zo~NJv?6&h ze3n^2qYGD?CeS?GRm7(nIU5^;+JSi)s6|T&&H7G71z^*dB{=0W<3O9Ai5i%Sfm0P- zyK3=^U{I;Zdjz%mJ^1qCuEY~Vd^^8D(NTQAurXZ*L z9v&Xqr``->BJVA+HM5xv*8l1OM*yOdAwpi^0ARMwH0t=={wYK?1!__(Kmmpp0whQX zp@u$Yv{O_{h+sx5uX8bN>i{srG0>B%(-gE8v5V^s(M7tYlnA!e?(lyN+m_`;LNh8d z6}M58QOZc8^{iBmF2 zZ0bOY-Wwp+x|_+imtTJS<=_9`r`LZr&-`++WUyVP-Y)Hu$k{;fGLl?X_rXn$g53{e zLaHRLw(~!M<}NlU9~1*wbywstojR!nS1b~t1N-1{DKLXihqhw1$OWIl-&B=B!qcqe zeASb}4to%7tSIEw9~4<@V4}TCH!vHE^%r=&zrU1xD0P0&m;!qLo+h%4eorxH*UG40h2pPRQ3ptmFVC&NQd0zX5;B#^? zRYP9`bo5AJE=9RuCZB~60m%X`qf2sg_;eFMN{hjLcJr7ujON!kyhfS}4dPPER+y+V zZ`*#{j;C9#6+nnCDy7t7($fpnO=Hr=XvR=P30H)6>R*#%9BdXOMk>UigmAvf@F3+z zhh2C#m5G2D$++9LBa(wXe9tnE6l?RJcN0g(}vu#8ltkz0&d7LDx;_5z(DgN0)I<0J4<5l+bxM%0O4 zWX!bh+smgXVB&qRTfN^eQzHW3LDyPd&|9{r!ADyG2>WuB7xaayIk% z6h!Pqlv#et+n;){3TyZT^O-ccrM%8&_FF|rmyqc@B)4<71ZUN~(t)_keWNN?Gn z*wH{^ZYfiQCeebpM1 z_2?So!Ze(PovH#;vT&y%ATQBrBLFk!5Dj4OWPB{S8sn@Su>|Xy+YLsm((6MYI+&G_ zT0;^0iy3MjS&ZYkAAE#$=HO-LV>r~9uz`Sp+8{9^kf~&lD6OKr5$Y7i60<_+>p7RF zI7N*kAP{w2`69vhAsZS=?@n^(suPg{h&;EA{?$Y|=-bcSZw`*|l2+krZ3BuR)86In z?OwV%;yLo0Maur)iHwrEX0mcj;Q#^)pQmP`tppkNvhVc!@< z;1@BOp}F}SN4SlKs1nA5Bw?-3r9Lw-U*Q_1H#oWGcBd;`*vN|{eJq3QA@oY zw_~rj<9K;Kj;-$7fy~>!)3(*J)njKS1Uk?AfBy5^A3xsDtG&LzsTrsc(Z1h~r)HvM z;}Eu~MgCFcxb(8%{csA;G|UyCKK7 zCj)sy1R_1pEgzfZ+%$N<<|>UbUR7|e(E{OF!+6!dD>1cN>Tw*k9<>(L3#n}TA+5FZ z%}KXj&v?XS;AXtbiQ6-{(+E04vI%1-m7B`}d5b?J&vbIYLQF_$1cXo`YfNE8>JH=B z94wfbdUm{ZRl-e5@dQ5+lWy(0xHDf(DgyyQ0XKrXKZ8j6^>%NJ+rI5TzP)Z&`~2%? zKoeC!7s<}ZGu0mNpBa%qHY+(=4FcIUMVl~Fc0&Fc3XnW=C$A#?n>r*fxa#O1j29^lbmIR?nl;x6sH(|= zSbKCGdLuf8A`kNqoqa>x-6)`C75QgYTYM-Q+g5~+(q^+<88Wl0mT@6=|_Y*x0R?T z^E4=3N3R1Agh<3BBKPa9NUcW(15wbi< zo0-uEGH-NWIX;{i)%X!Y;D{a$D8Waw@FVz?jZ)0+3&EM}HbA2$s$#y1D+>ZYa~)>H zm!dsRct_N7&OOHHeSDJQkac1=YWW-Jp$CsK(i!hF1pyHRTM7fBiYj=R#)nCEX!y(`$$)4p$8>s>?)l#tErJWn;d9Xk_U=UKN}xZLme-g_4z!oqZ& zO;t>{TDa8O8;Pjvoq>T3uk&Q4+i??>3$NC@tCtEFB;9YcUDx~DyB(k+Nu%?{u3p!9 zwNp&Awca}*k?XjKaiWPcU6C2%3e%YaIu;&D4jU1Qh-gW|OJuW&c1Bk4+5o{~0i*^Z zCL;Uo05#@XYi*^pJA&^R$b3y|NyiT_X86C9GIwhpj`h3%FIU{ zwL2iFL>`P8jS1*HOmhcBsWaumu@q8}u3e;y^sbwlnv(x8txM~E!d=&O$)!eewe#ou zYk%(s{|fZm-#)V-Au(eJA);CRxY>!R1Ntzs5)|s6J)5));jjX zM^?Xl{w&rlgE}Cxz~#KZcj;~s5S7-tf)R7?A{avTmB9HZV@icG!6RMUNBV9gK9BaG4%qL_iQzQz0f5HlPxif7&M(1|)T%n3V4G45jl~63 zT7eY2RJ|@0UlW9uB_{ldHL&0(XA-0Tr_yGezm>zHsPG4M=6DX1X`U|=&W|p2Bumtd z!GI;rfN~gCg1BFtXU#|o0gdpQl`wXvSvY}8O6&^{g2oV5`YT|jkjTL4A=Jn%3g|Z2 zBWN=|D-l^1zM&QNS)`5JEewGA_|U?dn33i(@)UhsG@l_e6Umx=epTbU9K4@F?1-dH zQy>83$DDzg6?nCVh^1C4%veMubNixJV`gR+k=B}t8Z*X2@2CvMf~AzL6wS5i$Wi$a zAO*`e=LkDUvjC*eWT{9k^9K+Nnsi6mhxnbUx7*Uqf3}cq6;{)_6~w|!BK__ColAZC z^!dEMc0IiqWkN`0y2k-g>_jXVAfDDSg9>B1g(0I309n4P1Yk^rnC*d~qI#%ua%Pi# zHSS35s$JC>c_>$NyfzXb=1#~S`MPc~u#vot8PhvBq^YBJRfMV+1>x;5@QwLnGpeX`!p;Gwy`FMG{ZKd9}y6=?`wykd4W)9?p&B_g>J9YOpZSO!d0@`~Cj&?X~XvP1COf3`j0XB|;+yIyYIwp#=)S*?JH6M?!^$ zzDm`Q6ciQJ5q%zARUX|>-hvV$74pj)ml8z!)nkpGPqk+1V|*aw6HDLZ7Tqxe>eiTJ!{J){VYrc1{!FA zWNwFlMaQ1OMcC_?<(LCCou)ku2g!VnV>M|Br8IoFOcE?HerF_~LPQQ@_=#0T{hu6` zz@E!bW@3Ua^Wkw=n}6KCU0!0qvrP2Fs=SBXMeW4|n9ZcebO|Xa<#;i}G~H`X1F)cB z5hZ-+fozphY3N;t(0zV+LD_PDhy$c2s2XvZgg;P0V$M&j$tE8qt&6Ee`qfT*BxgqR z-Nlokz~v08h(HApVl1h$Lc{U(EKRp+E90s3ogzGAWB zFmmx67=Wjuk=N~mSm3zPm~T^r-URbBvpn+8UmLXmoy3AYU(k`RLI#g>S4hfI7#>!- zpF_5ISvQO*o52AI_lGC{7d`d-|z45Zw6B9 zw(YlXfBf_Pe0}-!{Pgnlv>(UIAy-2a>w;#5siGZ6Mc9~&sCG4Cbm=e?n8bd*U#Gw3 z2+*&y^#&>i{XBc&QVaF&_{#2RK^;EHLeg57E)AJkMMru?@2y>zsI#YkrLZZr>k{W`h^k@Xx^2|-YAGcgaS)g$2N@W^ z92he`;8;b(G!lN8h#3_Tpb%57g)>@P%v$gF`@MH*y}iHRODzd`3x}0rF1DswQ3W6#4zz&wspL-!6Uqx4-@CU!GoW+g_uiwEfJN%%+xzZ z>G1eV*#M6w#b*h2iHJ-pyvCw3)B<^nA{7+FxH4_fvC>-HeZ(8 z2y=lXj%HjFkeW)@!Kicm0hoqcQ58+WqI>rpdmywkb-;QbTzFVLrTGkdjTIxJQHOa{ zvH#qu@mub!0g)aCK`ky+9WZ1>Wg3Y?Im`{4(i8}|@)Vt@<9K2tuds7NI!O|dB!TSZ zsM~#qxGVxLLiyB1x|$Io5&J$mt)Z;>n*`k}3i)8^``|4f_f;aWmUuS8G+;>@!lhP- ztSm&6J_m1M_ux|MzHerFi4XvgMkc5#t1>fdp^%IC$kbd>^!(-X)2Gk9-L*AmbuFR4 zi+Fs%y~cn!x3rJ}JEM^DJx*4*sptfI*gm+QH(-mt|0e|}Ik_yF(u5WtTJT*aYz!k5 zJ=7lVt|V`?7f1BN;$XhB2*_0HCasAn5ohFOx?)X7Oz9f1<9`%0hp)oaOgZj4-naUE z+n@IRY2RL6p1yo~Mu4kH>#8CE*hKF4`*odSdbRGF-Jd`1W>>Aq+s-DX7ANsJ@I~6C z4UnkA-*2tMu!-eBG1u24qF% z_(uJs4i5_$pfMtr64w?If}7*Pmch@6hhxGJD^7S>=)DXI5SFd($HC55P_q%-j{pE5 z07*naR0XqA3YUsNA}UP^x((AcQGwNV3aWb!to5~X$cX|yNWmg;!g$sbV43H*sH!c< zw37In0W$Oco{(%PGJ_O3su(ejT@=u&I*Wu74V{;9#Y%vv+QpO!wIUH|H&MO1-rIZs z`|nNkAOC#$Z(pAO?Z1Ed?Ju8HTJPOv&=U+Sv-_`g36OiJ0%vS7tkMvtVX14OBQMz( zrsNWUv9-_bScs2uCV@y)>wer0`1$JJvEy6ECM)ts!%?5{tT6cCv?c?_X*JkFx#@a9 zZlp4bCT<_scnY7o*`y)lENvb2QTP*`OS0sG$Gu}yjD=>RHs@pjU?BcOtX|G80uf^u zSIG$22`m-{cS@&j`y=j)nMx>ZkO`>Pt(IfoO!d01-kX~7WAiT>Ue^UV9$gOrSdSBR z)Uve{hm89%+q*~=QKK=4%Hq#MnQE;>+B;<}ySB6m3`2EEdrb z355yJ1(jC!a(j9C`R$+D8YH*E(=!m=Gx#yr-OE3pF3lXl)C)v`l`4~L8&EVL>M0_1 zcaM%hN>>_(3Yv+S)TX1^7kO${YGvoyjIrJlAd|<6PJyl4_)~)%-7b*4bm})m7|C3E8Y!F;f^dPYhnhCF;uG zOQajXz8}m?Or>yaq;z%~vFV)|r_-(!5F^oK)Sx|TGveV{`ICcH;|^S0q_G%^qlI!g zvLzT7Q-W8D?ukfLHl(UNU%!c@iOBkChfUg|`js3T4O{)u0qG7}cd$0&aEAC~=N!wo zxEy3E03#+QMu4qw;bLJTEYW8m5|W4?FlrdFeZ$(8--4-0@vkRE$q&W z-bGbg@2xdRfOFDeXy11vyw20WTI=C{AHl0;VRp+V#FgsPMV_CS0(e5+LtgEK3AhCa zh>#hXD>}cv_tu(7p9rgDWhAK85@kAKTPHz!MQz821DUP}(Ew+jA!b-fJdMMi>x-}b z*yuv-UHx#6ZXY#Zc_a5JxL>mdWyVJs=jug!EIbSViUaq(iXn`!W)bnE5i>IZ${EId zBK?G3-kwCm8$M(XM45&oIu?d&%87&o%#fjVVuEv-Z}S!MHD^?E+3)M&R4stdm;T&^($G;0cV3HJ|h7%HLkw0jzHH^Ic2CF=te5OH9!w%*&--7yf!>uOuApPrweZu?ftanxGhIXQ;EPTBea;W84@9(H_(&p6&L$}0Obj0rig{G za$#mbTaC}l!3Se&v3Ppsm?&eyMYIDHQxWL~H82w*{vwcblFh6&Q{~F_*s-04*3GDH z`*D2w{OJ@`pf2+J_t&OMwNT~%`PHQJ*K{ziwhx& zkEn0Fg$jjaL}Tal#n!0V5ta;1lv%c|Y}>|6iH${(9_2vs{>nY`Q@0CKoUh= z%7^3}7>RB$$bCVraTE}u)4T?n(!+hs5OLq?v2OwAR8_;ENbv0!o z4-ru{B2zPR_Igek#&pOtqPAN1eM5uRduR3hW9i+`tVe6A5fYbDwoMVC_uge5R->#O z9Zrr^648)JpZ=NZs;l-m9wLA;e@O4oY^$4ebbr#L{}hH1JLPNRN1-WO0b8>pDdQas zhqW2i6cq{FNS{AqN*AZBe=od`gN&Y9P5J-Gxwmya}`=vHaGxsA9r)9hMSq@%+VS! z6I0fHf(ky*M^vAsp@TfKoX)qJH6w||WY}gS5ouI&YO4j~algKd*JJQIijovF5_`X* zs^@t|a3KOvY&UXMr?u|;zN^Z0wX-(>P?6qRLn5HM)q1;q`TV*4_v;`3{^k7forzFA z2@5zr9CFIw2yTzC@i=O1VC~0Go{5G2oQ|iJ9ITBaF$)KIz&&`<#dC`a0%4SO8E)m9 zpi&}yV)4a{g;Bt_6j#|wsH7k=!z`nq7Q&T}Qd!kpV^+DunHIMxeZbHS&9cor8~_C* z+Uve=TcPTbxP7mMi_dV+98h~>U&?kIl?yR3Aa1qZj_qmN(Tu^^KLUTG0D&k`Q8>92 zPNKj(uhrCt-RW$n{M^vcJT544WtK=86&?DXc3tOrX1h&MFE3DFHESYnZ}0u`#i$E0 z4YW%yg)anm`FSZBD2 zo627t(L}*FbN&_je$PylkUW1Hm~h)_DTNDhaoJ*t$e*&INhxLD$yBAaZiYx|&HWbQ zN#F}&EylQngv_Nx?r(aD1D_M8qN`b<0K4tat$4Gy_Lql%oSCH4H@RBY{RSFGd4~O& zNbl|Hje9R3fy0O%?s<;ZuhA|hRd#0AoI6AycKl%V=P0-!Y!6<4bGJy>hqx4LhY zxx~+o!1U= z2gHp+ehDK8bZWg10fVO8mSTZB5dFirIHh%&8Srr+3Mw{SQzN#F0#>UwoQ!TK15LiV zwo8-Tp({LW1c#3SXNj&^6F>?NK{}5l_PnH$!R{joUw<-j^^ZfkDaN=Sh-|nkl61My z^f9TVsnoIY!>y*UDKnomRflc@6$-&S_*6s(fGIa7I;O~x-{&tZsQUS%O4;J2{yHQz z1IjRZnZ*oXNEQPT2iY-OVzaWIz?H6kT~{fL2*ku#dOLm1pla=EOauf(xG^iDc472e zq=)DDfZM)({rctG?LX{l!~|N#M#GlqL0G1aVI;vp<)igcUKb%~K1)eBRif+F6p@2K z7D91MfrqR22=c;20}%c2rTON3w8@B(0F8(QYR(Qd#R-MLbbz?fmK;kKZHLAa!c<(F zp(t}*ixaRBf=N;$GBuG9G$T;!?dRJ&m~ruo61nhRD(nYRty{aFS2uWiQbWAm_EM0E z4B*S>=f8gWeA^EsWW<8N1Wq+0Kq3+Y>)lLKeLFl{2!>*+BIc5m6d;epNF3^zK?;@; zP7)`+NWZSj0z^V%=Qap{q3l5eq%NW&%&2BABQt=jHD;_^d3`^B|L6CYmw$f#^!4fK znSiAA>;3(He@{;#-J@xp-rKrHG0MN;*gUS&phBjXj&&RKNq2%=*>Z#hX@*F;+M001P001fS>q zx*FHgPkGmN$9lG|iu-Lljsp>|cD>!-fB#0rgoFnAuV440MD^}Bymvw>0%oq@i37@_ z3XW<+#S>Grw=~~KvDW_6fN?dN4v~S^RW1Vr-DA$9Tvf9Hl-1N5}xabgusV@dzi;NQr2zD zfFN}CF%IzxDZ_Yi>}VIja>V*Z%?eYWI)Z<5>ltS%B3$Q*X1do1zRv-w>yKM&W@1hv zCge~>R$rX>0j+9WdZ{E$q8i@!-4V&9I?~8@lFW>)S%-Zi1ADu_18B-~)yzgpf zU9iCS!Jv0hhFC*QsjXXi$Iav_drH33#K5?;N|#Z}GE@xBQh-NiR?p~+KtKRY#A0Kd zR)RG$bJ}#>7@qG`fJrHUf!7IC!u!C8D$)UJt%L?9{j}bCyV_Q_BD zwugmkL`#{+7mlA0KIDGeQ2gb=G(1GP*Y+7BFnHdi8K4@HMRJcBATSZ;b~H2xfd-0s zsf}SIx!?uJt>9rLgOQl&+jok9c_JUey2fi_$3jM8CZ-%4Ngt$Ty1Rjq#uT5TkyPug z-QV5|Vy)O(yLu~3PsgqDcI>xPNARaDMn79=6B^nhKJ+FRV zUCpk-gs}Orfh+ucyT7+u|Jdq=X6?GPcM#JqrUGbg2OHg+BBXH8GWBCfB)y7Kw?IW? zL>$BUA`WC=u8=&^NkrRqnvauF-C_qZ?u~RH=3>?piD~RC1W~5K6{?orOjU-|V0&CN)TJR3z<~y2i|LgR zkbzJ{RK&ml`8>~8y?;}@U%gpj-H*Ne<(IFe@c;YA@2$0;?|1kk5EB36*V}C?IBY{; z2o&MU7^VLpD}e=4HMHrAChkLXPhnTE_^Hg7iRkF#n#2OV>CeR{p!6u*1S|xq!f(YAInF|7{nu?s))m!hqzdXMj`wk;!$Fp>aO5yQ>c9BASI}Y{) zP+w$B&|$iRgPfWBATvbkx)kYznuQqTE^FW_U@d0@5Do;O8Quy2sy)l%Xn2Up6haCY z!)OJgl-vPRmTWn{@n(^UM`=6Z;gmK*)V!W>OgK})KI4%wTH`f(Zq$^z>|GEL#FMTd zlX!@jDK~^V_QVu{(J+jFBSNZBtdZ4qY2u1t;sN#~Bxgh82fCbrg>1+{@;2E0DNd!2 zvabJ}yk$BKN;Hnq0nEd!dN@9XJoy4c zLgplpT*mk=V+MFSnIbS2G=n1jTr~nVH4sxYVxZ&&IEzvO!Hg55;jXl+U036``}_XB z7ewjZf2&G$e|bT`cHBi$846TNDWwFg%N|o8ahm432oW&?vBN|%>J|x{4`*O%-LEcK zc;ult9uIinIr03<*W z=|Wvlq&pAm{`S7#j=EPgH8oK|!cr@msu;Pn(YsO)yYV)T*{-&dT|b}|$+06`F7kj^&*s*U<&re@l`~Ldl`;YIvcP8Eoy&U!BIBE*toC%RRP;syO^lB(? zV#FRpm+=dL`v5*#`BHw)ah*vHA2qZ1U`fyQU4>O9rXaKvd52@e`8yKdZDKs5zR8gx z&1=T*i79M{u4Y?Hc6Ap*2n{2;`nf+@@2QnF-WNt@~C7WCo09>KB+=SM6R33>4OoznVcQ>{CW& z-Zv)CAFveJiz^s)my^4rCEkQJ4g{_@FZg ze3>#Vk5kGfQi&7s+L;+Ynt)s+1yO8B|Ca!zd5;C*XIQ5a#*Q=I8J6ZDAa*!a#(AoS z!<3NBW1TSdvI8wXZTqkah%;C-1%Eap!V*&E8*n3_@xR)DglKeKICw>%qk9`&t+Lp|*k*>731{S&0;`ISl z6IW+MJ*ugf9Bwb2QOPFa0Z2IH@3}f14ymBPXBy8UuS@7*tXfS}2r0eFScwV1)VXA2 zpoHj~aqB(v8k~v3`>}JW_qSIB;M5f7l`Kx!W+tM727rR&Ve#h*Qf@qRc4C-NnBqG~ zYN`udBM-;G5Jj!4SNiNIBu@sB?3mNpY;N;TvaaRkacHAV{Y%I^DKlV~cMd#c4pB`# zgBF+>>L$Gpk)UbhQeZSa$+C+soe`TZ3DJNkYQ!F+6dbkQTJP1BC1%Ei2&gJdRKlu5 zTsYV54-fO~cjp2ELT7B5+%WiZ{w283j^r_ z-sWn=vvjYf9GJ!=_T z3q8z+f&9sP^n2K2!?dNG%yWdYP#HDRPmgeR3Ut!t#2KrTG+&SqDos-N;5uSr|_JwC8|xYQi@TvqK)XTA!hP82){*m22GAemo)%zZn4`9$RHT{A#Gh zm+!Fed##&_bT_SlxgytP1tM_X&#QMZAg1Hk5wW!vKQWpq5VM-Krlwj-DTV#=tXn1D zm6Mx(C=NB|AZ+zM(%r-R6cO!HV%WPnGDdojDHA*uq~1Ig%_rd+~^ySyk+w(O?#k0O|k#DnWp>fOfSzO*YBOyb*3@`f$w5{U)aenBg?Z zs;qk>-0kI@=M>=;_-hLm+LENJyzwQtsAjFF7cczUN^GMp%_vAHn4&V|C=sUI-7*Y& zRkk&^5V#1EkPMk}8L)jZGbyvs zaSZd7F^{8&*w(;djnh%RIYlVtpPOT|E4X|9mF^zwYkOD~c2-RU#IuAb zz8*Y%$`F|ir2R=2yzI=PdOY67dCq_S)6E{|AfmXGa{Z5%mHW}?|eco8lGp)DKMKjCZHsA4|C+5w}pbttq+q@2(qW5D?o9N zRL-TTuc$_p-2wCSzT~My!;J0`93(v7A9M_73J&A&A$+K+uriHfi1YRQguaI;UWte$ zb>W4&sj!;1WP2dBw45DO2`6~cBf>41WX}8Z^Yi`N`$F!8d-`|%o_Dy>kcgw%1YS41 zTO!yON@u&iJwi}w;r9|2StSLo%=^BH=s1*e&+@|4s!>6{rqp9$?mXaxS0~C0@d{|I zg)n6U+l+`*K-`%?hYVG&oF@u)54)!sd+9gAoaQ}-9>?*^j~~}{U(fpwmj5Q7LzIL5 zP3Qp1wCFxPa>sr(p|3M@i?=Va)+q^0^1rg^n%T1`Fha3i9#p=E>9@@ZfV7YV_sqCe zdH76Xck1Qlxi}}rrpmAQP3ZtTT9b>E5VxkYlJ)@fibb1!aX8hut1>8GgwNq+W=udM z_fah=zHg{db}hg^78!?LARqh!N-UKCpi1B0-yX;bjUZxZ=2Yc4j$<^Cgxj? zC31wh-S_?ce46_hgD8e7ZsA;@fj>qt+2eMgqNq19lAT>u;c=r<8M+yY!Uj;VuW*uQ<%9>3=z&Pm6tqA;?<1G>pz5f%?yXZ7Rqcul1ga~fk3nn zGIc7<)8@V`&Y)|%At*V<7zYQF2S1ME{r&Cn_NK>xou|?mvuu(&_SfC8?bC4mni;dG z60hJVX2krK%pGMNF@@z<*dejVZ%%Cm9IDMT#X&a4(yHaYP!K0AIVsGYa6v{Yk9G}& zxVuo)svG18M&Gr~Nq2YJbxT5+b(p9PfHZa}th zQouS2$s-Y#DeWqqFxXI7hhuNZItEJ+O*gvvx~4}QI+)e79(RGUffM%TPG$}Zr+G#Z zCT?m?I0D&Tysw@;LfU>%MM=`x>f%#@*n~;k{o~{L>u}@RqK~-~IHnL#r_oYPzv_&kwWPNtrXG8-0L==(+ zWtu1!1L{dVj=|5{XVj<5U!s3k1`#fA54<#J`%Bo=KpA1)LG!lcWn2INAOJ~3K~&50 zl&#=GNR-U36bdVe@5N$VI831+Hp{`f8R|8O-cTffCBMQi@xuixkL||f-WcVmYV8y= zz(_>j-`;+F{{j37y!`FbnfFZ|Dmv#q&7gX&;(lV3i+wi*UC(J^q9TVf%W)j%dEyNd z9rb)#q1Z=S;&5qq=$siEJRv%crr?|oE_!83cGD}MtfKBzlT_WC`5lClJA@rB zvsS%jf23?%;uZC`6=JK5raY$L2%#_OjeGU7wW+afoYy{laIb<^+RzA1Xf_`Ue%TTqyU`8MN&!#dTSKDb;TBBxv|Au6}qsw zU6*}+em<`&C=)dCMh684jWLD}&<`ae0Wex(sW6|mDRiOV4Tgv`+|Y7nlxmW4*I@wX zy_$+nqpIyNW8Yo|NmyYgipX&DoX@+vQ!q<11+orfXBc=O)s{#nN3Nl-dEaIf%j-qN zq8h}&IE06=@F7ky-8n+ShrsiroVH*$HzF3%;QRtX`nDt#Q^{Ys=h+?XS3BqOkvKkF z%v00&rXr%^PWLshYkq!S2#;#wtO%cvgY13Ymon*4vkCRBhdUFV2dX&(R~}5zS{$!a zP|{pO+tQ~8Bxw9tfas+?bSu)8Cg9cG_r0u4wSLNBPkzCqB4)!a%zWB>;{#`#nezx1 zRvvcU_kCjsiKyr?WGD?9$2jI~7NJh&NLP1vKhN{=c+5G?;?K|P*PnbIdLDKR1aZHd z=_moWp0Jtej4?921ieDVf;lI3@q$@Fgd7oJm&8Y^){yv$Hv7;q#$cqZRWwG#%L*q- z!bq(|B4-w5xLG)t33=YYkjt@oc`&Yr*W?8YP;{kjR=(WTtGKhSusFPro!Vk`@k^!5 z>1ey?l-20ElT~|g%ducroY>1AvQtEaLZUo?k3YtEoQE>G`oNo43DBDdLf-3XwohTmtU zomh!VqbDYWw3*t8=H{&u5OQ#or**%N*jHwF`3o{kl1{ciHXg;=loCb0Zf2K}%Twwj z#9iR7FQF3VI^G+iF5e-aTC)8PGC~p9%NE*X&MP>irKnL-iruTXYnCd41)51-!ucXv zp{*J^bj~{#{DzqY^F`zwiztSi9j~)2)t=zsTzz7&#fJ1+%rsk)&Q78q1+-__&am|Kb?H|QR)pOSmy-fRMWR)cKH6O=OE8-fRS0dpW zdn~C?@t=}EyEHl#GD8uL{9rxlJP#k^{P;ZI-p;qTc|8e*w|TpA;Ik8HmKrsOtadg6 zIzO>Al$2g!{1qD^mWj^hoM}f1n@MZ?Y6kXw#7mXm^cdJL5+6jeU2M(Z;IBkm!Gr3I zRNa>T$USB|R*lIJ|5sV)oZO-17+T*r7k&htExy~D)tAm+(sp2F#Z(=PK%Y4j5L z3qfCh7Wn9L64_mNjSi~ZG=r~7P?uwT;+db&E;GvxvJE$xQlE!do)}0-&FFY`w2bRq zfPyJSS_PfKw24*qP*qVValoZQYoYFx7Yv1nBYSF$@}n##7mnwOvD)ZURAkDi#xi4C zo6|wa6-Dhk&98gj*SxM9B>mJ5h(LiWDr^!Fa1>4)^dgb4A6`+b7&oSmC~7y79)S(I z)WJCQk9Aaa9uXC?Sy^-VlfgD{&pTx*Oepnwfn_!&OL_9}+vZ`z%z}fNZO%C-4;eC0 zwahugNkxyr5`2vD?M*BW;q!{?eqK)G=I#^c;TY%J+rypid;am~=b`c#`u&)1Lr!Jd z)}vp@aBFBprGAurQ!2KopF^yQjLJW;e8-CmEpTTeo>GTA&IjaiSxzr>KW(vtEy-HY zg#64!!8OfNhf6I?se0Pi^Z*mdwh~4g?k{CnPX~y?AwtQydsf5k(ueF?8iUvyN5ZL? z1&w!dGi~>{%a89KW**`5HgkJEFJ}4i{l_oA{GzNX%FMSJ!nZ&laJT1Eu6fOAsMuP? z2AZQ;WbZ*ub9g;Yy_McsS@9R1#md6u=y_~k ziz5nONt~q&3y-1L^!E@EACyM)T*>Xm$0v*lOU?%yUc-GR%gZiP3z5105#mL|$fv)O zt_rTHG9+VXs&kc2J~qkEUg~{O%x{!Ak+^06cgZ%^&awv|U5_-do8E5PBH zg*D8q2Zrv!Y{CqPpPA)mlQE2W4onDCzW?(5kKcd)`NuzPP72vV#Y^eN%qlx*q)$0q zgepQccW;ETC+(8W-LZ(F(({VMl4oVmp_fClxdVSONaiW*D<(CM2W0bcMSkwO3OEw+ z!L|g|V&W@;9`iVk-OI2>X$vEsIf=)4JW_hH{sfrG4;|-m9%Bp-lstb-*nC(|5pE)*nWCLCjkas-imIb!z4j?B!>&m$M!t77I- zA=A2L7dw*R9adbqlj!4ly^Z7gHf`Fx=JkB)7|cT9NT!`O@B3on(@!FqGsn@Ew@${4 zFtNuhxX6YiSqx|@MUT`RFtLi9G#=x8Ckj2ko$nX%$LG`BDcGIdkp}iBxRK^If4>jmAMfYK z<Kr)UeNJ!WN4(m3!w$mHlmMhrc%$#U4vzwd6oGFip@HuUo{rTtTAAkHj$N6}is>9|) zt6;Mt@WRb)P9umNDo|WRuWQbE!KN_hyywK|Kk=1Jnl!cWe$%;-6;kJ2HQ}j;AQI7z zFa2UX%m=Gh?ESYOWZaP=OX}N6ue>Bjo!nDm*bXRJrEj@H^LAVNiZ3_XZkLOA$^F|P zTli!;-8f$Vv#Xz@PT1Npr>zhF;_z@zhKFY*9nL~XX!F`)7KiDDozuX3=3OW8VyKgyglIgq1uo z!+F1Qci?}WW1GKXQ8!vYC~OqG3ap?CZKW~iag426BBGc!?~kAEBr3oB{g*%g`2Ek{ zj(I<)nX+IyT3C$)hIRC28YA(yJLIXVtAHNA)hu40$Q@MN|dXzpD-$4c!y%ntBYdvKk{nUTWE$@|$n4(lL%> zJcb@MSv2&(c$!~la@Ed;&`LgDjA>@Exj@zJD9kh1%Wbt0Q_SX^_VMw7&C8OJB^-ey zIc+Z$z%J7zmP6Ip=bW_tU5XH4)xk8A+MpWdSz56!LLK}Q<^2c@u?7z%4<%xc+)Xqv zsYi7SnZ9)$JBDS6U6!4)Xr1m6uFP?sz|+oHnO^sGeSUnNj|cp<7(n{;>$+8>k|N!v zPxD0&^I8n<*KOhpGm+8jf-Z$%#%w_Ft zs5x!UX&z!88{69uF8=9$>Nw=vL*y9oIDY@U|3lQxr4ZLP?Wcd-bH2a5s}A>x;N9Ee zdB^vMh$ds2U;d=ArbsKGLeL3kB22~Vu3?pukRr5d8R$|pNRUzUBFB zKaIO*xcK53$*!i4gwF{PLlAG~xB1NW3d~~qbAEjMe4#vGW93a|9JzVL*T z_)%8k(#l(B$y*0q|77p1@TbGp$;=Sq z8toIIU5ad-WKgmP=@9yT6N(v4->_ppfAV?j7%ARzlbQDU0d~Wg^h)XISxV$h!I+3k zPq3?j!Om*z6;=>?^;*k#UgB<|2%3&ULJBH~s3zY4-|l%6NrhE6$1x#!Qmmo0X7S7H zT{2wL3tpJ>I-CtSVX+QKZ7IYykU}_CA=u*6oSGmw(R)s{c^q%Bj4AO@J&t1>V+@5& zG;@Z0DbE@oj0bVsrZJNwOQ!yt_BscV7hEmZg*js^Oh7H!mW*SOMsnBw*RZ2q7ntpr z_BRYywQ1RZd>fF|zk-){gquVNF_h8X*-PAyn^UB1Q?OeM$I2rIcrBC%cnh@%K0Wi4 z`A4+pW%K2BffXo}Sg-+!?sNC{D=!P_jSA?083&1jW6taO`J8i#=orI2%nGwm8wz>t ze%ib$`JRiY67#H}D-R3??Tscu5krN^ZWi122h=P8GuH4&6g1$j}ZA2Ld}!o#YrH=h2`(F%MpYz|OHv zCrER;!((RdfCQ0Qm|0~cMzV#3Rfh|?$MgC5`SEc*!}uUQRnJ2>gdd0CH5a65v$>OB zx0|aR@9(GT5zNzkT6|u9-FA$lv*5B!EFthx3S@0m-kM^Em!|fmQ!TIJRz;VRuuDvEIP>zem%_jS+v{{H@Oo8RBx z&*NZ~+ngx0tkV>9vr&~RHT{+i^2_Ei&6U|brWp~74t1VnW&zZAiVP^G*>z9V(L2aG z=|z}=9Q-ATsIB#d z9<7478@AUeQeNMpdq7QB)%k%V!=U$;RV$~{lfICf*7~C+sowVmbxtu-5_k=Wwl|+^ zH36YX@aqP7djn$4fH+?BnHF7-h%6HRHj?mK)Km6k+gA&_UM|?kH(Ac+1&NXrOVdOP z)KYoFvi80lNnnW;J}MgsKheNc;lYF(-QiJT@5{0*Z4vG^ed~3WAwcr46*{mn)XbRg zTC@A+G2vF>EO>HJV3?Q(E^lU*@G!Fa6C^?cMfr7K&nqJ0IM4HZco3=R`52D_zx1?w z+7y=aIE`;|a5G}7b6>u;78O?Fm9*BLgg2Q)O}xuRm~&hwXAk0F**7Q{5xPtlnPf0t@IvS;>RJ$&D&-ZrU5`Z)Xx=O40HNMpHFpkS0pe zk#3QPa&4K3sSpgsrD*+AfS<7_pD?+(5DzG^f>cMO%2h#^QPr-oa2O#v8p{aw#30Rk z-c}T;?Shm%z5>~idW_bP?P>`ylc2dtcmDG2<|G4=1^~Q?4j3UlA}lCaWvGq_pElj> zzHc{=?2-xmX*CsKH87Dk!}dAV9{-sFsi$0x%MsxnKY=fOjDgE0l{!U*h#Ym}%ktg$ zAM~0vEA_Bh9DrJxKNvV3c<~$+xClpB7DB?4oWhuVDF68O`0@7n+ijT%nt@_s7SHE} zQG`3+w?CiuC;PX9-cD6sadiOv?jdpAiX*yAqyrp?hE`EuN2rJJN_=CHk>9Vj!c&CU ze34Noy_);hWFHf9G4dDesw}3t+-coZhtqEpp@_G>-kix@n$aOv3V(1uy+o{kUcL`WA1hH~5A=-;(o|kzFfd}EIeSGS9 z93=91dvg{NnGsg$Fqno1Mg4Y5P_aJSHhXRrSPvYV=ZW1y=NjUJ#e22{)*Z0DmAtJQ z#Muhx9DW|SmvV*UAvH9s;E*Iys48??6lLiuM^W;*j6{M-_pcZ}a7f3vTw456YdZWG z`$Ti`;vu2ge|XAE7x(8_4FQHgK^`u$P4-@Q8oTMYr+kUQg?fYv3Bb_!RHLM#JiHg9 zHCC&OM?{L3UCdC>^h0_bsmviVa8AGu0p5~(2SUWlyS69>oe!lQCc5_U#HnO1C~d>H zQw|xyLTVabyaaaIGl$w zyCcJF-@>(et{L!16KZTG&JV{}fTd<~AszUa`!BLQ`Hk3jr483Qb{Dv0d}N7Mac`MV zZ~sq*wo>piuZpl4kX<}T9bfH|>(-XtJ={cyaK;^A$A#qiLU$hX-uIa!7=g6iq;96MhaD7(UNwhtX{blO@WEgYBr;NU)l*X zYt)BDb*CX=E?p8mpqMz5%W_oAES5J7gOGCHlTz+|>Ns#R*p#g0SCF5l*$?*82-J*| zU0%3Diyny%6NzUNI3d=EgGI6+&4~?Pn<4u3OpC3;PFA@)w=x%dPD3{};Ir(|{C&zWmG%I5} z74|hm#8SWY(!S%A$H9$=Dum>4v%RW6={-gT2J8B&nN&hpgm~x}dZ>)^I3w=0!*~g* zWR}Dw(a@N(h;kOxXuXX9l4y!{2q_2M-Ro8lsP7^Aq*_jn@k@*xw!n83_;uZ%&u4^r zgs6&W6^Lu_Q$yIG8JFGeem$=UhQtaplvfGS2BuE|>yn@)^v8)gGjgU)nuMQZ9LI4E zgX1WIi0(NTf!*W9SU_L%?!M@&UWfg$rQt>M*1_fX^@3gFVyy>!VtYP-s*EEE5sxpR#v!ym` z!QV@Zzk!V^sszoZH+g>VaQI~!6hyGq>^6~nZi?;b@K}=g4swqO%h;CmD=a&23Wl;* zgREJYN!?gS~1x|`XY&^&69{K|;O2+{I116Lq@dUi16zsOyf z%-qc28(1md%!qE>K{jdn7Qqf!h7KJV;&hZ+6Be6plNE-bb6Lh2TA6V{uOcm+znMB0 z>_J%np(lr#{BfQ`hjV0tm&kb@|u6? z96AnUCm+G*A*!0fFAlRoGI7J0#dXc=uxSyb`QAH)P?93e%;s?)suJX5WNbui`6T;b zW-ByVvX9<4M@+gU)nFlrzZ^Qw^Kp#x7{}0oH!*Smme7QVm%PoD#~WJ?Y^kZBs#}|; z^%!z5=%nn79cjO~e>EG}X~w;yq4;9GSkAHv0puKB)$@!4YOR#ENep1bUnFJ4SwP7J zQ#*Gr4d)ZQD)<>iHG;2e-W)TF8*^Wo#Mrl5&Q!{e?Jv|xGoRCNKX&u?ipkuL)Fg6K z>BP8dl)~8r0S@^5yhT3W-@#YX_qTUo=RdCNdEI6fKG6{vI zOoDTQNa%b-wk1kfD4HmJ(?2~RV8GGxLb;mAxABT z#pVa0Fn1vql|JrDuAQW&D5yjB%?;OgZ+HV!kW(l9I(z<+R)+aDD+*t{=CGWV_{;o` zasG#wAe*XET?swq6=djgJTkkKm$}vr0;BT3nAeQVskf2AF6Qgr?>Bpm^Bduiz!7fkn~(eITlOP8F!nz zh+?_k36e}KBoKCY{a2^3Y^QF1b_T378shD<#W5EV6qA_Y6@1OiN}6KIzs!M;Z>w4j zrcpj37;{^AK)heYD5Ao0ak^BTUO5Ey*XCR)lh<|27^2x+sW7WbCi&F+-c_K-oO5!R zG9L$%lcShJZW?VGyH0qcWQa90Y`bl+6~;iTwS2h8qRwIvGR7F^c><|~3JfG&NXpLR zjCq?)I5IhB33asu7IyK10~D$3P!z~SlSE`P!3SE|>wW$%F$U+pZaPn5OZ9!Y0sxUpLcqcrT#Q-?2}^-IUk3xI}<<7Q}`^S z^(RsiZN{8HBPlW6)1KFi!S{X7`+i=}=krNKBJp;fzx@4gryePJ;Z4Y!a)woMbruM8 z5mkcnt7r<%Mz&Pr7&=CwA=%C6oM2ec`go($j-#xd@EUZBQ;^#zIaIvj=+-sBo(h*9 zG8Je7i=mXe(b8{KL%oQ>+;tj;IuUtL(}on@5EWiQ<>`=M7GU^&@0Ws96&EOWQnmu4 zDrc3*Gln;UXb^i2mfXxC`|GI=azT7;f+C2_BdnLJS!Eu_kzvA_&6Ul}${V19eJ}lN z?`*V`$%P^i*cN`<`X#3g`dE-f(UM$9qhT4aOx zitLYK){8I>W@UDEvzf9GddY#2O@IcAzD0V?V&NBJL}_G*B`jD}bx7@xI7!(lUUAD0 zMF#@~1#Z)(7hLUrll_RC0*|j(B2|v5Z;wDU-lkCHX1SIzliT!EB8k_GLZ|Sp7xf-( zB5yY+q>L?N3}KmbMn-1r-W;M>!=y0=dBhzZ7O^(46_DBPiMl7Fmv0GqponP^79-;H zaJQKubY>>146j zo+$*O=1ZnZESh~=HGk7)iZLYZA?4nMxh64b@FvI0WR}15i}{BX31I|;&1v^NgGk4y z$fqze5jl=AWKf>n5kWR>iaeh;^POl6^Md6VH{LWXPfU!#&M}7035GRZNKs~|ShhQU zd8&n(#&Gg5Pl`u_RdNBl;z5S?deFUSYMIBKoHnTz7j=atFOX;qJ&tjhvG8;|VjzfB zWclUmD23rD6-5?)->%`8@+~c&Sa6ccuH^k-+@sm|P|)gA+7X8SBetY63)LP9mO#yI zIEE8X0SuqQ`KJ{# zFeG5M(w#(hnjXZWL(+`Ifapi?EQnaDH-jJQB542sAOJ~3K~&BC`Fv8)7zfFeA?##x zI$gt^!;ZnfyglB}k3XL-BF8x1-)Ibdoae{KQ&@ByLkE-2>2}04|M~f8L#Ex3BY%E= z+MLQU-_OVUV;ou?=MwAGP3}I#y;|TMaQ+j-G!khV=T9=nEHWY>dF_W{Plni0u zMqV)dOJB6D?x>)uDv|hdG^3#Gi@3|$R4)N`WdD;b)8YqWVb-> zZFes(2DKMbSit_Tt--wR+br4-);zpp90#IT>T|oz=%NA|6XyykIaTMOArdtJix;=Y zkx8o+ts}zbJk3y4?$XX^W-%}ry}HdPF$p3Im)1(x>;w;1h0tc_y50K+@0*J z>L&iJjI4r{zz2qcymxdWQ>_GvaJIO%4ta%7fceFBK5b+^o%=lmUyV_eh9!c67a z@BbHQ3dkr^fQ7+1E0>9h6RKH`1ST3lJ@MM|@|t5|2Z17yd%&$aQl+Z(UE%c*HY1oT z+~WCs5^-g7Gm8?gWOFwUjbrE-V+wtLoIld=L{j+NKP*o!`>6@XBb~UuqYWVXq#Udt2_)L~px?`#tA)B;azZXb6{u9@gQ>RKs8wU#Ivu(qu z<6nv!TC3=W7-Rt63ntWaFoH834_D{P)Ibi30@*0CizMEnTLc57G$q>slAN+R&`#2( z3-78pXy=gQmd61)M8=ZkQmvernFLLG+f#wKPtw%p+eeQYvFJ+sMs{OxXvr4(l=(CwIG9UrC{$iCXUMuyv${5* zO%rur1daUYyG&mq=*-J(x{OlS=q#d-$3sNtoWi0k%1WZj0yLb6cu1J@whbhr4OLYc zH>%AKEOiKHI}jimgb`xz!kIlXYr5kxL6m^7I5Ja*i|Rlb5sxEDHWe+%Tboand)&1s zl#QURj<7Q|8;2h+WD+z8QKze0_?*}wdIXc0`*qJbm+7Qp%2!Em>m*%uI^0f*h{3L_KiMw*~ zDs}r&Dr4kQs$#rZr*%TVYH<{s7mL1VZx$N1;v~UtKxYP<=Yak?NXN*zEV;5WkqWu zM1~yMy;zV6McB+8#C^}a9$2SYoiJ=>L^4#*V~n9@K^~8xZ^ub2Lr8SIznvWZ=bxV+ zml4wh7A*8Od)}tPW5C~GbIzd9p~ukg-@hN{(XS6+n6zcXWviT<<~CLXc%kLAA{!yCw3M_Ix<=MfQ1b5uL>1n{XYqk=AmJPXaOT-(sv3WZy5opA&f|QX z9CS|$kL#K>O;zf>IIXF_*Dp@IG(#IuI(r*v8<6Al3ghk~GU?|~FJ-5fqHA)v;9FXf zIk&`2W*#v;+-!P*d$d!7cKkOl$JnZRv$N?|b&s3e6SC<`9$!SHJ0?pTT=@YRPfd~B zY<_(FB#LQo5E~8Ea~!HdtZ(Pz+xx_1#LQ$DGX`xBSniX`X;D8$rm(k5AQsc9$0gaf z^X8QL64VW6w#U*#t@JX?lDnSoGbz6YULSI0NlS1BBnmGTX~CJ6A(vVj$S)qg7hzdG zavY7%-5mS7e!3~XsbV4;A_KQMuJxXbc;w?n9J@`o5e&H7!oqy@=)1}?Kj*>(i*QQ^ za-2+DsWt1Y&O^9okeoig2E=UzXT`ZK2z%zlY-Goka)m`rPJ>}Q3pUHT&Xdp1?SrMw z;g|{AaDNthmpm1Uyppgo4!YlbbHA>8jI6#bj|HKPlk(ouMO6AU^N(5047&{xMUp$OCsWV-9i-y{Gfx=8O zT)_K)OUv=2dl(t31_U1|ba5nMbC84+bI2Ir9;(POp!JEqAsmy61_;&W=&HzY_aK8` zda6QG>}FFq+~$>%J_^bo&pntY5n~=R#wb{PW?`i^&dFi|nzUZ#+UpkjMKHGt=Yj$h z>&WJHT`#AnXKWq92_*kLTM_2QhRouI0OJiy_v z>o;Y0h?KFsRR|&?Lq}f~Xzo&j<>7ONADD3-GALrso5Gyg&D zl0YvbmLY?}P{^hjBbbGU>Y*YON})ohvI@Z|2l>Gv@yqx386VH*EL?V6)1LQz9{PFv z^?ZIlKRx_7k7JDY^Z47}e>@(K+S^KN!252HV&b6B^m;l=qAh>~ZJX32sC1DE?YLz3fq!ZBj^~7_V?FsoyQv3%~r!_aDE!pXU(O zkLUd7Z-4yp+t26cl}BtWGhI~_jWCr(@!p@JQjRv8BVNc}LU_AGyC`XQeC?8`m0KIT zG1-9-r>FdVWGZbry3=h_Ps_Kwp3S3IiKQ!0x)oiGZR$-$&5FdjJ*8lXIX8V*jxcZp7W+z8lKN}bxchD; zvHvVXqTzfoRMcYS8Wu;pQm-X;)%}XWDSqQjdf)OTcK8VZ6=m>|{izzN(cgM&P%7iB zo~H$y#?K*JHgi91X7)wKLy0ZOJjjS3cJqW!)~`nXnhq0tsT%Dd#TRT8T0_VhHdA^) z_Y`eta&u8g5j6{`wK|E&aSmZo9p~}*kk5Hvk)h({E`CilAp)R4yCt=Z?ehGSTIPaM z*~dJP?u`D*H>MNkj=ih|JyXUPC~5J~&S!{V31y1C!cQ@BO9W^;XHyBtOcEO|A7`wn z20NQFJE8OPY;Gk_T3P-Cc1)>v{U(xpD~3E8Z-IjVL&pp(b22v|_>j-z9{2qTR271L zMFcKG;sAZ|zV9F!s^d72=bFMMGuqhVjcdr9&*{@lRfMG;1deiUs!(rU^5=}qBE%n| zxsM`B%*kyy#Hvz4)eHkd0u=*e<$ z$>J338Mm-4h1Qm^8aWlst?r!WL%Sezw;(s0Hg9tHDermTX4ZRNe1|HmDskTvqjkJN z8?c+uE;D;LJ1_2KmMeKG*2;-IoGh4SM$AdVOu8)h!W?O_r{g#V@jY$YL`f7ilcB6f zMAnutg~OQilmb{qRb%B!nHz~5$IzkVPHx8--*`OEDSYJz=uY9sIlg^6|9D>4ZO0fo zbcWw{Pq!K5m;LeQAD^F}@8{#~?d|>T{PFG46V@dpz%Z3JnLcqX4Dt2~F2xx!Mt*Tw zDb~=rA?Y5$DgtqL`H@R{(0A!yM$*)y3x^S|Dw0MF7GrKHFhf{6_iKB*hpL|Ec>nhP z`1bhw-+%f3{XIzU%l_+s{cr!*|M`D^eq5Tk5LxsGB*>BE%*4G*u9BvCGWJR(<}1TK zjW-Pzti(}j?HaWq#24!%3XqXxKA3*eGb}IKIF^bhK`z}_qzL9lC9GwFw0&LD#w?L) z0DfI=a78o)f_m}0L~7nKL;-X1eog|MrP z^u%XWUI*#X?$z&bv1qab=Y%_BIccw%vCPf7wZ2o4th1U#o7I)7s*ca66`??eunyIs zwSb40JvvqsqIi+0A2B+X}R;<$}~% zKpY&kbjaA?6l!e9ZGkK*dS26@HB?~b;BF^Km;LkZ@PJ1~(V^5#hHd9u6oT$L2c-15%=dupIuY+M#wQ#cx;xrF& zAt8+7W(@%nKJCFLGlOpp=P4-WoQac-5XZ5g%p|PA3LrZN>v4(-MZn7W7~>dnsF3pz zAz@W{9LMABe4Gc%csw2~OcJadLgsFM&zMmAipu#o9*;9OIPwY^X@yf~fZ%^3+0L}m z$Gv>#Ict|ivnnziMMf;ttQ3>v3fo$a&TjPo8U)!tnaIY%q76VFsd^xmR1Z~N!qDS5 z&hvPDd;f8clbrwdw!&l?AOMtA#&NK;3EEji23#}3BA5&0rfeIgRl?wQ zj%@QhToq1E;SHU|Mb09*r=^vY5WLKWUW3PuGwE%~E2LwsR%^BAunKl*F!YcWtCQ~9 zrkC37Ak4u@&)v51c^;~G&!kEavz?MASuEjSTno!k#AUurUgSdtO1sNyaX@*czw4aM^Ric->co zxfw;cO<^A6K(WFvXV42vozh%WT9tIYuyq7FcBm=`y!VR-h%fOUEuJE@G;2U#e_*99;+mf6#l4=<2aZ6;6X8p8AW8?O4P(uC@?!3s>bKxcHfRv?-o^igd~f<5W7Si zk*Ww@iX1M4hz7!g!{!8SvNvv04?HlOHqC&B$AS??r(Vlwc+3sFd+pSFkoE;f=}5|vzLsdQXjadnyzY)< zr!Wi4AR5BMW(bq;`1bbpU;g!9{?~v1w_pF~Z$JOMm~1E~9o4}B5qjZ{Hml}k&dmkH z!k<)nqk&~;gqiRAuRQGFN8Xc_c!?6rp~(Z_-BwK1Qfl+(<`1xf9F|d6V!yo8gAft* zLvlv4RfU``Ru7kuZSfNQh4x4@scynfm}ynWOP)E20cVb-UaV4b8x6Gc?!}L_S*W5) zIug=a)plW6g-WTtVP9J$cZ{RTnedu&_BHmq>3wA$;?{eiHBuei5nC|Rq&t4senla4 z`WH;6)tqyBtt?1#Hn99)+*!6Ik;w!fJl$@PJWx0d5gDq&4VaE@E%Ll2sNqTckSjOguev4#w%Vny>}ZJBOvn0 zU(6#$#>;ed6sV+_@yb$C&+PS-Lh`SNB6E|5{K zm_3T7pU-LuMg1kFib+@?{z$Dc(JLU-7ZP(DjEnGj9N%CEi@0v13VB8n5>p@|L9nXA zpFIgPRDM!g8cvMU+*@I{HP8LxmS-JPQew30eaF0}NkoVXA7iNMaH45GErH{3M~or# zcsw4DpLzL6MH@-Peb0MNtK|VpLKC7!WYJh{{M#a{M4%NYmqoaZf~A)9BM^ATd*d4JaBB^h>ovGN%Y-x>0o71m_Y9Mj7($ z+xvO``J7Ky)|2=;F{G4;%W1M-D0EGoYe)yKz(4*Q#o%OQ6nmels zD^Tn{XUb~|XI#c~z?MCO4f1rBq~2{wd%`T-qIEAy&60?TNXfGI<~dJB)Wq$|telC} z$`;u_iRV4Ybhp0<#;c+!NK%BsPZXrbaU93NBFA|g=jqcvKb}zX4PhB?OwT#zZnQ5y z9=!rx;rRBIs8|+V=0ZMfuqobH9kE<`YXFOlyNeh2DI>7F2$!u`iVZBBH%<;?AicE) z%cP$xoOeHL`yu;ktus)PV*(YIFmK_7EhVbiS0Z(UgT-H6y`A+rm;-|V6d~@0)hQk` z0N%}E;7ouQ`C?Gz1zb_sFJdqd>R8MpJa|jt$ez3qP#f=?d+35MGXIru2#tEcyZ>Dj zz$?BGJP2kYhVW2z^kAC>7V``gh%M3EJ4r$FCI~a9xZQ;*aPQ}nE18`|lFEFbFP$UT zs^~1aWnn!I^4daP_hqmas&LtuYpxN@Y`AC(kKCU*v^`Ngpdc}~X(psHR8$;6PL57i zDlW1@i^a%z-`*B9wWHF7wg!!&!wtMsCARjfm9=$J=bA2C>Xc8f4As7;+A%Br{-K#P z^ZR~2pI1hto8gS|ta=C)ZCKlLgjrJRGiP5mupoweuMY5E;s;q357$&FHEFnix+?Aq zz{8zGsT45C5vEr=QuWaC#TZph$96}e7)Au&obEox$c(MB6)4epj!XmOX$1h}GPAf( z^UTC7pI4rJHqBK-r2u$!2p|b7!o#@O?h!&{nQB(E3yV;e<c*Vy!-2xppXVWNnpWD5^^O8i9y;r^xt}P`rzMfwh zz{fdMki8X-Mr*YF#S;nH|73oT$63g8H zA*Jh9HS_Dbulv4c@U)Xmu4zGWp67WU^1R1!Jl;+v=D4Mz1BhJ5aUSD12aAMtjw|iu zRE^uWE%hZ%lGMug}kqx8wXT|I5F9{vZGQsrrv!|NQ44 zpJtP3@Ybo|)$o)}p+wH71%9KJ%K$fpbJpGGH1P~(_7KXMpC_m$*BS{vs+|D|3U?H_ z$sI-2HZ5c-1VNPO43W@K3mO1J zq6m` z)U3p$#~7O6!1S8B-}AbjGaQV11LvK1RKaI<-?Kt+!^zy@rpI~YYK(cP9_L_YH&^Ai zw>Kp+neOuTIKO{;f1D2@_sub%L=3mKo1{MhWVPqw=@DT?KJW_-Jj^Wx zse%_yl2#KnLEFg!)#A#Iabc1nn@>NHg`GmnlA)WdNF#!QPeo7IQdxv(T$4UOZHOq} zpU3m~&hKw;|Nd|P_Vee*al9Sppa1yvchtqZ3`m$7Y`~is-@j^*x${E%y3IjT*mOfD z-pe}xE6OTV!xiQZ&*2S6tStNc!7rf}M6buiy5lwwdXwBmIG8M9=P9c$QO#-&dzrIS zUi+xo141I=^Ye-E43P{yNaF47Vbh+^+vc2e-fmkAj<=q6VMW)FCdykj>UD zgFGX8in)`{q8+bkUy@@;2(4l0Zl9nqyCZZAH4ImXNyR82=>>DTXCw=pvSK6~E|qeQ z^(9p#VXG-)pHjALGA#qC6@#LG2KJN*^^GNUh2&4S=7(}pSq_h_x}w+y#haseX=rNj z$dKl#s^We!2qU&Z0mVA^1kqhFZCX|Fs~biJRT|Blh>+ftwO7zCoD28+o?={tJRlwn zLExAS?Mg|n6~>F659*V$zT&EK^CbTO03ZNKL_t&z;?_bC5pt&SM~lJ*!lU|^s6JYv zy@>8ja&}H#;jx(+=xa0|*w?z}d zxQ} zOzlr6NslTy#tTcTr*M!|@X>WmY}NaK%7C&a9)A_&N$%XKpA%I4!1D>QI2a}2xN$nXip-Qsi|9n0Em`|fES=Zd#lQ|(7hyp6VqJCb2J?SwV4QpO~#>!9Xr#om#CB8UfW6Kp2@ zWuwAE7Sd9x!GZu6-)A*DjcGA-mcyE0_o?IPcAwYvbhpo+KUL-P`Dqi1WS?`I-9aWw zqUJSoQtUCMnW&}NcY4H z&9oKcBQK8Z4|#>>8KV3~;$~l8sP%P*B<_Y2C@foOaVbB=IOJFYmt4s3{beL2W-i zRyOUDdD4b&0G7bMh%VQ}YpDQmrgOC8t9il##keskcT`}fGBv*;D8jGn8e@n)sC>~? zK@~fsUM7^@+;)~Wm6lXaXuIafG2DVrvx-?vy}9x%YxRbd1~V0Q5_g)0=-pyRYLjl; za$5?U$kEE8dgWY|R_sf?TU_sI71H(bw@oR6Ma%9K^<-3PRrQ$)#>bqzxoZ0>^9VFk z=r2{r7|J3#^f(VJL~>l04;VgpY3BG2_xi%T$bCos(Xw}^jMoS*Cq&XID7^aC(Fm7)3z%82A5?^#Wc?x)E>t1xg!sXfnjwT?99Y4hkH_OY z|Muhi_it~%|N7g<$4{F#Mmt1o?vs*(v zFcU}kG$hZE=nx$Mj=TGPPfuk@5V3iyp@JyRp_eMwl+6@SCFHGBvv5lq9Iaw4wH8tC z>0h!tBXZZ{KIc?XE}vCy9U*nt%L0ctD{AlUU^3~@6vvQJ458eRsti?R$jk`3uFLK@ z#-Z~b&LbRlR@5=%aU41ZAixrqyAmu8i9}Ta#yd|w#~`|iV~jCazP-Ii#BH}@eUp|T z-dKpuyX+)2Sr`KDtm`S<3>d6WV)}%QJf)B&`o@)o;nRKFoU_`=QqXoMTTpB&)^R36 z6h(%JasDT}pGC$YBzm65+mCNQ{`K+pL-dr4Y6!cZO8$7fakzzjTrp!tF!QBD{$-5g z@i@PIyZ-U}&(G&=6UV59uVB35x;YsIZ5dIV9QKOn!wh$2kF~_MV>+WHOi(aKsdft= z=uwV9&T^qtXvvcAa;f*KlAkXvZFu_AV%vozGMULKF^{FTpNe`Ia>FGas^H@a1Fefxj>$NzXfKZ)qNZY-}N6AwHrg-{F|(gNr6mtio`3oBrV7R9qKOJ2^_ zjv!<1Z9$*d`-{xeaFYhbGNF}qofl(^n1%8;jgC@@a9JBPE`0F|g&?-Vld#7sAA~;y=BIEzRtTWq^<2bggO%ag=fZ}cS!~Os7>(zrK0#y<2X4VfjxF@J5 zE|DkznGx0_ceCt~^vfH-uwr**(POGX*l9WpVwOIUd{ZejgdAiOBVs@ZK|=Ti z6TyS%L3m?gW(3SAFMnI3?Cw0Pav;tMRV~+8EDPSEyybNvz?{Q}^(Xb4^cXhkg{gr? zKn2%L8&=42f`z#p_h*s&|b${NbQ_w3S zwnOd#OtW_KK<=a>tM(YVWVa$BY^qZ4kSTSg$mffITLh!%ugK#k5EF|ds=E-qzJ1p@ z{r|d|9Y;u;ftkcmkb1sN-7 zkj2-{(sRc43&<-Oyz8_kq&tu>iZDjhHV^=gXGWNcO})p6ol7h^AZs-ks*V#KiPg=2 z-Sg|2RxG1A{p*>ZpZ8QlKvz|tbjr7n>jXzvVR@a0h}0GwOaA0DcaPS+(k8@pwZJC% z+WeYFc49?6YYBv+W6X&i_Qe1m#L>KLkcdxk5AIpYB+xNftaVYf@e7j8R(FyO5jxKg zl@B=%I$kU%pReoV`yYS)&+B^Sp*qL7zf{Liqu_PuKm;*XgbDD#7l{1${`&aiJDuW8 z#58UC!V&KID*KQ+*9WRTP3KhK{ufJy2z-OSO@!iw2$(yU(wS-xkTNF1mFQHPkQ$hI zY77wGQe_=|j~8xV32abJfB+1I!x~C!724tu3wCZye9`3l^s-f+u_?z;U+f~$Ca?bW z*MFiHVm{(sj~cpyOjhBJZPR<-NbUtw^u|<{-Ks2cnloh(dh|Bod~C>QFL~qt%tc-y za$-B$+YoPsQmUrCWujfwt*d!sT<(=q|I1AS_l|x|92qv6AY+ca?n`iRXW|ur?ycj6 ztjNJ-xelY?&2s|gOnW^w*r_&XeW}bj`X%S?qXc&yh$P0Ief9lZ(kjNkH}1#Tnyrqj+*= z{5m6)K%vPUB!Z}OmQS?@z%h+dC~_E}LXQ2DfrXi5l!3rdi_vM`3udzjwoI3JM{Y8+ zA!yx&mf9}RIPdlya)AGqF?eBiYn_+-*$^LZALGWpUD+uahwkpqo0F@+4!G$USwJ#27L#(|H`i%t(wY$)|E5RBbd;3jn5R2+ew*j4Kx= z)jn2E!c-d0)bAm_fiwDpXc2tBgzLf!b!&q=a9IUgo{{Q+H^#c=)-@d$4_ zRk?W_$B}fxTCKi5uH*RUe4ekLKW#jy7BwYC-Ng!my<4PhT$8lcQd0Y<2a=c!b&MC)5_*Y6(BQ}gE+L4R~E`DsX@es1; z?6VLuB0Cz|*c%J8u+&0JJcDG7#+aX5!@*@4Ke>@W_&XTftiQtvBgL=r*GA1+x9sEf?|Zl z%-3~JRVF@|PoeV=Va_lQbU?BttgTc4sQ0Linqm70tS~bn$@My4f1rF^-~N#E;^VA< zB^;rnF!kpd3jzRe)>tjRebd&g?7W=Tbc z)-r7&VYgzc_)WXatEGAY32Uy*8^FwV4Z||ggArwLd!&KI%@}rsqRcPMefvhas~Ce0 z2Fx){)h@u85Lehr8BAFcXRSuO;N}TAB!4S|I#IJzuB)fDEgRU2iPLxbmQ7jGdqxQS z>NAGU&g6`bgIb8zEbFxdOHsJhbs8n76Ab@z^0bv%+WS`owW_lVd2~R7H3fsjT z6r^6mCzrxg$x9{Ih=lHD61pR>$S#HX4LNU_Fn~R0^75aD&ySc;Va{>i&OwLg0DJsK zcv_71y;jYE(U$id&!x`glyQd$3f%9~cuU!xS)2}?v+V<_6Gv_wx}x4h!IpgUM&m-` zJev_)V$~GVQQ4d^$>DAz>R&)$3Z```SKJBRfrgn!c2J*!{b1J9?^~U;33T@4rY48= zdc6tokZHv^{>ra<_s}|Q&XVO-#C|J+I2nm6Im(_>)h10f6A@;bQ`;Drl*Oc08A^wp zfSH?XOwj=sfd+v{7-l4=dTX%4lAU_y$ouWkn4qh>2C2ulWUTy9s{~J`^!BWkGyqf9 zZlRBdguaFX8dmmYMUk)fAJ)9GD%g6tQ&Eh>EL39}s}0ffJUXY%!5G=e=QKBe;{KcI z|21$AY4NVijR!)ZO?gy(DA8rNEU(Q>xp6}3THOKgxHb@5_)97p7^LBb2DsUT< zTA~dJ}`W*Mr*jN#&Fq+P<&tJ#O4+-dY!OfC*2@xU`qIxkpt!6 zHT>>UokdqPT^zEFnR2JTtC78-}As6|Ni;)m>FVN zc~T?O4zC4n>aWp54EIK7Eayp4ZK2r*Z#`rQF^H(LgOQnhs;jotobuK1lCFRO1YJ0$ z7CY2%T_%LTA)c!9G~4h&nU{qLqsf~dQ>Y3l+lAhEZhTI|C=>`odRnD`bv|@FE7P=N zy9lXOM72&0kz=}#X=TC^BSr{$`^eX72Qo1;C4+%M*@DUQ>LC;ohp_A;^oIaYTKpcsvJ=TAWXNCQc+0> zQJ}hFGplWDu5W|&gZKs!sl~tBm}Wa)5ta|Xi`GmfUYu3iCIP<*B%2Nln+q#}4p{rM zY$1{tI_I1^5n-QutslPCH&swZ>CJWY5Vja6Zyd`9!~okZm|-N{A~;%Cq!6vN>g<3n zHv=@V{J4(eAd2a-5o~A}0Cg)zo)sYIw}hv92N3}?>1^f>qp%cUk(K7u>W7Yi?SqrH zUy+}&@0yHd#lh;DD$N@FcPB7KXm?Fx(GftwXj{^!ases_p?IjVao+Cr>;d-*Gh%Mt zU06C{KHgqt5{^7V*BF&WQbq|{8!#;*NsZVHJ2CwZe1odjfk^5OR5$jfh>t@7OQmW6 z?kr4oD^X7I=)dxaKZGNI~`*W0*z8 zp=10*3__70v9^ZRVv7FBRBc!3Qqc(^YDbH8cC`5vEg`0+x(=NU|nAEzqo)T}9|k2!}<17{I(o$8ZtIQ;t_ zp9Xq=&EuL*NQbGLn#l2(kI&mw<2)ns^N?>Rzl1(6I!>YFoxL%H5Ev;(1ni!}hEhd_ zh>9Yxedj>JHk{5SlWnuo8!3TWn0Q><^5RIH?6i!69sQerz^@Dz=Km8`?>N!ZK$`k zmVW!zA^e{}6vaS{m&_Ew(TO;D((Pf*_XIIm)v;ij0qkJ{NE8H=XE#0#h5ThqI3uAd z-I}?U3d|&>R0Y9MH*I~zG}KOU+YdHayHmY?FOh4MT7dzzfQ&<)O1`uD=`B*Q%;BnT zh92SD8Y1^1R5A<8A$$l2upOzb2@BBIHCALnM$I4nD+gQ=(M&as`UoLa)rbm1h!q^J zNi|rQTBCLI)%6EpYpVnHcU@}~6EAvH!0t^sDo$_?Xem*`xfQ7HAgvS0@c{Rv--S)g z9UP|W{XC(xLI*VC1j9yA9$CtfhMI9k>dpuTZB<&q6^_m#%mOeh^N8x{h*NLl9>pCr zbpklU+4>ZhnAw*G2f91y2i_nlTfg zBO!~l3Y-rnFyNEq5(FRkDBtO34_!VZN-sfkm2OIIr||2N>yjgC=id!_x$(=R+zRUA z7C3@7YARq#Hy?ibX^zPSv*DG6@m02(bXML28on%a2_SF#(!Smg9KI zdA^S8CFck7S=3}?K9A!-#8@SVx!%ZC^|`;s{Wb5OzkdD8=0GMUQCG8xNN&@Lax`X<#B{zeUG*hDc7nvnwTpjFxLk#iwJ z-To_htG6~0`(AtP=$1N?Y2mJ5n^+T3WHz}YCg&_BtDB}B-UB~Uc)y>=QSEHm*9f~s zq!7OSr|K75EoKUlOdMA)8KS)HhCf*Zmg5kn#qaHn*jL;8VpecEjmnH$CKx<C_ zq0BmG0sV1--XagZv~->~6IMLyl8E9)rNGLEsQI1)yz!&oLgovU0xLD5d@hh8+Z;=T zQi>P=L=Hj%SAYf4t1XWK5Caf83yMh8>~aVbPq!{`qq+(Q8C22PS@c>(1rY(N_vYDg zo2|!a%3=KhLL|p2oF<41(%cxh2|Bh#-iOeBAD-=yLqv30YWWy{jR8ugZTFJY}o znI;M@?lb3{^M1xNESNlTV3FIwVbx?X1=~Ap&vga_`9I`_m67Ao0=e4qDC^46b>wU< zDvu%8Pg8Y@1uy7%zUKTkZ3NZE-NuM3FmopWfkm$KoX?yqVsev|>4qBc>oR+g4RLlHZ+>J0|j3VL?VjAmXv?aGy}(P|%pmeY`#p z$hH0+NfdQrKF(8)gGdcfk&FrWtZ32 zTnKI6n_Q(*B(HVQI4l68EYW#INSbSA18wIXXBS5~qJbp|VB&*ASsN>TLOzfLYBI=x z;AjBqhDgWtI>ID%zU2HkuaD!rkjSQbrtLBj#mq9S@22DPU;jIyC_3l(>Cb2GT)|uo zz>qx^H=0)=nud&_l!FAVY8C=dwRoKsDq%izn;&??=)m&s@rrZqX$iAz zzn%3sJeN*u+wx|u4!iw6)aWgcY2T!=8b>5Wh_Y|AxL@&$^|0 zntLk~%;-M(331Py_HBj>)if{1!V0WOZK7C9CXY^GY2(cB@F8@c7ez49z8&Gy)4kFW*7R7OC={Xqseqr+}s?sTTT z$662!?p2I$X}%82surr0sWV`I{bi|62TMGbMaWZrGEC%km3Bei`7^~9P7CDoJn^rB z*wg_7&2cv~PyS8Pr$ad1Ik{n*g~IS{o19p0t)eq2$eAAEeGt;4+jOJ= zCq|^=ab5=>K&g0)s(%cf+6jahGB1kqn`^m)7z+Q!_;!sYJDkv+IKZlI;b6kL$Wzc$ zU#**}6B7qOdFsL~<{wtgbj;@&Hz3S0=6#Rn4&aqV)-ptRbw=E_>zRamt+TynM7hv3 z2ae^d+d!m44q%SROUEP!h6TXtEXs|fCN&_II9vNi=Xo&m^E~$*I4(zVY`R3KU`k_E|oNhymCqXdr~>BtC>rb$1Hd zJ`>R)0*E9hpDz^Q<8@xIFsr<-4>xHJ`r&??zCip%^~a^9GA6|>7Lx7T$?q$qZWlymJKmmhlEw_9<%+28Q=sf&8BQ_ib2aU2n|n zH)df|-&%^a<4jY5MSGK6`h}2ql~jZ%H-^4v1Jzj_f1`MiaywKb`RMp#)Zzvf$A0xn zzC!YH^hmW=H8Ua>k(Hj3ACM+pG(R8ANMT%xs3c$3NlS#8i{}PaRP4&PrPM^M9@)L- zd^zH^3jBq)V?0KU!LN?rG@c91s0@=Wt+8fQ9VYHRV=Uq}r-HqGv^r+q*QM2ou|aH1 zi>4csm=2wGNaZP|0t5PIxG5l5E_5woLXu(%S?hZ3DBreIzHgz+xr)pBL6Lxr@eXbi z+30@&HbI!@hNf%^ixyGorSWeHV6==m%U;3Ez7<&Uxkr{Q;r4)g8;0z(m=p0Q=>He*yu=;X0wL5`Y-a@U!rku|c$#;o~ouj?DMa4$%kdgmFWjd2iA zWr|n&pJ#CC8<+-bS7`ef?kx!~mNcAQx;v;&jh|L70AJ~#+IIt@6R`nA1lvCG&UY1D z^Xp1|d`msm4HOPyr0tC%2&QS#$<_(z3q6KOxOHH!r3|hyY8~m;DP8^Htfbow{^LB~XN0*Rx~z~-1gKW{ZZVuIlaC=RA>Lyh(&ve(ErZve`3O*P!y zIVPflkSyy5I%Z{=;lW9;Bn;h8LJ?x)q@jF^HPG|i=Xrwr^E^}4gA5XA2B;XLgq;F2 z${~TvikcK$qcTJkB5vkd;oSwnLu-PIf#lQl>%OCVHZ?#(!)GWnPr4IGhZH`9J_QKq9YzBS0r` zBK*gXk(BU91d7}A4p61=nwi>j-D#Uu#*ixcxcmYIF4`o$XEGXJ4 zzg<^}9qj-q4=VNm01iG$L_t*Q*sO|v-jPcg+NEp>IYdvX zgtgW_uK%RErCJ3`$P(|}N~7`BYWC|`F3Xr#VdQOLYkUe|DsfemuEzK3Bm)-#HFgGZ zTUaK#7}zec%YCUCR!*>*!_Z88MPfmgBW#0?Xk*k0rWeN0BT7V!2(bRvVVhy*)DO$l zk#N&hjYi%`du~fevx3B9_eNX2(eg$t665}d$zG()pQb)l)l@`)7S4PHN4!rd&m*BS zBCKQFsxur7Rk`f}6tLRLm3E7a6bbSXkSAo1wa z(9slTVNUZ}=t0xmXNatGKAL93TFR$xFbPY!O|sbYPD_tR=%5?79}<&@ugm_9GNC-O zZ0GQ)lZ=@NHs`E$kW+`D)nnxq;ojZS(z7qnrH94O)e_MGQDaR5Cj%lBX8^D{$OR6L zS9+>`-uLI{9Z@4~&3ALPbQh3&taUOs0?npdCa8dUsNE(aT<00E!63gwioMWr=4>ii zOa;X1R+5u>2W~n?R<=6l9AiFHZ&fuNa}15T3V}n$3V@+JWM^;@VNIldwkvMn;YtZb zNht9scFF|Ige*+u|IO!1r>aJ;Wp2V87&CJ}jzeLxvs24 zOxJM;F6f#Y9dOr(kDqe_J{d(uB*y{nK$j_P=0as&>|YVvyl2fw#glC0|5XletzEJJ5XH1B$0BdF<5I!8VXqqM@QK{QaMb3XmMN%|;UWx#RTMa-koGwZK$(S@8wJ0% zmYe7&x*aU}jN>*2tPBsR?>!2KP|%i5#s!h%AZi9CYhb?eT;jJgCkh`Q z^qycb%H|5`7@(2oka<^>Zs%R zBYS51K{*YhVDgGqTT?BEzWO#!GF^wI4QfFpyO0imO-8yGOJ z8auhv%w?z|X3k{bofO|>>(1OTBO+$8IZ_W7p(M=5af~rlZ98y1EP9ND6x%ZOT`=p4 zTbMmoVyq|b8JWeAr-d;zcBnw{Q*a?h!)*zj!N5jNl&eBC)BAajLzoDFkO?gt`|kZ6 z4GV3N66@F;fd|f0)eey#KfYbp$-=MKbzKK$&1YlWW-2Teg{zw*m?@w$6X@KpB`+pc zX}ys;_9Cybb)_+;xgqr-z7ofXm@)Eftnls>8|TQfjLO6`xBS9lVvpWf>3(khjByF*m({WbTj7Ip=}M*YWM7 zmkc4G9KEMR!XXtf)kA0IU|K+0Aeg6^m-Z5H4Zi`2V=dB}04pvXVkK<0XD;eTGKhZS zJmvg;eZxm=#KA}uF@nNEB4%2l0{)C=+>ef1b%6PNzVsP{IL4PgU!mhiF!ULQp1m2HqTqg+jjrO_WwBHpetyJSce#8*Dh@v&1%|o~zbixd^!%{6{uhbh-*bNC0 zlwKYY$y7CUpA@{FwN!!MhzCmsSVlanB%)7(=AC zJ*h+(Q2CVRTcT`|Z@IlWx$M}-rwHX8vz1l3;3Xld@dA#8Gr8s1T!aP2FEEQ$C=!xp#w)2vWyCjF)+=6;O>L8F4)bT zh^u(Q?%;ltsYO!}h^YVq#Xo!EwtvTsLHP$MYyW5)*NQI3zl+F{7zWCSR5Y_#_QlRD z%zFyP5tK&EEFu!H%3&tNrMe^45dxsagU!TUixohy1BkiPA30ZbZfmZASo~#+)}>^pd7#lt&rI4zso`fqswP zJ;wrW9vVF?_`3~5XT<9~h50;=?>~OLUN1(n$evO~M<6*$Jb`I4vY2^Qj-0iePCAPO z+xisq3y!;1)d>(J@l;?y=#GSdb6B+0bKA&ZnG!S?#aThtgBo$e2Tau&35;TDK3zR) zU~qh<=1vp^8STpyNr?@3qCEV=;RH2sGUQ@P0wSpC^Nc9*NZ{k-Z>N78@a^L|MBFrr z3}#QELP{koq}9`+71IsE1Pfw;Z{Nof?E^w@A`3!l@|L$avK7b)0f-Idu;Uatg%6|C z$)*T|B20A4V%l@ zOK~d;GiF3~4182i zR;<`7xpW5EhTk-vk~Tg2?1o`I0s$I;yo)k?3$ zcxyHsK?0a7J;ckE(E(K@xGYbCZ`mlhKfqpGrlhzWa~=T0m@6WZnz}myBZ1}bk;bjm zW^F?ChH`o8aqp0NSM3P!S z-jv(?RV(k^GR(akd*mClVNETgS*PSq5*QQfb)|54@{$>#sX-zezWm?%q?pP#$ zixem?L%o&?Ej@!q1c_$OiaTQP%v>%A#*i_Qf}`v1 zhG3E=a#;>6+eSf2D|0Y!<3x^;pru6!NUK9Cm#-61(BIOVS6@botQrrKNlR*))ppQe z%;CQ8&*xFM7_CAM#=ONT=W&W0)D=*k0+boEmMLS2A^|`a0a7z?U_M)&6`#aPN)KYb z&XC|lG7m8jI-vt-%2x@i3q>G63hEtJ78x-^9!!)R`7pi5P5+E1eLbZW0SZ>7hCJ^h|q@7TNku^)OQrnO^QZ?=Dn{%g0H_%ZO z@kS$>=NlTq(=mHj^{?l7hO%68%473O+3Cf{AV3mvS2uN=^BK<=KmYodnTm+bTc0m? zpJSwcR;Rl?ItW|NY{k!Vw3#E;5+xLRa-Fm}XA8_%_ezZlB{D}%c^!phW~BqiL+{or zOJqR(jh>TlV0>&DgAfesC}}v(2EB&y>2et68=Y}X$p0Tft zPA|`pj1uMuJho&pX53l?hZ|S`vk3_t)$=~bjg8lm?)GlcR_Z~Z2wijN1aSkBh{Pv9 z=hQhv_1Pn$ sh186MDKI@XqYK}fBLK^}(h>mwKb`tU$F7Bo7XSbN07*qoM6N<$g1qQc{Qv*} literal 0 HcmV?d00001 diff --git a/data/pulsefire-flash.png b/data/pulsefire-flash.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6aca1f445f45f8cee11eb8bb575592f5b0fa32 GIT binary patch literal 262375 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

UowXpii$!9q6u7%YldpA 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�VUdQT>9)T&7S5Pbr3pJ*>)1GT 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

YlTWlr{Y7CuEx++(UG;aa*YJ$)MVi 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�+MX0R6r7pEuuw{|NGIEwov@mX;1UpZCTJCT9&{b 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�^H} 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

th9aBG#Ehme}d=R}G6ii?|)r4AK7>rPj*Z>?{ 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

  • qX-e~<$;hhKC}!!PNHw=)xDWVg%Z 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�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%0DP@B}*ERxT_9Yp{C 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 iPtou9jrT87r2ZeMBYS}f;*#9}0000forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ + +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ + diff --git a/lib/imgui/imgui.cpp b/lib/imgui/imgui.cpp new file mode 100644 index 0000000..5a45931 --- /dev/null +++ b/lib/imgui/imgui.cpp @@ -0,0 +1,9848 @@ +// dear imgui, v1.50 WIP +// (main code and documentation) + +// See ImGui::ShowTestWindow() in imgui_demo.cpp for demo code. +// Newcomers, read 'Programmer guide' below for notes on how to setup ImGui in your codebase. +// Get latest version at https://github.com/ocornut/imgui +// Releases change-log at https://github.com/ocornut/imgui/releases +// Developed by Omar Cornut and every direct or indirect contributors to the GitHub. +// This library is free but I need your support to sustain development and maintenance. +// If you work for a company, please consider financial support, e.g: https://www.patreon.com/imgui + +/* + + Index + - MISSION STATEMENT + - END-USER GUIDE + - PROGRAMMER GUIDE (read me!) + - API BREAKING CHANGES (read me when you update!) + - FREQUENTLY ASKED QUESTIONS (FAQ), TIPS + - How can I help? + - How do I update to a newer version of ImGui? + - What is ImTextureID and how do I display an image? + - I integrated ImGui in my engine and the text or lines are blurry.. + - I integrated ImGui in my engine and some elements are clipping or disappearing when I move windows around.. + - How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs. + - How can I tell when ImGui wants my mouse/keyboard inputs and when I can pass them to my application? + - How can I load a different font than the default? + - How can I easily use icons in my application? + - How can I load multiple fonts? + - How can I display and input non-latin characters such as Chinese, Japanese, Korean, Cyrillic? + - How can I use the drawing facilities without an ImGui window? (using ImDrawList API) + - ISSUES & TODO-LIST + - CODE + + + MISSION STATEMENT + ================= + + - easy to use to create code-driven and data-driven tools + - easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools + - easy to hack and improve + - minimize screen real-estate usage + - minimize setup and maintenance + - minimize state storage on user side + - portable, minimize dependencies, run on target (consoles, phones, etc.) + - efficient runtime (NB- we do allocate when "growing" content - creating a window / opening a tree node for the first time, etc. - but a typical frame won't allocate anything) + - read about immediate-mode gui principles @ http://mollyrocket.com/861, http://mollyrocket.com/forums/index.html + + Designed for developers and content-creators, not the typical end-user! Some of the weaknesses includes: + - doesn't look fancy, doesn't animate + - limited layout features, intricate layouts are typically crafted in code + - occasionally uses statically sized buffers for string manipulations - won't crash, but some very long pieces of text may be clipped. functions like ImGui::TextUnformatted() don't have such restriction. + + + END-USER GUIDE + ============== + + - double-click title bar to collapse window + - click upper right corner to close a window, available when 'bool* p_open' is passed to ImGui::Begin() + - click and drag on lower right corner to resize window + - click and drag on any empty space to move window + - double-click/double-tap on lower right corner grip to auto-fit to content + - TAB/SHIFT+TAB to cycle through keyboard editable fields + - use mouse wheel to scroll + - use CTRL+mouse wheel to zoom window contents (if IO.FontAllowScaling is true) + - CTRL+Click on a slider or drag box to input value as text + - text editor: + - Hold SHIFT or use mouse to select text. + - CTRL+Left/Right to word jump + - CTRL+Shift+Left/Right to select words + - CTRL+A our Double-Click to select all + - CTRL+X,CTRL+C,CTRL+V to use OS clipboard + - CTRL+Z,CTRL+Y to undo/redo + - ESCAPE to revert text to its original value + - You can apply arithmetic operators +,*,/ on numerical values. Use +- to subtract (because - would set a negative value!) + + + PROGRAMMER GUIDE + ================ + + - read the FAQ below this section! + - your code creates the UI, if your code doesn't run the UI is gone! == very dynamic UI, no construction/destructions steps, less data retention on your side, no state duplication, less sync, less bugs. + - call and read ImGui::ShowTestWindow() for demo code demonstrating most features. + - see examples/ folder for standalone sample applications. Prefer reading examples/opengl2_example/ first as it is the simplest. + you may be able to grab and copy a ready made imgui_impl_*** file from the examples/. + - customization: PushStyleColor()/PushStyleVar() or the style editor to tweak the look of the interface (e.g. if you want a more compact UI or a different color scheme). + + - getting started: + - init: call ImGui::GetIO() to retrieve the ImGuiIO structure and fill the fields marked 'Settings'. + - init: call io.Fonts->GetTexDataAsRGBA32(...) and load the font texture pixels into graphics memory. + - every frame: + 1/ in your mainloop or right after you got your keyboard/mouse info, call ImGui::GetIO() and fill the fields marked 'Input' + 2/ call ImGui::NewFrame() as early as you can! + 3/ use any ImGui function you want between NewFrame() and Render() + 4/ call ImGui::Render() as late as you can to end the frame and finalize render data. it will call your RenderDrawListFn handler that you set in the IO structure. + (if you don't need to render, you still need to call Render() and ignore the callback, or call EndFrame() instead. if you call neither some aspects of windows focusing/moving will appear broken.) + - all rendering information are stored into command-lists until ImGui::Render() is called. + - ImGui never touches or know about your GPU state. the only function that knows about GPU is the RenderDrawListFn handler that you provide. + - effectively it means you can create widgets at any time in your code, regardless of considerations of being in "update" vs "render" phases of your own application. + - refer to the examples applications in the examples/ folder for instruction on how to setup your code. + - a typical application skeleton may be: + + // Application init + ImGuiIO& io = ImGui::GetIO(); + io.DisplaySize.x = 1920.0f; + io.DisplaySize.y = 1280.0f; + io.IniFilename = "imgui.ini"; + io.RenderDrawListsFn = my_render_function; // Setup a render function, or set to NULL and call GetDrawData() after Render() to access the render data. + // TODO: Fill others settings of the io structure + + // Load texture atlas + // There is a default font so you don't need to care about choosing a font yet + unsigned char* pixels; + int width, height; + io.Fonts->GetTexDataAsRGBA32(pixels, &width, &height); + // TODO: At this points you've got a texture pointed to by 'pixels' and you need to upload that your your graphic system + // TODO: Store your texture pointer/identifier (whatever your engine uses) in 'io.Fonts->TexID' + + // Application main loop + while (true) + { + // 1) get low-level inputs (e.g. on Win32, GetKeyboardState(), or poll your events, etc.) + // TODO: fill all fields of IO structure and call NewFrame + ImGuiIO& io = ImGui::GetIO(); + io.DeltaTime = 1.0f/60.0f; + io.MousePos = mouse_pos; + io.MouseDown[0] = mouse_button_0; + io.MouseDown[1] = mouse_button_1; + io.KeysDown[i] = ... + + // 2) call NewFrame(), after this point you can use ImGui::* functions anytime + ImGui::NewFrame(); + + // 3) most of your application code here + MyGameUpdate(); // may use any ImGui functions, e.g. ImGui::Begin("My window"); ImGui::Text("Hello, world!"); ImGui::End(); + MyGameRender(); // may use any ImGui functions + + // 4) render & swap video buffers + ImGui::Render(); + SwapBuffers(); + } + + - You can read back 'io.WantCaptureMouse', 'io.WantCaptureKeybord' etc. flags from the IO structure to tell how ImGui intends to use your + inputs and to know if you should share them or hide them from the rest of your application. Read the FAQ below for more information. + + + API BREAKING CHANGES + ==================== + + Occasionally introducing changes that are breaking the API. The breakage are generally minor and easy to fix. + Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code. + Also read releases logs https://github.com/ocornut/imgui/releases for more details. + + - 2016/11/06 (1.50) - BeginChild(const char*) now applies the stack id to the provided label, consistently with other functions as it should always have been. It shouldn't affect you unless (extremely unlikely) you were appending multiple times to a same child from different locations of the stack id. If that's the case, generate an id with GetId() and use it instead of passing string to BeginChild(). + - 2016/10/15 (1.50) - avoid 'void* user_data' parameter to io.SetClipboardTextFn/io.GetClipboardTextFn pointers. We pass io.ClipboardUserData to it. + - 2016/09/25 (1.50) - style.WindowTitleAlign is now a ImVec2 (ImGuiAlign enum was removed). set to (0.5f,0.5f) for horizontal+vertical centering, (0.0f,0.0f) for upper-left, etc. + - 2016/07/30 (1.50) - SameLine(x) with x>0.0f is now relative to left of column/group if any, and not always to left of window. This was sort of always the intent and hopefully breakage should be minimal. + - 2016/05/12 (1.49) - title bar (using ImGuiCol_TitleBg/ImGuiCol_TitleBgActive colors) isn't rendered over a window background (ImGuiCol_WindowBg color) anymore. + If your TitleBg/TitleBgActive alpha was 1.0f or you are using the default theme it will not affect you. + However if your TitleBg/TitleBgActive alpha was <1.0f you need to tweak your custom theme to readjust for the fact that we don't draw a WindowBg background behind the title bar. + This helper function will convert an old TitleBg/TitleBgActive color into a new one with the same visual output, given the OLD color and the OLD WindowBg color. + ImVec4 ConvertTitleBgCol(const ImVec4& win_bg_col, const ImVec4& title_bg_col) + { + float new_a = 1.0f - ((1.0f - win_bg_col.w) * (1.0f - title_bg_col.w)), k = title_bg_col.w / new_a; + return ImVec4((win_bg_col.x * win_bg_col.w + title_bg_col.x) * k, (win_bg_col.y * win_bg_col.w + title_bg_col.y) * k, (win_bg_col.z * win_bg_col.w + title_bg_col.z) * k, new_a); + } + If this is confusing, pick the RGB value from title bar from an old screenshot and apply this as TitleBg/TitleBgActive. Or you may just create TitleBgActive from a tweaked TitleBg color. + - 2016/05/07 (1.49) - removed confusing set of GetInternalState(), GetInternalStateSize(), SetInternalState() functions. Now using CreateContext(), DestroyContext(), GetCurrentContext(), SetCurrentContext(). + - 2016/05/02 (1.49) - renamed SetNextTreeNodeOpened() to SetNextTreeNodeOpen(), no redirection. + - 2016/05/01 (1.49) - obsoleted old signature of CollapsingHeader(const char* label, const char* str_id = NULL, bool display_frame = true, bool default_open = false) as extra parameters were badly designed and rarely used. You can replace the "default_open = true" flag in new API with CollapsingHeader(label, ImGuiTreeNodeFlags_DefaultOpen). + - 2016/04/26 (1.49) - changed ImDrawList::PushClipRect(ImVec4 rect) to ImDraw::PushClipRect(Imvec2 min,ImVec2 max,bool intersect_with_current_clip_rect=false). Note that higher-level ImGui::PushClipRect() is preferable because it will clip at logic/widget level, whereas ImDrawList::PushClipRect() only affect your renderer. + - 2016/04/03 (1.48) - removed style.WindowFillAlphaDefault setting which was redundant. Bake default BG alpha inside style.Colors[ImGuiCol_WindowBg] and all other Bg color values. (ref github issue #337). + - 2016/04/03 (1.48) - renamed ImGuiCol_TooltipBg to ImGuiCol_PopupBg, used by popups/menus and tooltips. popups/menus were previously using ImGuiCol_WindowBg. (ref github issue #337) + - 2016/03/21 (1.48) - renamed GetWindowFont() to GetFont(), GetWindowFontSize() to GetFontSize(). Kept inline redirection function (will obsolete). + - 2016/03/02 (1.48) - InputText() completion/history/always callbacks: if you modify the text buffer manually (without using DeleteChars()/InsertChars() helper) you need to maintain the BufTextLen field. added an assert. + - 2016/01/23 (1.48) - fixed not honoring exact width passed to PushItemWidth(), previously it would add extra FramePadding.x*2 over that width. if you had manual pixel-perfect alignment in place it might affect you. + - 2015/12/27 (1.48) - fixed ImDrawList::AddRect() which used to render a rectangle 1 px too large on each axis. + - 2015/12/04 (1.47) - renamed Color() helpers to ValueColor() - dangerously named, rarely used and probably to be made obsolete. + - 2015/08/29 (1.45) - with the addition of horizontal scrollbar we made various fixes to inconsistencies with dealing with cursor position. + GetCursorPos()/SetCursorPos() functions now include the scrolled amount. It shouldn't affect the majority of users, but take note that SetCursorPosX(100.0f) puts you at +100 from the starting x position which may include scrolling, not at +100 from the window left side. + GetContentRegionMax()/GetWindowContentRegionMin()/GetWindowContentRegionMax() functions allow include the scrolled amount. Typically those were used in cases where no scrolling would happen so it may not be a problem, but watch out! + - 2015/08/29 (1.45) - renamed style.ScrollbarWidth to style.ScrollbarSize + - 2015/08/05 (1.44) - split imgui.cpp into extra files: imgui_demo.cpp imgui_draw.cpp imgui_internal.h that you need to add to your project. + - 2015/07/18 (1.44) - fixed angles in ImDrawList::PathArcTo(), PathArcToFast() (introduced in 1.43) being off by an extra PI for no justifiable reason + - 2015/07/14 (1.43) - add new ImFontAtlas::AddFont() API. For the old AddFont***, moved the 'font_no' parameter of ImFontAtlas::AddFont** functions to the ImFontConfig structure. + you need to render your textured triangles with bilinear filtering to benefit from sub-pixel positioning of text. + - 2015/07/08 (1.43) - switched rendering data to use indexed rendering. this is saving a fair amount of CPU/GPU and enables us to get anti-aliasing for a marginal cost. + this necessary change will break your rendering function! the fix should be very easy. sorry for that :( + - if you are using a vanilla copy of one of the imgui_impl_XXXX.cpp provided in the example, you just need to update your copy and you can ignore the rest. + - the signature of the io.RenderDrawListsFn handler has changed! + ImGui_XXXX_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count) + became: + ImGui_XXXX_RenderDrawLists(ImDrawData* draw_data). + argument 'cmd_lists' -> 'draw_data->CmdLists' + argument 'cmd_lists_count' -> 'draw_data->CmdListsCount' + ImDrawList 'commands' -> 'CmdBuffer' + ImDrawList 'vtx_buffer' -> 'VtxBuffer' + ImDrawList n/a -> 'IdxBuffer' (new) + ImDrawCmd 'vtx_count' -> 'ElemCount' + ImDrawCmd 'clip_rect' -> 'ClipRect' + ImDrawCmd 'user_callback' -> 'UserCallback' + ImDrawCmd 'texture_id' -> 'TextureId' + - each ImDrawList now contains both a vertex buffer and an index buffer. For each command, render ElemCount/3 triangles using indices from the index buffer. + - if you REALLY cannot render indexed primitives, you can call the draw_data->DeIndexAllBuffers() method to de-index the buffers. This is slow and a waste of CPU/GPU. Prefer using indexed rendering! + - refer to code in the examples/ folder or ask on the GitHub if you are unsure of how to upgrade. please upgrade! + - 2015/07/10 (1.43) - changed SameLine() parameters from int to float. + - 2015/07/02 (1.42) - renamed SetScrollPosHere() to SetScrollFromCursorPos(). Kept inline redirection function (will obsolete). + - 2015/07/02 (1.42) - renamed GetScrollPosY() to GetScrollY(). Necessary to reduce confusion along with other scrolling functions, because positions (e.g. cursor position) are not equivalent to scrolling amount. + - 2015/06/14 (1.41) - changed ImageButton() default bg_col parameter from (0,0,0,1) (black) to (0,0,0,0) (transparent) - makes a difference when texture have transparence + - 2015/06/14 (1.41) - changed Selectable() API from (label, selected, size) to (label, selected, flags, size). Size override should have been rarely be used. Sorry! + - 2015/05/31 (1.40) - renamed GetWindowCollapsed() to IsWindowCollapsed() for consistency. Kept inline redirection function (will obsolete). + - 2015/05/31 (1.40) - renamed IsRectClipped() to IsRectVisible() for consistency. Note that return value is opposite! Kept inline redirection function (will obsolete). + - 2015/05/27 (1.40) - removed the third 'repeat_if_held' parameter from Button() - sorry! it was rarely used and inconsistent. Use PushButtonRepeat(true) / PopButtonRepeat() to enable repeat on desired buttons. + - 2015/05/11 (1.40) - changed BeginPopup() API, takes a string identifier instead of a bool. ImGui needs to manage the open/closed state of popups. Call OpenPopup() to actually set the "open" state of a popup. BeginPopup() returns true if the popup is opened. + - 2015/05/03 (1.40) - removed style.AutoFitPadding, using style.WindowPadding makes more sense (the default values were already the same). + - 2015/04/13 (1.38) - renamed IsClipped() to IsRectClipped(). Kept inline redirection function until 1.50. + - 2015/04/09 (1.38) - renamed ImDrawList::AddArc() to ImDrawList::AddArcFast() for compatibility with future API + - 2015/04/03 (1.38) - removed ImGuiCol_CheckHovered, ImGuiCol_CheckActive, replaced with the more general ImGuiCol_FrameBgHovered, ImGuiCol_FrameBgActive. + - 2014/04/03 (1.38) - removed support for passing -FLT_MAX..+FLT_MAX as the range for a SliderFloat(). Use DragFloat() or Inputfloat() instead. + - 2015/03/17 (1.36) - renamed GetItemBoxMin()/GetItemBoxMax()/IsMouseHoveringBox() to GetItemRectMin()/GetItemRectMax()/IsMouseHoveringRect(). Kept inline redirection function until 1.50. + - 2015/03/15 (1.36) - renamed style.TreeNodeSpacing to style.IndentSpacing, ImGuiStyleVar_TreeNodeSpacing to ImGuiStyleVar_IndentSpacing + - 2015/03/13 (1.36) - renamed GetWindowIsFocused() to IsWindowFocused(). Kept inline redirection function until 1.50. + - 2015/03/08 (1.35) - renamed style.ScrollBarWidth to style.ScrollbarWidth (casing) + - 2015/02/27 (1.34) - renamed OpenNextNode(bool) to SetNextTreeNodeOpened(bool, ImGuiSetCond). Kept inline redirection function until 1.50. + - 2015/02/27 (1.34) - renamed ImGuiSetCondition_*** to ImGuiSetCond_***, and _FirstUseThisSession becomes _Once. + - 2015/02/11 (1.32) - changed text input callback ImGuiTextEditCallback return type from void-->int. reserved for future use, return 0 for now. + - 2015/02/10 (1.32) - renamed GetItemWidth() to CalcItemWidth() to clarify its evolving behavior + - 2015/02/08 (1.31) - renamed GetTextLineSpacing() to GetTextLineHeightWithSpacing() + - 2015/02/01 (1.31) - removed IO.MemReallocFn (unused) + - 2015/01/19 (1.30) - renamed ImGuiStorage::GetIntPtr()/GetFloatPtr() to GetIntRef()/GetIntRef() because Ptr was conflicting with actual pointer storage functions. + - 2015/01/11 (1.30) - big font/image API change! now loads TTF file. allow for multiple fonts. no need for a PNG loader. + (1.30) - removed GetDefaultFontData(). uses io.Fonts->GetTextureData*() API to retrieve uncompressed pixels. + this sequence: + const void* png_data; + unsigned int png_size; + ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size); + // + became: + unsigned char* pixels; + int width, height; + io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); + // + io.Fonts->TexID = (your_texture_identifier); + you now have much more flexibility to load multiple TTF fonts and manage the texture buffer for internal needs. + it is now recommended that you sample the font texture with bilinear interpolation. + (1.30) - added texture identifier in ImDrawCmd passed to your render function (we can now render images). make sure to set io.Fonts->TexID. + (1.30) - removed IO.PixelCenterOffset (unnecessary, can be handled in user projection matrix) + (1.30) - removed ImGui::IsItemFocused() in favor of ImGui::IsItemActive() which handles all widgets + - 2014/12/10 (1.18) - removed SetNewWindowDefaultPos() in favor of new generic API SetNextWindowPos(pos, ImGuiSetCondition_FirstUseEver) + - 2014/11/28 (1.17) - moved IO.Font*** options to inside the IO.Font-> structure (FontYOffset, FontTexUvForWhite, FontBaseScale, FontFallbackGlyph) + - 2014/11/26 (1.17) - reworked syntax of IMGUI_ONCE_UPON_A_FRAME helper macro to increase compiler compatibility + - 2014/11/07 (1.15) - renamed IsHovered() to IsItemHovered() + - 2014/10/02 (1.14) - renamed IMGUI_INCLUDE_IMGUI_USER_CPP to IMGUI_INCLUDE_IMGUI_USER_INL and imgui_user.cpp to imgui_user.inl (more IDE friendly) + - 2014/09/25 (1.13) - removed 'text_end' parameter from IO.SetClipboardTextFn (the string is now always zero-terminated for simplicity) + - 2014/09/24 (1.12) - renamed SetFontScale() to SetWindowFontScale() + - 2014/09/24 (1.12) - moved IM_MALLOC/IM_REALLOC/IM_FREE preprocessor defines to IO.MemAllocFn/IO.MemReallocFn/IO.MemFreeFn + - 2014/08/30 (1.09) - removed IO.FontHeight (now computed automatically) + - 2014/08/30 (1.09) - moved IMGUI_FONT_TEX_UV_FOR_WHITE preprocessor define to IO.FontTexUvForWhite + - 2014/08/28 (1.09) - changed the behavior of IO.PixelCenterOffset following various rendering fixes + + + FREQUENTLY ASKED QUESTIONS (FAQ), TIPS + ====================================== + + Q: How can I help? + A: - If you are experienced enough with ImGui and with C/C++, look at the todo list and see how you want/can help! + - Become a Patron/donate. Convince your company to become a Patron or provide serious funding for development time. + + Q: How do I update to a newer version of ImGui? + A: Overwrite the following files: + imgui.cpp + imgui.h + imgui_demo.cpp + imgui_draw.cpp + imgui_internal.h + stb_rect_pack.h + stb_textedit.h + stb_truetype.h + Don't overwrite imconfig.h if you have made modification to your copy. + Check the "API BREAKING CHANGES" sections for a list of occasional API breaking changes. If you have a problem with a function, search for its name + in the code, there will likely be a comment about it. Please report any issue to the GitHub page! + + + Q: What is ImTextureID and how do I display an image? + A: ImTextureID is a void* used to pass renderer-agnostic texture references around until it hits your render function. + ImGui knows nothing about what those bits represent, it just passes them around. It is up to you to decide what you want the void* to carry! + It could be an identifier to your OpenGL texture (cast GLuint to void*), a pointer to your custom engine material (cast MyMaterial* to void*), etc. + At the end of the chain, your renderer takes this void* to cast it back into whatever it needs to select a current texture to render. + Refer to examples applications, where each renderer (in a imgui_impl_xxxx.cpp file) is treating ImTextureID as a different thing. + (c++ tip: OpenGL uses integers to identify textures. You can safely store an integer into a void*, just cast it to void*, don't take it's address!) + To display a custom image/texture within an ImGui window, you may use ImGui::Image(), ImGui::ImageButton(), ImDrawList::AddImage() functions. + ImGui will generate the geometry and draw calls using the ImTextureID that you passed and which your renderer can use. + It is your responsibility to get textures uploaded to your GPU. + + Q: I integrated ImGui in my engine and the text or lines are blurry.. + A: In your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f). + Also make sure your orthographic projection matrix and io.DisplaySize matches your actual framebuffer dimension. + + Q: I integrated ImGui in my engine and some elements are clipping or disappearing when I move windows around.. + A: Most likely you are mishandling the clipping rectangles in your render function. Rectangles provided by ImGui are defined as (x1=left,y1=top,x2=right,y2=bottom) and NOT as (x1,y1,width,height). + + Q: Can I have multiple widgets with the same label? Can I have widget without a label? (Yes) + A: Yes. A primer on the use of labels/IDs in ImGui.. + + - Elements that are not clickable, such as Text() items don't need an ID. + + - Interactive widgets require state to be carried over multiple frames (most typically ImGui often needs to remember what is the "active" widget). + to do so they need a unique ID. unique ID are typically derived from a string label, an integer index or a pointer. + + Button("OK"); // Label = "OK", ID = hash of "OK" + Button("Cancel"); // Label = "Cancel", ID = hash of "Cancel" + + - ID are uniquely scoped within windows, tree nodes, etc. so no conflict can happen if you have two buttons called "OK" in two different windows + or in two different locations of a tree. + + - If you have a same ID twice in the same location, you'll have a conflict: + + Button("OK"); + Button("OK"); // ID collision! Both buttons will be treated as the same. + + Fear not! this is easy to solve and there are many ways to solve it! + + - When passing a label you can optionally specify extra unique ID information within string itself. This helps solving the simpler collision cases. + use "##" to pass a complement to the ID that won't be visible to the end-user: + + Button("Play"); // Label = "Play", ID = hash of "Play" + Button("Play##foo1"); // Label = "Play", ID = hash of "Play##foo1" (different from above) + Button("Play##foo2"); // Label = "Play", ID = hash of "Play##foo2" (different from above) + + - If you want to completely hide the label, but still need an ID: + + Checkbox("##On", &b); // Label = "", ID = hash of "##On" (no label!) + + - Occasionally/rarely you might want change a label while preserving a constant ID. This allows you to animate labels. + For example you may want to include varying information in a window title bar (and windows are uniquely identified by their ID.. obviously) + Use "###" to pass a label that isn't part of ID: + + Button("Hello###ID"; // Label = "Hello", ID = hash of "ID" + Button("World###ID"; // Label = "World", ID = hash of "ID" (same as above) + + sprintf(buf, "My game (%f FPS)###MyGame"); + Begin(buf); // Variable label, ID = hash of "MyGame" + + - Use PushID() / PopID() to create scopes and avoid ID conflicts within the same Window. + This is the most convenient way of distinguishing ID if you are iterating and creating many UI elements. + You can push a pointer, a string or an integer value. Remember that ID are formed from the concatenation of everything in the ID stack! + + for (int i = 0; i < 100; i++) + { + PushID(i); + Button("Click"); // Label = "Click", ID = hash of integer + "label" (unique) + PopID(); + } + + for (int i = 0; i < 100; i++) + { + MyObject* obj = Objects[i]; + PushID(obj); + Button("Click"); // Label = "Click", ID = hash of pointer + "label" (unique) + PopID(); + } + + for (int i = 0; i < 100; i++) + { + MyObject* obj = Objects[i]; + PushID(obj->Name); + Button("Click"); // Label = "Click", ID = hash of string + "label" (unique) + PopID(); + } + + - More example showing that you can stack multiple prefixes into the ID stack: + + Button("Click"); // Label = "Click", ID = hash of "Click" + PushID("node"); + Button("Click"); // Label = "Click", ID = hash of "node" + "Click" + PushID(my_ptr); + Button("Click"); // Label = "Click", ID = hash of "node" + ptr + "Click" + PopID(); + PopID(); + + - Tree nodes implicitly creates a scope for you by calling PushID(). + + Button("Click"); // Label = "Click", ID = hash of "Click" + if (TreeNode("node")) + { + Button("Click"); // Label = "Click", ID = hash of "node" + "Click" + TreePop(); + } + + - When working with trees, ID are used to preserve the open/close state of each tree node. + Depending on your use cases you may want to use strings, indices or pointers as ID. + e.g. when displaying a single object that may change over time (1-1 relationship), using a static string as ID will preserve your node open/closed state when the targeted object change. + e.g. when displaying a list of objects, using indices or pointers as ID will preserve the node open/closed state differently. experiment and see what makes more sense! + + Q: How can I tell when ImGui wants my mouse/keyboard inputs and when I can pass them to my application? + A: You can read the 'io.WantCaptureXXX' flags in the ImGuiIO structure. Preferably read them after calling ImGui::NewFrame() to avoid those flags lagging by one frame, but either should be fine. + When 'io.WantCaptureMouse' or 'io.WantCaptureKeyboard' flags are set you may want to discard/hide the inputs from the rest of your application. + When 'io.WantInputsCharacters' is set to may want to notify your OS to popup an on-screen keyboard, if available. + ImGui is tracking dragging and widget activity that may occur outside the boundary of a window, so 'io.WantCaptureMouse' is a more accurate and complete than testing for ImGui::IsMouseHoveringAnyWindow(). + (Advanced note: text input releases focus on Return 'KeyDown', so the following Return 'KeyUp' event that your application receive will typically have 'io.WantcaptureKeyboard=false'. + Depending on your application logic it may or not be inconvenient. You might want to track which key-downs were for ImGui (e.g. with an array of bool) and filter out the corresponding key-ups.) + + Q: How can I load a different font than the default? (default is an embedded version of ProggyClean.ttf, rendered at size 13) + A: Use the font atlas to load the TTF file you want: + + ImGuiIO& io = ImGui::GetIO(); + io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels); + io.Fonts->GetTexDataAsRGBA32() or GetTexDataAsAlpha8() + + Q: How can I easily use icons in my application? + A: The most convenient and practical way is to merge an icon font such as FontAwesome inside you main font. Then you can refer to icons within your strings. + Read 'How can I load multiple fonts?' and the file 'extra_fonts/README.txt' for instructions. + + Q: How can I load multiple fonts? + A: Use the font atlas to pack them into a single texture: + (Read extra_fonts/README.txt and the code in ImFontAtlas for more details.) + + ImGuiIO& io = ImGui::GetIO(); + ImFont* font0 = io.Fonts->AddFontDefault(); + ImFont* font1 = io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels); + ImFont* font2 = io.Fonts->AddFontFromFileTTF("myfontfile2.ttf", size_in_pixels); + io.Fonts->GetTexDataAsRGBA32() or GetTexDataAsAlpha8() + // the first loaded font gets used by default + // use ImGui::PushFont()/ImGui::PopFont() to change the font at runtime + + // Options + ImFontConfig config; + config.OversampleH = 3; + config.OversampleV = 1; + config.GlyphExtraSpacing.x = 1.0f; + io.Fonts->LoadFromFileTTF("myfontfile.ttf", size_pixels, &config); + + // Combine multiple fonts into one (e.g. for icon fonts) + ImWchar ranges[] = { 0xf000, 0xf3ff, 0 }; + ImFontConfig config; + config.MergeMode = true; + io.Fonts->AddFontDefault(); + io.Fonts->LoadFromFileTTF("fontawesome-webfont.ttf", 16.0f, &config, ranges); // Merge icon font + io.Fonts->LoadFromFileTTF("myfontfile.ttf", size_pixels, NULL, &config, io.Fonts->GetGlyphRangesJapanese()); // Merge japanese glyphs + + Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic? + A: When loading a font, pass custom Unicode ranges to specify the glyphs to load. + All your strings needs to use UTF-8 encoding. Specifying literal in your source code using a local code page (such as CP-923 for Japanese or CP-1251 for Cyrillic) will not work. + In C++11 you can encode a string literal in UTF-8 by using the u8"hello" syntax. Otherwise you can convert yourself to UTF-8 or load text data from file already saved as UTF-8. + You can also try to remap your local codepage characters to their Unicode codepoint using font->AddRemapChar(), but international users may have problems reading/editing your source code. + + io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels, NULL, io.Fonts->GetGlyphRangesJapanese()); // Load Japanese characters + io.Fonts->GetTexDataAsRGBA32() or GetTexDataAsAlpha8() + io.ImeWindowHandle = MY_HWND; // To input using Microsoft IME, give ImGui the hwnd of your application + + As for text input, depends on you passing the right character code to io.AddInputCharacter(). The example applications do that. + + Q: How can I use the drawing facilities without an ImGui window? (using ImDrawList API) + A: The easiest way is to create a dummy window. Call Begin() with NoTitleBar|NoResize|NoMove|NoScrollbar|NoSavedSettings|NoInputs flag, zero background alpha, + then retrieve the ImDrawList* via GetWindowDrawList() and draw to it in any way you like. + + - tip: the construct 'IMGUI_ONCE_UPON_A_FRAME { ... }' will run the block of code only once a frame. You can use it to quickly add custom UI in the middle of a deep nested inner loop in your code. + - tip: you can create widgets without a Begin()/End() block, they will go in an implicit window called "Debug" + - tip: you can call Begin() multiple times with the same name during the same frame, it will keep appending to the same window. this is also useful to set yourself in the context of another window (to get/set other settings) + - tip: you can call Render() multiple times (e.g for VR renders). + - tip: call and read the ShowTestWindow() code in imgui_demo.cpp for more example of how to use ImGui! + + + ISSUES & TODO-LIST + ================== + Issue numbers (#) refer to github issues listed at https://github.com/ocornut/imgui/issues + The list below consist mostly of notes of things to do before they are requested/discussed by users (at that point it usually happens on the github) + + - doc: add a proper documentation+regression testing system (#435) + - window: add a way for very transient windows (non-saved, temporary overlay over hundreds of objects) to "clean" up from the global window list. perhaps a lightweight explicit cleanup pass. + - window: calling SetNextWindowSize() every frame with <= 0 doesn't do anything, may be useful to allow (particularly when used for a single axis) (#690) + - window: auto-fit feedback loop when user relies on any dynamic layout (window width multiplier, column) appears weird to end-user. clarify. + - window: allow resizing of child windows (possibly given min/max for each axis?) + - window: background options for child windows, border option (disable rounding) + - window: add a way to clear an existing window instead of appending (e.g. for tooltip override using a consistent api rather than the deferred tooltip) + - window: resizing from any sides? + mouse cursor directives for app. +!- window: begin with *p_open == false should return false. + - window: get size/pos helpers given names (see discussion in #249) + - window: a collapsed window can be stuck behind the main menu bar? + - window: when window is small, prioritize resize button over close button. + - window: detect extra End() call that pop the "Debug" window out and assert at call site instead of later. + - window/tooltip: allow to set the width of a tooltip to allow TextWrapped() etc. while keeping the height automatic. + - window: increase minimum size of a window with menus or fix the menu rendering so that it doesn't look odd. + - draw-list: maintaining bounding box per command would allow to merge draw command when clipping isn't relied on (typical non-scrolling window or non-overflowing column would merge with previous command). +!- scrolling: allow immediately effective change of scroll if we haven't appended items yet + - splitter/separator: formalize the splitter idiom into an official api (we want to handle n-way split) (#319) + - widgets: display mode: widget-label, label-widget (aligned on column or using fixed size), label-newline-tab-widget etc. + - widgets: clean up widgets internal toward exposing everything. + - widgets: add disabled and read-only modes (#211) + - main: considering adding an Init() function? some constructs are awkward in the implementation because of the lack of them. +!- main: make it so that a frame with no window registered won't refocus every window on subsequent frames (~bump LastFrameActive of all windows). + - main: IsItemHovered() make it more consistent for various type of widgets, widgets with multiple components, etc. also effectively IsHovered() region sometimes differs from hot region, e.g tree nodes + - main: IsItemHovered() info stored in a stack? so that 'if TreeNode() { Text; TreePop; } if IsHovered' return the hover state of the TreeNode? + - input text: clean up the mess caused by converting UTF-8 <> wchar. the code is rather inefficient right now and super fragile. + - input text: reorganize event handling, allow CharFilter to modify buffers, allow multiple events? (#541) + - input text: expose CursorPos in char filter event (#816) + - input text: flag to disable live update of the user buffer (also applies to float/int text input) + - input text: resize behavior - field could stretch when being edited? hover tooltip shows more text? + - input text: add ImGuiInputTextFlags_EnterToApply? (off #218) + - input text: add discard flag (e.g. ImGuiInputTextFlags_DiscardActiveBuffer) or make it easier to clear active focus for text replacement during edition (#725) + - input text multi-line: don't directly call AddText() which does an unnecessary vertex reserve for character count prior to clipping. and/or more line-based clipping to AddText(). and/or reorganize TextUnformatted/RenderText for more efficiency for large text (e.g TextUnformatted could clip and log separately, etc). + - input text multi-line: way to dynamically grow the buffer without forcing the user to initially allocate for worse case (follow up on #200) + - input text multi-line: line numbers? status bar? (follow up on #200) + - input text multi-line: behave better when user changes input buffer while editing is active (even though it is illegal behavior). namely, the change of buffer can create a scrollbar glitch (#725) + - input text: allow centering/positioning text so that ctrl+clicking Drag or Slider keeps the textual value at the same pixel position. + - input number: optional range min/max for Input*() functions + - input number: holding [-]/[+] buttons could increase the step speed non-linearly (or user-controlled) + - input number: use mouse wheel to step up/down + - input number: applying arithmetics ops (+,-,*,/) messes up with text edit undo stack. + - button: provide a button that looks framed. + - text: proper alignment options + - image/image button: misalignment on padded/bordered button? + - image/image button: parameters are confusing, image() has tint_col,border_col whereas imagebutton() has bg_col/tint_col. Even thou they are different parameters ordering could be more consistent. can we fix that? + - layout: horizontal layout helper (#97) + - layout: horizontal flow until no space left (#404) + - layout: more generic alignment state (left/right/centered) for single items? + - layout: clean up the InputFloatN/SliderFloatN/ColorEdit4 layout code. item width should include frame padding. + - layout: BeginGroup() needs a border option. + - columns: declare column set (each column: fixed size, %, fill, distribute default size among fills) (#513, #125) + - columns: add a conditional parameter to SetColumnOffset() (#513, #125) + - columns: separator function or parameter that works within the column (currently Separator() bypass all columns) (#125) + - columns: columns header to act as button (~sort op) and allow resize/reorder (#513, #125) + - columns: user specify columns size (#513, #125) + - columns: flag to add horizontal separator above/below? + - columns/layout: setup minimum line height (equivalent of automatically calling AlignFirstTextHeightToWidgets) + - combo: sparse combo boxes (via function call?) / iterators + - combo: contents should extends to fit label if combo widget is small + - combo/listbox: keyboard control. need InputText-like non-active focus + key handling. considering keyboard for custom listbox (pr #203) + - listbox: multiple selection + - listbox: user may want to initial scroll to focus on the one selected value? + - listbox: keyboard navigation. + - listbox: scrolling should track modified selection. +!- popups/menus: clarify usage of popups id, how MenuItem/Selectable closing parent popups affects the ID, etc. this is quite fishy needs improvement! (#331, #402) + - popups: add variant using global identifier similar to Begin/End (#402) + - popups: border options. richer api like BeginChild() perhaps? (#197) + - tooltip: tooltip that doesn't fit in entire screen seems to lose their "last preferred button" and may teleport when moving mouse + - menus: local shortcuts, global shortcuts (#456, #126) + - menus: icons + - menus: menubars: some sort of priority / effect of main menu-bar on desktop size? + - menus: calling BeginMenu() twice with a same name doesn't seem to append nicely + - statusbar: add a per-window status bar helper similar to what menubar does. + - tabs (#261, #351) + - separator: separator on the initial position of a window is not visible (cursorpos.y <= clippos.y) +!- color: the color helpers/typing is a mess and needs sorting out. + - color: add a better color picker (#346) + - node/graph editor (#306) + - pie menus patterns (#434) + - drag'n drop, dragging helpers (carry dragging info, visualize drag source before clicking, drop target, etc.) (#143, #479) + - plot: PlotLines() should use the polygon-stroke facilities (currently issues with averaging normals) + - plot: make it easier for user to draw extra stuff into the graph (e.g: draw basis, highlight certain points, 2d plots, multiple plots) + - plot: "smooth" automatic scale over time, user give an input 0.0(full user scale) 1.0(full derived from value) + - plot: add a helper e.g. Plot(char* label, float value, float time_span=2.0f) that stores values and Plot them for you - probably another function name. and/or automatically allow to plot ANY displayed value (more reliance on stable ID) + - slider: allow using the [-]/[+] buttons used by InputFloat()/InputInt() + - slider: initial absolute click is imprecise. change to relative movement slider (same as scrollbar). + - slider: add dragging-based widgets to edit values with mouse (on 2 axises), saving screen real-estate. + - slider: tint background based on value (e.g. v_min -> v_max, or use 0.0f either side of the sign) + - slider & drag: int data passing through a float + - drag float: up/down axis + - drag float: added leeway on edge (e.g. a few invisible steps past the clamp limits) + - tree node / optimization: avoid formatting when clipped. + - tree node: tree-node/header right-most side doesn't take account of horizontal scrolling. + - tree node: add treenode/treepush int variants? not there because (void*) cast from int warns on some platforms/settings? + - tree node: try to apply scrolling at time of TreePop() if node was just opened and end of node is past scrolling limits? + - tree node / selectable render mismatch which is visible if you use them both next to each other (e.g. cf. property viewer) + - tree node: tweak color scheme to distinguish headers from selected tree node (#581) + - textwrapped: figure out better way to use TextWrapped() in an always auto-resize context (tooltip, etc.) (#249) + - settings: write more decent code to allow saving/loading new fields + - settings: api for per-tool simple persistent data (bool,int,float,columns sizes,etc.) in .ini file + - style: add window shadows. + - style/optimization: store rounded corners in texture to use 1 quad per corner (filled and wireframe) to lower the cost of rounding. + - style: color-box not always square? + - style: a concept of "compact style" that the end-user can easily rely on (e.g. PushStyleCompact()?) that maps to other settings? avoid implementing duplicate helpers such as SmallCheckbox(), etc. + - style: try to make PushStyleVar() more robust to incorrect parameters (to be more friendly to edit & continues situation). + - style: global scale setting. + - style: WindowPadding needs to be EVEN needs the 0.5 multiplier probably have a subtle effect on clip rectangle + - text: simple markup language for color change? + - font: dynamic font atlas to avoid baking huge ranges into bitmap and make scaling easier. + - font: small opt: for monospace font (like the defalt one) we can trim IndexXAdvance as long as trailing value is == FallbackXAdvance + - font: add support for kerning, probably optional. perhaps default to (32..128)^2 matrix ~ 36KB then hash fallback. + - font: add a simpler CalcTextSizeA() api? current one ok but not welcome if user needs to call it directly (without going through ImGui::CalcTextSize) + - font: fix AddRemapChar() to work before font has been built. + - log: LogButtons() options for specifying depth and/or hiding depth slider + - log: have more control over the log scope (e.g. stop logging when leaving current tree node scope) + - log: be able to log anything (e.g. right-click on a window/tree-node, shows context menu? log into tty/file/clipboard) + - log: let user copy any window content to clipboard easily (CTRL+C on windows? while moving it? context menu?). code is commented because it fails with multiple Begin/End pairs. + - filters: set a current filter that tree node can automatically query to hide themselves + - filters: handle wildcards (with implicit leading/trailing *), regexps + - shortcuts: add a shortcut api, e.g. parse "&Save" and/or "Save (CTRL+S)", pass in to widgets or provide simple ways to use (button=activate, input=focus) +!- keyboard: tooltip & combo boxes are messing up / not honoring keyboard tabbing + - keyboard: full keyboard navigation and focus. (#323) + - focus: preserve ActiveId/focus stack state, e.g. when opening a menu and close it, previously selected InputText() focus gets restored (#622) + - focus: SetKeyboardFocusHere() on with >= 0 offset could be done on same frame (else latch and modulate on beginning of next frame) + - input: rework IO system to be able to pass actual ordered/timestamped events. (~#335, #71) + - input: allow to decide and pass explicit double-clicks (e.g. for windows by the CS_DBLCLKS style). + - input: support track pad style scrolling & slider edit. + - misc: provide a way to compile out the entire implementation while providing a dummy API (e.g. #define IMGUI_DUMMY_IMPL) + - misc: double-clicking on title bar to minimize isn't consistent, perhaps move to single-click on left-most collapse icon? + - misc: provide HoveredTime and ActivatedTime to ease the creation of animations. + - style editor: have a more global HSV setter (e.g. alter hue on all elements). consider replacing active/hovered by offset in HSV space? (#438) + - style editor: color child window height expressed in multiple of line height. + - remote: make a system like RemoteImGui first-class citizen/project (#75) + - drawlist: move Font, FontSize, FontTexUvWhitePixel inside ImDrawList and make it self-contained (apart from drawing settings?) + - drawlist: end-user probably can't call Clear() directly because we expect a texture to be pushed in the stack. + - examples: directx9: save/restore device state more thoroughly. + - examples: window minimize, maximize (#583) + - optimization: add a flag to disable most of rendering, for the case where the user expect to skip it (#335) + - optimization: use another hash function than crc32, e.g. FNV1a + - optimization/render: merge command-lists with same clip-rect into one even if they aren't sequential? (as long as in-between clip rectangle don't overlap)? + - optimization: turn some the various stack vectors into statically-sized arrays + - optimization: better clipping for multi-component widgets +*/ + +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include "imgui.h" +#define IMGUI_DEFINE_MATH_OPERATORS +#define IMGUI_DEFINE_PLACEMENT_NEW +#include "imgui_internal.h" + +#include // toupper, isprint +#include // NULL, malloc, free, qsort, atoi +#include // vsnprintf, sscanf, printf +#include // INT_MIN, INT_MAX +#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +#include // intptr_t +#else +#include // intptr_t +#endif + +#ifdef _MSC_VER +#pragma warning (disable: 4127) // condition expression is constant +#pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff) +#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +#endif + +// Clang warnings with -Weverything +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +#pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants ok. +#pragma clang diagnostic ignored "-Wformat-nonliteral" // warning : format string is not a string literal // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code. +#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +#pragma clang diagnostic ignored "-Wglobal-constructors" // warning : declaration requires a global destructor // similar to above, not sure what the exact difference it. +#pragma clang diagnostic ignored "-Wsign-conversion" // warning : implicit conversion changes signedness // +#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' // +#elif defined(__GNUC__) +#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used +#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +#pragma GCC diagnostic ignored "-Wformat" // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*' +#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +#pragma GCC diagnostic ignored "-Wcast-qual" // warning: cast from type 'xxxx' to type 'xxxx' casts away qualifiers +#endif + +//------------------------------------------------------------------------- +// Forward Declarations +//------------------------------------------------------------------------- + +static void LogRenderedText(const ImVec2& ref_pos, const char* text, const char* text_end = NULL); + +static void PushMultiItemsWidths(int components, float w_full = 0.0f); +static float GetDraggedColumnOffset(int column_index); + +static bool IsKeyPressedMap(ImGuiKey key, bool repeat = true); + +static ImFont* GetDefaultFont(); +static void SetCurrentFont(ImFont* font); +static void SetCurrentWindow(ImGuiWindow* window); +static void SetWindowScrollY(ImGuiWindow* window, float new_scroll_y); +static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiSetCond cond); +static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiSetCond cond); +static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiSetCond cond); +static ImGuiWindow* FindHoveredWindow(ImVec2 pos, bool excluding_childs); +static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags); +static inline bool IsWindowContentHoverable(ImGuiWindow* window); +static void ClearSetNextWindowData(); +static void CheckStacksSize(ImGuiWindow* window, bool write); +static void Scrollbar(ImGuiWindow* window, bool horizontal); + +static void AddDrawListToRenderList(ImVector& out_render_list, ImDrawList* draw_list); +static void AddWindowToRenderList(ImVector& out_render_list, ImGuiWindow* window); +static void AddWindowToSortedBuffer(ImVector& out_sorted_windows, ImGuiWindow* window); + +static ImGuiIniData* FindWindowSettings(const char* name); +static ImGuiIniData* AddWindowSettings(const char* name); +static void LoadIniSettingsFromDisk(const char* ini_filename); +static void SaveIniSettingsToDisk(const char* ini_filename); +static void MarkIniSettingsDirty(); + +static void PushColumnClipRect(int column_index = -1); +static ImRect GetVisibleRect(); + +static bool BeginPopupEx(const char* str_id, ImGuiWindowFlags extra_flags); +static void CloseInactivePopups(); +static void ClosePopupToLevel(int remaining); +static void ClosePopup(ImGuiID id); +static bool IsPopupOpen(ImGuiID id); +static ImGuiWindow* GetFrontMostModalRootWindow(); +static ImVec2 FindBestPopupWindowPos(const ImVec2& base_pos, const ImVec2& size, int* last_dir, const ImRect& rect_to_avoid); + +static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiTextEditCallback callback, void* user_data); +static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end); +static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL, ImVec2* out_offset = NULL, bool stop_on_new_line = false); + +static inline void DataTypeFormatString(ImGuiDataType data_type, void* data_ptr, const char* display_format, char* buf, int buf_size); +static inline void DataTypeFormatString(ImGuiDataType data_type, void* data_ptr, int decimal_precision, char* buf, int buf_size); +static void DataTypeApplyOp(ImGuiDataType data_type, int op, void* value1, const void* value2); +static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* data_ptr, const char* scalar_format); + +//----------------------------------------------------------------------------- +// Platform dependent default implementations +//----------------------------------------------------------------------------- + +static const char* GetClipboardTextFn_DefaultImpl(void* user_data); +static void SetClipboardTextFn_DefaultImpl(void* user_data, const char* text); +static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y); + +//----------------------------------------------------------------------------- +// Context +//----------------------------------------------------------------------------- + +// Default font atlas storage . +// New contexts always point by default to this font atlas. It can be changed by reassigning the GetIO().Fonts variable. +static ImFontAtlas GImDefaultFontAtlas; + +// Default context storage + current context pointer. +// Implicitely used by all ImGui functions. Always assumed to be != NULL. Change to a different context by calling ImGui::SetCurrentContext() +// ImGui is currently not thread-safe because of this variable. If you want thread-safety to allow N threads to access N different contexts, you might work around it by: +// - Having multiple instances of the ImGui code compiled inside different namespace (easiest/safest, if you have a finite number of contexts) +// - or: Changing this variable to be TLS. You may #define GImGui in imconfig.h for further custom hackery. Future development aim to make this context pointer explicit to all calls. Also read https://github.com/ocornut/imgui/issues/586 +#ifndef GImGui +static ImGuiContext GImDefaultContext; +ImGuiContext* GImGui = &GImDefaultContext; +#endif + +//----------------------------------------------------------------------------- +// User facing structures +//----------------------------------------------------------------------------- + +ImGuiStyle::ImGuiStyle() +{ + Alpha = 1.0f; // Global alpha applies to everything in ImGui + WindowPadding = ImVec2(8,8); // Padding within a window + WindowMinSize = ImVec2(32,32); // Minimum window size + WindowRounding = 9.0f; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowTitleAlign = ImVec2(0.0f,0.5f);// Alignment for title bar text + ChildWindowRounding = 0.0f; // Radius of child window corners rounding. Set to 0.0f to have rectangular child windows + FramePadding = ImVec2(4,3); // Padding within a framed rectangle (used by most widgets) + FrameRounding = 0.0f; // Radius of frame corners rounding. Set to 0.0f to have rectangular frames (used by most widgets). + ItemSpacing = ImVec2(8,4); // Horizontal and vertical spacing between widgets/lines + ItemInnerSpacing = ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + TouchExtraPadding = ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + IndentSpacing = 21.0f; // Horizontal spacing when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + ColumnsMinSpacing = 6.0f; // Minimum horizontal spacing between two columns + ScrollbarSize = 16.0f; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarRounding = 9.0f; // Radius of grab corners rounding for scrollbar + GrabMinSize = 10.0f; // Minimum width/height of a grab box for slider/scrollbar + GrabRounding = 0.0f; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + ButtonTextAlign = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text. + DisplayWindowPadding = ImVec2(22,22); // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + DisplaySafeAreaPadding = ImVec2(4,4); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really short on CPU/GPU. + AntiAliasedShapes = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + CurveTessellationTol = 1.25f; // Tessellation tolerance. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + + Colors[ImGuiCol_Text] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f); + Colors[ImGuiCol_TextDisabled] = ImVec4(0.60f, 0.60f, 0.60f, 1.00f); + Colors[ImGuiCol_WindowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.70f); + Colors[ImGuiCol_ChildWindowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + Colors[ImGuiCol_PopupBg] = ImVec4(0.05f, 0.05f, 0.10f, 0.90f); + Colors[ImGuiCol_Border] = ImVec4(0.70f, 0.70f, 0.70f, 0.65f); + Colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + Colors[ImGuiCol_FrameBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.30f); // Background of checkbox, radio button, plot, slider, text input + Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.90f, 0.80f, 0.80f, 0.40f); + Colors[ImGuiCol_FrameBgActive] = ImVec4(0.90f, 0.65f, 0.65f, 0.45f); + Colors[ImGuiCol_TitleBg] = ImVec4(0.27f, 0.27f, 0.54f, 0.83f); + Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.40f, 0.40f, 0.80f, 0.20f); + Colors[ImGuiCol_TitleBgActive] = ImVec4(0.32f, 0.32f, 0.63f, 0.87f); + Colors[ImGuiCol_MenuBarBg] = ImVec4(0.40f, 0.40f, 0.55f, 0.80f); + Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.20f, 0.25f, 0.30f, 0.60f); + Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.40f, 0.40f, 0.80f, 0.30f); + Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.80f, 0.40f); + Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.80f, 0.50f, 0.50f, 0.40f); + Colors[ImGuiCol_ComboBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.99f); + Colors[ImGuiCol_CheckMark] = ImVec4(0.90f, 0.90f, 0.90f, 0.50f); + Colors[ImGuiCol_SliderGrab] = ImVec4(1.00f, 1.00f, 1.00f, 0.30f); + Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.80f, 0.50f, 0.50f, 1.00f); + Colors[ImGuiCol_Button] = ImVec4(0.67f, 0.40f, 0.40f, 0.60f); + Colors[ImGuiCol_ButtonHovered] = ImVec4(0.67f, 0.40f, 0.40f, 1.00f); + Colors[ImGuiCol_ButtonActive] = ImVec4(0.80f, 0.50f, 0.50f, 1.00f); + Colors[ImGuiCol_Header] = ImVec4(0.40f, 0.40f, 0.90f, 0.45f); + Colors[ImGuiCol_HeaderHovered] = ImVec4(0.45f, 0.45f, 0.90f, 0.80f); + Colors[ImGuiCol_HeaderActive] = ImVec4(0.53f, 0.53f, 0.87f, 0.80f); + Colors[ImGuiCol_Column] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f); + Colors[ImGuiCol_ColumnHovered] = ImVec4(0.70f, 0.60f, 0.60f, 1.00f); + Colors[ImGuiCol_ColumnActive] = ImVec4(0.90f, 0.70f, 0.70f, 1.00f); + Colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 0.30f); + Colors[ImGuiCol_ResizeGripHovered] = ImVec4(1.00f, 1.00f, 1.00f, 0.60f); + Colors[ImGuiCol_ResizeGripActive] = ImVec4(1.00f, 1.00f, 1.00f, 0.90f); + Colors[ImGuiCol_CloseButton] = ImVec4(0.50f, 0.50f, 0.90f, 0.50f); + Colors[ImGuiCol_CloseButtonHovered] = ImVec4(0.70f, 0.70f, 0.90f, 0.60f); + Colors[ImGuiCol_CloseButtonActive] = ImVec4(0.70f, 0.70f, 0.70f, 1.00f); + Colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); + Colors[ImGuiCol_PlotLinesHovered] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); + Colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); + Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f); + Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.00f, 0.00f, 1.00f, 0.35f); + Colors[ImGuiCol_ModalWindowDarkening] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f); +} + +ImGuiIO::ImGuiIO() +{ + // Most fields are initialized with zero + memset(this, 0, sizeof(*this)); + + DisplaySize = ImVec2(-1.0f, -1.0f); + DeltaTime = 1.0f/60.0f; + IniSavingRate = 5.0f; + IniFilename = "imgui.ini"; + LogFilename = "imgui_log.txt"; + Fonts = &GImDefaultFontAtlas; + FontGlobalScale = 1.0f; + FontDefault = NULL; + DisplayFramebufferScale = ImVec2(1.0f, 1.0f); + MousePos = ImVec2(-1,-1); + MousePosPrev = ImVec2(-1,-1); + MouseDoubleClickTime = 0.30f; + MouseDoubleClickMaxDist = 6.0f; + MouseDragThreshold = 6.0f; + for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++) + MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f; + for (int i = 0; i < IM_ARRAYSIZE(KeysDownDuration); i++) + KeysDownDuration[i] = KeysDownDurationPrev[i] = -1.0f; + for (int i = 0; i < ImGuiKey_COUNT; i++) + KeyMap[i] = -1; + KeyRepeatDelay = 0.250f; + KeyRepeatRate = 0.050f; + UserData = NULL; + + // User functions + RenderDrawListsFn = NULL; + MemAllocFn = malloc; + MemFreeFn = free; + GetClipboardTextFn = GetClipboardTextFn_DefaultImpl; // Platform dependent default implementations + SetClipboardTextFn = SetClipboardTextFn_DefaultImpl; + ClipboardUserData = NULL; + ImeSetInputScreenPosFn = ImeSetInputScreenPosFn_DefaultImpl; + + // Set OS X style defaults based on __APPLE__ compile time flag +#ifdef __APPLE__ + OSXBehaviors = true; +#endif +} + +// Pass in translated ASCII characters for text input. +// - with glfw you can get those from the callback set in glfwSetCharCallback() +// - on Windows you can get those using ToAscii+keyboard state, or via the WM_CHAR message +void ImGuiIO::AddInputCharacter(ImWchar c) +{ + const int n = ImStrlenW(InputCharacters); + if (n + 1 < IM_ARRAYSIZE(InputCharacters)) + { + InputCharacters[n] = c; + InputCharacters[n+1] = '\0'; + } +} + +void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars) +{ + // We can't pass more wchars than ImGuiIO::InputCharacters[] can hold so don't convert more + const int wchars_buf_len = sizeof(ImGuiIO::InputCharacters) / sizeof(ImWchar); + ImWchar wchars[wchars_buf_len]; + ImTextStrFromUtf8(wchars, wchars_buf_len, utf8_chars, NULL); + for (int i = 0; i < wchars_buf_len && wchars[i] != 0; i++) + AddInputCharacter(wchars[i]); +} + +//----------------------------------------------------------------------------- +// HELPERS +//----------------------------------------------------------------------------- + +#define IM_F32_TO_INT8_UNBOUND(_VAL) ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f))) // Unsaturated, for display purpose +#define IM_F32_TO_INT8_SAT(_VAL) ((int)(ImSaturate(_VAL) * 255.0f + 0.5f)) // Saturated, always output 0..255 + +// Play it nice with Windows users. Notepad in 2015 still doesn't display text data with Unix-style \n. +#ifdef _WIN32 +#define IM_NEWLINE "\r\n" +#else +#define IM_NEWLINE "\n" +#endif + +bool ImIsPointInTriangle(const ImVec2& p, const ImVec2& a, const ImVec2& b, const ImVec2& c) +{ + bool b1 = ((p.x - b.x) * (a.y - b.y) - (p.y - b.y) * (a.x - b.x)) < 0.0f; + bool b2 = ((p.x - c.x) * (b.y - c.y) - (p.y - c.y) * (b.x - c.x)) < 0.0f; + bool b3 = ((p.x - a.x) * (c.y - a.y) - (p.y - a.y) * (c.x - a.x)) < 0.0f; + return ((b1 == b2) && (b2 == b3)); +} + +int ImStricmp(const char* str1, const char* str2) +{ + int d; + while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; } + return d; +} + +int ImStrnicmp(const char* str1, const char* str2, int count) +{ + int d = 0; + while (count > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; count--; } + return d; +} + +void ImStrncpy(char* dst, const char* src, int count) +{ + if (count < 1) return; + strncpy(dst, src, (size_t)count); + dst[count-1] = 0; +} + +char* ImStrdup(const char *str) +{ + size_t len = strlen(str) + 1; + void* buff = ImGui::MemAlloc(len); + return (char*)memcpy(buff, (const void*)str, len); +} + +int ImStrlenW(const ImWchar* str) +{ + int n = 0; + while (*str++) n++; + return n; +} + +const ImWchar* ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin) // find beginning-of-line +{ + while (buf_mid_line > buf_begin && buf_mid_line[-1] != '\n') + buf_mid_line--; + return buf_mid_line; +} + +const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end) +{ + if (!needle_end) + needle_end = needle + strlen(needle); + + const char un0 = (char)toupper(*needle); + while ((!haystack_end && *haystack) || (haystack_end && haystack < haystack_end)) + { + if (toupper(*haystack) == un0) + { + const char* b = needle + 1; + for (const char* a = haystack + 1; b < needle_end; a++, b++) + if (toupper(*a) != toupper(*b)) + break; + if (b == needle_end) + return haystack; + } + haystack++; + } + return NULL; +} + + +// MSVC version appears to return -1 on overflow, whereas glibc appears to return total count (which may be >= buf_size). +// Ideally we would test for only one of those limits at runtime depending on the behavior the vsnprintf(), but trying to deduct it at compile time sounds like a pandora can of worm. +int ImFormatString(char* buf, int buf_size, const char* fmt, ...) +{ + IM_ASSERT(buf_size > 0); + va_list args; + va_start(args, fmt); + int w = vsnprintf(buf, buf_size, fmt, args); + va_end(args); + if (w == -1 || w >= buf_size) + w = buf_size - 1; + buf[w] = 0; + return w; +} + +int ImFormatStringV(char* buf, int buf_size, const char* fmt, va_list args) +{ + IM_ASSERT(buf_size > 0); + int w = vsnprintf(buf, buf_size, fmt, args); + if (w == -1 || w >= buf_size) + w = buf_size - 1; + buf[w] = 0; + return w; +} + +// Pass data_size==0 for zero-terminated strings +// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements. +ImU32 ImHash(const void* data, int data_size, ImU32 seed) +{ + static ImU32 crc32_lut[256] = { 0 }; + if (!crc32_lut[1]) + { + const ImU32 polynomial = 0xEDB88320; + for (ImU32 i = 0; i < 256; i++) + { + ImU32 crc = i; + for (ImU32 j = 0; j < 8; j++) + crc = (crc >> 1) ^ (ImU32(-int(crc & 1)) & polynomial); + crc32_lut[i] = crc; + } + } + + seed = ~seed; + ImU32 crc = seed; + const unsigned char* current = (const unsigned char*)data; + + if (data_size > 0) + { + // Known size + while (data_size--) + crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ *current++]; + } + else + { + // Zero-terminated string + while (unsigned char c = *current++) + { + // We support a syntax of "label###id" where only "###id" is included in the hash, and only "label" gets displayed. + // Because this syntax is rarely used we are optimizing for the common case. + // - If we reach ### in the string we discard the hash so far and reset to the seed. + // - We don't do 'current += 2; continue;' after handling ### to keep the code smaller. + if (c == '#' && current[0] == '#' && current[1] == '#') + crc = seed; + crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c]; + } + } + return ~crc; +} + +//----------------------------------------------------------------------------- +// ImText* helpers +//----------------------------------------------------------------------------- + +// Convert UTF-8 to 32-bits character, process single character input. +// Based on stb_from_utf8() from github.com/nothings/stb/ +// We handle UTF-8 decoding error by skipping forward. +int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end) +{ + unsigned int c = (unsigned int)-1; + const unsigned char* str = (const unsigned char*)in_text; + if (!(*str & 0x80)) + { + c = (unsigned int)(*str++); + *out_char = c; + return 1; + } + if ((*str & 0xe0) == 0xc0) + { + *out_char = 0xFFFD; // will be invalid but not end of string + if (in_text_end && in_text_end - (const char*)str < 2) return 1; + if (*str < 0xc2) return 2; + c = (unsigned int)((*str++ & 0x1f) << 6); + if ((*str & 0xc0) != 0x80) return 2; + c += (*str++ & 0x3f); + *out_char = c; + return 2; + } + if ((*str & 0xf0) == 0xe0) + { + *out_char = 0xFFFD; // will be invalid but not end of string + if (in_text_end && in_text_end - (const char*)str < 3) return 1; + if (*str == 0xe0 && (str[1] < 0xa0 || str[1] > 0xbf)) return 3; + if (*str == 0xed && str[1] > 0x9f) return 3; // str[1] < 0x80 is checked below + c = (unsigned int)((*str++ & 0x0f) << 12); + if ((*str & 0xc0) != 0x80) return 3; + c += (unsigned int)((*str++ & 0x3f) << 6); + if ((*str & 0xc0) != 0x80) return 3; + c += (*str++ & 0x3f); + *out_char = c; + return 3; + } + if ((*str & 0xf8) == 0xf0) + { + *out_char = 0xFFFD; // will be invalid but not end of string + if (in_text_end && in_text_end - (const char*)str < 4) return 1; + if (*str > 0xf4) return 4; + if (*str == 0xf0 && (str[1] < 0x90 || str[1] > 0xbf)) return 4; + if (*str == 0xf4 && str[1] > 0x8f) return 4; // str[1] < 0x80 is checked below + c = (unsigned int)((*str++ & 0x07) << 18); + if ((*str & 0xc0) != 0x80) return 4; + c += (unsigned int)((*str++ & 0x3f) << 12); + if ((*str & 0xc0) != 0x80) return 4; + c += (unsigned int)((*str++ & 0x3f) << 6); + if ((*str & 0xc0) != 0x80) return 4; + c += (*str++ & 0x3f); + // utf-8 encodings of values used in surrogate pairs are invalid + if ((c & 0xFFFFF800) == 0xD800) return 4; + *out_char = c; + return 4; + } + *out_char = 0; + return 0; +} + +int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, const char* in_text_end, const char** in_text_remaining) +{ + ImWchar* buf_out = buf; + ImWchar* buf_end = buf + buf_size; + while (buf_out < buf_end-1 && (!in_text_end || in_text < in_text_end) && *in_text) + { + unsigned int c; + in_text += ImTextCharFromUtf8(&c, in_text, in_text_end); + if (c == 0) + break; + if (c < 0x10000) // FIXME: Losing characters that don't fit in 2 bytes + *buf_out++ = (ImWchar)c; + } + *buf_out = 0; + if (in_text_remaining) + *in_text_remaining = in_text; + return (int)(buf_out - buf); +} + +int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end) +{ + int char_count = 0; + while ((!in_text_end || in_text < in_text_end) && *in_text) + { + unsigned int c; + in_text += ImTextCharFromUtf8(&c, in_text, in_text_end); + if (c == 0) + break; + if (c < 0x10000) + char_count++; + } + return char_count; +} + +// Based on stb_to_utf8() from github.com/nothings/stb/ +static inline int ImTextCharToUtf8(char* buf, int buf_size, unsigned int c) +{ + if (c < 0x80) + { + buf[0] = (char)c; + return 1; + } + if (c < 0x800) + { + if (buf_size < 2) return 0; + buf[0] = (char)(0xc0 + (c >> 6)); + buf[1] = (char)(0x80 + (c & 0x3f)); + return 2; + } + if (c >= 0xdc00 && c < 0xe000) + { + return 0; + } + if (c >= 0xd800 && c < 0xdc00) + { + if (buf_size < 4) return 0; + buf[0] = (char)(0xf0 + (c >> 18)); + buf[1] = (char)(0x80 + ((c >> 12) & 0x3f)); + buf[2] = (char)(0x80 + ((c >> 6) & 0x3f)); + buf[3] = (char)(0x80 + ((c ) & 0x3f)); + return 4; + } + //else if (c < 0x10000) + { + if (buf_size < 3) return 0; + buf[0] = (char)(0xe0 + (c >> 12)); + buf[1] = (char)(0x80 + ((c>> 6) & 0x3f)); + buf[2] = (char)(0x80 + ((c ) & 0x3f)); + return 3; + } +} + +static inline int ImTextCountUtf8BytesFromChar(unsigned int c) +{ + if (c < 0x80) return 1; + if (c < 0x800) return 2; + if (c >= 0xdc00 && c < 0xe000) return 0; + if (c >= 0xd800 && c < 0xdc00) return 4; + return 3; +} + +int ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, const ImWchar* in_text_end) +{ + char* buf_out = buf; + const char* buf_end = buf + buf_size; + while (buf_out < buf_end-1 && (!in_text_end || in_text < in_text_end) && *in_text) + { + unsigned int c = (unsigned int)(*in_text++); + if (c < 0x80) + *buf_out++ = (char)c; + else + buf_out += ImTextCharToUtf8(buf_out, (int)(buf_end-buf_out-1), c); + } + *buf_out = 0; + return (int)(buf_out - buf); +} + +int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end) +{ + int bytes_count = 0; + while ((!in_text_end || in_text < in_text_end) && *in_text) + { + unsigned int c = (unsigned int)(*in_text++); + if (c < 0x80) + bytes_count++; + else + bytes_count += ImTextCountUtf8BytesFromChar(c); + } + return bytes_count; +} + +ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in) +{ + float s = 1.0f/255.0f; + return ImVec4( + ((in >> IM_COL32_R_SHIFT) & 0xFF) * s, + ((in >> IM_COL32_G_SHIFT) & 0xFF) * s, + ((in >> IM_COL32_B_SHIFT) & 0xFF) * s, + ((in >> IM_COL32_A_SHIFT) & 0xFF) * s); +} + +ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in) +{ + ImU32 out; + out = ((ImU32)IM_F32_TO_INT8_SAT(in.x)) << IM_COL32_R_SHIFT; + out |= ((ImU32)IM_F32_TO_INT8_SAT(in.y)) << IM_COL32_G_SHIFT; + out |= ((ImU32)IM_F32_TO_INT8_SAT(in.z)) << IM_COL32_B_SHIFT; + out |= ((ImU32)IM_F32_TO_INT8_SAT(in.w)) << IM_COL32_A_SHIFT; + return out; +} + +ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul) +{ + ImVec4 c = GImGui->Style.Colors[idx]; + c.w *= GImGui->Style.Alpha * alpha_mul; + return ColorConvertFloat4ToU32(c); +} + +ImU32 ImGui::GetColorU32(const ImVec4& col) +{ + ImVec4 c = col; + c.w *= GImGui->Style.Alpha; + return ColorConvertFloat4ToU32(c); +} + +// Convert rgb floats ([0-1],[0-1],[0-1]) to hsv floats ([0-1],[0-1],[0-1]), from Foley & van Dam p592 +// Optimized http://lolengine.net/blog/2013/01/13/fast-rgb-to-hsv +void ImGui::ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v) +{ + float K = 0.f; + if (g < b) + { + const float tmp = g; g = b; b = tmp; + K = -1.f; + } + if (r < g) + { + const float tmp = r; r = g; g = tmp; + K = -2.f / 6.f - K; + } + + const float chroma = r - (g < b ? g : b); + out_h = fabsf(K + (g - b) / (6.f * chroma + 1e-20f)); + out_s = chroma / (r + 1e-20f); + out_v = r; +} + +// Convert hsv floats ([0-1],[0-1],[0-1]) to rgb floats ([0-1],[0-1],[0-1]), from Foley & van Dam p593 +// also http://en.wikipedia.org/wiki/HSL_and_HSV +void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b) +{ + if (s == 0.0f) + { + // gray + out_r = out_g = out_b = v; + return; + } + + h = fmodf(h, 1.0f) / (60.0f/360.0f); + int i = (int)h; + float f = h - (float)i; + float p = v * (1.0f - s); + float q = v * (1.0f - s * f); + float t = v * (1.0f - s * (1.0f - f)); + + switch (i) + { + case 0: out_r = v; out_g = t; out_b = p; break; + case 1: out_r = q; out_g = v; out_b = p; break; + case 2: out_r = p; out_g = v; out_b = t; break; + case 3: out_r = p; out_g = q; out_b = v; break; + case 4: out_r = t; out_g = p; out_b = v; break; + case 5: default: out_r = v; out_g = p; out_b = q; break; + } +} + +FILE* ImFileOpen(const char* filename, const char* mode) +{ +#if defined(_WIN32) && !defined(__CYGWIN__) + // We need a fopen() wrapper because MSVC/Windows fopen doesn't handle UTF-8 filenames. Converting both strings from UTF-8 to wchar format (using a single allocation, because we can) + const int filename_wsize = ImTextCountCharsFromUtf8(filename, NULL) + 1; + const int mode_wsize = ImTextCountCharsFromUtf8(mode, NULL) + 1; + ImVector buf; + buf.resize(filename_wsize + mode_wsize); + ImTextStrFromUtf8(&buf[0], filename_wsize, filename, NULL); + ImTextStrFromUtf8(&buf[filename_wsize], mode_wsize, mode, NULL); + return _wfopen((wchar_t*)&buf[0], (wchar_t*)&buf[filename_wsize]); +#else + return fopen(filename, mode); +#endif +} + +// Load file content into memory +// Memory allocated with ImGui::MemAlloc(), must be freed by user using ImGui::MemFree() +void* ImLoadFileToMemory(const char* filename, const char* file_open_mode, int* out_file_size, int padding_bytes) +{ + IM_ASSERT(filename && file_open_mode); + if (out_file_size) + *out_file_size = 0; + + FILE* f; + if ((f = ImFileOpen(filename, file_open_mode)) == NULL) + return NULL; + + long file_size_signed; + if (fseek(f, 0, SEEK_END) || (file_size_signed = ftell(f)) == -1 || fseek(f, 0, SEEK_SET)) + { + fclose(f); + return NULL; + } + + int file_size = (int)file_size_signed; + void* file_data = ImGui::MemAlloc(file_size + padding_bytes); + if (file_data == NULL) + { + fclose(f); + return NULL; + } + if (fread(file_data, 1, (size_t)file_size, f) != (size_t)file_size) + { + fclose(f); + ImGui::MemFree(file_data); + return NULL; + } + if (padding_bytes > 0) + memset((void *)(((char*)file_data) + file_size), 0, padding_bytes); + + fclose(f); + if (out_file_size) + *out_file_size = file_size; + + return file_data; +} + +//----------------------------------------------------------------------------- +// ImGuiStorage +//----------------------------------------------------------------------------- + +// Helper: Key->value storage +void ImGuiStorage::Clear() +{ + Data.clear(); +} + +// std::lower_bound but without the bullshit +static ImVector::iterator LowerBound(ImVector& data, ImGuiID key) +{ + ImVector::iterator first = data.begin(); + ImVector::iterator last = data.end(); + int count = (int)(last - first); + while (count > 0) + { + int count2 = count / 2; + ImVector::iterator mid = first + count2; + if (mid->key < key) + { + first = ++mid; + count -= count2 + 1; + } + else + { + count = count2; + } + } + return first; +} + +int ImGuiStorage::GetInt(ImGuiID key, int default_val) const +{ + ImVector::iterator it = LowerBound(const_cast&>(Data), key); + if (it == Data.end() || it->key != key) + return default_val; + return it->val_i; +} + +bool ImGuiStorage::GetBool(ImGuiID key, bool default_val) const +{ + return GetInt(key, default_val ? 1 : 0) != 0; +} + +float ImGuiStorage::GetFloat(ImGuiID key, float default_val) const +{ + ImVector::iterator it = LowerBound(const_cast&>(Data), key); + if (it == Data.end() || it->key != key) + return default_val; + return it->val_f; +} + +void* ImGuiStorage::GetVoidPtr(ImGuiID key) const +{ + ImVector::iterator it = LowerBound(const_cast&>(Data), key); + if (it == Data.end() || it->key != key) + return NULL; + return it->val_p; +} + +// References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. +int* ImGuiStorage::GetIntRef(ImGuiID key, int default_val) +{ + ImVector::iterator it = LowerBound(Data, key); + if (it == Data.end() || it->key != key) + it = Data.insert(it, Pair(key, default_val)); + return &it->val_i; +} + +bool* ImGuiStorage::GetBoolRef(ImGuiID key, bool default_val) +{ + return (bool*)GetIntRef(key, default_val ? 1 : 0); +} + +float* ImGuiStorage::GetFloatRef(ImGuiID key, float default_val) +{ + ImVector::iterator it = LowerBound(Data, key); + if (it == Data.end() || it->key != key) + it = Data.insert(it, Pair(key, default_val)); + return &it->val_f; +} + +void** ImGuiStorage::GetVoidPtrRef(ImGuiID key, void* default_val) +{ + ImVector::iterator it = LowerBound(Data, key); + if (it == Data.end() || it->key != key) + it = Data.insert(it, Pair(key, default_val)); + return &it->val_p; +} + +// FIXME-OPT: Need a way to reuse the result of lower_bound when doing GetInt()/SetInt() - not too bad because it only happens on explicit interaction (maximum one a frame) +void ImGuiStorage::SetInt(ImGuiID key, int val) +{ + ImVector::iterator it = LowerBound(Data, key); + if (it == Data.end() || it->key != key) + { + Data.insert(it, Pair(key, val)); + return; + } + it->val_i = val; +} + +void ImGuiStorage::SetBool(ImGuiID key, bool val) +{ + SetInt(key, val ? 1 : 0); +} + +void ImGuiStorage::SetFloat(ImGuiID key, float val) +{ + ImVector::iterator it = LowerBound(Data, key); + if (it == Data.end() || it->key != key) + { + Data.insert(it, Pair(key, val)); + return; + } + it->val_f = val; +} + +void ImGuiStorage::SetVoidPtr(ImGuiID key, void* val) +{ + ImVector::iterator it = LowerBound(Data, key); + if (it == Data.end() || it->key != key) + { + Data.insert(it, Pair(key, val)); + return; + } + it->val_p = val; +} + +void ImGuiStorage::SetAllInt(int v) +{ + for (int i = 0; i < Data.Size; i++) + Data[i].val_i = v; +} + +//----------------------------------------------------------------------------- +// ImGuiTextFilter +//----------------------------------------------------------------------------- + +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +ImGuiTextFilter::ImGuiTextFilter(const char* default_filter) +{ + if (default_filter) + { + ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + Build(); + } + else + { + InputBuf[0] = 0; + CountGrep = 0; + } +} + +bool ImGuiTextFilter::Draw(const char* label, float width) +{ + if (width != 0.0f) + ImGui::PushItemWidth(width); + bool value_changed = ImGui::InputText(label, InputBuf, IM_ARRAYSIZE(InputBuf)); + if (width != 0.0f) + ImGui::PopItemWidth(); + if (value_changed) + Build(); + return value_changed; +} + +void ImGuiTextFilter::TextRange::split(char separator, ImVector& out) +{ + out.resize(0); + const char* wb = b; + const char* we = wb; + while (we < e) + { + if (*we == separator) + { + out.push_back(TextRange(wb, we)); + wb = we + 1; + } + we++; + } + if (wb != we) + out.push_back(TextRange(wb, we)); +} + +void ImGuiTextFilter::Build() +{ + Filters.resize(0); + TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + input_range.split(',', Filters); + + CountGrep = 0; + for (int i = 0; i != Filters.Size; i++) + { + Filters[i].trim_blanks(); + if (Filters[i].empty()) + continue; + if (Filters[i].front() != '-') + CountGrep += 1; + } +} + +bool ImGuiTextFilter::PassFilter(const char* text, const char* text_end) const +{ + if (Filters.empty()) + return true; + + if (text == NULL) + text = ""; + + for (int i = 0; i != Filters.Size; i++) + { + const TextRange& f = Filters[i]; + if (f.empty()) + continue; + if (f.front() == '-') + { + // Subtract + if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + return false; + } + else + { + // Grep + if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + return true; + } + } + + // Implicit * grep + if (CountGrep == 0) + return true; + + return false; +} + +//----------------------------------------------------------------------------- +// ImGuiTextBuffer +//----------------------------------------------------------------------------- + +// On some platform vsnprintf() takes va_list by reference and modifies it. +// va_copy is the 'correct' way to copy a va_list but Visual Studio prior to 2013 doesn't have it. +#ifndef va_copy +#define va_copy(dest, src) (dest = src) +#endif + +// Helper: Text buffer for logging/accumulating text +void ImGuiTextBuffer::appendv(const char* fmt, va_list args) +{ + va_list args_copy; + va_copy(args_copy, args); + + int len = vsnprintf(NULL, 0, fmt, args); // FIXME-OPT: could do a first pass write attempt, likely successful on first pass. + if (len <= 0) + return; + + const int write_off = Buf.Size; + const int needed_sz = write_off + len; + if (write_off + len >= Buf.Capacity) + { + int double_capacity = Buf.Capacity * 2; + Buf.reserve(needed_sz > double_capacity ? needed_sz : double_capacity); + } + + Buf.resize(needed_sz); + ImFormatStringV(&Buf[write_off] - 1, len+1, fmt, args_copy); +} + +void ImGuiTextBuffer::append(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + appendv(fmt, args); + va_end(args); +} + +//----------------------------------------------------------------------------- +// ImGuiSimpleColumns +//----------------------------------------------------------------------------- + +ImGuiSimpleColumns::ImGuiSimpleColumns() +{ + Count = 0; + Spacing = Width = NextWidth = 0.0f; + memset(Pos, 0, sizeof(Pos)); + memset(NextWidths, 0, sizeof(NextWidths)); +} + +void ImGuiSimpleColumns::Update(int count, float spacing, bool clear) +{ + IM_ASSERT(Count <= IM_ARRAYSIZE(Pos)); + Count = count; + Width = NextWidth = 0.0f; + Spacing = spacing; + if (clear) memset(NextWidths, 0, sizeof(NextWidths)); + for (int i = 0; i < Count; i++) + { + if (i > 0 && NextWidths[i] > 0.0f) + Width += Spacing; + Pos[i] = (float)(int)Width; + Width += NextWidths[i]; + NextWidths[i] = 0.0f; + } +} + +float ImGuiSimpleColumns::DeclColumns(float w0, float w1, float w2) // not using va_arg because they promote float to double +{ + NextWidth = 0.0f; + NextWidths[0] = ImMax(NextWidths[0], w0); + NextWidths[1] = ImMax(NextWidths[1], w1); + NextWidths[2] = ImMax(NextWidths[2], w2); + for (int i = 0; i < 3; i++) + NextWidth += NextWidths[i] + ((i > 0 && NextWidths[i] > 0.0f) ? Spacing : 0.0f); + return ImMax(Width, NextWidth); +} + +float ImGuiSimpleColumns::CalcExtraSpace(float avail_w) +{ + return ImMax(0.0f, avail_w - Width); +} + +//----------------------------------------------------------------------------- +// ImGuiListClipper +//----------------------------------------------------------------------------- + +static void SetCursorPosYAndSetupDummyPrevLine(float pos_y, float line_height) +{ + // Set cursor position and a few other things so that SetScrollHere() and Columns() can work when seeking cursor. + // FIXME: It is problematic that we have to do that here, because custom/equivalent end-user code would stumble on the same issue. Consider moving within SetCursorXXX functions? + ImGui::SetCursorPosY(pos_y); + ImGuiWindow* window = ImGui::GetCurrentWindow(); + window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y - line_height; // Setting those fields so that SetScrollHere() can properly function after the end of our clipper usage. + window->DC.PrevLineHeight = (line_height - GImGui->Style.ItemSpacing.y); // If we end up needing more accurate data (to e.g. use SameLine) we may as well make the clipper have a fourth step to let user process and display the last item in their list. + if (window->DC.ColumnsCount > 1) + window->DC.ColumnsCellMinY = window->DC.CursorPos.y; // Setting this so that cell Y position are set properly +} + +// Use case A: Begin() called from constructor with items_height<0, then called again from Sync() in StepNo 1 +// Use case B: Begin() called from constructor with items_height>0 +// FIXME-LEGACY: Ideally we should remove the Begin/End functions but they are part of the legacy API we still support. This is why some of the code in Step() calling Begin() and reassign some fields, spaghetti style. +void ImGuiListClipper::Begin(int count, float items_height) +{ + StartPosY = ImGui::GetCursorPosY(); + ItemsHeight = items_height; + ItemsCount = count; + StepNo = 0; + DisplayEnd = DisplayStart = -1; + if (ItemsHeight > 0.0f) + { + ImGui::CalcListClipping(ItemsCount, ItemsHeight, &DisplayStart, &DisplayEnd); // calculate how many to clip/display + if (DisplayStart > 0) + SetCursorPosYAndSetupDummyPrevLine(StartPosY + DisplayStart * ItemsHeight, ItemsHeight); // advance cursor + StepNo = 2; + } +} + +void ImGuiListClipper::End() +{ + if (ItemsCount < 0) + return; + // In theory here we should assert that ImGui::GetCursorPosY() == StartPosY + DisplayEnd * ItemsHeight, but it feels saner to just seek at the end and not assert/crash the user. + if (ItemsCount < INT_MAX) + SetCursorPosYAndSetupDummyPrevLine(StartPosY + ItemsCount * ItemsHeight, ItemsHeight); // advance cursor + ItemsCount = -1; + StepNo = 3; +} + +bool ImGuiListClipper::Step() +{ + if (ItemsCount == 0 || ImGui::GetCurrentWindowRead()->SkipItems) + { + ItemsCount = -1; + return false; + } + if (StepNo == 0) // Step 0: the clipper let you process the first element, regardless of it being visible or not, so we can measure the element height. + { + DisplayStart = 0; + DisplayEnd = 1; + StartPosY = ImGui::GetCursorPosY(); + StepNo = 1; + return true; + } + if (StepNo == 1) // Step 1: the clipper infer height from first element, calculate the actual range of elements to display, and position the cursor before the first element. + { + if (ItemsCount == 1) { ItemsCount = -1; return false; } + float items_height = ImGui::GetCursorPosY() - StartPosY; + IM_ASSERT(items_height > 0.0f); // If this triggers, it means Item 0 hasn't moved the cursor vertically + Begin(ItemsCount-1, items_height); + DisplayStart++; + DisplayEnd++; + StepNo = 3; + return true; + } + if (StepNo == 2) // Step 2: dummy step only required if an explicit items_height was passed to constructor or Begin() and user still call Step(). Does nothing and switch to Step 3. + { + IM_ASSERT(DisplayStart >= 0 && DisplayEnd >= 0); + StepNo = 3; + return true; + } + if (StepNo == 3) // Step 3: the clipper validate that we have reached the expected Y position (corresponding to element DisplayEnd), advance the cursor to the end of the list and then returns 'false' to end the loop. + End(); + return false; +} + +//----------------------------------------------------------------------------- +// ImGuiWindow +//----------------------------------------------------------------------------- + +ImGuiWindow::ImGuiWindow(const char* name) +{ + Name = ImStrdup(name); + ID = ImHash(name, 0); + IDStack.push_back(ID); + MoveId = GetID("#MOVE"); + + Flags = 0; + IndexWithinParent = 0; + PosFloat = Pos = ImVec2(0.0f, 0.0f); + Size = SizeFull = ImVec2(0.0f, 0.0f); + SizeContents = SizeContentsExplicit = ImVec2(0.0f, 0.0f); + WindowPadding = ImVec2(0.0f, 0.0f); + Scroll = ImVec2(0.0f, 0.0f); + ScrollTarget = ImVec2(FLT_MAX, FLT_MAX); + ScrollTargetCenterRatio = ImVec2(0.5f, 0.5f); + ScrollbarX = ScrollbarY = false; + ScrollbarSizes = ImVec2(0.0f, 0.0f); + BorderSize = 0.0f; + Active = WasActive = false; + Accessed = false; + Collapsed = false; + SkipItems = false; + BeginCount = 0; + PopupId = 0; + AutoFitFramesX = AutoFitFramesY = -1; + AutoFitOnlyGrows = false; + AutoPosLastDirection = -1; + HiddenFrames = 0; + SetWindowPosAllowFlags = SetWindowSizeAllowFlags = SetWindowCollapsedAllowFlags = ImGuiSetCond_Always | ImGuiSetCond_Once | ImGuiSetCond_FirstUseEver | ImGuiSetCond_Appearing; + SetWindowPosCenterWanted = false; + + LastFrameActive = -1; + ItemWidthDefault = 0.0f; + FontWindowScale = 1.0f; + + DrawList = (ImDrawList*)ImGui::MemAlloc(sizeof(ImDrawList)); + IM_PLACEMENT_NEW(DrawList) ImDrawList(); + DrawList->_OwnerName = Name; + RootWindow = NULL; + RootNonPopupWindow = NULL; + ParentWindow = NULL; + + FocusIdxAllCounter = FocusIdxTabCounter = -1; + FocusIdxAllRequestCurrent = FocusIdxTabRequestCurrent = INT_MAX; + FocusIdxAllRequestNext = FocusIdxTabRequestNext = INT_MAX; +} + +ImGuiWindow::~ImGuiWindow() +{ + DrawList->~ImDrawList(); + ImGui::MemFree(DrawList); + DrawList = NULL; + ImGui::MemFree(Name); + Name = NULL; +} + +ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end) +{ + ImGuiID seed = IDStack.back(); + ImGuiID id = ImHash(str, str_end ? (int)(str_end - str) : 0, seed); + ImGui::KeepAliveID(id); + return id; +} + +ImGuiID ImGuiWindow::GetID(const void* ptr) +{ + ImGuiID seed = IDStack.back(); + ImGuiID id = ImHash(&ptr, sizeof(void*), seed); + ImGui::KeepAliveID(id); + return id; +} + +ImGuiID ImGuiWindow::GetIDNoKeepAlive(const char* str, const char* str_end) +{ + ImGuiID seed = IDStack.back(); + return ImHash(str, str_end ? (int)(str_end - str) : 0, seed); +} + +//----------------------------------------------------------------------------- +// Internal API exposed in imgui_internal.h +//----------------------------------------------------------------------------- + +static void SetCurrentWindow(ImGuiWindow* window) +{ + ImGuiContext& g = *GImGui; + g.CurrentWindow = window; + if (window) + g.FontSize = window->CalcFontSize(); +} + +ImGuiWindow* ImGui::GetParentWindow() +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(g.CurrentWindowStack.Size >= 2); + return g.CurrentWindowStack[(unsigned int)g.CurrentWindowStack.Size - 2]; +} + +void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window = NULL) +{ + ImGuiContext& g = *GImGui; + g.ActiveId = id; + g.ActiveIdAllowOverlap = false; + g.ActiveIdIsJustActivated = true; + if (id) + g.ActiveIdIsAlive = true; + g.ActiveIdWindow = window; +} + +void ImGui::SetHoveredID(ImGuiID id) +{ + ImGuiContext& g = *GImGui; + g.HoveredId = id; + g.HoveredIdAllowOverlap = false; +} + +void ImGui::KeepAliveID(ImGuiID id) +{ + ImGuiContext& g = *GImGui; + if (g.ActiveId == id) + g.ActiveIdIsAlive = true; +} + +// Advance cursor given item size for layout. +void ImGui::ItemSize(const ImVec2& size, float text_offset_y) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + // Always align ourselves on pixel boundaries + ImGuiContext& g = *GImGui; + const float line_height = ImMax(window->DC.CurrentLineHeight, size.y); + const float text_base_offset = ImMax(window->DC.CurrentLineTextBaseOffset, text_offset_y); + window->DC.CursorPosPrevLine = ImVec2(window->DC.CursorPos.x + size.x, window->DC.CursorPos.y); + window->DC.CursorPos = ImVec2((float)(int)(window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX), (float)(int)(window->DC.CursorPos.y + line_height + g.Style.ItemSpacing.y)); + window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPosPrevLine.x); + window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y); + + //window->DrawList->AddCircle(window->DC.CursorMaxPos, 3.0f, IM_COL32(255,0,0,255), 4); // Debug + + window->DC.PrevLineHeight = line_height; + window->DC.PrevLineTextBaseOffset = text_base_offset; + window->DC.CurrentLineHeight = window->DC.CurrentLineTextBaseOffset = 0.0f; +} + +void ImGui::ItemSize(const ImRect& bb, float text_offset_y) +{ + ItemSize(bb.GetSize(), text_offset_y); +} + +// Declare item bounding box for clipping and interaction. +// Note that the size can be different than the one provided to ItemSize(). Typically, widgets that spread over available surface +// declares their minimum size requirement to ItemSize() and then use a larger region for drawing/interaction, which is passed to ItemAdd(). +bool ImGui::ItemAdd(const ImRect& bb, const ImGuiID* id) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.LastItemId = id ? *id : 0; + window->DC.LastItemRect = bb; + window->DC.LastItemHoveredAndUsable = window->DC.LastItemHoveredRect = false; + if (IsClippedEx(bb, id, false)) + return false; + + // This is a sensible default, but widgets are free to override it after calling ItemAdd() + ImGuiContext& g = *GImGui; + if (IsMouseHoveringRect(bb.Min, bb.Max)) + { + // Matching the behavior of IsHovered() but allow if ActiveId==window->MoveID (we clicked on the window background) + // So that clicking on items with no active id such as Text() still returns true with IsItemHovered() + window->DC.LastItemHoveredRect = true; + if (g.HoveredRootWindow == window->RootWindow) + if (g.ActiveId == 0 || (id && g.ActiveId == *id) || g.ActiveIdAllowOverlap || (g.ActiveId == window->MoveId)) + if (IsWindowContentHoverable(window)) + window->DC.LastItemHoveredAndUsable = true; + } + + return true; +} + +bool ImGui::IsClippedEx(const ImRect& bb, const ImGuiID* id, bool clip_even_when_logged) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindowRead(); + + if (!bb.Overlaps(window->ClipRect)) + if (!id || *id != GImGui->ActiveId) + if (clip_even_when_logged || !g.LogEnabled) + return true; + return false; +} + +// NB: This is an internal helper. The user-facing IsItemHovered() is using data emitted from ItemAdd(), with a slightly different logic. +bool ImGui::IsHovered(const ImRect& bb, ImGuiID id, bool flatten_childs) +{ + ImGuiContext& g = *GImGui; + if (g.HoveredId == 0 || g.HoveredId == id || g.HoveredIdAllowOverlap) + { + ImGuiWindow* window = GetCurrentWindowRead(); + if (g.HoveredWindow == window || (flatten_childs && g.HoveredRootWindow == window->RootWindow)) + if ((g.ActiveId == 0 || g.ActiveId == id || g.ActiveIdAllowOverlap) && IsMouseHoveringRect(bb.Min, bb.Max)) + if (IsWindowContentHoverable(g.HoveredRootWindow)) + return true; + } + return false; +} + +bool ImGui::FocusableItemRegister(ImGuiWindow* window, bool is_active, bool tab_stop) +{ + ImGuiContext& g = *GImGui; + + const bool allow_keyboard_focus = window->DC.AllowKeyboardFocus; + window->FocusIdxAllCounter++; + if (allow_keyboard_focus) + window->FocusIdxTabCounter++; + + // Process keyboard input at this point: TAB, Shift-TAB switch focus + // We can always TAB out of a widget that doesn't allow tabbing in. + if (tab_stop && window->FocusIdxAllRequestNext == INT_MAX && window->FocusIdxTabRequestNext == INT_MAX && is_active && IsKeyPressedMap(ImGuiKey_Tab)) + { + // Modulo on index will be applied at the end of frame once we've got the total counter of items. + window->FocusIdxTabRequestNext = window->FocusIdxTabCounter + (g.IO.KeyShift ? (allow_keyboard_focus ? -1 : 0) : +1); + } + + if (window->FocusIdxAllCounter == window->FocusIdxAllRequestCurrent) + return true; + + if (allow_keyboard_focus) + if (window->FocusIdxTabCounter == window->FocusIdxTabRequestCurrent) + return true; + + return false; +} + +void ImGui::FocusableItemUnregister(ImGuiWindow* window) +{ + window->FocusIdxAllCounter--; + window->FocusIdxTabCounter--; +} + +ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_x, float default_y) +{ + ImGuiContext& g = *GImGui; + ImVec2 content_max; + if (size.x < 0.0f || size.y < 0.0f) + content_max = g.CurrentWindow->Pos + GetContentRegionMax(); + if (size.x <= 0.0f) + size.x = (size.x == 0.0f) ? default_x : ImMax(content_max.x - g.CurrentWindow->DC.CursorPos.x, 4.0f) + size.x; + if (size.y <= 0.0f) + size.y = (size.y == 0.0f) ? default_y : ImMax(content_max.y - g.CurrentWindow->DC.CursorPos.y, 4.0f) + size.y; + return size; +} + +float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x) +{ + if (wrap_pos_x < 0.0f) + return 0.0f; + + ImGuiWindow* window = GetCurrentWindowRead(); + if (wrap_pos_x == 0.0f) + wrap_pos_x = GetContentRegionMax().x + window->Pos.x; + else if (wrap_pos_x > 0.0f) + wrap_pos_x += window->Pos.x - window->Scroll.x; // wrap_pos_x is provided is window local space + + return ImMax(wrap_pos_x - pos.x, 1.0f); +} + +//----------------------------------------------------------------------------- + +void* ImGui::MemAlloc(size_t sz) +{ + GImGui->IO.MetricsAllocs++; + return GImGui->IO.MemAllocFn(sz); +} + +void ImGui::MemFree(void* ptr) +{ + if (ptr) GImGui->IO.MetricsAllocs--; + return GImGui->IO.MemFreeFn(ptr); +} + +const char* ImGui::GetClipboardText() +{ + return GImGui->IO.GetClipboardTextFn ? GImGui->IO.GetClipboardTextFn(GImGui->IO.ClipboardUserData) : ""; +} + +void ImGui::SetClipboardText(const char* text) +{ + if (GImGui->IO.SetClipboardTextFn) + GImGui->IO.SetClipboardTextFn(GImGui->IO.ClipboardUserData, text); +} + +const char* ImGui::GetVersion() +{ + return IMGUI_VERSION; +} + +// Internal state access - if you want to share ImGui state between modules (e.g. DLL) or allocate it yourself +// Note that we still point to some static data and members (such as GFontAtlas), so the state instance you end up using will point to the static data within its module +ImGuiContext* ImGui::GetCurrentContext() +{ + return GImGui; +} + +void ImGui::SetCurrentContext(ImGuiContext* ctx) +{ +#ifdef IMGUI_SET_CURRENT_CONTEXT_FUNC + IMGUI_SET_CURRENT_CONTEXT_FUNC(ctx); // For custom thread-based hackery you may want to have control over this. +#else + GImGui = ctx; +#endif +} + +ImGuiContext* ImGui::CreateContext(void* (*malloc_fn)(size_t), void (*free_fn)(void*)) +{ + if (!malloc_fn) malloc_fn = malloc; + ImGuiContext* ctx = (ImGuiContext*)malloc_fn(sizeof(ImGuiContext)); + IM_PLACEMENT_NEW(ctx) ImGuiContext(); + ctx->IO.MemAllocFn = malloc_fn; + ctx->IO.MemFreeFn = free_fn ? free_fn : free; + return ctx; +} + +void ImGui::DestroyContext(ImGuiContext* ctx) +{ + void (*free_fn)(void*) = ctx->IO.MemFreeFn; + ctx->~ImGuiContext(); + free_fn(ctx); + if (GImGui == ctx) + SetCurrentContext(NULL); +} + +ImGuiIO& ImGui::GetIO() +{ + return GImGui->IO; +} + +ImGuiStyle& ImGui::GetStyle() +{ + return GImGui->Style; +} + +// Same value as passed to your RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +ImDrawData* ImGui::GetDrawData() +{ + return GImGui->RenderDrawData.Valid ? &GImGui->RenderDrawData : NULL; +} + +float ImGui::GetTime() +{ + return GImGui->Time; +} + +int ImGui::GetFrameCount() +{ + return GImGui->FrameCount; +} + +void ImGui::NewFrame() +{ + ImGuiContext& g = *GImGui; + + // Check user data + IM_ASSERT(g.IO.DeltaTime >= 0.0f); // Need a positive DeltaTime (zero is tolerated but will cause some timing issues) + IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f); + IM_ASSERT(g.IO.Fonts->Fonts.Size > 0); // Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ? + IM_ASSERT(g.IO.Fonts->Fonts[0]->IsLoaded()); // Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ? + IM_ASSERT(g.Style.CurveTessellationTol > 0.0f); // Invalid style setting + + if (!g.Initialized) + { + // Initialize on first frame + g.LogClipboard = (ImGuiTextBuffer*)ImGui::MemAlloc(sizeof(ImGuiTextBuffer)); + IM_PLACEMENT_NEW(g.LogClipboard) ImGuiTextBuffer(); + + IM_ASSERT(g.Settings.empty()); + LoadIniSettingsFromDisk(g.IO.IniFilename); + g.Initialized = true; + } + + SetCurrentFont(GetDefaultFont()); + IM_ASSERT(g.Font->IsLoaded()); + + g.Time += g.IO.DeltaTime; + g.FrameCount += 1; + g.Tooltip[0] = '\0'; + g.OverlayDrawList.Clear(); + g.OverlayDrawList.PushTextureID(g.IO.Fonts->TexID); + g.OverlayDrawList.PushClipRectFullScreen(); + + // Mark rendering data as invalid to prevent user who may have a handle on it to use it + g.RenderDrawData.Valid = false; + g.RenderDrawData.CmdLists = NULL; + g.RenderDrawData.CmdListsCount = g.RenderDrawData.TotalVtxCount = g.RenderDrawData.TotalIdxCount = 0; + + // Update inputs state + if (g.IO.MousePos.x < 0 && g.IO.MousePos.y < 0) + g.IO.MousePos = ImVec2(-9999.0f, -9999.0f); + if ((g.IO.MousePos.x < 0 && g.IO.MousePos.y < 0) || (g.IO.MousePosPrev.x < 0 && g.IO.MousePosPrev.y < 0)) // if mouse just appeared or disappeared (negative coordinate) we cancel out movement in MouseDelta + g.IO.MouseDelta = ImVec2(0.0f, 0.0f); + else + g.IO.MouseDelta = g.IO.MousePos - g.IO.MousePosPrev; + g.IO.MousePosPrev = g.IO.MousePos; + for (int i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++) + { + g.IO.MouseClicked[i] = g.IO.MouseDown[i] && g.IO.MouseDownDuration[i] < 0.0f; + g.IO.MouseReleased[i] = !g.IO.MouseDown[i] && g.IO.MouseDownDuration[i] >= 0.0f; + g.IO.MouseDownDurationPrev[i] = g.IO.MouseDownDuration[i]; + g.IO.MouseDownDuration[i] = g.IO.MouseDown[i] ? (g.IO.MouseDownDuration[i] < 0.0f ? 0.0f : g.IO.MouseDownDuration[i] + g.IO.DeltaTime) : -1.0f; + g.IO.MouseDoubleClicked[i] = false; + if (g.IO.MouseClicked[i]) + { + if (g.Time - g.IO.MouseClickedTime[i] < g.IO.MouseDoubleClickTime) + { + if (ImLengthSqr(g.IO.MousePos - g.IO.MouseClickedPos[i]) < g.IO.MouseDoubleClickMaxDist * g.IO.MouseDoubleClickMaxDist) + g.IO.MouseDoubleClicked[i] = true; + g.IO.MouseClickedTime[i] = -FLT_MAX; // so the third click isn't turned into a double-click + } + else + { + g.IO.MouseClickedTime[i] = g.Time; + } + g.IO.MouseClickedPos[i] = g.IO.MousePos; + g.IO.MouseDragMaxDistanceSqr[i] = 0.0f; + } + else if (g.IO.MouseDown[i]) + { + g.IO.MouseDragMaxDistanceSqr[i] = ImMax(g.IO.MouseDragMaxDistanceSqr[i], ImLengthSqr(g.IO.MousePos - g.IO.MouseClickedPos[i])); + } + } + memcpy(g.IO.KeysDownDurationPrev, g.IO.KeysDownDuration, sizeof(g.IO.KeysDownDuration)); + for (int i = 0; i < IM_ARRAYSIZE(g.IO.KeysDown); i++) + g.IO.KeysDownDuration[i] = g.IO.KeysDown[i] ? (g.IO.KeysDownDuration[i] < 0.0f ? 0.0f : g.IO.KeysDownDuration[i] + g.IO.DeltaTime) : -1.0f; + + // Calculate frame-rate for the user, as a purely luxurious feature + g.FramerateSecPerFrameAccum += g.IO.DeltaTime - g.FramerateSecPerFrame[g.FramerateSecPerFrameIdx]; + g.FramerateSecPerFrame[g.FramerateSecPerFrameIdx] = g.IO.DeltaTime; + g.FramerateSecPerFrameIdx = (g.FramerateSecPerFrameIdx + 1) % IM_ARRAYSIZE(g.FramerateSecPerFrame); + g.IO.Framerate = 1.0f / (g.FramerateSecPerFrameAccum / (float)IM_ARRAYSIZE(g.FramerateSecPerFrame)); + + // Clear reference to active widget if the widget isn't alive anymore + g.HoveredIdPreviousFrame = g.HoveredId; + g.HoveredId = 0; + g.HoveredIdAllowOverlap = false; + if (!g.ActiveIdIsAlive && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0) + SetActiveID(0); + g.ActiveIdPreviousFrame = g.ActiveId; + g.ActiveIdIsAlive = false; + g.ActiveIdIsJustActivated = false; + + // Handle user moving window (at the beginning of the frame to avoid input lag or sheering). Only valid for root windows. + if (g.MovedWindowMoveId && g.MovedWindowMoveId == g.ActiveId) + { + KeepAliveID(g.MovedWindowMoveId); + IM_ASSERT(g.MovedWindow && g.MovedWindow->RootWindow); + IM_ASSERT(g.MovedWindow->RootWindow->MoveId == g.MovedWindowMoveId); + if (g.IO.MouseDown[0]) + { + if (!(g.MovedWindow->Flags & ImGuiWindowFlags_NoMove)) + { + g.MovedWindow->PosFloat += g.IO.MouseDelta; + if (!(g.MovedWindow->Flags & ImGuiWindowFlags_NoSavedSettings) && (g.IO.MouseDelta.x != 0.0f || g.IO.MouseDelta.y != 0.0f)) + MarkIniSettingsDirty(); + } + FocusWindow(g.MovedWindow); + } + else + { + SetActiveID(0); + g.MovedWindow = NULL; + g.MovedWindowMoveId = 0; + } + } + else + { + g.MovedWindow = NULL; + g.MovedWindowMoveId = 0; + } + + // Delay saving settings so we don't spam disk too much + if (g.SettingsDirtyTimer > 0.0f) + { + g.SettingsDirtyTimer -= g.IO.DeltaTime; + if (g.SettingsDirtyTimer <= 0.0f) + SaveIniSettingsToDisk(g.IO.IniFilename); + } + + // Find the window we are hovering. Child windows can extend beyond the limit of their parent so we need to derive HoveredRootWindow from HoveredWindow + g.HoveredWindow = g.MovedWindow ? g.MovedWindow : FindHoveredWindow(g.IO.MousePos, false); + if (g.HoveredWindow && (g.HoveredWindow->Flags & ImGuiWindowFlags_ChildWindow)) + g.HoveredRootWindow = g.HoveredWindow->RootWindow; + else + g.HoveredRootWindow = g.MovedWindow ? g.MovedWindow->RootWindow : FindHoveredWindow(g.IO.MousePos, true); + + if (ImGuiWindow* modal_window = GetFrontMostModalRootWindow()) + { + g.ModalWindowDarkeningRatio = ImMin(g.ModalWindowDarkeningRatio + g.IO.DeltaTime * 6.0f, 1.0f); + ImGuiWindow* window = g.HoveredRootWindow; + while (window && window != modal_window) + window = window->ParentWindow; + if (!window) + g.HoveredRootWindow = g.HoveredWindow = NULL; + } + else + { + g.ModalWindowDarkeningRatio = 0.0f; + } + + // Are we using inputs? Tell user so they can capture/discard the inputs away from the rest of their application. + // When clicking outside of a window we assume the click is owned by the application and won't request capture. We need to track click ownership. + int mouse_earliest_button_down = -1; + bool mouse_any_down = false; + for (int i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++) + { + if (g.IO.MouseClicked[i]) + g.IO.MouseDownOwned[i] = (g.HoveredWindow != NULL) || (!g.OpenPopupStack.empty()); + mouse_any_down |= g.IO.MouseDown[i]; + if (g.IO.MouseDown[i]) + if (mouse_earliest_button_down == -1 || g.IO.MouseClickedTime[mouse_earliest_button_down] > g.IO.MouseClickedTime[i]) + mouse_earliest_button_down = i; + } + bool mouse_avail_to_imgui = (mouse_earliest_button_down == -1) || g.IO.MouseDownOwned[mouse_earliest_button_down]; + if (g.CaptureMouseNextFrame != -1) + g.IO.WantCaptureMouse = (g.CaptureMouseNextFrame != 0); + else + g.IO.WantCaptureMouse = (mouse_avail_to_imgui && (g.HoveredWindow != NULL || mouse_any_down)) || (g.ActiveId != 0) || (!g.OpenPopupStack.empty()); + g.IO.WantCaptureKeyboard = (g.CaptureKeyboardNextFrame != -1) ? (g.CaptureKeyboardNextFrame != 0) : (g.ActiveId != 0); + g.IO.WantTextInput = (g.ActiveId != 0 && g.InputTextState.Id == g.ActiveId); + g.MouseCursor = ImGuiMouseCursor_Arrow; + g.CaptureMouseNextFrame = g.CaptureKeyboardNextFrame = -1; + g.OsImePosRequest = ImVec2(1.0f, 1.0f); // OS Input Method Editor showing on top-left of our window by default + + // If mouse was first clicked outside of ImGui bounds we also cancel out hovering. + if (!mouse_avail_to_imgui) + g.HoveredWindow = g.HoveredRootWindow = NULL; + + // Scale & Scrolling + if (g.HoveredWindow && g.IO.MouseWheel != 0.0f && !g.HoveredWindow->Collapsed) + { + ImGuiWindow* window = g.HoveredWindow; + if (g.IO.KeyCtrl) + { + if (g.IO.FontAllowUserScaling) + { + // Zoom / Scale window + float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f); + float scale = new_font_scale / window->FontWindowScale; + window->FontWindowScale = new_font_scale; + + const ImVec2 offset = window->Size * (1.0f - scale) * (g.IO.MousePos - window->Pos) / window->Size; + window->Pos += offset; + window->PosFloat += offset; + window->Size *= scale; + window->SizeFull *= scale; + } + } + else if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse)) + { + // Scroll + const int scroll_lines = (window->Flags & ImGuiWindowFlags_ComboBox) ? 3 : 5; + SetWindowScrollY(window, window->Scroll.y - g.IO.MouseWheel * window->CalcFontSize() * scroll_lines); + } + } + + // Pressing TAB activate widget focus + // NB: Don't discard FocusedWindow if it isn't active, so that a window that go on/off programatically won't lose its keyboard focus. + if (g.ActiveId == 0 && g.FocusedWindow != NULL && g.FocusedWindow->Active && IsKeyPressedMap(ImGuiKey_Tab, false)) + g.FocusedWindow->FocusIdxTabRequestNext = 0; + + // Mark all windows as not visible + for (int i = 0; i != g.Windows.Size; i++) + { + ImGuiWindow* window = g.Windows[i]; + window->WasActive = window->Active; + window->Active = false; + window->Accessed = false; + } + + // Closing the focused window restore focus to the first active root window in descending z-order + if (g.FocusedWindow && !g.FocusedWindow->WasActive) + for (int i = g.Windows.Size-1; i >= 0; i--) + if (g.Windows[i]->WasActive && !(g.Windows[i]->Flags & ImGuiWindowFlags_ChildWindow)) + { + FocusWindow(g.Windows[i]); + break; + } + + // No window should be open at the beginning of the frame. + // But in order to allow the user to call NewFrame() multiple times without calling Render(), we are doing an explicit clear. + g.CurrentWindowStack.resize(0); + g.CurrentPopupStack.resize(0); + CloseInactivePopups(); + + // Create implicit window - we will only render it if the user has added something to it. + ImGui::SetNextWindowSize(ImVec2(400,400), ImGuiSetCond_FirstUseEver); + ImGui::Begin("Debug"); +} + +// NB: behavior of ImGui after Shutdown() is not tested/guaranteed at the moment. This function is merely here to free heap allocations. +void ImGui::Shutdown() +{ + ImGuiContext& g = *GImGui; + + // The fonts atlas can be used prior to calling NewFrame(), so we clear it even if g.Initialized is FALSE (which would happen if we never called NewFrame) + if (g.IO.Fonts) // Testing for NULL to allow user to NULLify in case of running Shutdown() on multiple contexts. Bit hacky. + g.IO.Fonts->Clear(); + + // Cleanup of other data are conditional on actually having used ImGui. + if (!g.Initialized) + return; + + SaveIniSettingsToDisk(g.IO.IniFilename); + + for (int i = 0; i < g.Windows.Size; i++) + { + g.Windows[i]->~ImGuiWindow(); + ImGui::MemFree(g.Windows[i]); + } + g.Windows.clear(); + g.WindowsSortBuffer.clear(); + g.CurrentWindow = NULL; + g.CurrentWindowStack.clear(); + g.FocusedWindow = NULL; + g.HoveredWindow = NULL; + g.HoveredRootWindow = NULL; + g.ActiveIdWindow = NULL; + g.MovedWindow = NULL; + for (int i = 0; i < g.Settings.Size; i++) + ImGui::MemFree(g.Settings[i].Name); + g.Settings.clear(); + g.ColorModifiers.clear(); + g.StyleModifiers.clear(); + g.FontStack.clear(); + g.OpenPopupStack.clear(); + g.CurrentPopupStack.clear(); + g.SetNextWindowSizeConstraintCallback = NULL; + g.SetNextWindowSizeConstraintCallbackUserData = NULL; + for (int i = 0; i < IM_ARRAYSIZE(g.RenderDrawLists); i++) + g.RenderDrawLists[i].clear(); + g.OverlayDrawList.ClearFreeMemory(); + g.ColorEditModeStorage.Clear(); + if (g.PrivateClipboard) + { + ImGui::MemFree(g.PrivateClipboard); + g.PrivateClipboard = NULL; + } + g.InputTextState.Text.clear(); + g.InputTextState.InitialText.clear(); + g.InputTextState.TempTextBuffer.clear(); + + if (g.LogFile && g.LogFile != stdout) + { + fclose(g.LogFile); + g.LogFile = NULL; + } + if (g.LogClipboard) + { + g.LogClipboard->~ImGuiTextBuffer(); + ImGui::MemFree(g.LogClipboard); + } + + g.Initialized = false; +} + +static ImGuiIniData* FindWindowSettings(const char* name) +{ + ImGuiContext& g = *GImGui; + ImGuiID id = ImHash(name, 0); + for (int i = 0; i != g.Settings.Size; i++) + { + ImGuiIniData* ini = &g.Settings[i]; + if (ini->Id == id) + return ini; + } + return NULL; +} + +static ImGuiIniData* AddWindowSettings(const char* name) +{ + GImGui->Settings.resize(GImGui->Settings.Size + 1); + ImGuiIniData* ini = &GImGui->Settings.back(); + ini->Name = ImStrdup(name); + ini->Id = ImHash(name, 0); + ini->Collapsed = false; + ini->Pos = ImVec2(FLT_MAX,FLT_MAX); + ini->Size = ImVec2(0,0); + return ini; +} + +// Zero-tolerance, poor-man .ini parsing +// FIXME: Write something less rubbish +static void LoadIniSettingsFromDisk(const char* ini_filename) +{ + ImGuiContext& g = *GImGui; + if (!ini_filename) + return; + + int file_size; + char* file_data = (char*)ImLoadFileToMemory(ini_filename, "rb", &file_size, 1); + if (!file_data) + return; + + ImGuiIniData* settings = NULL; + const char* buf_end = file_data + file_size; + for (const char* line_start = file_data; line_start < buf_end; ) + { + const char* line_end = line_start; + while (line_end < buf_end && *line_end != '\n' && *line_end != '\r') + line_end++; + + if (line_start[0] == '[' && line_end > line_start && line_end[-1] == ']') + { + char name[64]; + ImFormatString(name, IM_ARRAYSIZE(name), "%.*s", (int)(line_end-line_start-2), line_start+1); + settings = FindWindowSettings(name); + if (!settings) + settings = AddWindowSettings(name); + } + else if (settings) + { + float x, y; + int i; + if (sscanf(line_start, "Pos=%f,%f", &x, &y) == 2) + settings->Pos = ImVec2(x, y); + else if (sscanf(line_start, "Size=%f,%f", &x, &y) == 2) + settings->Size = ImMax(ImVec2(x, y), g.Style.WindowMinSize); + else if (sscanf(line_start, "Collapsed=%d", &i) == 1) + settings->Collapsed = (i != 0); + } + + line_start = line_end+1; + } + + ImGui::MemFree(file_data); +} + +static void SaveIniSettingsToDisk(const char* ini_filename) +{ + ImGuiContext& g = *GImGui; + g.SettingsDirtyTimer = 0.0f; + if (!ini_filename) + return; + + // Gather data from windows that were active during this session + for (int i = 0; i != g.Windows.Size; i++) + { + ImGuiWindow* window = g.Windows[i]; + if (window->Flags & ImGuiWindowFlags_NoSavedSettings) + continue; + ImGuiIniData* settings = FindWindowSettings(window->Name); + settings->Pos = window->Pos; + settings->Size = window->SizeFull; + settings->Collapsed = window->Collapsed; + } + + // Write .ini file + // If a window wasn't opened in this session we preserve its settings + FILE* f = ImFileOpen(ini_filename, "wt"); + if (!f) + return; + for (int i = 0; i != g.Settings.Size; i++) + { + const ImGuiIniData* settings = &g.Settings[i]; + if (settings->Pos.x == FLT_MAX) + continue; + const char* name = settings->Name; + if (const char* p = strstr(name, "###")) // Skip to the "###" marker if any. We don't skip past to match the behavior of GetID() + name = p; + fprintf(f, "[%s]\n", name); + fprintf(f, "Pos=%d,%d\n", (int)settings->Pos.x, (int)settings->Pos.y); + fprintf(f, "Size=%d,%d\n", (int)settings->Size.x, (int)settings->Size.y); + fprintf(f, "Collapsed=%d\n", settings->Collapsed); + fprintf(f, "\n"); + } + + fclose(f); +} + +static void MarkIniSettingsDirty() +{ + ImGuiContext& g = *GImGui; + if (g.SettingsDirtyTimer <= 0.0f) + g.SettingsDirtyTimer = g.IO.IniSavingRate; +} + +// FIXME: Add a more explicit sort order in the window structure. +static int ChildWindowComparer(const void* lhs, const void* rhs) +{ + const ImGuiWindow* a = *(const ImGuiWindow**)lhs; + const ImGuiWindow* b = *(const ImGuiWindow**)rhs; + if (int d = (a->Flags & ImGuiWindowFlags_Popup) - (b->Flags & ImGuiWindowFlags_Popup)) + return d; + if (int d = (a->Flags & ImGuiWindowFlags_Tooltip) - (b->Flags & ImGuiWindowFlags_Tooltip)) + return d; + if (int d = (a->Flags & ImGuiWindowFlags_ComboBox) - (b->Flags & ImGuiWindowFlags_ComboBox)) + return d; + return (a->IndexWithinParent - b->IndexWithinParent); +} + +static void AddWindowToSortedBuffer(ImVector& out_sorted_windows, ImGuiWindow* window) +{ + out_sorted_windows.push_back(window); + if (window->Active) + { + int count = window->DC.ChildWindows.Size; + if (count > 1) + qsort(window->DC.ChildWindows.begin(), (size_t)count, sizeof(ImGuiWindow*), ChildWindowComparer); + for (int i = 0; i < count; i++) + { + ImGuiWindow* child = window->DC.ChildWindows[i]; + if (child->Active) + AddWindowToSortedBuffer(out_sorted_windows, child); + } + } +} + +static void AddDrawListToRenderList(ImVector& out_render_list, ImDrawList* draw_list) +{ + if (draw_list->CmdBuffer.empty()) + return; + + // Remove trailing command if unused + ImDrawCmd& last_cmd = draw_list->CmdBuffer.back(); + if (last_cmd.ElemCount == 0 && last_cmd.UserCallback == NULL) + { + draw_list->CmdBuffer.pop_back(); + if (draw_list->CmdBuffer.empty()) + return; + } + + // Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc. + IM_ASSERT(draw_list->VtxBuffer.Size == 0 || draw_list->_VtxWritePtr == draw_list->VtxBuffer.Data + draw_list->VtxBuffer.Size); + IM_ASSERT(draw_list->IdxBuffer.Size == 0 || draw_list->_IdxWritePtr == draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size); + IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size); + + // Check that draw_list doesn't use more vertices than indexable (default ImDrawIdx = 2 bytes = 64K vertices) + // If this assert triggers because you are drawing lots of stuff manually, A) workaround by calling BeginChild()/EndChild() to put your draw commands in multiple draw lists, B) #define ImDrawIdx to a 'unsigned int' in imconfig.h and render accordingly. + IM_ASSERT((int64_t)draw_list->_VtxCurrentIdx <= ((int64_t)1L << (sizeof(ImDrawIdx)*8))); // Too many vertices in same ImDrawList. See comment above. + + out_render_list.push_back(draw_list); + GImGui->IO.MetricsRenderVertices += draw_list->VtxBuffer.Size; + GImGui->IO.MetricsRenderIndices += draw_list->IdxBuffer.Size; +} + +static void AddWindowToRenderList(ImVector& out_render_list, ImGuiWindow* window) +{ + AddDrawListToRenderList(out_render_list, window->DrawList); + for (int i = 0; i < window->DC.ChildWindows.Size; i++) + { + ImGuiWindow* child = window->DC.ChildWindows[i]; + if (!child->Active) // clipped children may have been marked not active + continue; + if ((child->Flags & ImGuiWindowFlags_Popup) && child->HiddenFrames > 0) + continue; + AddWindowToRenderList(out_render_list, child); + } +} + +// When using this function it is sane to ensure that float are perfectly rounded to integer values, to that e.g. (int)(max.x-min.x) in user's render produce correct result. +void ImGui::PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DrawList->PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + window->ClipRect = window->DrawList->_ClipRectStack.back(); +} + +void ImGui::PopClipRect() +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DrawList->PopClipRect(); + window->ClipRect = window->DrawList->_ClipRectStack.back(); +} + +// This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal. +void ImGui::EndFrame() +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(g.Initialized); // Forgot to call ImGui::NewFrame() + IM_ASSERT(g.FrameCountEnded != g.FrameCount); // ImGui::EndFrame() called multiple times, or forgot to call ImGui::NewFrame() again + + // Render tooltip + if (g.Tooltip[0]) + { + ImGui::BeginTooltip(); + ImGui::TextUnformatted(g.Tooltip); + ImGui::EndTooltip(); + } + + // Notify OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME) + if (g.IO.ImeSetInputScreenPosFn && ImLengthSqr(g.OsImePosRequest - g.OsImePosSet) > 0.0001f) + { + g.IO.ImeSetInputScreenPosFn((int)g.OsImePosRequest.x, (int)g.OsImePosRequest.y); + g.OsImePosSet = g.OsImePosRequest; + } + + // Hide implicit "Debug" window if it hasn't been used + IM_ASSERT(g.CurrentWindowStack.Size == 1); // Mismatched Begin()/End() calls + if (g.CurrentWindow && !g.CurrentWindow->Accessed) + g.CurrentWindow->Active = false; + ImGui::End(); + + // Click to focus window and start moving (after we're done with all our widgets) + if (g.ActiveId == 0 && g.HoveredId == 0 && g.IO.MouseClicked[0]) + { + if (!(g.FocusedWindow && !g.FocusedWindow->WasActive && g.FocusedWindow->Active)) // Unless we just made a popup appear + { + if (g.HoveredRootWindow != NULL) + { + FocusWindow(g.HoveredWindow); + if (!(g.HoveredWindow->Flags & ImGuiWindowFlags_NoMove)) + { + g.MovedWindow = g.HoveredWindow; + g.MovedWindowMoveId = g.HoveredRootWindow->MoveId; + SetActiveID(g.MovedWindowMoveId, g.HoveredRootWindow); + } + } + else if (g.FocusedWindow != NULL && GetFrontMostModalRootWindow() == NULL) + { + // Clicking on void disable focus + FocusWindow(NULL); + } + } + } + + // Sort the window list so that all child windows are after their parent + // We cannot do that on FocusWindow() because childs may not exist yet + g.WindowsSortBuffer.resize(0); + g.WindowsSortBuffer.reserve(g.Windows.Size); + for (int i = 0; i != g.Windows.Size; i++) + { + ImGuiWindow* window = g.Windows[i]; + if (window->Active && (window->Flags & ImGuiWindowFlags_ChildWindow)) // if a child is active its parent will add it + continue; + AddWindowToSortedBuffer(g.WindowsSortBuffer, window); + } + IM_ASSERT(g.Windows.Size == g.WindowsSortBuffer.Size); // we done something wrong + g.Windows.swap(g.WindowsSortBuffer); + + // Clear Input data for next frame + g.IO.MouseWheel = 0.0f; + memset(g.IO.InputCharacters, 0, sizeof(g.IO.InputCharacters)); + + g.FrameCountEnded = g.FrameCount; +} + +void ImGui::Render() +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(g.Initialized); // Forgot to call ImGui::NewFrame() + + if (g.FrameCountEnded != g.FrameCount) + ImGui::EndFrame(); + g.FrameCountRendered = g.FrameCount; + + // Skip render altogether if alpha is 0.0 + // Note that vertex buffers have been created and are wasted, so it is best practice that you don't create windows in the first place, or consistently respond to Begin() returning false. + if (g.Style.Alpha > 0.0f) + { + // Gather windows to render + g.IO.MetricsRenderVertices = g.IO.MetricsRenderIndices = g.IO.MetricsActiveWindows = 0; + for (int i = 0; i < IM_ARRAYSIZE(g.RenderDrawLists); i++) + g.RenderDrawLists[i].resize(0); + for (int i = 0; i != g.Windows.Size; i++) + { + ImGuiWindow* window = g.Windows[i]; + if (window->Active && window->HiddenFrames <= 0 && (window->Flags & (ImGuiWindowFlags_ChildWindow)) == 0) + { + // FIXME: Generalize this with a proper layering system so e.g. user can draw in specific layers, below text, .. + g.IO.MetricsActiveWindows++; + if (window->Flags & ImGuiWindowFlags_Popup) + AddWindowToRenderList(g.RenderDrawLists[1], window); + else if (window->Flags & ImGuiWindowFlags_Tooltip) + AddWindowToRenderList(g.RenderDrawLists[2], window); + else + AddWindowToRenderList(g.RenderDrawLists[0], window); + } + } + + // Flatten layers + int n = g.RenderDrawLists[0].Size; + int flattened_size = n; + for (int i = 1; i < IM_ARRAYSIZE(g.RenderDrawLists); i++) + flattened_size += g.RenderDrawLists[i].Size; + g.RenderDrawLists[0].resize(flattened_size); + for (int i = 1; i < IM_ARRAYSIZE(g.RenderDrawLists); i++) + { + ImVector& layer = g.RenderDrawLists[i]; + if (layer.empty()) + continue; + memcpy(&g.RenderDrawLists[0][n], &layer[0], layer.Size * sizeof(ImDrawList*)); + n += layer.Size; + } + + // Draw software mouse cursor if requested + if (g.IO.MouseDrawCursor) + { + const ImGuiMouseCursorData& cursor_data = g.MouseCursorData[g.MouseCursor]; + const ImVec2 pos = g.IO.MousePos - cursor_data.HotOffset; + const ImVec2 size = cursor_data.Size; + const ImTextureID tex_id = g.IO.Fonts->TexID; + g.OverlayDrawList.PushTextureID(tex_id); + g.OverlayDrawList.AddImage(tex_id, pos+ImVec2(1,0), pos+ImVec2(1,0) + size, cursor_data.TexUvMin[1], cursor_data.TexUvMax[1], IM_COL32(0,0,0,48)); // Shadow + g.OverlayDrawList.AddImage(tex_id, pos+ImVec2(2,0), pos+ImVec2(2,0) + size, cursor_data.TexUvMin[1], cursor_data.TexUvMax[1], IM_COL32(0,0,0,48)); // Shadow + g.OverlayDrawList.AddImage(tex_id, pos, pos + size, cursor_data.TexUvMin[1], cursor_data.TexUvMax[1], IM_COL32(0,0,0,255)); // Black border + g.OverlayDrawList.AddImage(tex_id, pos, pos + size, cursor_data.TexUvMin[0], cursor_data.TexUvMax[0], IM_COL32(255,255,255,255)); // White fill + g.OverlayDrawList.PopTextureID(); + } + if (!g.OverlayDrawList.VtxBuffer.empty()) + AddDrawListToRenderList(g.RenderDrawLists[0], &g.OverlayDrawList); + + // Setup draw data + g.RenderDrawData.Valid = true; + g.RenderDrawData.CmdLists = (g.RenderDrawLists[0].Size > 0) ? &g.RenderDrawLists[0][0] : NULL; + g.RenderDrawData.CmdListsCount = g.RenderDrawLists[0].Size; + g.RenderDrawData.TotalVtxCount = g.IO.MetricsRenderVertices; + g.RenderDrawData.TotalIdxCount = g.IO.MetricsRenderIndices; + + // Render. If user hasn't set a callback then they may retrieve the draw data via GetDrawData() + if (g.RenderDrawData.CmdListsCount > 0 && g.IO.RenderDrawListsFn != NULL) + g.IO.RenderDrawListsFn(&g.RenderDrawData); + } +} + +const char* ImGui::FindRenderedTextEnd(const char* text, const char* text_end) +{ + const char* text_display_end = text; + if (!text_end) + text_end = (const char*)-1; + + while (text_display_end < text_end && *text_display_end != '\0' && (text_display_end[0] != '#' || text_display_end[1] != '#')) + text_display_end++; + return text_display_end; +} + +// Pass text data straight to log (without being displayed) +void ImGui::LogText(const char* fmt, ...) +{ + ImGuiContext& g = *GImGui; + if (!g.LogEnabled) + return; + + va_list args; + va_start(args, fmt); + if (g.LogFile) + { + vfprintf(g.LogFile, fmt, args); + } + else + { + g.LogClipboard->appendv(fmt, args); + } + va_end(args); +} + +// Internal version that takes a position to decide on newline placement and pad items according to their depth. +// We split text into individual lines to add current tree level padding +static void LogRenderedText(const ImVec2& ref_pos, const char* text, const char* text_end) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = ImGui::GetCurrentWindowRead(); + + if (!text_end) + text_end = ImGui::FindRenderedTextEnd(text, text_end); + + const bool log_new_line = ref_pos.y > window->DC.LogLinePosY+1; + window->DC.LogLinePosY = ref_pos.y; + + const char* text_remaining = text; + if (g.LogStartDepth > window->DC.TreeDepth) // Re-adjust padding if we have popped out of our starting depth + g.LogStartDepth = window->DC.TreeDepth; + const int tree_depth = (window->DC.TreeDepth - g.LogStartDepth); + for (;;) + { + // Split the string. Each new line (after a '\n') is followed by spacing corresponding to the current depth of our log entry. + const char* line_end = text_remaining; + while (line_end < text_end) + if (*line_end == '\n') + break; + else + line_end++; + if (line_end >= text_end) + line_end = NULL; + + const bool is_first_line = (text == text_remaining); + bool is_last_line = false; + if (line_end == NULL) + { + is_last_line = true; + line_end = text_end; + } + if (line_end != NULL && !(is_last_line && (line_end - text_remaining)==0)) + { + const int char_count = (int)(line_end - text_remaining); + if (log_new_line || !is_first_line) + ImGui::LogText(IM_NEWLINE "%*s%.*s", tree_depth*4, "", char_count, text_remaining); + else + ImGui::LogText(" %.*s", char_count, text_remaining); + } + + if (is_last_line) + break; + text_remaining = line_end + 1; + } +} + +// Internal ImGui functions to render text +// RenderText***() functions calls ImDrawList::AddText() calls ImBitmapFont::RenderText() +void ImGui::RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + + // Hide anything after a '##' string + const char* text_display_end; + if (hide_text_after_hash) + { + text_display_end = FindRenderedTextEnd(text, text_end); + } + else + { + if (!text_end) + text_end = text + strlen(text); // FIXME-OPT + text_display_end = text_end; + } + + const int text_len = (int)(text_display_end - text); + if (text_len > 0) + { + window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_display_end); + if (g.LogEnabled) + LogRenderedText(pos, text, text_display_end); + } +} + +void ImGui::RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + + if (!text_end) + text_end = text + strlen(text); // FIXME-OPT + + const int text_len = (int)(text_end - text); + if (text_len > 0) + { + window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_end, wrap_width); + if (g.LogEnabled) + LogRenderedText(pos, text, text_end); + } +} + +// Default clip_rect uses (pos_min,pos_max) +// Handle clipping on CPU immediately (vs typically let the GPU clip the triangles that are overlapping the clipping rectangle edges) +void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect) +{ + // Hide anything after a '##' string + const char* text_display_end = FindRenderedTextEnd(text, text_end); + const int text_len = (int)(text_display_end - text); + if (text_len == 0) + return; + + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + + // Perform CPU side clipping for single clipped element to avoid using scissor state + ImVec2 pos = pos_min; + const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_display_end, false, 0.0f); + + const ImVec2* clip_min = clip_rect ? &clip_rect->Min : &pos_min; + const ImVec2* clip_max = clip_rect ? &clip_rect->Max : &pos_max; + bool need_clipping = (pos.x + text_size.x >= clip_max->x) || (pos.y + text_size.y >= clip_max->y); + if (clip_rect) // If we had no explicit clipping rectangle then pos==clip_min + need_clipping |= (pos.x < clip_min->x) || (pos.y < clip_min->y); + + // Align whole block. We should defer that to the better rendering function when we'll have support for individual line alignment. + if (align.x > 0.0f) pos.x = ImMax(pos.x, pos.x + (pos_max.x - pos.x - text_size.x) * align.x); + if (align.y > 0.0f) pos.y = ImMax(pos.y, pos.y + (pos_max.y - pos.y - text_size.y) * align.y); + + // Render + if (need_clipping) + { + ImVec4 fine_clip_rect(clip_min->x, clip_min->y, clip_max->x, clip_max->y); + window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, &fine_clip_rect); + } + else + { + window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, NULL); + } + if (g.LogEnabled) + LogRenderedText(pos, text, text_display_end); +} + +// Render a rectangle shaped with optional rounding and borders +void ImGui::RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border, float rounding) +{ + ImGuiWindow* window = GetCurrentWindow(); + + window->DrawList->AddRectFilled(p_min, p_max, fill_col, rounding); + if (border && (window->Flags & ImGuiWindowFlags_ShowBorders)) + { + window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding); + window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding); + } +} + +// Render a triangle to denote expanded/collapsed state +void ImGui::RenderCollapseTriangle(ImVec2 p_min, bool is_open, float scale) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + + const float h = g.FontSize * 1.00f; + const float r = h * 0.40f * scale; + ImVec2 center = p_min + ImVec2(h*0.50f, h*0.50f*scale); + + ImVec2 a, b, c; + if (is_open) + { + center.y -= r*0.25f; + a = center + ImVec2(0,1)*r; + b = center + ImVec2(-0.866f,-0.5f)*r; + c = center + ImVec2(0.866f,-0.5f)*r; + } + else + { + a = center + ImVec2(1,0)*r; + b = center + ImVec2(-0.500f,0.866f)*r; + c = center + ImVec2(-0.500f,-0.866f)*r; + } + + window->DrawList->AddTriangleFilled(a, b, c, GetColorU32(ImGuiCol_Text)); +} + +void ImGui::RenderBullet(ImVec2 pos) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DrawList->AddCircleFilled(pos, GImGui->FontSize*0.20f, GetColorU32(ImGuiCol_Text), 8); +} + +void ImGui::RenderCheckMark(ImVec2 pos, ImU32 col) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + + ImVec2 a, b, c; + float start_x = (float)(int)(g.FontSize * 0.307f + 0.5f); + float rem_third = (float)(int)((g.FontSize - start_x) / 3.0f); + a.x = pos.x + 0.5f + start_x; + b.x = a.x + rem_third; + c.x = a.x + rem_third * 3.0f; + b.y = pos.y - 1.0f + (float)(int)(g.Font->Ascent * (g.FontSize / g.Font->FontSize) + 0.5f) + (float)(int)(g.Font->DisplayOffset.y); + a.y = b.y - rem_third; + c.y = b.y - rem_third * 2.0f; + + window->DrawList->PathLineTo(a); + window->DrawList->PathLineTo(b); + window->DrawList->PathLineTo(c); + window->DrawList->PathStroke(col, false); +} + +// Calculate text size. Text can be multi-line. Optionally ignore text after a ## marker. +// CalcTextSize("") should return ImVec2(0.0f, GImGui->FontSize) +ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_text_after_double_hash, float wrap_width) +{ + ImGuiContext& g = *GImGui; + + const char* text_display_end; + if (hide_text_after_double_hash) + text_display_end = FindRenderedTextEnd(text, text_end); // Hide anything after a '##' string + else + text_display_end = text_end; + + ImFont* font = g.Font; + const float font_size = g.FontSize; + if (text == text_display_end) + return ImVec2(0.0f, font_size); + ImVec2 text_size = font->CalcTextSizeA(font_size, FLT_MAX, wrap_width, text, text_display_end, NULL); + + // Cancel out character spacing for the last character of a line (it is baked into glyph->XAdvance field) + const float font_scale = font_size / font->FontSize; + const float character_spacing_x = 1.0f * font_scale; + if (text_size.x > 0.0f) + text_size.x -= character_spacing_x; + text_size.x = (float)(int)(text_size.x + 0.95f); + + return text_size; +} + +// Helper to calculate coarse clipping of large list of evenly sized items. +// NB: Prefer using the ImGuiListClipper higher-level helper if you can! Read comments and instructions there on how those use this sort of pattern. +// NB: 'items_count' is only used to clamp the result, if you don't know your count you can use INT_MAX +void ImGui::CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindowRead(); + if (g.LogEnabled) + { + // If logging is active, do not perform any clipping + *out_items_display_start = 0; + *out_items_display_end = items_count; + return; + } + if (window->SkipItems) + { + *out_items_display_start = *out_items_display_end = 0; + return; + } + + const ImVec2 pos = window->DC.CursorPos; + int start = (int)((window->ClipRect.Min.y - pos.y) / items_height); + int end = (int)((window->ClipRect.Max.y - pos.y) / items_height); + start = ImClamp(start, 0, items_count); + end = ImClamp(end + 1, start, items_count); + *out_items_display_start = start; + *out_items_display_end = end; +} + +// Find window given position, search front-to-back +// FIXME: Note that we have a lag here because WindowRectClipped is updated in Begin() so windows moved by user via SetWindowPos() and not SetNextWindowPos() will have that rectangle lagging by a frame at the time FindHoveredWindow() is called, aka before the next Begin(). Moving window thankfully isn't affected. +static ImGuiWindow* FindHoveredWindow(ImVec2 pos, bool excluding_childs) +{ + ImGuiContext& g = *GImGui; + for (int i = g.Windows.Size-1; i >= 0; i--) + { + ImGuiWindow* window = g.Windows[i]; + if (!window->Active) + continue; + if (window->Flags & ImGuiWindowFlags_NoInputs) + continue; + if (excluding_childs && (window->Flags & ImGuiWindowFlags_ChildWindow) != 0) + continue; + + // Using the clipped AABB so a child window will typically be clipped by its parent. + ImRect bb(window->WindowRectClipped.Min - g.Style.TouchExtraPadding, window->WindowRectClipped.Max + g.Style.TouchExtraPadding); + if (bb.Contains(pos)) + return window; + } + return NULL; +} + +// Test if mouse cursor is hovering given rectangle +// NB- Rectangle is clipped by our current clip setting +// NB- Expand the rectangle to be generous on imprecise inputs systems (g.Style.TouchExtraPadding) +bool ImGui::IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindowRead(); + + // Clip + ImRect rect_clipped(r_min, r_max); + if (clip) + rect_clipped.Clip(window->ClipRect); + + // Expand for touch input + const ImRect rect_for_touch(rect_clipped.Min - g.Style.TouchExtraPadding, rect_clipped.Max + g.Style.TouchExtraPadding); + return rect_for_touch.Contains(g.IO.MousePos); +} + +bool ImGui::IsMouseHoveringWindow() +{ + ImGuiContext& g = *GImGui; + return g.HoveredWindow == g.CurrentWindow; +} + +bool ImGui::IsMouseHoveringAnyWindow() +{ + ImGuiContext& g = *GImGui; + return g.HoveredWindow != NULL; +} + +bool ImGui::IsPosHoveringAnyWindow(const ImVec2& pos) +{ + return FindHoveredWindow(pos, false) != NULL; +} + +static bool IsKeyPressedMap(ImGuiKey key, bool repeat) +{ + const int key_index = GImGui->IO.KeyMap[key]; + return ImGui::IsKeyPressed(key_index, repeat); +} + +int ImGui::GetKeyIndex(ImGuiKey key) +{ + IM_ASSERT(key >= 0 && key < ImGuiKey_COUNT); + return GImGui->IO.KeyMap[key]; +} + +bool ImGui::IsKeyDown(int key_index) +{ + if (key_index < 0) return false; + IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(GImGui->IO.KeysDown)); + return GImGui->IO.KeysDown[key_index]; +} + +bool ImGui::IsKeyPressed(int key_index, bool repeat) +{ + ImGuiContext& g = *GImGui; + if (key_index < 0) return false; + IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(g.IO.KeysDown)); + const float t = g.IO.KeysDownDuration[key_index]; + if (t == 0.0f) + return true; + + if (repeat && t > g.IO.KeyRepeatDelay) + { + float delay = g.IO.KeyRepeatDelay, rate = g.IO.KeyRepeatRate; + if ((fmodf(t - delay, rate) > rate*0.5f) != (fmodf(t - delay - g.IO.DeltaTime, rate) > rate*0.5f)) + return true; + } + return false; +} + +bool ImGui::IsKeyReleased(int key_index) +{ + ImGuiContext& g = *GImGui; + if (key_index < 0) return false; + IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(g.IO.KeysDown)); + if (g.IO.KeysDownDurationPrev[key_index] >= 0.0f && !g.IO.KeysDown[key_index]) + return true; + return false; +} + +bool ImGui::IsMouseDown(int button) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + return g.IO.MouseDown[button]; +} + +bool ImGui::IsMouseClicked(int button, bool repeat) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + const float t = g.IO.MouseDownDuration[button]; + if (t == 0.0f) + return true; + + if (repeat && t > g.IO.KeyRepeatDelay) + { + float delay = g.IO.KeyRepeatDelay, rate = g.IO.KeyRepeatRate; + if ((fmodf(t - delay, rate) > rate*0.5f) != (fmodf(t - delay - g.IO.DeltaTime, rate) > rate*0.5f)) + return true; + } + + return false; +} + +bool ImGui::IsMouseReleased(int button) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + return g.IO.MouseReleased[button]; +} + +bool ImGui::IsMouseDoubleClicked(int button) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + return g.IO.MouseDoubleClicked[button]; +} + +bool ImGui::IsMouseDragging(int button, float lock_threshold) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + if (!g.IO.MouseDown[button]) + return false; + if (lock_threshold < 0.0f) + lock_threshold = g.IO.MouseDragThreshold; + return g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold; +} + +ImVec2 ImGui::GetMousePos() +{ + return GImGui->IO.MousePos; +} + +// NB: prefer to call right after BeginPopup(). At the time Selectable/MenuItem is activated, the popup is already closed! +ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup() +{ + ImGuiContext& g = *GImGui; + if (g.CurrentPopupStack.Size > 0) + return g.OpenPopupStack[g.CurrentPopupStack.Size-1].MousePosOnOpen; + return g.IO.MousePos; +} + +ImVec2 ImGui::GetMouseDragDelta(int button, float lock_threshold) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + if (lock_threshold < 0.0f) + lock_threshold = g.IO.MouseDragThreshold; + if (g.IO.MouseDown[button]) + if (g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold) + return g.IO.MousePos - g.IO.MouseClickedPos[button]; // Assume we can only get active with left-mouse button (at the moment). + return ImVec2(0.0f, 0.0f); +} + +void ImGui::ResetMouseDragDelta(int button) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); + // NB: We don't need to reset g.IO.MouseDragMaxDistanceSqr + g.IO.MouseClickedPos[button] = g.IO.MousePos; +} + +ImGuiMouseCursor ImGui::GetMouseCursor() +{ + return GImGui->MouseCursor; +} + +void ImGui::SetMouseCursor(ImGuiMouseCursor cursor_type) +{ + GImGui->MouseCursor = cursor_type; +} + +void ImGui::CaptureKeyboardFromApp(bool capture) +{ + GImGui->CaptureKeyboardNextFrame = capture ? 1 : 0; +} + +void ImGui::CaptureMouseFromApp(bool capture) +{ + GImGui->CaptureMouseNextFrame = capture ? 1 : 0; +} + +bool ImGui::IsItemHovered() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.LastItemHoveredAndUsable; +} + +bool ImGui::IsItemHoveredRect() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.LastItemHoveredRect; +} + +bool ImGui::IsItemActive() +{ + ImGuiContext& g = *GImGui; + if (g.ActiveId) + { + ImGuiWindow* window = GetCurrentWindowRead(); + return g.ActiveId == window->DC.LastItemId; + } + return false; +} + +bool ImGui::IsItemClicked(int mouse_button) +{ + return IsMouseClicked(mouse_button) && IsItemHovered(); +} + +bool ImGui::IsAnyItemHovered() +{ + return GImGui->HoveredId != 0 || GImGui->HoveredIdPreviousFrame != 0; +} + +bool ImGui::IsAnyItemActive() +{ + return GImGui->ActiveId != 0; +} + +bool ImGui::IsItemVisible() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + ImRect r(window->ClipRect); + return r.Overlaps(window->DC.LastItemRect); +} + +// Allow last item to be overlapped by a subsequent item. Both may be activated during the same frame before the later one takes priority. +void ImGui::SetItemAllowOverlap() +{ + ImGuiContext& g = *GImGui; + if (g.HoveredId == g.CurrentWindow->DC.LastItemId) + g.HoveredIdAllowOverlap = true; + if (g.ActiveId == g.CurrentWindow->DC.LastItemId) + g.ActiveIdAllowOverlap = true; +} + +ImVec2 ImGui::GetItemRectMin() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.LastItemRect.Min; +} + +ImVec2 ImGui::GetItemRectMax() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.LastItemRect.Max; +} + +ImVec2 ImGui::GetItemRectSize() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.LastItemRect.GetSize(); +} + +ImVec2 ImGui::CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge, float outward) +{ + ImGuiWindow* window = GetCurrentWindowRead(); + ImRect rect = window->DC.LastItemRect; + rect.Expand(outward); + return rect.GetClosestPoint(pos, on_edge); +} + +// Tooltip is stored and turned into a BeginTooltip()/EndTooltip() sequence at the end of the frame. Each call override previous value. +void ImGui::SetTooltipV(const char* fmt, va_list args) +{ + ImGuiContext& g = *GImGui; + ImFormatStringV(g.Tooltip, IM_ARRAYSIZE(g.Tooltip), fmt, args); +} + +void ImGui::SetTooltip(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + SetTooltipV(fmt, args); + va_end(args); +} + +static ImRect GetVisibleRect() +{ + ImGuiContext& g = *GImGui; + if (g.IO.DisplayVisibleMin.x != g.IO.DisplayVisibleMax.x && g.IO.DisplayVisibleMin.y != g.IO.DisplayVisibleMax.y) + return ImRect(g.IO.DisplayVisibleMin, g.IO.DisplayVisibleMax); + return ImRect(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y); +} + +void ImGui::BeginTooltip() +{ + ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize; + ImGui::Begin("##Tooltip", NULL, flags); +} + +void ImGui::EndTooltip() +{ + IM_ASSERT(GetCurrentWindowRead()->Flags & ImGuiWindowFlags_Tooltip); // Mismatched BeginTooltip()/EndTooltip() calls + ImGui::End(); +} + +static bool IsPopupOpen(ImGuiID id) +{ + ImGuiContext& g = *GImGui; + return g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].PopupId == id; +} + +// Mark popup as open (toggle toward open state). +// Popups are closed when user click outside, or activate a pressable item, or CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. +// Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +// One open popup per level of the popup hierarchy (NB: when assigning we reset the Window member of ImGuiPopupRef to NULL) +void ImGui::OpenPopupEx(const char* str_id, bool reopen_existing) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + ImGuiID id = window->GetID(str_id); + int current_stack_size = g.CurrentPopupStack.Size; + ImGuiPopupRef popup_ref = ImGuiPopupRef(id, window, window->GetID("##menus"), g.IO.MousePos); // Tagged as new ref because constructor sets Window to NULL (we are passing the ParentWindow info here) + if (g.OpenPopupStack.Size < current_stack_size + 1) + g.OpenPopupStack.push_back(popup_ref); + else if (reopen_existing || g.OpenPopupStack[current_stack_size].PopupId != id) + { + g.OpenPopupStack.resize(current_stack_size+1); + g.OpenPopupStack[current_stack_size] = popup_ref; + } +} + +void ImGui::OpenPopup(const char* str_id) +{ + ImGui::OpenPopupEx(str_id, false); +} + +static void CloseInactivePopups() +{ + ImGuiContext& g = *GImGui; + if (g.OpenPopupStack.empty()) + return; + + // When popups are stacked, clicking on a lower level popups puts focus back to it and close popups above it. + // Don't close our own child popup windows + int n = 0; + if (g.FocusedWindow) + { + for (n = 0; n < g.OpenPopupStack.Size; n++) + { + ImGuiPopupRef& popup = g.OpenPopupStack[n]; + if (!popup.Window) + continue; + IM_ASSERT((popup.Window->Flags & ImGuiWindowFlags_Popup) != 0); + if (popup.Window->Flags & ImGuiWindowFlags_ChildWindow) + continue; + + bool has_focus = false; + for (int m = n; m < g.OpenPopupStack.Size && !has_focus; m++) + has_focus = (g.OpenPopupStack[m].Window && g.OpenPopupStack[m].Window->RootWindow == g.FocusedWindow->RootWindow); + if (!has_focus) + break; + } + } + if (n < g.OpenPopupStack.Size) // This test is not required but it allows to set a useful breakpoint on the line below + g.OpenPopupStack.resize(n); +} + +static ImGuiWindow* GetFrontMostModalRootWindow() +{ + ImGuiContext& g = *GImGui; + for (int n = g.OpenPopupStack.Size-1; n >= 0; n--) + if (ImGuiWindow* front_most_popup = g.OpenPopupStack.Data[n].Window) + if (front_most_popup->Flags & ImGuiWindowFlags_Modal) + return front_most_popup; + return NULL; +} + +static void ClosePopupToLevel(int remaining) +{ + ImGuiContext& g = *GImGui; + if (remaining > 0) + ImGui::FocusWindow(g.OpenPopupStack[remaining-1].Window); + else + ImGui::FocusWindow(g.OpenPopupStack[0].ParentWindow); + g.OpenPopupStack.resize(remaining); +} + +static void ClosePopup(ImGuiID id) +{ + if (!IsPopupOpen(id)) + return; + ImGuiContext& g = *GImGui; + ClosePopupToLevel(g.OpenPopupStack.Size - 1); +} + +// Close the popup we have begin-ed into. +void ImGui::CloseCurrentPopup() +{ + ImGuiContext& g = *GImGui; + int popup_idx = g.CurrentPopupStack.Size - 1; + if (popup_idx < 0 || popup_idx > g.OpenPopupStack.Size || g.CurrentPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId) + return; + while (popup_idx > 0 && g.OpenPopupStack[popup_idx].Window && (g.OpenPopupStack[popup_idx].Window->Flags & ImGuiWindowFlags_ChildMenu)) + popup_idx--; + ClosePopupToLevel(popup_idx); +} + +static inline void ClearSetNextWindowData() +{ + ImGuiContext& g = *GImGui; + g.SetNextWindowPosCond = g.SetNextWindowSizeCond = g.SetNextWindowContentSizeCond = g.SetNextWindowCollapsedCond = 0; + g.SetNextWindowSizeConstraint = g.SetNextWindowFocus = false; +} + +static bool BeginPopupEx(const char* str_id, ImGuiWindowFlags extra_flags) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + const ImGuiID id = window->GetID(str_id); + if (!IsPopupOpen(id)) + { + ClearSetNextWindowData(); // We behave like Begin() and need to consume those values + return false; + } + + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); + ImGuiWindowFlags flags = extra_flags|ImGuiWindowFlags_Popup|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize; + + char name[20]; + if (flags & ImGuiWindowFlags_ChildMenu) + ImFormatString(name, IM_ARRAYSIZE(name), "##menu_%d", g.CurrentPopupStack.Size); // Recycle windows based on depth + else + ImFormatString(name, IM_ARRAYSIZE(name), "##popup_%08x", id); // Not recycling, so we can close/open during the same frame + + bool is_open = ImGui::Begin(name, NULL, flags); + if (!(window->Flags & ImGuiWindowFlags_ShowBorders)) + g.CurrentWindow->Flags &= ~ImGuiWindowFlags_ShowBorders; + if (!is_open) // NB: is_open can be 'false' when the popup is completely clipped (e.g. zero size display) + ImGui::EndPopup(); + + return is_open; +} + +bool ImGui::BeginPopup(const char* str_id) +{ + if (GImGui->OpenPopupStack.Size <= GImGui->CurrentPopupStack.Size) // Early out for performance + { + ClearSetNextWindowData(); // We behave like Begin() and need to consume those values + return false; + } + return BeginPopupEx(str_id, ImGuiWindowFlags_ShowBorders); +} + +bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags extra_flags) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + const ImGuiID id = window->GetID(name); + if (!IsPopupOpen(id)) + { + ClearSetNextWindowData(); // We behave like Begin() and need to consume those values + return false; + } + + ImGuiWindowFlags flags = extra_flags|ImGuiWindowFlags_Popup|ImGuiWindowFlags_Modal|ImGuiWindowFlags_NoCollapse|ImGuiWindowFlags_NoSavedSettings; + bool is_open = ImGui::Begin(name, p_open, flags); + if (!is_open || (p_open && !*p_open)) // NB: is_open can be 'false' when the popup is completely clipped (e.g. zero size display) + { + ImGui::EndPopup(); + if (is_open) + ClosePopup(id); + return false; + } + + return is_open; +} + +void ImGui::EndPopup() +{ + ImGuiWindow* window = GetCurrentWindow(); + IM_ASSERT(window->Flags & ImGuiWindowFlags_Popup); // Mismatched BeginPopup()/EndPopup() calls + IM_ASSERT(GImGui->CurrentPopupStack.Size > 0); + ImGui::End(); + if (!(window->Flags & ImGuiWindowFlags_Modal)) + ImGui::PopStyleVar(); +} + +// This is a helper to handle the most simple case of associating one named popup to one given widget. +// 1. If you have many possible popups (for different "instances" of a same widget, or for wholly different widgets), you may be better off handling +// this yourself so you can store data relative to the widget that opened the popup instead of choosing different popup identifiers. +// 2. If you want right-clicking on the same item to reopen the popup at new location, use the same code replacing IsItemHovered() with IsItemHoveredRect() +// and passing true to the OpenPopupEx(). +// Because: hovering an item in a window below the popup won't normally trigger is hovering behavior/coloring. The pattern of ignoring the fact that +// the item isn't interactable (because it is blocked by the active popup) may useful in some situation when e.g. large canvas as one item, content of menu +// driven by click position. +bool ImGui::BeginPopupContextItem(const char* str_id, int mouse_button) +{ + if (IsItemHovered() && IsMouseClicked(mouse_button)) + OpenPopupEx(str_id, false); + return BeginPopup(str_id); +} + +bool ImGui::BeginPopupContextWindow(bool also_over_items, const char* str_id, int mouse_button) +{ + if (!str_id) str_id = "window_context_menu"; + if (IsMouseHoveringWindow() && IsMouseClicked(mouse_button)) + if (also_over_items || !IsAnyItemHovered()) + OpenPopupEx(str_id, true); + return BeginPopup(str_id); +} + +bool ImGui::BeginPopupContextVoid(const char* str_id, int mouse_button) +{ + if (!str_id) str_id = "void_context_menu"; + if (!IsMouseHoveringAnyWindow() && IsMouseClicked(mouse_button)) + OpenPopupEx(str_id, true); + return BeginPopup(str_id); +} + +static bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags) +{ + ImGuiWindow* window = ImGui::GetCurrentWindow(); + ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow; + + const ImVec2 content_avail = ImGui::GetContentRegionAvail(); + ImVec2 size = ImFloor(size_arg); + if (size.x <= 0.0f) + { + if (size.x == 0.0f) + flags |= ImGuiWindowFlags_ChildWindowAutoFitX; + size.x = ImMax(content_avail.x, 4.0f) - fabsf(size.x); // Arbitrary minimum zero-ish child size of 4.0f (0.0f causing too much issues) + } + if (size.y <= 0.0f) + { + if (size.y == 0.0f) + flags |= ImGuiWindowFlags_ChildWindowAutoFitY; + size.y = ImMax(content_avail.y, 4.0f) - fabsf(size.y); + } + if (border) + flags |= ImGuiWindowFlags_ShowBorders; + flags |= extra_flags; + + char title[256]; + if (name) + ImFormatString(title, IM_ARRAYSIZE(title), "%s.%s.%08X", window->Name, name, id); + else + ImFormatString(title, IM_ARRAYSIZE(title), "%s.%08X", window->Name, id); + + bool ret = ImGui::Begin(title, NULL, size, -1.0f, flags); + + if (!(window->Flags & ImGuiWindowFlags_ShowBorders)) + ImGui::GetCurrentWindow()->Flags &= ~ImGuiWindowFlags_ShowBorders; + + return ret; +} + +bool ImGui::BeginChild(const char* str_id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags) +{ + ImGuiWindow* window = GetCurrentWindow(); + return BeginChildEx(str_id, window->GetID(str_id), size_arg, border, extra_flags); +} + +bool ImGui::BeginChild(ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags) +{ + return BeginChildEx(NULL, id, size_arg, border, extra_flags); +} + +void ImGui::EndChild() +{ + ImGuiWindow* window = GetCurrentWindow(); + + IM_ASSERT(window->Flags & ImGuiWindowFlags_ChildWindow); // Mismatched BeginChild()/EndChild() callss + if ((window->Flags & ImGuiWindowFlags_ComboBox) || window->BeginCount > 1) + { + ImGui::End(); + } + else + { + // When using auto-filling child window, we don't provide full width/height to ItemSize so that it doesn't feed back into automatic size-fitting. + ImVec2 sz = GetWindowSize(); + if (window->Flags & ImGuiWindowFlags_ChildWindowAutoFitX) // Arbitrary minimum zero-ish child size of 4.0f causes less trouble than a 0.0f + sz.x = ImMax(4.0f, sz.x); + if (window->Flags & ImGuiWindowFlags_ChildWindowAutoFitY) + sz.y = ImMax(4.0f, sz.y); + + ImGui::End(); + + window = GetCurrentWindow(); + ImRect bb(window->DC.CursorPos, window->DC.CursorPos + sz); + ItemSize(sz); + ItemAdd(bb, NULL); + } +} + +// Helper to create a child window / scrolling region that looks like a normal widget frame. +bool ImGui::BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags) +{ + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + ImGui::PushStyleColor(ImGuiCol_ChildWindowBg, style.Colors[ImGuiCol_FrameBg]); + ImGui::PushStyleVar(ImGuiStyleVar_ChildWindowRounding, style.FrameRounding); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding); + return ImGui::BeginChild(id, size, (g.CurrentWindow->Flags & ImGuiWindowFlags_ShowBorders) ? true : false, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysUseWindowPadding | extra_flags); +} + +void ImGui::EndChildFrame() +{ + ImGui::EndChild(); + ImGui::PopStyleVar(2); + ImGui::PopStyleColor(); +} + +// Save and compare stack sizes on Begin()/End() to detect usage errors +static void CheckStacksSize(ImGuiWindow* window, bool write) +{ + // NOT checking: DC.ItemWidth, DC.AllowKeyboardFocus, DC.ButtonRepeat, DC.TextWrapPos (per window) to allow user to conveniently push once and not pop (they are cleared on Begin) + ImGuiContext& g = *GImGui; + int* p_backup = &window->DC.StackSizesBackup[0]; + { int current = window->IDStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushID/PopID Mismatch!"); p_backup++; } // User forgot PopID() + { int current = window->DC.GroupStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "BeginGroup/EndGroup Mismatch!"); p_backup++; } // User forgot EndGroup() + { int current = g.CurrentPopupStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "BeginMenu/EndMenu or BeginPopup/EndPopup Mismatch"); p_backup++; }// User forgot EndPopup()/EndMenu() + { int current = g.ColorModifiers.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushStyleColor/PopStyleColor Mismatch!"); p_backup++; } // User forgot PopStyleColor() + { int current = g.StyleModifiers.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushStyleVar/PopStyleVar Mismatch!"); p_backup++; } // User forgot PopStyleVar() + { int current = g.FontStack.Size; if (write) *p_backup = current; else IM_ASSERT(*p_backup == current && "PushFont/PopFont Mismatch!"); p_backup++; } // User forgot PopFont() + IM_ASSERT(p_backup == window->DC.StackSizesBackup + IM_ARRAYSIZE(window->DC.StackSizesBackup)); +} + +static ImVec2 FindBestPopupWindowPos(const ImVec2& base_pos, const ImVec2& size, int* last_dir, const ImRect& r_inner) +{ + const ImGuiStyle& style = GImGui->Style; + + // Clamp into visible area while not overlapping the cursor. Safety padding is optional if our popup size won't fit without it. + ImVec2 safe_padding = style.DisplaySafeAreaPadding; + ImRect r_outer(GetVisibleRect()); + r_outer.Reduce(ImVec2((size.x - r_outer.GetWidth() > safe_padding.x*2) ? safe_padding.x : 0.0f, (size.y - r_outer.GetHeight() > safe_padding.y*2) ? safe_padding.y : 0.0f)); + ImVec2 base_pos_clamped = ImClamp(base_pos, r_outer.Min, r_outer.Max - size); + + for (int n = (*last_dir != -1) ? -1 : 0; n < 4; n++) // Last, Right, down, up, left. (Favor last used direction). + { + const int dir = (n == -1) ? *last_dir : n; + ImRect rect(dir == 0 ? r_inner.Max.x : r_outer.Min.x, dir == 1 ? r_inner.Max.y : r_outer.Min.y, dir == 3 ? r_inner.Min.x : r_outer.Max.x, dir == 2 ? r_inner.Min.y : r_outer.Max.y); + if (rect.GetWidth() < size.x || rect.GetHeight() < size.y) + continue; + *last_dir = dir; + return ImVec2(dir == 0 ? r_inner.Max.x : dir == 3 ? r_inner.Min.x - size.x : base_pos_clamped.x, dir == 1 ? r_inner.Max.y : dir == 2 ? r_inner.Min.y - size.y : base_pos_clamped.y); + } + + // Fallback, try to keep within display + *last_dir = -1; + ImVec2 pos = base_pos; + pos.x = ImMax(ImMin(pos.x + size.x, r_outer.Max.x) - size.x, r_outer.Min.x); + pos.y = ImMax(ImMin(pos.y + size.y, r_outer.Max.y) - size.y, r_outer.Min.y); + return pos; +} + +ImGuiWindow* ImGui::FindWindowByName(const char* name) +{ + // FIXME-OPT: Store sorted hashes -> pointers so we can do a bissection in a contiguous block + ImGuiContext& g = *GImGui; + ImGuiID id = ImHash(name, 0); + for (int i = 0; i < g.Windows.Size; i++) + if (g.Windows[i]->ID == id) + return g.Windows[i]; + return NULL; +} + +static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags) +{ + ImGuiContext& g = *GImGui; + + // Create window the first time + ImGuiWindow* window = (ImGuiWindow*)ImGui::MemAlloc(sizeof(ImGuiWindow)); + IM_PLACEMENT_NEW(window) ImGuiWindow(name); + window->Flags = flags; + + if (flags & ImGuiWindowFlags_NoSavedSettings) + { + // User can disable loading and saving of settings. Tooltip and child windows also don't store settings. + window->Size = window->SizeFull = size; + } + else + { + // Retrieve settings from .ini file + // Use SetWindowPos() or SetNextWindowPos() with the appropriate condition flag to change the initial position of a window. + window->PosFloat = ImVec2(60, 60); + window->Pos = ImVec2((float)(int)window->PosFloat.x, (float)(int)window->PosFloat.y); + + ImGuiIniData* settings = FindWindowSettings(name); + if (!settings) + { + settings = AddWindowSettings(name); + } + else + { + window->SetWindowPosAllowFlags &= ~ImGuiSetCond_FirstUseEver; + window->SetWindowSizeAllowFlags &= ~ImGuiSetCond_FirstUseEver; + window->SetWindowCollapsedAllowFlags &= ~ImGuiSetCond_FirstUseEver; + } + + if (settings->Pos.x != FLT_MAX) + { + window->PosFloat = settings->Pos; + window->Pos = ImVec2((float)(int)window->PosFloat.x, (float)(int)window->PosFloat.y); + window->Collapsed = settings->Collapsed; + } + + if (ImLengthSqr(settings->Size) > 0.00001f && !(flags & ImGuiWindowFlags_NoResize)) + size = settings->Size; + window->Size = window->SizeFull = size; + } + + if ((flags & ImGuiWindowFlags_AlwaysAutoResize) != 0) + { + window->AutoFitFramesX = window->AutoFitFramesY = 2; + window->AutoFitOnlyGrows = false; + } + else + { + if (window->Size.x <= 0.0f) + window->AutoFitFramesX = 2; + if (window->Size.y <= 0.0f) + window->AutoFitFramesY = 2; + window->AutoFitOnlyGrows = (window->AutoFitFramesX > 0) || (window->AutoFitFramesY > 0); + } + + if (flags & ImGuiWindowFlags_NoBringToFrontOnFocus) + g.Windows.insert(g.Windows.begin(), window); // Quite slow but rare and only once + else + g.Windows.push_back(window); + return window; +} + +static void ApplySizeFullWithConstraint(ImGuiWindow* window, ImVec2 new_size) +{ + ImGuiContext& g = *GImGui; + if (g.SetNextWindowSizeConstraint) + { + // Using -1,-1 on either X/Y axis to preserve the current size. + ImRect cr = g.SetNextWindowSizeConstraintRect; + new_size.x = (cr.Min.x >= 0 && cr.Max.x >= 0) ? ImClamp(new_size.x, cr.Min.x, cr.Max.x) : window->SizeFull.x; + new_size.y = (cr.Min.y >= 0 && cr.Max.y >= 0) ? ImClamp(new_size.y, cr.Min.y, cr.Max.y) : window->SizeFull.y; + if (g.SetNextWindowSizeConstraintCallback) + { + ImGuiSizeConstraintCallbackData data; + data.UserData = g.SetNextWindowSizeConstraintCallbackUserData; + data.Pos = window->Pos; + data.CurrentSize = window->SizeFull; + data.DesiredSize = new_size; + g.SetNextWindowSizeConstraintCallback(&data); + new_size = data.DesiredSize; + } + } + if (!(window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_AlwaysAutoResize))) + new_size = ImMax(new_size, g.Style.WindowMinSize); + window->SizeFull = new_size; +} + +// Push a new ImGui window to add widgets to. +// - A default window called "Debug" is automatically stacked at the beginning of every frame so you can use widgets without explicitly calling a Begin/End pair. +// - Begin/End can be called multiple times during the frame with the same window name to append content. +// - 'size_on_first_use' for a regular window denote the initial size for first-time creation (no saved data) and isn't that useful. Use SetNextWindowSize() prior to calling Begin() for more flexible window manipulation. +// - The window name is used as a unique identifier to preserve window information across frames (and save rudimentary information to the .ini file). +// You can use the "##" or "###" markers to use the same label with different id, or same id with different label. See documentation at the top of this file. +// - Return false when window is collapsed, so you can early out in your code. You always need to call ImGui::End() even if false is returned. +// - Passing 'bool* p_open' displays a Close button on the upper-right corner of the window, the pointed value will be set to false when the button is pressed. +// - Passing non-zero 'size' is roughly equivalent to calling SetNextWindowSize(size, ImGuiSetCond_FirstUseEver) prior to calling Begin(). +bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) +{ + return ImGui::Begin(name, p_open, ImVec2(0.f, 0.f), -1.0f, flags); +} + +bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha, ImGuiWindowFlags flags) +{ + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + IM_ASSERT(name != NULL); // Window name required + IM_ASSERT(g.Initialized); // Forgot to call ImGui::NewFrame() + IM_ASSERT(g.FrameCountEnded != g.FrameCount); // Called ImGui::Render() or ImGui::EndFrame() and haven't called ImGui::NewFrame() again yet + + if (flags & ImGuiWindowFlags_NoInputs) + flags |= ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize; + + // Find or create + bool window_is_new = false; + ImGuiWindow* window = FindWindowByName(name); + if (!window) + { + window = CreateNewWindow(name, size_on_first_use, flags); + window_is_new = true; + } + + const int current_frame = ImGui::GetFrameCount(); + const bool first_begin_of_the_frame = (window->LastFrameActive != current_frame); + if (first_begin_of_the_frame) + window->Flags = (ImGuiWindowFlags)flags; + else + flags = window->Flags; + + // Add to stack + ImGuiWindow* parent_window = !g.CurrentWindowStack.empty() ? g.CurrentWindowStack.back() : NULL; + g.CurrentWindowStack.push_back(window); + SetCurrentWindow(window); + CheckStacksSize(window, true); + IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow)); + + bool window_was_active = (window->LastFrameActive == current_frame - 1); // Not using !WasActive because the implicit "Debug" window would always toggle off->on + if (flags & ImGuiWindowFlags_Popup) + { + ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.CurrentPopupStack.Size]; + window_was_active &= (window->PopupId == popup_ref.PopupId); + window_was_active &= (window == popup_ref.Window); + popup_ref.Window = window; + g.CurrentPopupStack.push_back(popup_ref); + window->PopupId = popup_ref.PopupId; + } + + const bool window_appearing_after_being_hidden = (window->HiddenFrames == 1); + + // Process SetNextWindow***() calls + bool window_pos_set_by_api = false, window_size_set_by_api = false; + if (g.SetNextWindowPosCond) + { + const ImVec2 backup_cursor_pos = window->DC.CursorPos; // FIXME: not sure of the exact reason of this saving/restore anymore :( need to look into that. + if (!window_was_active || window_appearing_after_being_hidden) window->SetWindowPosAllowFlags |= ImGuiSetCond_Appearing; + window_pos_set_by_api = (window->SetWindowPosAllowFlags & g.SetNextWindowPosCond) != 0; + if (window_pos_set_by_api && ImLengthSqr(g.SetNextWindowPosVal - ImVec2(-FLT_MAX,-FLT_MAX)) < 0.001f) + { + window->SetWindowPosCenterWanted = true; // May be processed on the next frame if this is our first frame and we are measuring size + window->SetWindowPosAllowFlags &= ~(ImGuiSetCond_Once | ImGuiSetCond_FirstUseEver | ImGuiSetCond_Appearing); + } + else + { + SetWindowPos(window, g.SetNextWindowPosVal, g.SetNextWindowPosCond); + } + window->DC.CursorPos = backup_cursor_pos; + g.SetNextWindowPosCond = 0; + } + if (g.SetNextWindowSizeCond) + { + if (!window_was_active || window_appearing_after_being_hidden) window->SetWindowSizeAllowFlags |= ImGuiSetCond_Appearing; + window_size_set_by_api = (window->SetWindowSizeAllowFlags & g.SetNextWindowSizeCond) != 0; + SetWindowSize(window, g.SetNextWindowSizeVal, g.SetNextWindowSizeCond); + g.SetNextWindowSizeCond = 0; + } + if (g.SetNextWindowContentSizeCond) + { + window->SizeContentsExplicit = g.SetNextWindowContentSizeVal; + g.SetNextWindowContentSizeCond = 0; + } + else if (first_begin_of_the_frame) + { + window->SizeContentsExplicit = ImVec2(0.0f, 0.0f); + } + if (g.SetNextWindowCollapsedCond) + { + if (!window_was_active || window_appearing_after_being_hidden) window->SetWindowCollapsedAllowFlags |= ImGuiSetCond_Appearing; + SetWindowCollapsed(window, g.SetNextWindowCollapsedVal, g.SetNextWindowCollapsedCond); + g.SetNextWindowCollapsedCond = 0; + } + if (g.SetNextWindowFocus) + { + ImGui::SetWindowFocus(); + g.SetNextWindowFocus = false; + } + + // Update known root window (if we are a child window, otherwise window == window->RootWindow) + int root_idx, root_non_popup_idx; + for (root_idx = g.CurrentWindowStack.Size - 1; root_idx > 0; root_idx--) + if (!(g.CurrentWindowStack[root_idx]->Flags & ImGuiWindowFlags_ChildWindow)) + break; + for (root_non_popup_idx = root_idx; root_non_popup_idx > 0; root_non_popup_idx--) + if (!(g.CurrentWindowStack[root_non_popup_idx]->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup))) + break; + window->ParentWindow = parent_window; + window->RootWindow = g.CurrentWindowStack[root_idx]; + window->RootNonPopupWindow = g.CurrentWindowStack[root_non_popup_idx]; // This is merely for displaying the TitleBgActive color. + + // When reusing window again multiple times a frame, just append content (don't need to setup again) + if (first_begin_of_the_frame) + { + window->Active = true; + window->IndexWithinParent = 0; + window->BeginCount = 0; + window->ClipRect = ImVec4(-FLT_MAX,-FLT_MAX,+FLT_MAX,+FLT_MAX); + window->LastFrameActive = current_frame; + window->IDStack.resize(1); + + // Clear draw list, setup texture, outer clipping rectangle + window->DrawList->Clear(); + window->DrawList->PushTextureID(g.Font->ContainerAtlas->TexID); + ImRect fullscreen_rect(GetVisibleRect()); + if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & (ImGuiWindowFlags_ComboBox|ImGuiWindowFlags_Popup))) + PushClipRect(parent_window->ClipRect.Min, parent_window->ClipRect.Max, true); + else + PushClipRect(fullscreen_rect.Min, fullscreen_rect.Max, true); + + if (!window_was_active) + { + // Popup first latch mouse position, will position itself when it appears next frame + window->AutoPosLastDirection = -1; + if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api) + window->PosFloat = g.IO.MousePos; + } + + // Collapse window by double-clicking on title bar + // At this point we don't have a clipping rectangle setup yet, so we can use the title bar area for hit detection and drawing + if (!(flags & ImGuiWindowFlags_NoTitleBar) && !(flags & ImGuiWindowFlags_NoCollapse)) + { + ImRect title_bar_rect = window->TitleBarRect(); + if (g.HoveredWindow == window && IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max) && g.IO.MouseDoubleClicked[0]) + { + window->Collapsed = !window->Collapsed; + if (!(flags & ImGuiWindowFlags_NoSavedSettings)) + MarkIniSettingsDirty(); + FocusWindow(window); + } + } + else + { + window->Collapsed = false; + } + + // SIZE + + // Save contents size from last frame for auto-fitting (unless explicitly specified) + window->SizeContents.x = (float)(int)((window->SizeContentsExplicit.x != 0.0f) ? window->SizeContentsExplicit.x : ((window_is_new ? 0.0f : window->DC.CursorMaxPos.x - window->Pos.x) + window->Scroll.x)); + window->SizeContents.y = (float)(int)((window->SizeContentsExplicit.y != 0.0f) ? window->SizeContentsExplicit.y : ((window_is_new ? 0.0f : window->DC.CursorMaxPos.y - window->Pos.y) + window->Scroll.y)); + + // Hide popup/tooltip window when first appearing while we measure size (because we recycle them) + if (window->HiddenFrames > 0) + window->HiddenFrames--; + if ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) != 0 && !window_was_active) + { + window->HiddenFrames = 1; + if (flags & ImGuiWindowFlags_AlwaysAutoResize) + { + if (!window_size_set_by_api) + window->Size = window->SizeFull = ImVec2(0.f, 0.f); + window->SizeContents = ImVec2(0.f, 0.f); + } + } + + // Lock window padding so that altering the ShowBorders flag for children doesn't have side-effects. + window->WindowPadding = ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & (ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_ComboBox | ImGuiWindowFlags_Popup))) ? ImVec2(0,0) : style.WindowPadding; + + // Calculate auto-fit size + ImVec2 size_auto_fit; + if ((flags & ImGuiWindowFlags_Tooltip) != 0) + { + // Tooltip always resize. We keep the spacing symmetric on both axises for aesthetic purpose. + size_auto_fit = window->SizeContents + window->WindowPadding - ImVec2(0.0f, style.ItemSpacing.y); + } + else + { + size_auto_fit = ImClamp(window->SizeContents + window->WindowPadding, style.WindowMinSize, ImMax(style.WindowMinSize, g.IO.DisplaySize - g.Style.DisplaySafeAreaPadding)); + + // Handling case of auto fit window not fitting in screen on one axis, we are growing auto fit size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than DisplaySize-WindowPadding. + if (size_auto_fit.x < window->SizeContents.x && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar)) + size_auto_fit.y += style.ScrollbarSize; + if (size_auto_fit.y < window->SizeContents.y && !(flags & ImGuiWindowFlags_NoScrollbar)) + size_auto_fit.x += style.ScrollbarSize; + size_auto_fit.y = ImMax(size_auto_fit.y - style.ItemSpacing.y, 0.0f); + } + + // Handle automatic resize + if (window->Collapsed) + { + // We still process initial auto-fit on collapsed windows to get a window width, + // But otherwise we don't honor ImGuiWindowFlags_AlwaysAutoResize when collapsed. + if (window->AutoFitFramesX > 0) + window->SizeFull.x = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.x, size_auto_fit.x) : size_auto_fit.x; + if (window->AutoFitFramesY > 0) + window->SizeFull.y = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.y, size_auto_fit.y) : size_auto_fit.y; + } + else + { + if ((flags & ImGuiWindowFlags_AlwaysAutoResize) && !window_size_set_by_api) + { + window->SizeFull = size_auto_fit; + } + else if ((window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0) && !window_size_set_by_api) + { + // Auto-fit only grows during the first few frames + if (window->AutoFitFramesX > 0) + window->SizeFull.x = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.x, size_auto_fit.x) : size_auto_fit.x; + if (window->AutoFitFramesY > 0) + window->SizeFull.y = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.y, size_auto_fit.y) : size_auto_fit.y; + if (!(flags & ImGuiWindowFlags_NoSavedSettings)) + MarkIniSettingsDirty(); + } + } + + // Apply minimum/maximum window size constraints and final size + ApplySizeFullWithConstraint(window, window->SizeFull); + window->Size = window->Collapsed ? window->TitleBarRect().GetSize() : window->SizeFull; + + // POSITION + + // Position child window + if (flags & ImGuiWindowFlags_ChildWindow) + { + window->IndexWithinParent = parent_window->DC.ChildWindows.Size; + parent_window->DC.ChildWindows.push_back(window); + } + if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup)) + { + window->Pos = window->PosFloat = parent_window->DC.CursorPos; + window->Size = window->SizeFull = size_on_first_use; // NB: argument name 'size_on_first_use' misleading here, it's really just 'size' as provided by user passed via BeginChild()->Begin(). + } + + bool window_pos_center = false; + window_pos_center |= (window->SetWindowPosCenterWanted && window->HiddenFrames == 0); + window_pos_center |= ((flags & ImGuiWindowFlags_Modal) && !window_pos_set_by_api && window_appearing_after_being_hidden); + if (window_pos_center) + { + // Center (any sort of window) + SetWindowPos(window, ImMax(style.DisplaySafeAreaPadding, fullscreen_rect.GetCenter() - window->SizeFull * 0.5f), 0); + } + else if (flags & ImGuiWindowFlags_ChildMenu) + { + IM_ASSERT(window_pos_set_by_api); + ImRect rect_to_avoid; + if (parent_window->DC.MenuBarAppending) + rect_to_avoid = ImRect(-FLT_MAX, parent_window->Pos.y + parent_window->TitleBarHeight(), FLT_MAX, parent_window->Pos.y + parent_window->TitleBarHeight() + parent_window->MenuBarHeight()); + else + rect_to_avoid = ImRect(parent_window->Pos.x + style.ItemSpacing.x, -FLT_MAX, parent_window->Pos.x + parent_window->Size.x - style.ItemSpacing.x - parent_window->ScrollbarSizes.x, FLT_MAX); // We want some overlap to convey the relative depth of each popup (here hard-coded to 4) + window->PosFloat = FindBestPopupWindowPos(window->PosFloat, window->Size, &window->AutoPosLastDirection, rect_to_avoid); + } + else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_appearing_after_being_hidden) + { + ImRect rect_to_avoid(window->PosFloat.x - 1, window->PosFloat.y - 1, window->PosFloat.x + 1, window->PosFloat.y + 1); + window->PosFloat = FindBestPopupWindowPos(window->PosFloat, window->Size, &window->AutoPosLastDirection, rect_to_avoid); + } + + // Position tooltip (always follows mouse) + if ((flags & ImGuiWindowFlags_Tooltip) != 0 && !window_pos_set_by_api) + { + ImRect rect_to_avoid(g.IO.MousePos.x - 16, g.IO.MousePos.y - 8, g.IO.MousePos.x + 24, g.IO.MousePos.y + 24); // FIXME: Completely hard-coded. Perhaps center on cursor hit-point instead? + window->PosFloat = FindBestPopupWindowPos(g.IO.MousePos, window->Size, &window->AutoPosLastDirection, rect_to_avoid); + if (window->AutoPosLastDirection == -1) + window->PosFloat = g.IO.MousePos + ImVec2(2,2); // If there's not enough room, for tooltip we prefer avoiding the cursor at all cost even if it means that part of the tooltip won't be visible. + } + + // Clamp position so it stays visible + if (!(flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Tooltip)) + { + if (!window_pos_set_by_api && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && g.IO.DisplaySize.x > 0.0f && g.IO.DisplaySize.y > 0.0f) // Ignore zero-sized display explicitly to avoid losing positions if a window manager reports zero-sized window when initializing or minimizing. + { + ImVec2 padding = ImMax(style.DisplayWindowPadding, style.DisplaySafeAreaPadding); + window->PosFloat = ImMax(window->PosFloat + window->Size, padding) - window->Size; + window->PosFloat = ImMin(window->PosFloat, g.IO.DisplaySize - padding); + } + } + window->Pos = ImVec2((float)(int)window->PosFloat.x, (float)(int)window->PosFloat.y); + + // Default item width. Make it proportional to window size if window manually resizes + if (window->Size.x > 0.0f && !(flags & ImGuiWindowFlags_Tooltip) && !(flags & ImGuiWindowFlags_AlwaysAutoResize)) + window->ItemWidthDefault = (float)(int)(window->Size.x * 0.65f); + else + window->ItemWidthDefault = (float)(int)(g.FontSize * 16.0f); + + // Prepare for focus requests + window->FocusIdxAllRequestCurrent = (window->FocusIdxAllRequestNext == INT_MAX || window->FocusIdxAllCounter == -1) ? INT_MAX : (window->FocusIdxAllRequestNext + (window->FocusIdxAllCounter+1)) % (window->FocusIdxAllCounter+1); + window->FocusIdxTabRequestCurrent = (window->FocusIdxTabRequestNext == INT_MAX || window->FocusIdxTabCounter == -1) ? INT_MAX : (window->FocusIdxTabRequestNext + (window->FocusIdxTabCounter+1)) % (window->FocusIdxTabCounter+1); + window->FocusIdxAllCounter = window->FocusIdxTabCounter = -1; + window->FocusIdxAllRequestNext = window->FocusIdxTabRequestNext = INT_MAX; + + // Apply scrolling + if (window->ScrollTarget.x < FLT_MAX) + { + window->Scroll.x = window->ScrollTarget.x; + window->ScrollTarget.x = FLT_MAX; + } + if (window->ScrollTarget.y < FLT_MAX) + { + float center_ratio = window->ScrollTargetCenterRatio.y; + window->Scroll.y = window->ScrollTarget.y - ((1.0f - center_ratio) * (window->TitleBarHeight() + window->MenuBarHeight())) - (center_ratio * window->SizeFull.y); + window->ScrollTarget.y = FLT_MAX; + } + window->Scroll = ImMax(window->Scroll, ImVec2(0.0f, 0.0f)); + if (!window->Collapsed && !window->SkipItems) + window->Scroll = ImMin(window->Scroll, ImMax(ImVec2(0.0f, 0.0f), window->SizeContents - window->SizeFull + window->ScrollbarSizes)); + + // Modal window darkens what is behind them + if ((flags & ImGuiWindowFlags_Modal) != 0 && window == GetFrontMostModalRootWindow()) + window->DrawList->AddRectFilled(fullscreen_rect.Min, fullscreen_rect.Max, GetColorU32(ImGuiCol_ModalWindowDarkening, g.ModalWindowDarkeningRatio)); + + // Draw window + handle manual resize + ImRect title_bar_rect = window->TitleBarRect(); + const float window_rounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildWindowRounding : style.WindowRounding; + if (window->Collapsed) + { + // Draw title bar only + RenderFrame(title_bar_rect.GetTL(), title_bar_rect.GetBR(), GetColorU32(ImGuiCol_TitleBgCollapsed), true, window_rounding); + } + else + { + ImU32 resize_col = 0; + const float resize_corner_size = ImMax(g.FontSize * 1.35f, window_rounding + 1.0f + g.FontSize * 0.2f); + if (!(flags & ImGuiWindowFlags_AlwaysAutoResize) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && !(flags & ImGuiWindowFlags_NoResize)) + { + // Manual resize + const ImVec2 br = window->Rect().GetBR(); + const ImRect resize_rect(br - ImVec2(resize_corner_size * 0.75f, resize_corner_size * 0.75f), br); + const ImGuiID resize_id = window->GetID("#RESIZE"); + bool hovered, held; + ButtonBehavior(resize_rect, resize_id, &hovered, &held, ImGuiButtonFlags_FlattenChilds); + resize_col = GetColorU32(held ? ImGuiCol_ResizeGripActive : hovered ? ImGuiCol_ResizeGripHovered : ImGuiCol_ResizeGrip); + + if (hovered || held) + g.MouseCursor = ImGuiMouseCursor_ResizeNWSE; + + if (g.HoveredWindow == window && held && g.IO.MouseDoubleClicked[0]) + { + // Manual auto-fit when double-clicking + ApplySizeFullWithConstraint(window, size_auto_fit); + if (!(flags & ImGuiWindowFlags_NoSavedSettings)) + MarkIniSettingsDirty(); + SetActiveID(0); + } + else if (held) + { + // We don't use an incremental MouseDelta but rather compute an absolute target size based on mouse position + ApplySizeFullWithConstraint(window, (g.IO.MousePos - g.ActiveIdClickOffset + resize_rect.GetSize()) - window->Pos); + if (!(flags & ImGuiWindowFlags_NoSavedSettings)) + MarkIniSettingsDirty(); + } + + window->Size = window->SizeFull; + title_bar_rect = window->TitleBarRect(); + } + + // Scrollbars + window->ScrollbarY = (flags & ImGuiWindowFlags_AlwaysVerticalScrollbar) || ((window->SizeContents.y > window->Size.y + style.ItemSpacing.y) && !(flags & ImGuiWindowFlags_NoScrollbar)); + window->ScrollbarX = (flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar) || ((window->SizeContents.x > window->Size.x - (window->ScrollbarY ? style.ScrollbarSize : 0.0f) - window->WindowPadding.x) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar)); + window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f); + window->BorderSize = (flags & ImGuiWindowFlags_ShowBorders) ? 1.0f : 0.0f; + + // Window background, Default Alpha + ImGuiCol bg_color_idx = ImGuiCol_WindowBg; + if ((flags & ImGuiWindowFlags_ComboBox) != 0) + bg_color_idx = ImGuiCol_ComboBg; + else if ((flags & ImGuiWindowFlags_Tooltip) != 0 || (flags & ImGuiWindowFlags_Popup) != 0) + bg_color_idx = ImGuiCol_PopupBg; + else if ((flags & ImGuiWindowFlags_ChildWindow) != 0) + bg_color_idx = ImGuiCol_ChildWindowBg; + ImVec4 bg_color = style.Colors[bg_color_idx]; + if (bg_alpha >= 0.0f) + bg_color.w = bg_alpha; + bg_color.w *= style.Alpha; + if (bg_color.w > 0.0f) + window->DrawList->AddRectFilled(window->Pos+ImVec2(0,window->TitleBarHeight()), window->Pos+window->Size, ColorConvertFloat4ToU32(bg_color), window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImGuiCorner_All : ImGuiCorner_BottomLeft|ImGuiCorner_BottomRight); + + // Title bar + if (!(flags & ImGuiWindowFlags_NoTitleBar)) + window->DrawList->AddRectFilled(title_bar_rect.GetTL(), title_bar_rect.GetBR(), GetColorU32((g.FocusedWindow && window->RootNonPopupWindow == g.FocusedWindow->RootNonPopupWindow) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg), window_rounding, ImGuiCorner_TopLeft|ImGuiCorner_TopRight); + + // Menu bar + if (flags & ImGuiWindowFlags_MenuBar) + { + ImRect menu_bar_rect = window->MenuBarRect(); + if (flags & ImGuiWindowFlags_ShowBorders) + window->DrawList->AddLine(menu_bar_rect.GetBL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_Border)); + window->DrawList->AddRectFilled(menu_bar_rect.GetTL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImGuiCorner_TopLeft|ImGuiCorner_TopRight); + } + + // Scrollbars + if (window->ScrollbarX) + Scrollbar(window, true); + if (window->ScrollbarY) + Scrollbar(window, false); + + // Render resize grip + // (after the input handling so we don't have a frame of latency) + if (!(flags & ImGuiWindowFlags_NoResize)) + { + const ImVec2 br = window->Rect().GetBR(); + window->DrawList->PathLineTo(br + ImVec2(-resize_corner_size, -window->BorderSize)); + window->DrawList->PathLineTo(br + ImVec2(-window->BorderSize, -resize_corner_size)); + window->DrawList->PathArcToFast(ImVec2(br.x - window_rounding - window->BorderSize, br.y - window_rounding - window->BorderSize), window_rounding, 0, 3); + window->DrawList->PathFill(resize_col); + } + + // Borders + if (flags & ImGuiWindowFlags_ShowBorders) + { + window->DrawList->AddRect(window->Pos+ImVec2(1,1), window->Pos+window->Size+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), window_rounding); + window->DrawList->AddRect(window->Pos, window->Pos+window->Size, GetColorU32(ImGuiCol_Border), window_rounding); + if (!(flags & ImGuiWindowFlags_NoTitleBar)) + window->DrawList->AddLine(title_bar_rect.GetBL()+ImVec2(1,0), title_bar_rect.GetBR()-ImVec2(1,0), GetColorU32(ImGuiCol_Border)); + } + } + + // Update ContentsRegionMax. All the variable it depends on are set above in this function. + window->ContentsRegionRect.Min.x = -window->Scroll.x + window->WindowPadding.x; + window->ContentsRegionRect.Min.y = -window->Scroll.y + window->WindowPadding.y + window->TitleBarHeight() + window->MenuBarHeight(); + window->ContentsRegionRect.Max.x = -window->Scroll.x - window->WindowPadding.x + (window->SizeContentsExplicit.x != 0.0f ? window->SizeContentsExplicit.x : (window->Size.x - window->ScrollbarSizes.x)); + window->ContentsRegionRect.Max.y = -window->Scroll.y - window->WindowPadding.y + (window->SizeContentsExplicit.y != 0.0f ? window->SizeContentsExplicit.y : (window->Size.y - window->ScrollbarSizes.y)); + + // Setup drawing context + window->DC.IndentX = 0.0f + window->WindowPadding.x - window->Scroll.x; + window->DC.GroupOffsetX = 0.0f; + window->DC.ColumnsOffsetX = 0.0f; + window->DC.CursorStartPos = window->Pos + ImVec2(window->DC.IndentX + window->DC.ColumnsOffsetX, window->TitleBarHeight() + window->MenuBarHeight() + window->WindowPadding.y - window->Scroll.y); + window->DC.CursorPos = window->DC.CursorStartPos; + window->DC.CursorPosPrevLine = window->DC.CursorPos; + window->DC.CursorMaxPos = window->DC.CursorStartPos; + window->DC.CurrentLineHeight = window->DC.PrevLineHeight = 0.0f; + window->DC.CurrentLineTextBaseOffset = window->DC.PrevLineTextBaseOffset = 0.0f; + window->DC.MenuBarAppending = false; + window->DC.MenuBarOffsetX = ImMax(window->WindowPadding.x, style.ItemSpacing.x); + window->DC.LogLinePosY = window->DC.CursorPos.y - 9999.0f; + window->DC.ChildWindows.resize(0); + window->DC.LayoutType = ImGuiLayoutType_Vertical; + window->DC.ItemWidth = window->ItemWidthDefault; + window->DC.TextWrapPos = -1.0f; // disabled + window->DC.AllowKeyboardFocus = true; + window->DC.ButtonRepeat = false; + window->DC.ItemWidthStack.resize(0); + window->DC.AllowKeyboardFocusStack.resize(0); + window->DC.ButtonRepeatStack.resize(0); + window->DC.TextWrapPosStack.resize(0); + window->DC.ColumnsCurrent = 0; + window->DC.ColumnsCount = 1; + window->DC.ColumnsStartPosY = window->DC.CursorPos.y; + window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY = window->DC.ColumnsStartPosY; + window->DC.TreeDepth = 0; + window->DC.StateStorage = &window->StateStorage; + window->DC.GroupStack.resize(0); + window->DC.ColorEditMode = ImGuiColorEditMode_UserSelect; + window->MenuColumns.Update(3, style.ItemSpacing.x, !window_was_active); + + if (window->AutoFitFramesX > 0) + window->AutoFitFramesX--; + if (window->AutoFitFramesY > 0) + window->AutoFitFramesY--; + + // New windows appears in front (we need to do that AFTER setting DC.CursorStartPos so our initial navigation reference rectangle can start around there) + if (!window_was_active && !(flags & ImGuiWindowFlags_NoFocusOnAppearing)) + if (!(flags & (ImGuiWindowFlags_ChildWindow|ImGuiWindowFlags_Tooltip)) || (flags & ImGuiWindowFlags_Popup)) + FocusWindow(window); + + // Title bar + if (!(flags & ImGuiWindowFlags_NoTitleBar)) + { + if (p_open != NULL) + { + const float pad = 2.0f; + const float rad = (window->TitleBarHeight() - pad*2.0f) * 0.5f; + if (CloseButton(window->GetID("#CLOSE"), window->Rect().GetTR() + ImVec2(-pad - rad, pad + rad), rad)) + *p_open = false; + } + + const ImVec2 text_size = CalcTextSize(name, NULL, true); + if (!(flags & ImGuiWindowFlags_NoCollapse)) + RenderCollapseTriangle(window->Pos + style.FramePadding, !window->Collapsed, 1.0f); + + ImVec2 text_min = window->Pos; + ImVec2 text_max = window->Pos + ImVec2(window->Size.x, style.FramePadding.y*2 + text_size.y); + ImRect clip_rect; + clip_rect.Max = ImVec2(window->Pos.x + window->Size.x - (p_open ? title_bar_rect.GetHeight() - 3 : style.FramePadding.x), text_max.y); // Match the size of CloseWindowButton() + float pad_left = (flags & ImGuiWindowFlags_NoCollapse) == 0 ? (style.FramePadding.x + g.FontSize + style.ItemInnerSpacing.x) : style.FramePadding.x; + float pad_right = (p_open != NULL) ? (style.FramePadding.x + g.FontSize + style.ItemInnerSpacing.x) : style.FramePadding.x; + if (style.WindowTitleAlign.x > 0.0f) pad_right = ImLerp(pad_right, pad_left, style.WindowTitleAlign.x); + text_min.x += pad_left; + text_max.x -= pad_right; + clip_rect.Min = ImVec2(text_min.x, window->Pos.y); + RenderTextClipped(text_min, text_max, name, NULL, &text_size, style.WindowTitleAlign, &clip_rect); + } + + // Save clipped aabb so we can access it in constant-time in FindHoveredWindow() + window->WindowRectClipped = window->Rect(); + window->WindowRectClipped.Clip(window->ClipRect); + + // Pressing CTRL+C while holding on a window copy its content to the clipboard + // This works but 1. doesn't handle multiple Begin/End pairs, 2. recursing into another Begin/End pair - so we need to work that out and add better logging scope. + // Maybe we can support CTRL+C on every element? + /* + if (g.ActiveId == move_id) + if (g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_C)) + ImGui::LogToClipboard(); + */ + } + + // Inner clipping rectangle + // We set this up after processing the resize grip so that our clip rectangle doesn't lag by a frame + // Note that if our window is collapsed we will end up with a null clipping rectangle which is the correct behavior. + const ImRect title_bar_rect = window->TitleBarRect(); + const float border_size = window->BorderSize; + ImRect clip_rect; // Force round to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result. + clip_rect.Min.x = ImFloor(0.5f + title_bar_rect.Min.x + ImMax(border_size, ImFloor(window->WindowPadding.x*0.5f))); + clip_rect.Min.y = ImFloor(0.5f + title_bar_rect.Max.y + window->MenuBarHeight() + border_size); + clip_rect.Max.x = ImFloor(0.5f + window->Pos.x + window->Size.x - window->ScrollbarSizes.x - ImMax(border_size, ImFloor(window->WindowPadding.x*0.5f))); + clip_rect.Max.y = ImFloor(0.5f + window->Pos.y + window->Size.y - window->ScrollbarSizes.y - border_size); + PushClipRect(clip_rect.Min, clip_rect.Max, true); + + // Clear 'accessed' flag last thing + if (first_begin_of_the_frame) + window->Accessed = false; + window->BeginCount++; + g.SetNextWindowSizeConstraint = false; + + // Child window can be out of sight and have "negative" clip windows. + // Mark them as collapsed so commands are skipped earlier (we can't manually collapse because they have no title bar). + if (flags & ImGuiWindowFlags_ChildWindow) + { + IM_ASSERT((flags & ImGuiWindowFlags_NoTitleBar) != 0); + window->Collapsed = parent_window && parent_window->Collapsed; + + if (!(flags & ImGuiWindowFlags_AlwaysAutoResize) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0) + window->Collapsed |= (window->WindowRectClipped.Min.x >= window->WindowRectClipped.Max.x || window->WindowRectClipped.Min.y >= window->WindowRectClipped.Max.y); + + // We also hide the window from rendering because we've already added its border to the command list. + // (we could perform the check earlier in the function but it is simpler at this point) + if (window->Collapsed) + window->Active = false; + } + if (style.Alpha <= 0.0f) + window->Active = false; + + // Return false if we don't intend to display anything to allow user to perform an early out optimization + window->SkipItems = (window->Collapsed || !window->Active) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0; + return !window->SkipItems; +} + +void ImGui::End() +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + + Columns(1, "#CloseColumns"); + PopClipRect(); // inner window clip rectangle + + // Stop logging + if (!(window->Flags & ImGuiWindowFlags_ChildWindow)) // FIXME: add more options for scope of logging + LogFinish(); + + // Pop + // NB: we don't clear 'window->RootWindow'. The pointer is allowed to live until the next call to Begin(). + g.CurrentWindowStack.pop_back(); + if (window->Flags & ImGuiWindowFlags_Popup) + g.CurrentPopupStack.pop_back(); + CheckStacksSize(window, false); + SetCurrentWindow(g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back()); +} + +// Vertical scrollbar +// The entire piece of code below is rather confusing because: +// - We handle absolute seeking (when first clicking outside the grab) and relative manipulation (afterward or when clicking inside the grab) +// - We store values as normalized ratio and in a form that allows the window content to change while we are holding on a scrollbar +// - We handle both horizontal and vertical scrollbars, which makes the terminology not ideal. +static void Scrollbar(ImGuiWindow* window, bool horizontal) +{ + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(horizontal ? "#SCROLLX" : "#SCROLLY"); + + // Render background + bool other_scrollbar = (horizontal ? window->ScrollbarY : window->ScrollbarX); + float other_scrollbar_size_w = other_scrollbar ? style.ScrollbarSize : 0.0f; + const ImRect window_rect = window->Rect(); + const float border_size = window->BorderSize; + ImRect bb = horizontal + ? ImRect(window->Pos.x + border_size, window_rect.Max.y - style.ScrollbarSize, window_rect.Max.x - other_scrollbar_size_w - border_size, window_rect.Max.y - border_size) + : ImRect(window_rect.Max.x - style.ScrollbarSize, window->Pos.y + border_size, window_rect.Max.x - border_size, window_rect.Max.y - other_scrollbar_size_w - border_size); + if (!horizontal) + bb.Min.y += window->TitleBarHeight() + ((window->Flags & ImGuiWindowFlags_MenuBar) ? window->MenuBarHeight() : 0.0f); + + float window_rounding = (window->Flags & ImGuiWindowFlags_ChildWindow) ? style.ChildWindowRounding : style.WindowRounding; + int window_rounding_corners; + if (horizontal) + window_rounding_corners = ImGuiCorner_BottomLeft | (other_scrollbar ? 0 : ImGuiCorner_BottomRight); + else + window_rounding_corners = (((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar)) ? ImGuiCorner_TopRight : 0) | (other_scrollbar ? 0 : ImGuiCorner_BottomRight); + window->DrawList->AddRectFilled(bb.Min, bb.Max, ImGui::GetColorU32(ImGuiCol_ScrollbarBg), window_rounding, window_rounding_corners); + bb.Reduce(ImVec2(ImClamp((float)(int)((bb.Max.x - bb.Min.x - 2.0f) * 0.5f), 0.0f, 3.0f), ImClamp((float)(int)((bb.Max.y - bb.Min.y - 2.0f) * 0.5f), 0.0f, 3.0f))); + + // V denote the main axis of the scrollbar + float scrollbar_size_v = horizontal ? bb.GetWidth() : bb.GetHeight(); + float scroll_v = horizontal ? window->Scroll.x : window->Scroll.y; + float win_size_avail_v = (horizontal ? window->Size.x : window->Size.y) - other_scrollbar_size_w; + float win_size_contents_v = horizontal ? window->SizeContents.x : window->SizeContents.y; + + // The grabable box size generally represent the amount visible (vs the total scrollable amount) + // But we maintain a minimum size in pixel to allow for the user to still aim inside. + const float grab_h_pixels = ImMin(ImMax(scrollbar_size_v * ImSaturate(win_size_avail_v / ImMax(win_size_contents_v, win_size_avail_v)), style.GrabMinSize), scrollbar_size_v); + const float grab_h_norm = grab_h_pixels / scrollbar_size_v; + + // Handle input right away. None of the code of Begin() is relying on scrolling position before calling Scrollbar(). + bool held = false; + bool hovered = false; + const bool previously_held = (g.ActiveId == id); + ImGui::ButtonBehavior(bb, id, &hovered, &held); + + float scroll_max = ImMax(1.0f, win_size_contents_v - win_size_avail_v); + float scroll_ratio = ImSaturate(scroll_v / scroll_max); + float grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v; + if (held && grab_h_norm < 1.0f) + { + float scrollbar_pos_v = horizontal ? bb.Min.x : bb.Min.y; + float mouse_pos_v = horizontal ? g.IO.MousePos.x : g.IO.MousePos.y; + float* click_delta_to_grab_center_v = horizontal ? &g.ScrollbarClickDeltaToGrabCenter.x : &g.ScrollbarClickDeltaToGrabCenter.y; + + // Click position in scrollbar normalized space (0.0f->1.0f) + const float clicked_v_norm = ImSaturate((mouse_pos_v - scrollbar_pos_v) / scrollbar_size_v); + ImGui::SetHoveredID(id); + + bool seek_absolute = false; + if (!previously_held) + { + // On initial click calculate the distance between mouse and the center of the grab + if (clicked_v_norm >= grab_v_norm && clicked_v_norm <= grab_v_norm + grab_h_norm) + { + *click_delta_to_grab_center_v = clicked_v_norm - grab_v_norm - grab_h_norm*0.5f; + } + else + { + seek_absolute = true; + *click_delta_to_grab_center_v = 0.0f; + } + } + + // Apply scroll + // It is ok to modify Scroll here because we are being called in Begin() after the calculation of SizeContents and before setting up our starting position + const float scroll_v_norm = ImSaturate((clicked_v_norm - *click_delta_to_grab_center_v - grab_h_norm*0.5f) / (1.0f - grab_h_norm)); + scroll_v = (float)(int)(0.5f + scroll_v_norm * scroll_max);//(win_size_contents_v - win_size_v)); + if (horizontal) + window->Scroll.x = scroll_v; + else + window->Scroll.y = scroll_v; + + // Update values for rendering + scroll_ratio = ImSaturate(scroll_v / scroll_max); + grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v; + + // Update distance to grab now that we have seeked and saturated + if (seek_absolute) + *click_delta_to_grab_center_v = clicked_v_norm - grab_v_norm - grab_h_norm*0.5f; + } + + // Render + const ImU32 grab_col = ImGui::GetColorU32(held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab); + if (horizontal) + window->DrawList->AddRectFilled(ImVec2(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm), bb.Min.y), ImVec2(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm) + grab_h_pixels, bb.Max.y), grab_col, style.ScrollbarRounding); + else + window->DrawList->AddRectFilled(ImVec2(bb.Min.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm)), ImVec2(bb.Max.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm) + grab_h_pixels), grab_col, style.ScrollbarRounding); +} + +// Moving window to front of display (which happens to be back of our sorted list) +void ImGui::FocusWindow(ImGuiWindow* window) +{ + ImGuiContext& g = *GImGui; + + // Always mark the window we passed as focused. This is used for keyboard interactions such as tabbing. + g.FocusedWindow = window; + + // Passing NULL allow to disable keyboard focus + if (!window) + return; + + // And move its root window to the top of the pile + if (window->RootWindow) + window = window->RootWindow; + + // Steal focus on active widgets + if (window->Flags & ImGuiWindowFlags_Popup) // FIXME: This statement should be unnecessary. Need further testing before removing it.. + if (g.ActiveId != 0 && g.ActiveIdWindow && g.ActiveIdWindow->RootWindow != window) + SetActiveID(0); + + // Bring to front + if ((window->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus) || g.Windows.back() == window) + return; + for (int i = 0; i < g.Windows.Size; i++) + if (g.Windows[i] == window) + { + g.Windows.erase(g.Windows.begin() + i); + break; + } + g.Windows.push_back(window); +} + +void ImGui::PushItemWidth(float item_width) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.ItemWidth = (item_width == 0.0f ? window->ItemWidthDefault : item_width); + window->DC.ItemWidthStack.push_back(window->DC.ItemWidth); +} + +static void PushMultiItemsWidths(int components, float w_full) +{ + ImGuiWindow* window = ImGui::GetCurrentWindow(); + const ImGuiStyle& style = GImGui->Style; + if (w_full <= 0.0f) + w_full = ImGui::CalcItemWidth(); + const float w_item_one = ImMax(1.0f, (float)(int)((w_full - (style.ItemInnerSpacing.x) * (components-1)) / (float)components)); + const float w_item_last = ImMax(1.0f, (float)(int)(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components-1))); + window->DC.ItemWidthStack.push_back(w_item_last); + for (int i = 0; i < components-1; i++) + window->DC.ItemWidthStack.push_back(w_item_one); + window->DC.ItemWidth = window->DC.ItemWidthStack.back(); +} + +void ImGui::PopItemWidth() +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.ItemWidthStack.pop_back(); + window->DC.ItemWidth = window->DC.ItemWidthStack.empty() ? window->ItemWidthDefault : window->DC.ItemWidthStack.back(); +} + +float ImGui::CalcItemWidth() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + float w = window->DC.ItemWidth; + if (w < 0.0f) + { + // Align to a right-side limit. We include 1 frame padding in the calculation because this is how the width is always used (we add 2 frame padding to it), but we could move that responsibility to the widget as well. + float width_to_right_edge = GetContentRegionAvail().x; + w = ImMax(1.0f, width_to_right_edge + w); + } + w = (float)(int)w; + return w; +} + +static ImFont* GetDefaultFont() +{ + ImGuiContext& g = *GImGui; + return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0]; +} + +static void SetCurrentFont(ImFont* font) +{ + ImGuiContext& g = *GImGui; + IM_ASSERT(font && font->IsLoaded()); // Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ? + IM_ASSERT(font->Scale > 0.0f); + g.Font = font; + g.FontBaseSize = g.IO.FontGlobalScale * g.Font->FontSize * g.Font->Scale; + g.FontSize = g.CurrentWindow ? g.CurrentWindow->CalcFontSize() : 0.0f; + g.FontTexUvWhitePixel = g.Font->ContainerAtlas->TexUvWhitePixel; +} + +void ImGui::PushFont(ImFont* font) +{ + ImGuiContext& g = *GImGui; + if (!font) + font = GetDefaultFont(); + SetCurrentFont(font); + g.FontStack.push_back(font); + g.CurrentWindow->DrawList->PushTextureID(font->ContainerAtlas->TexID); +} + +void ImGui::PopFont() +{ + ImGuiContext& g = *GImGui; + g.CurrentWindow->DrawList->PopTextureID(); + g.FontStack.pop_back(); + SetCurrentFont(g.FontStack.empty() ? GetDefaultFont() : g.FontStack.back()); +} + +void ImGui::PushAllowKeyboardFocus(bool allow_keyboard_focus) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.AllowKeyboardFocus = allow_keyboard_focus; + window->DC.AllowKeyboardFocusStack.push_back(allow_keyboard_focus); +} + +void ImGui::PopAllowKeyboardFocus() +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.AllowKeyboardFocusStack.pop_back(); + window->DC.AllowKeyboardFocus = window->DC.AllowKeyboardFocusStack.empty() ? true : window->DC.AllowKeyboardFocusStack.back(); +} + +void ImGui::PushButtonRepeat(bool repeat) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.ButtonRepeat = repeat; + window->DC.ButtonRepeatStack.push_back(repeat); +} + +void ImGui::PopButtonRepeat() +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.ButtonRepeatStack.pop_back(); + window->DC.ButtonRepeat = window->DC.ButtonRepeatStack.empty() ? false : window->DC.ButtonRepeatStack.back(); +} + +void ImGui::PushTextWrapPos(float wrap_pos_x) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.TextWrapPos = wrap_pos_x; + window->DC.TextWrapPosStack.push_back(wrap_pos_x); +} + +void ImGui::PopTextWrapPos() +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.TextWrapPosStack.pop_back(); + window->DC.TextWrapPos = window->DC.TextWrapPosStack.empty() ? -1.0f : window->DC.TextWrapPosStack.back(); +} + +void ImGui::PushStyleColor(ImGuiCol idx, const ImVec4& col) +{ + ImGuiContext& g = *GImGui; + ImGuiColMod backup; + backup.Col = idx; + backup.BackupValue = g.Style.Colors[idx]; + g.ColorModifiers.push_back(backup); + g.Style.Colors[idx] = col; +} + +void ImGui::PopStyleColor(int count) +{ + ImGuiContext& g = *GImGui; + while (count > 0) + { + ImGuiColMod& backup = g.ColorModifiers.back(); + g.Style.Colors[backup.Col] = backup.BackupValue; + g.ColorModifiers.pop_back(); + count--; + } +} + +struct ImGuiStyleVarInfo +{ + ImGuiDataType Type; + ImU32 Offset; + void* GetVarPtr() const { return (void*)((unsigned char*)&GImGui->Style + Offset); } +}; + +static const ImGuiStyleVarInfo GStyleVarInfo[ImGuiStyleVar_Count_] = +{ + { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) }, + { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) }, + { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) }, + { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) }, + { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildWindowRounding) }, + { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) }, + { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) }, + { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) }, + { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) }, + { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) }, + { ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) }, + { ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) }, +}; + +static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx) +{ + IM_ASSERT(idx >= 0 && idx < ImGuiStyleVar_Count_); + return &GStyleVarInfo[idx]; +} + +void ImGui::PushStyleVar(ImGuiStyleVar idx, float val) +{ + const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx); + if (var_info->Type == ImGuiDataType_Float) + { + float* pvar = (float*)var_info->GetVarPtr(); + GImGui->StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar)); + *pvar = val; + return; + } + IM_ASSERT(0); // Called function with wrong-type? Variable is not a float. +} + +void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val) +{ + const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx); + if (var_info->Type == ImGuiDataType_Float2) + { + ImVec2* pvar = (ImVec2*)var_info->GetVarPtr(); + GImGui->StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar)); + *pvar = val; + return; + } + IM_ASSERT(0); // Called function with wrong-type? Variable is not a ImVec2. +} + +void ImGui::PopStyleVar(int count) +{ + ImGuiContext& g = *GImGui; + while (count > 0) + { + ImGuiStyleMod& backup = g.StyleModifiers.back(); + const ImGuiStyleVarInfo* info = GetStyleVarInfo(backup.VarIdx); + if (info->Type == ImGuiDataType_Float) (*(float*)info->GetVarPtr()) = backup.BackupFloat[0]; + else if (info->Type == ImGuiDataType_Float2) (*(ImVec2*)info->GetVarPtr()) = ImVec2(backup.BackupFloat[0], backup.BackupFloat[1]); + else if (info->Type == ImGuiDataType_Int) (*(int*)info->GetVarPtr()) = backup.BackupInt[0]; + g.StyleModifiers.pop_back(); + count--; + } +} + +const char* ImGui::GetStyleColName(ImGuiCol idx) +{ + // Create switch-case from enum with regexp: ImGuiCol_{.*}, --> case ImGuiCol_\1: return "\1"; + switch (idx) + { + case ImGuiCol_Text: return "Text"; + case ImGuiCol_TextDisabled: return "TextDisabled"; + case ImGuiCol_WindowBg: return "WindowBg"; + case ImGuiCol_ChildWindowBg: return "ChildWindowBg"; + case ImGuiCol_PopupBg: return "PopupBg"; + case ImGuiCol_Border: return "Border"; + case ImGuiCol_BorderShadow: return "BorderShadow"; + case ImGuiCol_FrameBg: return "FrameBg"; + case ImGuiCol_FrameBgHovered: return "FrameBgHovered"; + case ImGuiCol_FrameBgActive: return "FrameBgActive"; + case ImGuiCol_TitleBg: return "TitleBg"; + case ImGuiCol_TitleBgCollapsed: return "TitleBgCollapsed"; + case ImGuiCol_TitleBgActive: return "TitleBgActive"; + case ImGuiCol_MenuBarBg: return "MenuBarBg"; + case ImGuiCol_ScrollbarBg: return "ScrollbarBg"; + case ImGuiCol_ScrollbarGrab: return "ScrollbarGrab"; + case ImGuiCol_ScrollbarGrabHovered: return "ScrollbarGrabHovered"; + case ImGuiCol_ScrollbarGrabActive: return "ScrollbarGrabActive"; + case ImGuiCol_ComboBg: return "ComboBg"; + case ImGuiCol_CheckMark: return "CheckMark"; + case ImGuiCol_SliderGrab: return "SliderGrab"; + case ImGuiCol_SliderGrabActive: return "SliderGrabActive"; + case ImGuiCol_Button: return "Button"; + case ImGuiCol_ButtonHovered: return "ButtonHovered"; + case ImGuiCol_ButtonActive: return "ButtonActive"; + case ImGuiCol_Header: return "Header"; + case ImGuiCol_HeaderHovered: return "HeaderHovered"; + case ImGuiCol_HeaderActive: return "HeaderActive"; + case ImGuiCol_Column: return "Column"; + case ImGuiCol_ColumnHovered: return "ColumnHovered"; + case ImGuiCol_ColumnActive: return "ColumnActive"; + case ImGuiCol_ResizeGrip: return "ResizeGrip"; + case ImGuiCol_ResizeGripHovered: return "ResizeGripHovered"; + case ImGuiCol_ResizeGripActive: return "ResizeGripActive"; + case ImGuiCol_CloseButton: return "CloseButton"; + case ImGuiCol_CloseButtonHovered: return "CloseButtonHovered"; + case ImGuiCol_CloseButtonActive: return "CloseButtonActive"; + case ImGuiCol_PlotLines: return "PlotLines"; + case ImGuiCol_PlotLinesHovered: return "PlotLinesHovered"; + case ImGuiCol_PlotHistogram: return "PlotHistogram"; + case ImGuiCol_PlotHistogramHovered: return "PlotHistogramHovered"; + case ImGuiCol_TextSelectedBg: return "TextSelectedBg"; + case ImGuiCol_ModalWindowDarkening: return "ModalWindowDarkening"; + } + IM_ASSERT(0); + return "Unknown"; +} + +bool ImGui::IsWindowHovered() +{ + ImGuiContext& g = *GImGui; + return g.HoveredWindow == g.CurrentWindow && IsWindowContentHoverable(g.HoveredRootWindow); +} + +bool ImGui::IsWindowFocused() +{ + ImGuiContext& g = *GImGui; + return g.FocusedWindow == g.CurrentWindow; +} + +bool ImGui::IsRootWindowFocused() +{ + ImGuiContext& g = *GImGui; + return g.FocusedWindow == g.CurrentWindow->RootWindow; +} + +bool ImGui::IsRootWindowOrAnyChildFocused() +{ + ImGuiContext& g = *GImGui; + return g.FocusedWindow && g.FocusedWindow->RootWindow == g.CurrentWindow->RootWindow; +} + +bool ImGui::IsRootWindowOrAnyChildHovered() +{ + ImGuiContext& g = *GImGui; + return g.HoveredRootWindow && (g.HoveredRootWindow == g.CurrentWindow->RootWindow) && IsWindowContentHoverable(g.HoveredRootWindow); +} + +float ImGui::GetWindowWidth() +{ + ImGuiWindow* window = GImGui->CurrentWindow; + return window->Size.x; +} + +float ImGui::GetWindowHeight() +{ + ImGuiWindow* window = GImGui->CurrentWindow; + return window->Size.y; +} + +ImVec2 ImGui::GetWindowPos() +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + return window->Pos; +} + +static void SetWindowScrollY(ImGuiWindow* window, float new_scroll_y) +{ + window->DC.CursorMaxPos.y += window->Scroll.y; + window->Scroll.y = new_scroll_y; + window->DC.CursorMaxPos.y -= window->Scroll.y; +} + +static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiSetCond cond) +{ + // Test condition (NB: bit 0 is always true) and clear flags for next time + if (cond && (window->SetWindowPosAllowFlags & cond) == 0) + return; + window->SetWindowPosAllowFlags &= ~(ImGuiSetCond_Once | ImGuiSetCond_FirstUseEver | ImGuiSetCond_Appearing); + window->SetWindowPosCenterWanted = false; + + // Set + const ImVec2 old_pos = window->Pos; + window->PosFloat = pos; + window->Pos = ImVec2((float)(int)window->PosFloat.x, (float)(int)window->PosFloat.y); + window->DC.CursorPos += (window->Pos - old_pos); // As we happen to move the window while it is being appended to (which is a bad idea - will smear) let's at least offset the cursor + window->DC.CursorMaxPos += (window->Pos - old_pos); // And more importantly we need to adjust this so size calculation doesn't get affected. +} + +void ImGui::SetWindowPos(const ImVec2& pos, ImGuiSetCond cond) +{ + ImGuiWindow* window = GetCurrentWindowRead(); + SetWindowPos(window, pos, cond); +} + +void ImGui::SetWindowPos(const char* name, const ImVec2& pos, ImGuiSetCond cond) +{ + if (ImGuiWindow* window = FindWindowByName(name)) + SetWindowPos(window, pos, cond); +} + +ImVec2 ImGui::GetWindowSize() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->Size; +} + +static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiSetCond cond) +{ + // Test condition (NB: bit 0 is always true) and clear flags for next time + if (cond && (window->SetWindowSizeAllowFlags & cond) == 0) + return; + window->SetWindowSizeAllowFlags &= ~(ImGuiSetCond_Once | ImGuiSetCond_FirstUseEver | ImGuiSetCond_Appearing); + + // Set + if (size.x > 0.0f) + { + window->AutoFitFramesX = 0; + window->SizeFull.x = size.x; + } + else + { + window->AutoFitFramesX = 2; + window->AutoFitOnlyGrows = false; + } + if (size.y > 0.0f) + { + window->AutoFitFramesY = 0; + window->SizeFull.y = size.y; + } + else + { + window->AutoFitFramesY = 2; + window->AutoFitOnlyGrows = false; + } +} + +void ImGui::SetWindowSize(const ImVec2& size, ImGuiSetCond cond) +{ + SetWindowSize(GImGui->CurrentWindow, size, cond); +} + +void ImGui::SetWindowSize(const char* name, const ImVec2& size, ImGuiSetCond cond) +{ + ImGuiWindow* window = FindWindowByName(name); + if (window) + SetWindowSize(window, size, cond); +} + +static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiSetCond cond) +{ + // Test condition (NB: bit 0 is always true) and clear flags for next time + if (cond && (window->SetWindowCollapsedAllowFlags & cond) == 0) + return; + window->SetWindowCollapsedAllowFlags &= ~(ImGuiSetCond_Once | ImGuiSetCond_FirstUseEver | ImGuiSetCond_Appearing); + + // Set + window->Collapsed = collapsed; +} + +void ImGui::SetWindowCollapsed(bool collapsed, ImGuiSetCond cond) +{ + SetWindowCollapsed(GImGui->CurrentWindow, collapsed, cond); +} + +bool ImGui::IsWindowCollapsed() +{ + return GImGui->CurrentWindow->Collapsed; +} + +void ImGui::SetWindowCollapsed(const char* name, bool collapsed, ImGuiSetCond cond) +{ + ImGuiWindow* window = FindWindowByName(name); + if (window) + SetWindowCollapsed(window, collapsed, cond); +} + +void ImGui::SetWindowFocus() +{ + FocusWindow(GImGui->CurrentWindow); +} + +void ImGui::SetWindowFocus(const char* name) +{ + if (name) + { + if (ImGuiWindow* window = FindWindowByName(name)) + FocusWindow(window); + } + else + { + FocusWindow(NULL); + } +} + +void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiSetCond cond) +{ + ImGuiContext& g = *GImGui; + g.SetNextWindowPosVal = pos; + g.SetNextWindowPosCond = cond ? cond : ImGuiSetCond_Always; +} + +void ImGui::SetNextWindowPosCenter(ImGuiSetCond cond) +{ + ImGuiContext& g = *GImGui; + g.SetNextWindowPosVal = ImVec2(-FLT_MAX, -FLT_MAX); + g.SetNextWindowPosCond = cond ? cond : ImGuiSetCond_Always; +} + +void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiSetCond cond) +{ + ImGuiContext& g = *GImGui; + g.SetNextWindowSizeVal = size; + g.SetNextWindowSizeCond = cond ? cond : ImGuiSetCond_Always; +} + +void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback, void* custom_callback_user_data) +{ + ImGuiContext& g = *GImGui; + g.SetNextWindowSizeConstraint = true; + g.SetNextWindowSizeConstraintRect = ImRect(size_min, size_max); + g.SetNextWindowSizeConstraintCallback = custom_callback; + g.SetNextWindowSizeConstraintCallbackUserData = custom_callback_user_data; +} + +void ImGui::SetNextWindowContentSize(const ImVec2& size) +{ + ImGuiContext& g = *GImGui; + g.SetNextWindowContentSizeVal = size; + g.SetNextWindowContentSizeCond = ImGuiSetCond_Always; +} + +void ImGui::SetNextWindowContentWidth(float width) +{ + ImGuiContext& g = *GImGui; + g.SetNextWindowContentSizeVal = ImVec2(width, g.SetNextWindowContentSizeCond ? g.SetNextWindowContentSizeVal.y : 0.0f); + g.SetNextWindowContentSizeCond = ImGuiSetCond_Always; +} + +void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiSetCond cond) +{ + ImGuiContext& g = *GImGui; + g.SetNextWindowCollapsedVal = collapsed; + g.SetNextWindowCollapsedCond = cond ? cond : ImGuiSetCond_Always; +} + +void ImGui::SetNextWindowFocus() +{ + ImGuiContext& g = *GImGui; + g.SetNextWindowFocus = true; +} + +// In window space (not screen space!) +ImVec2 ImGui::GetContentRegionMax() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + ImVec2 mx = window->ContentsRegionRect.Max; + if (window->DC.ColumnsCount != 1) + mx.x = GetColumnOffset(window->DC.ColumnsCurrent + 1) - window->WindowPadding.x; + return mx; +} + +ImVec2 ImGui::GetContentRegionAvail() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return GetContentRegionMax() - (window->DC.CursorPos - window->Pos); +} + +float ImGui::GetContentRegionAvailWidth() +{ + return GetContentRegionAvail().x; +} + +// In window space (not screen space!) +ImVec2 ImGui::GetWindowContentRegionMin() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->ContentsRegionRect.Min; +} + +ImVec2 ImGui::GetWindowContentRegionMax() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->ContentsRegionRect.Max; +} + +float ImGui::GetWindowContentRegionWidth() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->ContentsRegionRect.Max.x - window->ContentsRegionRect.Min.x; +} + +float ImGui::GetTextLineHeight() +{ + ImGuiContext& g = *GImGui; + return g.FontSize; +} + +float ImGui::GetTextLineHeightWithSpacing() +{ + ImGuiContext& g = *GImGui; + return g.FontSize + g.Style.ItemSpacing.y; +} + +float ImGui::GetItemsLineHeightWithSpacing() +{ + ImGuiContext& g = *GImGui; + return g.FontSize + g.Style.FramePadding.y * 2.0f + g.Style.ItemSpacing.y; +} + +ImDrawList* ImGui::GetWindowDrawList() +{ + ImGuiWindow* window = GetCurrentWindow(); + return window->DrawList; +} + +ImFont* ImGui::GetFont() +{ + return GImGui->Font; +} + +float ImGui::GetFontSize() +{ + return GImGui->FontSize; +} + +ImVec2 ImGui::GetFontTexUvWhitePixel() +{ + return GImGui->FontTexUvWhitePixel; +} + +void ImGui::SetWindowFontScale(float scale) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + window->FontWindowScale = scale; + g.FontSize = window->CalcFontSize(); +} + +// User generally sees positions in window coordinates. Internally we store CursorPos in absolute screen coordinates because it is more convenient. +// Conversion happens as we pass the value to user, but it makes our naming convention confusing because GetCursorPos() == (DC.CursorPos - window.Pos). May want to rename 'DC.CursorPos'. +ImVec2 ImGui::GetCursorPos() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.CursorPos - window->Pos + window->Scroll; +} + +float ImGui::GetCursorPosX() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.CursorPos.x - window->Pos.x + window->Scroll.x; +} + +float ImGui::GetCursorPosY() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.CursorPos.y - window->Pos.y + window->Scroll.y; +} + +void ImGui::SetCursorPos(const ImVec2& local_pos) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.CursorPos = window->Pos - window->Scroll + local_pos; + window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos); +} + +void ImGui::SetCursorPosX(float x) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + x; + window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPos.x); +} + +void ImGui::SetCursorPosY(float y) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.CursorPos.y = window->Pos.y - window->Scroll.y + y; + window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y); +} + +ImVec2 ImGui::GetCursorStartPos() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.CursorStartPos - window->Pos; +} + +ImVec2 ImGui::GetCursorScreenPos() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.CursorPos; +} + +void ImGui::SetCursorScreenPos(const ImVec2& screen_pos) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.CursorPos = screen_pos; + window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos); +} + +float ImGui::GetScrollX() +{ + return GImGui->CurrentWindow->Scroll.x; +} + +float ImGui::GetScrollY() +{ + return GImGui->CurrentWindow->Scroll.y; +} + +float ImGui::GetScrollMaxX() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->SizeContents.x - window->SizeFull.x - window->ScrollbarSizes.x; +} + +float ImGui::GetScrollMaxY() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->SizeContents.y - window->SizeFull.y - window->ScrollbarSizes.y; +} + +void ImGui::SetScrollX(float scroll_x) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->ScrollTarget.x = scroll_x; + window->ScrollTargetCenterRatio.x = 0.0f; +} + +void ImGui::SetScrollY(float scroll_y) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->ScrollTarget.y = scroll_y + window->TitleBarHeight() + window->MenuBarHeight(); // title bar height canceled out when using ScrollTargetRelY + window->ScrollTargetCenterRatio.y = 0.0f; +} + +void ImGui::SetScrollFromPosY(float pos_y, float center_y_ratio) +{ + // We store a target position so centering can occur on the next frame when we are guaranteed to have a known window size + ImGuiWindow* window = GetCurrentWindow(); + IM_ASSERT(center_y_ratio >= 0.0f && center_y_ratio <= 1.0f); + window->ScrollTarget.y = (float)(int)(pos_y + window->Scroll.y); + if (center_y_ratio <= 0.0f && window->ScrollTarget.y <= window->WindowPadding.y) // Minor hack to make "scroll to top" take account of WindowPadding, else it would scroll to (WindowPadding.y - ItemSpacing.y) + window->ScrollTarget.y = 0.0f; + window->ScrollTargetCenterRatio.y = center_y_ratio; +} + +// center_y_ratio: 0.0f top of last item, 0.5f vertical center of last item, 1.0f bottom of last item. +void ImGui::SetScrollHere(float center_y_ratio) +{ + ImGuiWindow* window = GetCurrentWindow(); + float target_y = window->DC.CursorPosPrevLine.y + (window->DC.PrevLineHeight * center_y_ratio) + (GImGui->Style.ItemSpacing.y * (center_y_ratio - 0.5f) * 2.0f); // Precisely aim above, in the middle or below the last line. + SetScrollFromPosY(target_y - window->Pos.y, center_y_ratio); +} + +void ImGui::SetKeyboardFocusHere(int offset) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->FocusIdxAllRequestNext = window->FocusIdxAllCounter + 1 + offset; + window->FocusIdxTabRequestNext = INT_MAX; +} + +void ImGui::SetStateStorage(ImGuiStorage* tree) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.StateStorage = tree ? tree : &window->StateStorage; +} + +ImGuiStorage* ImGui::GetStateStorage() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.StateStorage; +} + +void ImGui::TextV(const char* fmt, va_list args) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + ImGuiContext& g = *GImGui; + const char* text_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); + TextUnformatted(g.TempBuffer, text_end); +} + +void ImGui::Text(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + TextV(fmt, args); + va_end(args); +} + +void ImGui::TextColoredV(const ImVec4& col, const char* fmt, va_list args) +{ + PushStyleColor(ImGuiCol_Text, col); + TextV(fmt, args); + PopStyleColor(); +} + +void ImGui::TextColored(const ImVec4& col, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + TextColoredV(col, fmt, args); + va_end(args); +} + +void ImGui::TextDisabledV(const char* fmt, va_list args) +{ + PushStyleColor(ImGuiCol_Text, GImGui->Style.Colors[ImGuiCol_TextDisabled]); + TextV(fmt, args); + PopStyleColor(); +} + +void ImGui::TextDisabled(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + TextDisabledV(fmt, args); + va_end(args); +} + +void ImGui::TextWrappedV(const char* fmt, va_list args) +{ + bool need_wrap = (GImGui->CurrentWindow->DC.TextWrapPos < 0.0f); // Keep existing wrap position is one ia already set + if (need_wrap) PushTextWrapPos(0.0f); + TextV(fmt, args); + if (need_wrap) PopTextWrapPos(); +} + +void ImGui::TextWrapped(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + TextWrappedV(fmt, args); + va_end(args); +} + +void ImGui::TextUnformatted(const char* text, const char* text_end) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + ImGuiContext& g = *GImGui; + IM_ASSERT(text != NULL); + const char* text_begin = text; + if (text_end == NULL) + text_end = text + strlen(text); // FIXME-OPT + + const float wrap_pos_x = window->DC.TextWrapPos; + const bool wrap_enabled = wrap_pos_x >= 0.0f; + if (text_end - text > 2000 && !wrap_enabled) + { + // Long text! + // Perform manual coarse clipping to optimize for long multi-line text + // From this point we will only compute the width of lines that are visible. Optimization only available when word-wrapping is disabled. + // We also don't vertically center the text within the line full height, which is unlikely to matter because we are likely the biggest and only item on the line. + const char* line = text; + const float line_height = GetTextLineHeight(); + const ImVec2 text_pos = window->DC.CursorPos + ImVec2(0.0f, window->DC.CurrentLineTextBaseOffset); + const ImRect clip_rect = window->ClipRect; + ImVec2 text_size(0,0); + + if (text_pos.y <= clip_rect.Max.y) + { + ImVec2 pos = text_pos; + + // Lines to skip (can't skip when logging text) + if (!g.LogEnabled) + { + int lines_skippable = (int)((clip_rect.Min.y - text_pos.y) / line_height); + if (lines_skippable > 0) + { + int lines_skipped = 0; + while (line < text_end && lines_skipped < lines_skippable) + { + const char* line_end = strchr(line, '\n'); + if (!line_end) + line_end = text_end; + line = line_end + 1; + lines_skipped++; + } + pos.y += lines_skipped * line_height; + } + } + + // Lines to render + if (line < text_end) + { + ImRect line_rect(pos, pos + ImVec2(FLT_MAX, line_height)); + while (line < text_end) + { + const char* line_end = strchr(line, '\n'); + if (IsClippedEx(line_rect, NULL, false)) + break; + + const ImVec2 line_size = CalcTextSize(line, line_end, false); + text_size.x = ImMax(text_size.x, line_size.x); + RenderText(pos, line, line_end, false); + if (!line_end) + line_end = text_end; + line = line_end + 1; + line_rect.Min.y += line_height; + line_rect.Max.y += line_height; + pos.y += line_height; + } + + // Count remaining lines + int lines_skipped = 0; + while (line < text_end) + { + const char* line_end = strchr(line, '\n'); + if (!line_end) + line_end = text_end; + line = line_end + 1; + lines_skipped++; + } + pos.y += lines_skipped * line_height; + } + + text_size.y += (pos - text_pos).y; + } + + ImRect bb(text_pos, text_pos + text_size); + ItemSize(bb); + ItemAdd(bb, NULL); + } + else + { + const float wrap_width = wrap_enabled ? CalcWrapWidthForPos(window->DC.CursorPos, wrap_pos_x) : 0.0f; + const ImVec2 text_size = CalcTextSize(text_begin, text_end, false, wrap_width); + + // Account of baseline offset + ImVec2 text_pos(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrentLineTextBaseOffset); + ImRect bb(text_pos, text_pos + text_size); + ItemSize(text_size); + if (!ItemAdd(bb, NULL)) + return; + + // Render (we don't hide text after ## in this end-user function) + RenderTextWrapped(bb.Min, text_begin, text_end, wrap_width); + } +} + +void ImGui::AlignFirstTextHeightToWidgets() +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + // Declare a dummy item size to that upcoming items that are smaller will center-align on the newly expanded line height. + ImGuiContext& g = *GImGui; + ItemSize(ImVec2(0, g.FontSize + g.Style.FramePadding.y*2), g.Style.FramePadding.y); + SameLine(0, 0); +} + +// Add a label+text combo aligned to other label+value widgets +void ImGui::LabelTextV(const char* label, const char* fmt, va_list args) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const float w = CalcItemWidth(); + + const ImVec2 label_size = CalcTextSize(label, NULL, true); + const ImRect value_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2)); + const ImRect total_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w + (label_size.x > 0.0f ? style.ItemInnerSpacing.x : 0.0f), style.FramePadding.y*2) + label_size); + ItemSize(total_bb, style.FramePadding.y); + if (!ItemAdd(total_bb, NULL)) + return; + + // Render + const char* value_text_begin = &g.TempBuffer[0]; + const char* value_text_end = value_text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); + RenderTextClipped(value_bb.Min, value_bb.Max, value_text_begin, value_text_end, NULL, ImVec2(0.0f,0.5f)); + if (label_size.x > 0.0f) + RenderText(ImVec2(value_bb.Max.x + style.ItemInnerSpacing.x, value_bb.Min.y + style.FramePadding.y), label); +} + +void ImGui::LabelText(const char* label, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + LabelTextV(label, fmt, args); + va_end(args); +} + +static inline bool IsWindowContentHoverable(ImGuiWindow* window) +{ + // An active popup disable hovering on other windows (apart from its own children) + ImGuiContext& g = *GImGui; + if (ImGuiWindow* focused_window = g.FocusedWindow) + if (ImGuiWindow* focused_root_window = focused_window->RootWindow) + if ((focused_root_window->Flags & ImGuiWindowFlags_Popup) != 0 && focused_root_window->WasActive && focused_root_window != window->RootWindow) + return false; + + return true; +} + +bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + + if (flags & ImGuiButtonFlags_Disabled) + { + if (out_hovered) *out_hovered = false; + if (out_held) *out_held = false; + if (g.ActiveId == id) SetActiveID(0); + return false; + } + + if ((flags & (ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick)) == 0) + flags |= ImGuiButtonFlags_PressedOnClickRelease; + + bool pressed = false; + bool hovered = IsHovered(bb, id, (flags & ImGuiButtonFlags_FlattenChilds) != 0); + if (hovered) + { + SetHoveredID(id); + if (!(flags & ImGuiButtonFlags_NoKeyModifiers) || (!g.IO.KeyCtrl && !g.IO.KeyShift && !g.IO.KeyAlt)) + { + // | CLICKING | HOLDING with ImGuiButtonFlags_Repeat + // PressedOnClickRelease | * | .. (NOT on release) <-- MOST COMMON! (*) only if both click/release were over bounds + // PressedOnClick | | .. + // PressedOnRelease | | .. (NOT on release) + // PressedOnDoubleClick | | .. + if ((flags & ImGuiButtonFlags_PressedOnClickRelease) && g.IO.MouseClicked[0]) + { + SetActiveID(id, window); // Hold on ID + FocusWindow(window); + g.ActiveIdClickOffset = g.IO.MousePos - bb.Min; + } + if (((flags & ImGuiButtonFlags_PressedOnClick) && g.IO.MouseClicked[0]) || ((flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDoubleClicked[0])) + { + pressed = true; + SetActiveID(0); + FocusWindow(window); + } + if ((flags & ImGuiButtonFlags_PressedOnRelease) && g.IO.MouseReleased[0]) + { + if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[0] >= g.IO.KeyRepeatDelay)) // Repeat mode trumps + pressed = true; + SetActiveID(0); + } + + // 'Repeat' mode acts when held regardless of _PressedOn flags (see table above). + // Relies on repeat logic of IsMouseClicked() but we may as well do it ourselves if we end up exposing finer RepeatDelay/RepeatRate settings. + if ((flags & ImGuiButtonFlags_Repeat) && g.ActiveId == id && g.IO.MouseDownDuration[0] > 0.0f && IsMouseClicked(0, true)) + pressed = true; + } + } + + bool held = false; + if (g.ActiveId == id) + { + if (g.IO.MouseDown[0]) + { + held = true; + } + else + { + if (hovered && (flags & ImGuiButtonFlags_PressedOnClickRelease)) + if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[0] >= g.IO.KeyRepeatDelay)) // Repeat mode trumps + pressed = true; + SetActiveID(0); + } + } + + // AllowOverlap mode (rarely used) requires previous frame HoveredId to be null or to match. This allows using patterns where a later submitted widget overlaps a previous one. + if (hovered && (flags & ImGuiButtonFlags_AllowOverlapMode) && (g.HoveredIdPreviousFrame != id && g.HoveredIdPreviousFrame != 0)) + hovered = pressed = held = false; + + if (out_hovered) *out_hovered = hovered; + if (out_held) *out_held = held; + + return pressed; +} + +bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags flags) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(label); + const ImVec2 label_size = CalcTextSize(label, NULL, true); + + ImVec2 pos = window->DC.CursorPos; + if ((flags & ImGuiButtonFlags_AlignTextBaseLine) && style.FramePadding.y < window->DC.CurrentLineTextBaseOffset) // Try to vertically align buttons that are smaller/have no padding so that text baseline matches (bit hacky, since it shouldn't be a flag) + pos.y += window->DC.CurrentLineTextBaseOffset - style.FramePadding.y; + ImVec2 size = CalcItemSize(size_arg, label_size.x + style.FramePadding.x * 2.0f, label_size.y + style.FramePadding.y * 2.0f); + + const ImRect bb(pos, pos + size); + ItemSize(bb, style.FramePadding.y); + if (!ItemAdd(bb, &id)) + return false; + + if (window->DC.ButtonRepeat) flags |= ImGuiButtonFlags_Repeat; + bool hovered, held; + bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags); + + // Render + const ImU32 col = GetColorU32((hovered && held) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button); + RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding); + RenderTextClipped(bb.Min + style.FramePadding, bb.Max - style.FramePadding, label, NULL, &label_size, style.ButtonTextAlign, &bb); + + // Automatically close popups + //if (pressed && !(flags & ImGuiButtonFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup)) + // CloseCurrentPopup(); + + return pressed; +} + +bool ImGui::Button(const char* label, const ImVec2& size_arg) +{ + return ButtonEx(label, size_arg, 0); +} + +// Small buttons fits within text without additional vertical spacing. +bool ImGui::SmallButton(const char* label) +{ + ImGuiContext& g = *GImGui; + float backup_padding_y = g.Style.FramePadding.y; + g.Style.FramePadding.y = 0.0f; + bool pressed = ButtonEx(label, ImVec2(0,0), ImGuiButtonFlags_AlignTextBaseLine); + g.Style.FramePadding.y = backup_padding_y; + return pressed; +} + +// Tip: use ImGui::PushID()/PopID() to push indices or pointers in the ID stack. +// Then you can keep 'str_id' empty or the same for all your buttons (instead of creating a string based on a non-string id) +bool ImGui::InvisibleButton(const char* str_id, const ImVec2& size_arg) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + const ImGuiID id = window->GetID(str_id); + ImVec2 size = CalcItemSize(size_arg, 0.0f, 0.0f); + const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size); + ItemSize(bb); + if (!ItemAdd(bb, &id)) + return false; + + bool hovered, held; + bool pressed = ButtonBehavior(bb, id, &hovered, &held); + + return pressed; +} + +// Upper-right button to close a window. +bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos, float radius) +{ + ImGuiWindow* window = GetCurrentWindow(); + + const ImRect bb(pos - ImVec2(radius,radius), pos + ImVec2(radius,radius)); + + bool hovered, held; + bool pressed = ButtonBehavior(bb, id, &hovered, &held); + + // Render + const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_CloseButtonActive : hovered ? ImGuiCol_CloseButtonHovered : ImGuiCol_CloseButton); + const ImVec2 center = bb.GetCenter(); + window->DrawList->AddCircleFilled(center, ImMax(2.0f, radius), col, 12); + + const float cross_extent = (radius * 0.7071f) - 1.0f; + if (hovered) + { + window->DrawList->AddLine(center + ImVec2(+cross_extent,+cross_extent), center + ImVec2(-cross_extent,-cross_extent), GetColorU32(ImGuiCol_Text)); + window->DrawList->AddLine(center + ImVec2(+cross_extent,-cross_extent), center + ImVec2(-cross_extent,+cross_extent), GetColorU32(ImGuiCol_Text)); + } + + return pressed; +} + +void ImGui::Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& tint_col, const ImVec4& border_col) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size); + if (border_col.w > 0.0f) + bb.Max += ImVec2(2,2); + ItemSize(bb); + if (!ItemAdd(bb, NULL)) + return; + + if (border_col.w > 0.0f) + { + window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(border_col), 0.0f); + window->DrawList->AddImage(user_texture_id, bb.Min+ImVec2(1,1), bb.Max-ImVec2(1,1), uv0, uv1, GetColorU32(tint_col)); + } + else + { + window->DrawList->AddImage(user_texture_id, bb.Min, bb.Max, uv0, uv1, GetColorU32(tint_col)); + } +} + +// frame_padding < 0: uses FramePadding from style (default) +// frame_padding = 0: no framing +// frame_padding > 0: set framing size +// The color used are the button colors. +bool ImGui::ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, int frame_padding, const ImVec4& bg_col, const ImVec4& tint_col) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + + // Default to using texture ID as ID. User can still push string/integer prefixes. + // We could hash the size/uv to create a unique ID but that would prevent the user from animating UV. + PushID((void *)user_texture_id); + const ImGuiID id = window->GetID("#image"); + PopID(); + + const ImVec2 padding = (frame_padding >= 0) ? ImVec2((float)frame_padding, (float)frame_padding) : style.FramePadding; + const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size + padding*2); + const ImRect image_bb(window->DC.CursorPos + padding, window->DC.CursorPos + padding + size); + ItemSize(bb); + if (!ItemAdd(bb, &id)) + return false; + + bool hovered, held; + bool pressed = ButtonBehavior(bb, id, &hovered, &held); + + // Render + const ImU32 col = GetColorU32((hovered && held) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button); + RenderFrame(bb.Min, bb.Max, col, true, ImClamp((float)ImMin(padding.x, padding.y), 0.0f, style.FrameRounding)); + if (bg_col.w > 0.0f) + window->DrawList->AddRectFilled(image_bb.Min, image_bb.Max, GetColorU32(bg_col)); + window->DrawList->AddImage(user_texture_id, image_bb.Min, image_bb.Max, uv0, uv1, GetColorU32(tint_col)); + + return pressed; +} + +// Start logging ImGui output to TTY +void ImGui::LogToTTY(int max_depth) +{ + ImGuiContext& g = *GImGui; + if (g.LogEnabled) + return; + ImGuiWindow* window = GetCurrentWindowRead(); + + g.LogEnabled = true; + g.LogFile = stdout; + g.LogStartDepth = window->DC.TreeDepth; + if (max_depth >= 0) + g.LogAutoExpandMaxDepth = max_depth; +} + +// Start logging ImGui output to given file +void ImGui::LogToFile(int max_depth, const char* filename) +{ + ImGuiContext& g = *GImGui; + if (g.LogEnabled) + return; + ImGuiWindow* window = GetCurrentWindowRead(); + + if (!filename) + { + filename = g.IO.LogFilename; + if (!filename) + return; + } + + g.LogFile = ImFileOpen(filename, "ab"); + if (!g.LogFile) + { + IM_ASSERT(g.LogFile != NULL); // Consider this an error + return; + } + g.LogEnabled = true; + g.LogStartDepth = window->DC.TreeDepth; + if (max_depth >= 0) + g.LogAutoExpandMaxDepth = max_depth; +} + +// Start logging ImGui output to clipboard +void ImGui::LogToClipboard(int max_depth) +{ + ImGuiContext& g = *GImGui; + if (g.LogEnabled) + return; + ImGuiWindow* window = GetCurrentWindowRead(); + + g.LogEnabled = true; + g.LogFile = NULL; + g.LogStartDepth = window->DC.TreeDepth; + if (max_depth >= 0) + g.LogAutoExpandMaxDepth = max_depth; +} + +void ImGui::LogFinish() +{ + ImGuiContext& g = *GImGui; + if (!g.LogEnabled) + return; + + LogText(IM_NEWLINE); + g.LogEnabled = false; + if (g.LogFile != NULL) + { + if (g.LogFile == stdout) + fflush(g.LogFile); + else + fclose(g.LogFile); + g.LogFile = NULL; + } + if (g.LogClipboard->size() > 1) + { + SetClipboardText(g.LogClipboard->begin()); + g.LogClipboard->clear(); + } +} + +// Helper to display logging buttons +void ImGui::LogButtons() +{ + ImGuiContext& g = *GImGui; + + PushID("LogButtons"); + const bool log_to_tty = Button("Log To TTY"); SameLine(); + const bool log_to_file = Button("Log To File"); SameLine(); + const bool log_to_clipboard = Button("Log To Clipboard"); SameLine(); + PushItemWidth(80.0f); + PushAllowKeyboardFocus(false); + SliderInt("Depth", &g.LogAutoExpandMaxDepth, 0, 9, NULL); + PopAllowKeyboardFocus(); + PopItemWidth(); + PopID(); + + // Start logging at the end of the function so that the buttons don't appear in the log + if (log_to_tty) + LogToTTY(g.LogAutoExpandMaxDepth); + if (log_to_file) + LogToFile(g.LogAutoExpandMaxDepth, g.IO.LogFilename); + if (log_to_clipboard) + LogToClipboard(g.LogAutoExpandMaxDepth); +} + +bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags) +{ + if (flags & ImGuiTreeNodeFlags_Leaf) + return true; + + // We only write to the tree storage if the user clicks (or explicitely use SetNextTreeNode*** functions) + ImGuiContext& g = *GImGui; + ImGuiWindow* window = g.CurrentWindow; + ImGuiStorage* storage = window->DC.StateStorage; + + bool is_open; + if (g.SetNextTreeNodeOpenCond != 0) + { + if (g.SetNextTreeNodeOpenCond & ImGuiSetCond_Always) + { + is_open = g.SetNextTreeNodeOpenVal; + storage->SetInt(id, is_open); + } + else + { + // We treat ImGuiSetCondition_Once and ImGuiSetCondition_FirstUseEver the same because tree node state are not saved persistently. + const int stored_value = storage->GetInt(id, -1); + if (stored_value == -1) + { + is_open = g.SetNextTreeNodeOpenVal; + storage->SetInt(id, is_open); + } + else + { + is_open = stored_value != 0; + } + } + g.SetNextTreeNodeOpenCond = 0; + } + else + { + is_open = storage->GetInt(id, (flags & ImGuiTreeNodeFlags_DefaultOpen) ? 1 : 0) != 0; + } + + // When logging is enabled, we automatically expand tree nodes (but *NOT* collapsing headers.. seems like sensible behavior). + // NB- If we are above max depth we still allow manually opened nodes to be logged. + if (g.LogEnabled && !(flags & ImGuiTreeNodeFlags_NoAutoOpenOnLog) && window->DC.TreeDepth < g.LogAutoExpandMaxDepth) + is_open = true; + + return is_open; +} + +bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const bool display_frame = (flags & ImGuiTreeNodeFlags_Framed) != 0; + const ImVec2 padding = display_frame ? style.FramePadding : ImVec2(style.FramePadding.x, 0.0f); + + if (!label_end) + label_end = FindRenderedTextEnd(label); + const ImVec2 label_size = CalcTextSize(label, label_end, false); + + // We vertically grow up to current line height up the typical widget height. + const float text_base_offset_y = ImMax(0.0f, window->DC.CurrentLineTextBaseOffset - padding.y); // Latch before ItemSize changes it + const float frame_height = ImMax(ImMin(window->DC.CurrentLineHeight, g.FontSize + style.FramePadding.y*2), label_size.y + padding.y*2); + ImRect bb = ImRect(window->DC.CursorPos, ImVec2(window->Pos.x + GetContentRegionMax().x, window->DC.CursorPos.y + frame_height)); + if (display_frame) + { + // Framed header expand a little outside the default padding + bb.Min.x -= (float)(int)(window->WindowPadding.x*0.5f) - 1; + bb.Max.x += (float)(int)(window->WindowPadding.x*0.5f) - 1; + } + + const float text_offset_x = (g.FontSize + (display_frame ? padding.x*3 : padding.x*2)); // Collapser arrow width + Spacing + const float text_width = g.FontSize + (label_size.x > 0.0f ? label_size.x + padding.x*2 : 0.0f); // Include collapser + ItemSize(ImVec2(text_width, frame_height), text_base_offset_y); + + // For regular tree nodes, we arbitrary allow to click past 2 worth of ItemSpacing + // (Ideally we'd want to add a flag for the user to specify we want want the hit test to be done up to the right side of the content or not) + const ImRect interact_bb = display_frame ? bb : ImRect(bb.Min.x, bb.Min.y, bb.Min.x + text_width + style.ItemSpacing.x*2, bb.Max.y); + bool is_open = TreeNodeBehaviorIsOpen(id, flags); + if (!ItemAdd(interact_bb, &id)) + { + if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen)) + TreePushRawID(id); + return is_open; + } + + // Flags that affects opening behavior: + // - 0(default) ..................... single-click anywhere to open + // - OpenOnDoubleClick .............. double-click anywhere to open + // - OpenOnArrow .................... single-click on arrow to open + // - OpenOnDoubleClick|OpenOnArrow .. single-click on arrow or double-click anywhere to open + ImGuiButtonFlags button_flags = ImGuiButtonFlags_NoKeyModifiers | ((flags & ImGuiTreeNodeFlags_AllowOverlapMode) ? ImGuiButtonFlags_AllowOverlapMode : 0); + if (flags & ImGuiTreeNodeFlags_OpenOnDoubleClick) + button_flags |= ImGuiButtonFlags_PressedOnDoubleClick | ((flags & ImGuiTreeNodeFlags_OpenOnArrow) ? ImGuiButtonFlags_PressedOnClickRelease : 0); + bool hovered, held, pressed = ButtonBehavior(interact_bb, id, &hovered, &held, button_flags); + if (pressed && !(flags & ImGuiTreeNodeFlags_Leaf)) + { + bool toggled = !(flags & (ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick)); + if (flags & ImGuiTreeNodeFlags_OpenOnArrow) + toggled |= IsMouseHoveringRect(interact_bb.Min, ImVec2(interact_bb.Min.x + text_offset_x, interact_bb.Max.y)); + if (flags & ImGuiTreeNodeFlags_OpenOnDoubleClick) + toggled |= g.IO.MouseDoubleClicked[0]; + if (toggled) + { + is_open = !is_open; + window->DC.StateStorage->SetInt(id, is_open); + } + } + if (flags & ImGuiTreeNodeFlags_AllowOverlapMode) + SetItemAllowOverlap(); + + // Render + const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header); + const ImVec2 text_pos = bb.Min + ImVec2(text_offset_x, padding.y + text_base_offset_y); + if (display_frame) + { + // Framed type + RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding); + RenderCollapseTriangle(bb.Min + padding + ImVec2(0.0f, text_base_offset_y), is_open, 1.0f); + if (g.LogEnabled) + { + // NB: '##' is normally used to hide text (as a library-wide feature), so we need to specify the text range to make sure the ## aren't stripped out here. + const char log_prefix[] = "\n##"; + const char log_suffix[] = "##"; + LogRenderedText(text_pos, log_prefix, log_prefix+3); + RenderTextClipped(text_pos, bb.Max, label, label_end, &label_size); + LogRenderedText(text_pos, log_suffix+1, log_suffix+3); + } + else + { + RenderTextClipped(text_pos, bb.Max, label, label_end, &label_size); + } + } + else + { + // Unframed typed for tree nodes + if (hovered || (flags & ImGuiTreeNodeFlags_Selected)) + RenderFrame(bb.Min, bb.Max, col, false); + + if (flags & ImGuiTreeNodeFlags_Bullet) + RenderBullet(bb.Min + ImVec2(text_offset_x * 0.5f, g.FontSize*0.50f + text_base_offset_y)); + else if (!(flags & ImGuiTreeNodeFlags_Leaf)) + RenderCollapseTriangle(bb.Min + ImVec2(padding.x, g.FontSize*0.15f + text_base_offset_y), is_open, 0.70f); + if (g.LogEnabled) + LogRenderedText(text_pos, ">"); + RenderText(text_pos, label, label_end, false); + } + + if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen)) + TreePushRawID(id); + return is_open; +} + +// CollapsingHeader returns true when opened but do not indent nor push into the ID stack (because of the ImGuiTreeNodeFlags_NoTreePushOnOpen flag). +// This is basically the same as calling TreeNodeEx(label, ImGuiTreeNodeFlags_CollapsingHeader | ImGuiTreeNodeFlags_NoTreePushOnOpen). You can remove the _NoTreePushOnOpen flag if you want behavior closer to normal TreeNode(). +bool ImGui::CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + return TreeNodeBehavior(window->GetID(label), flags | ImGuiTreeNodeFlags_CollapsingHeader | ImGuiTreeNodeFlags_NoTreePushOnOpen, label); +} + +bool ImGui::CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + if (p_open && !*p_open) + return false; + + ImGuiID id = window->GetID(label); + bool is_open = TreeNodeBehavior(id, flags | ImGuiTreeNodeFlags_CollapsingHeader | ImGuiTreeNodeFlags_NoTreePushOnOpen | (p_open ? ImGuiTreeNodeFlags_AllowOverlapMode : 0), label); + if (p_open) + { + // Create a small overlapping close button // FIXME: We can evolve this into user accessible helpers to add extra buttons on title bars, headers, etc. + ImGuiContext& g = *GImGui; + float button_sz = g.FontSize * 0.5f; + if (CloseButton(window->GetID((void*)(intptr_t)(id+1)), ImVec2(ImMin(window->DC.LastItemRect.Max.x, window->ClipRect.Max.x) - g.Style.FramePadding.x - button_sz, window->DC.LastItemRect.Min.y + g.Style.FramePadding.y + button_sz), button_sz)) + *p_open = false; + } + + return is_open; +} + +bool ImGui::TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + return TreeNodeBehavior(window->GetID(label), flags, label, NULL); +} + +bool ImGui::TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const char* label_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); + return TreeNodeBehavior(window->GetID(str_id), flags, g.TempBuffer, label_end); +} + +bool ImGui::TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const char* label_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); + return TreeNodeBehavior(window->GetID(ptr_id), flags, g.TempBuffer, label_end); +} + +bool ImGui::TreeNodeV(const char* str_id, const char* fmt, va_list args) +{ + return TreeNodeExV(str_id, 0, fmt, args); +} + +bool ImGui::TreeNodeV(const void* ptr_id, const char* fmt, va_list args) +{ + return TreeNodeExV(ptr_id, 0, fmt, args); +} + +bool ImGui::TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + bool is_open = TreeNodeExV(str_id, flags, fmt, args); + va_end(args); + return is_open; +} + +bool ImGui::TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + bool is_open = TreeNodeExV(ptr_id, flags, fmt, args); + va_end(args); + return is_open; +} + +bool ImGui::TreeNode(const char* str_id, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + bool is_open = TreeNodeExV(str_id, 0, fmt, args); + va_end(args); + return is_open; +} + +bool ImGui::TreeNode(const void* ptr_id, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + bool is_open = TreeNodeExV(ptr_id, 0, fmt, args); + va_end(args); + return is_open; +} + +bool ImGui::TreeNode(const char* label) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + return TreeNodeBehavior(window->GetID(label), 0, label, NULL); +} + +void ImGui::TreeAdvanceToLabelPos() +{ + ImGuiContext& g = *GImGui; + g.CurrentWindow->DC.CursorPos.x += GetTreeNodeToLabelSpacing(); +} + +// Horizontal distance preceding label when using TreeNode() or Bullet() +float ImGui::GetTreeNodeToLabelSpacing() +{ + ImGuiContext& g = *GImGui; + return g.FontSize + (g.Style.FramePadding.x * 2.0f); +} + +void ImGui::SetNextTreeNodeOpen(bool is_open, ImGuiSetCond cond) +{ + ImGuiContext& g = *GImGui; + g.SetNextTreeNodeOpenVal = is_open; + g.SetNextTreeNodeOpenCond = cond ? cond : ImGuiSetCond_Always; +} + +void ImGui::PushID(const char* str_id) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->IDStack.push_back(window->GetID(str_id)); +} + +void ImGui::PushID(const char* str_id_begin, const char* str_id_end) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->IDStack.push_back(window->GetID(str_id_begin, str_id_end)); +} + +void ImGui::PushID(const void* ptr_id) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->IDStack.push_back(window->GetID(ptr_id)); +} + +void ImGui::PushID(int int_id) +{ + const void* ptr_id = (void*)(intptr_t)int_id; + ImGuiWindow* window = GetCurrentWindow(); + window->IDStack.push_back(window->GetID(ptr_id)); +} + +void ImGui::PopID() +{ + ImGuiWindow* window = GetCurrentWindow(); + window->IDStack.pop_back(); +} + +ImGuiID ImGui::GetID(const char* str_id) +{ + return GImGui->CurrentWindow->GetID(str_id); +} + +ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end) +{ + return GImGui->CurrentWindow->GetID(str_id_begin, str_id_end); +} + +ImGuiID ImGui::GetID(const void* ptr_id) +{ + return GImGui->CurrentWindow->GetID(ptr_id); +} + +void ImGui::Bullet() +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const float line_height = ImMax(ImMin(window->DC.CurrentLineHeight, g.FontSize + g.Style.FramePadding.y*2), g.FontSize); + const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize, line_height)); + ItemSize(bb); + if (!ItemAdd(bb, NULL)) + { + SameLine(0, style.FramePadding.x*2); + return; + } + + // Render and stay on same line + RenderBullet(bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, line_height*0.5f)); + SameLine(0, style.FramePadding.x*2); +} + +// Text with a little bullet aligned to the typical tree node. +void ImGui::BulletTextV(const char* fmt, va_list args) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + + const char* text_begin = g.TempBuffer; + const char* text_end = text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); + const ImVec2 label_size = CalcTextSize(text_begin, text_end, false); + const float text_base_offset_y = ImMax(0.0f, window->DC.CurrentLineTextBaseOffset); // Latch before ItemSize changes it + const float line_height = ImMax(ImMin(window->DC.CurrentLineHeight, g.FontSize + g.Style.FramePadding.y*2), g.FontSize); + const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize + (label_size.x > 0.0f ? (label_size.x + style.FramePadding.x*2) : 0.0f), ImMax(line_height, label_size.y))); // Empty text doesn't add padding + ItemSize(bb); + if (!ItemAdd(bb, NULL)) + return; + + // Render + RenderBullet(bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, line_height*0.5f)); + RenderText(bb.Min+ImVec2(g.FontSize + style.FramePadding.x*2, text_base_offset_y), text_begin, text_end, false); +} + +void ImGui::BulletText(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + BulletTextV(fmt, args); + va_end(args); +} + +static inline void DataTypeFormatString(ImGuiDataType data_type, void* data_ptr, const char* display_format, char* buf, int buf_size) +{ + if (data_type == ImGuiDataType_Int) + ImFormatString(buf, buf_size, display_format, *(int*)data_ptr); + else if (data_type == ImGuiDataType_Float) + ImFormatString(buf, buf_size, display_format, *(float*)data_ptr); +} + +static inline void DataTypeFormatString(ImGuiDataType data_type, void* data_ptr, int decimal_precision, char* buf, int buf_size) +{ + if (data_type == ImGuiDataType_Int) + { + if (decimal_precision < 0) + ImFormatString(buf, buf_size, "%d", *(int*)data_ptr); + else + ImFormatString(buf, buf_size, "%.*d", decimal_precision, *(int*)data_ptr); + } + else if (data_type == ImGuiDataType_Float) + { + if (decimal_precision < 0) + ImFormatString(buf, buf_size, "%f", *(float*)data_ptr); // Ideally we'd have a minimum decimal precision of 1 to visually denote that it is a float, while hiding non-significant digits? + else + ImFormatString(buf, buf_size, "%.*f", decimal_precision, *(float*)data_ptr); + } +} + +static void DataTypeApplyOp(ImGuiDataType data_type, int op, void* value1, const void* value2)// Store into value1 +{ + if (data_type == ImGuiDataType_Int) + { + if (op == '+') + *(int*)value1 = *(int*)value1 + *(const int*)value2; + else if (op == '-') + *(int*)value1 = *(int*)value1 - *(const int*)value2; + } + else if (data_type == ImGuiDataType_Float) + { + if (op == '+') + *(float*)value1 = *(float*)value1 + *(const float*)value2; + else if (op == '-') + *(float*)value1 = *(float*)value1 - *(const float*)value2; + } +} + +// User can input math operators (e.g. +100) to edit a numerical values. +static bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* data_ptr, const char* scalar_format) +{ + while (ImCharIsSpace(*buf)) + buf++; + + // We don't support '-' op because it would conflict with inputing negative value. + // Instead you can use +-100 to subtract from an existing value + char op = buf[0]; + if (op == '+' || op == '*' || op == '/') + { + buf++; + while (ImCharIsSpace(*buf)) + buf++; + } + else + { + op = 0; + } + if (!buf[0]) + return false; + + if (data_type == ImGuiDataType_Int) + { + if (!scalar_format) + scalar_format = "%d"; + int* v = (int*)data_ptr; + const int old_v = *v; + int arg0 = *v; + if (op && sscanf(initial_value_buf, scalar_format, &arg0) < 1) + return false; + + // Store operand in a float so we can use fractional value for multipliers (*1.1), but constant always parsed as integer so we can fit big integers (e.g. 2000000003) past float precision + float arg1 = 0.0f; + if (op == '+') { if (sscanf(buf, "%f", &arg1) == 1) *v = (int)(arg0 + arg1); } // Add (use "+-" to subtract) + else if (op == '*') { if (sscanf(buf, "%f", &arg1) == 1) *v = (int)(arg0 * arg1); } // Multiply + else if (op == '/') { if (sscanf(buf, "%f", &arg1) == 1 && arg1 != 0.0f) *v = (int)(arg0 / arg1); }// Divide + else { if (sscanf(buf, scalar_format, &arg0) == 1) *v = arg0; } // Assign constant + return (old_v != *v); + } + else if (data_type == ImGuiDataType_Float) + { + // For floats we have to ignore format with precision (e.g. "%.2f") because sscanf doesn't take them in + scalar_format = "%f"; + float* v = (float*)data_ptr; + const float old_v = *v; + float arg0 = *v; + if (op && sscanf(initial_value_buf, scalar_format, &arg0) < 1) + return false; + + float arg1 = 0.0f; + if (sscanf(buf, scalar_format, &arg1) < 1) + return false; + if (op == '+') { *v = arg0 + arg1; } // Add (use "+-" to subtract) + else if (op == '*') { *v = arg0 * arg1; } // Multiply + else if (op == '/') { if (arg1 != 0.0f) *v = arg0 / arg1; } // Divide + else { *v = arg1; } // Assign constant + return (old_v != *v); + } + + return false; +} + +// Create text input in place of a slider (when CTRL+Clicking on slider) +bool ImGui::InputScalarAsWidgetReplacement(const ImRect& aabb, const char* label, ImGuiDataType data_type, void* data_ptr, ImGuiID id, int decimal_precision) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + + // Our replacement widget will override the focus ID (registered previously to allow for a TAB focus to happen) + SetActiveID(g.ScalarAsInputTextId, window); + SetHoveredID(0); + FocusableItemUnregister(window); + + char buf[32]; + DataTypeFormatString(data_type, data_ptr, decimal_precision, buf, IM_ARRAYSIZE(buf)); + bool text_value_changed = InputTextEx(label, buf, IM_ARRAYSIZE(buf), aabb.GetSize(), ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_AutoSelectAll); + if (g.ScalarAsInputTextId == 0) + { + // First frame + IM_ASSERT(g.ActiveId == id); // InputText ID expected to match the Slider ID (else we'd need to store them both, which is also possible) + g.ScalarAsInputTextId = g.ActiveId; + SetHoveredID(id); + } + else if (g.ActiveId != g.ScalarAsInputTextId) + { + // Release + g.ScalarAsInputTextId = 0; + } + if (text_value_changed) + return DataTypeApplyOpFromText(buf, GImGui->InputTextState.InitialText.begin(), data_type, data_ptr, NULL); + return false; +} + +// Parse display precision back from the display format string +int ImGui::ParseFormatPrecision(const char* fmt, int default_precision) +{ + int precision = default_precision; + while ((fmt = strchr(fmt, '%')) != NULL) + { + fmt++; + if (fmt[0] == '%') { fmt++; continue; } // Ignore "%%" + while (*fmt >= '0' && *fmt <= '9') + fmt++; + if (*fmt == '.') + { + precision = atoi(fmt + 1); + if (precision < 0 || precision > 10) + precision = default_precision; + } + break; + } + return precision; +} + +float ImGui::RoundScalar(float value, int decimal_precision) +{ + // Round past decimal precision + // So when our value is 1.99999 with a precision of 0.001 we'll end up rounding to 2.0 + // FIXME: Investigate better rounding methods + static const float min_steps[10] = { 1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f }; + float min_step = (decimal_precision >= 0 && decimal_precision < 10) ? min_steps[decimal_precision] : powf(10.0f, (float)-decimal_precision); + bool negative = value < 0.0f; + value = fabsf(value); + float remainder = fmodf(value, min_step); + if (remainder <= min_step*0.5f) + value -= remainder; + else + value += (min_step - remainder); + return negative ? -value : value; +} + +static inline float SliderBehaviorCalcRatioFromValue(float v, float v_min, float v_max, float power, float linear_zero_pos) +{ + if (v_min == v_max) + return 0.0f; + + const bool is_non_linear = (power < 1.0f-0.00001f) || (power > 1.0f+0.00001f); + const float v_clamped = (v_min < v_max) ? ImClamp(v, v_min, v_max) : ImClamp(v, v_max, v_min); + if (is_non_linear) + { + if (v_clamped < 0.0f) + { + const float f = 1.0f - (v_clamped - v_min) / (ImMin(0.0f,v_max) - v_min); + return (1.0f - powf(f, 1.0f/power)) * linear_zero_pos; + } + else + { + const float f = (v_clamped - ImMax(0.0f,v_min)) / (v_max - ImMax(0.0f,v_min)); + return linear_zero_pos + powf(f, 1.0f/power) * (1.0f - linear_zero_pos); + } + } + + // Linear slider + return (v_clamped - v_min) / (v_max - v_min); +} + +bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v_min, float v_max, float power, int decimal_precision, ImGuiSliderFlags flags) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + const ImGuiStyle& style = g.Style; + + // Draw frame + RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding); + + const bool is_non_linear = (power < 1.0f-0.00001f) || (power > 1.0f+0.00001f); + const bool is_horizontal = (flags & ImGuiSliderFlags_Vertical) == 0; + + const float grab_padding = 2.0f; + const float slider_sz = is_horizontal ? (frame_bb.GetWidth() - grab_padding * 2.0f) : (frame_bb.GetHeight() - grab_padding * 2.0f); + float grab_sz; + if (decimal_precision > 0) + grab_sz = ImMin(style.GrabMinSize, slider_sz); + else + grab_sz = ImMin(ImMax(1.0f * (slider_sz / ((v_min < v_max ? v_max - v_min : v_min - v_max) + 1.0f)), style.GrabMinSize), slider_sz); // Integer sliders, if possible have the grab size represent 1 unit + const float slider_usable_sz = slider_sz - grab_sz; + const float slider_usable_pos_min = (is_horizontal ? frame_bb.Min.x : frame_bb.Min.y) + grab_padding + grab_sz*0.5f; + const float slider_usable_pos_max = (is_horizontal ? frame_bb.Max.x : frame_bb.Max.y) - grab_padding - grab_sz*0.5f; + + // For logarithmic sliders that cross over sign boundary we want the exponential increase to be symmetric around 0.0f + float linear_zero_pos = 0.0f; // 0.0->1.0f + if (v_min * v_max < 0.0f) + { + // Different sign + const float linear_dist_min_to_0 = powf(fabsf(0.0f - v_min), 1.0f/power); + const float linear_dist_max_to_0 = powf(fabsf(v_max - 0.0f), 1.0f/power); + linear_zero_pos = linear_dist_min_to_0 / (linear_dist_min_to_0+linear_dist_max_to_0); + } + else + { + // Same sign + linear_zero_pos = v_min < 0.0f ? 1.0f : 0.0f; + } + + // Process clicking on the slider + bool value_changed = false; + if (g.ActiveId == id) + { + if (g.IO.MouseDown[0]) + { + const float mouse_abs_pos = is_horizontal ? g.IO.MousePos.x : g.IO.MousePos.y; + float clicked_t = (slider_usable_sz > 0.0f) ? ImClamp((mouse_abs_pos - slider_usable_pos_min) / slider_usable_sz, 0.0f, 1.0f) : 0.0f; + if (!is_horizontal) + clicked_t = 1.0f - clicked_t; + + float new_value; + if (is_non_linear) + { + // Account for logarithmic scale on both sides of the zero + if (clicked_t < linear_zero_pos) + { + // Negative: rescale to the negative range before powering + float a = 1.0f - (clicked_t / linear_zero_pos); + a = powf(a, power); + new_value = ImLerp(ImMin(v_max,0.0f), v_min, a); + } + else + { + // Positive: rescale to the positive range before powering + float a; + if (fabsf(linear_zero_pos - 1.0f) > 1.e-6f) + a = (clicked_t - linear_zero_pos) / (1.0f - linear_zero_pos); + else + a = clicked_t; + a = powf(a, power); + new_value = ImLerp(ImMax(v_min,0.0f), v_max, a); + } + } + else + { + // Linear slider + new_value = ImLerp(v_min, v_max, clicked_t); + } + + // Round past decimal precision + new_value = RoundScalar(new_value, decimal_precision); + if (*v != new_value) + { + *v = new_value; + value_changed = true; + } + } + else + { + SetActiveID(0); + } + } + + // Calculate slider grab positioning + float grab_t = SliderBehaviorCalcRatioFromValue(*v, v_min, v_max, power, linear_zero_pos); + + // Draw + if (!is_horizontal) + grab_t = 1.0f - grab_t; + const float grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t); + ImRect grab_bb; + if (is_horizontal) + grab_bb = ImRect(ImVec2(grab_pos - grab_sz*0.5f, frame_bb.Min.y + grab_padding), ImVec2(grab_pos + grab_sz*0.5f, frame_bb.Max.y - grab_padding)); + else + grab_bb = ImRect(ImVec2(frame_bb.Min.x + grab_padding, grab_pos - grab_sz*0.5f), ImVec2(frame_bb.Max.x - grab_padding, grab_pos + grab_sz*0.5f)); + window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding); + + return value_changed; +} + +// Use power!=1.0 for logarithmic sliders. +// Adjust display_format to decorate the value with a prefix or a suffix. +// "%.3f" 1.234 +// "%5.2f secs" 01.23 secs +// "Gold: %.0f" Gold: 1 +bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format, float power) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(label); + const float w = CalcItemWidth(); + + const ImVec2 label_size = CalcTextSize(label, NULL, true); + const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); + const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); + + // NB- we don't call ItemSize() yet because we may turn into a text edit box below + if (!ItemAdd(total_bb, &id)) + { + ItemSize(total_bb, style.FramePadding.y); + return false; + } + + const bool hovered = IsHovered(frame_bb, id); + if (hovered) + SetHoveredID(id); + + if (!display_format) + display_format = "%.3f"; + int decimal_precision = ParseFormatPrecision(display_format, 3); + + // Tabbing or CTRL-clicking on Slider turns it into an input box + bool start_text_input = false; + const bool tab_focus_requested = FocusableItemRegister(window, g.ActiveId == id); + if (tab_focus_requested || (hovered && g.IO.MouseClicked[0])) + { + SetActiveID(id, window); + FocusWindow(window); + + if (tab_focus_requested || g.IO.KeyCtrl) + { + start_text_input = true; + g.ScalarAsInputTextId = 0; + } + } + if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id)) + return InputScalarAsWidgetReplacement(frame_bb, label, ImGuiDataType_Float, v, id, decimal_precision); + + ItemSize(total_bb, style.FramePadding.y); + + // Actual slider behavior + render grab + const bool value_changed = SliderBehavior(frame_bb, id, v, v_min, v_max, power, decimal_precision); + + // Display value using user-provided display format so user can add prefix/suffix/decorations to the value. + char value_buf[64]; + const char* value_buf_end = value_buf + ImFormatString(value_buf, IM_ARRAYSIZE(value_buf), display_format, *v); + RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.5f)); + + if (label_size.x > 0.0f) + RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); + + return value_changed; +} + +bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format, float power) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(label); + + const ImVec2 label_size = CalcTextSize(label, NULL, true); + const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + size); + const ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); + + ItemSize(bb, style.FramePadding.y); + if (!ItemAdd(frame_bb, &id)) + return false; + + const bool hovered = IsHovered(frame_bb, id); + if (hovered) + SetHoveredID(id); + + if (!display_format) + display_format = "%.3f"; + int decimal_precision = ParseFormatPrecision(display_format, 3); + + if (hovered && g.IO.MouseClicked[0]) + { + SetActiveID(id, window); + FocusWindow(window); + } + + // Actual slider behavior + render grab + bool value_changed = SliderBehavior(frame_bb, id, v, v_min, v_max, power, decimal_precision, ImGuiSliderFlags_Vertical); + + // Display value using user-provided display format so user can add prefix/suffix/decorations to the value. + // For the vertical slider we allow centered text to overlap the frame padding + char value_buf[64]; + char* value_buf_end = value_buf + ImFormatString(value_buf, IM_ARRAYSIZE(value_buf), display_format, *v); + RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.0f)); + if (label_size.x > 0.0f) + RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); + + return value_changed; +} + +bool ImGui::SliderAngle(const char* label, float* v_rad, float v_degrees_min, float v_degrees_max) +{ + float v_deg = (*v_rad) * 360.0f / (2*IM_PI); + bool value_changed = SliderFloat(label, &v_deg, v_degrees_min, v_degrees_max, "%.0f deg", 1.0f); + *v_rad = v_deg * (2*IM_PI) / 360.0f; + return value_changed; +} + +bool ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format) +{ + if (!display_format) + display_format = "%.0f"; + float v_f = (float)*v; + bool value_changed = SliderFloat(label, &v_f, (float)v_min, (float)v_max, display_format, 1.0f); + *v = (int)v_f; + return value_changed; +} + +bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format) +{ + if (!display_format) + display_format = "%.0f"; + float v_f = (float)*v; + bool value_changed = VSliderFloat(label, size, &v_f, (float)v_min, (float)v_max, display_format, 1.0f); + *v = (int)v_f; + return value_changed; +} + +// Add multiple sliders on 1 line for compact edition of multiple components +bool ImGui::SliderFloatN(const char* label, float* v, int components, float v_min, float v_max, const char* display_format, float power) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + bool value_changed = false; + BeginGroup(); + PushID(label); + PushMultiItemsWidths(components); + for (int i = 0; i < components; i++) + { + PushID(i); + value_changed |= SliderFloat("##v", &v[i], v_min, v_max, display_format, power); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); + } + PopID(); + + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); + + return value_changed; +} + +bool ImGui::SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format, float power) +{ + return SliderFloatN(label, v, 2, v_min, v_max, display_format, power); +} + +bool ImGui::SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format, float power) +{ + return SliderFloatN(label, v, 3, v_min, v_max, display_format, power); +} + +bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format, float power) +{ + return SliderFloatN(label, v, 4, v_min, v_max, display_format, power); +} + +bool ImGui::SliderIntN(const char* label, int* v, int components, int v_min, int v_max, const char* display_format) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + bool value_changed = false; + BeginGroup(); + PushID(label); + PushMultiItemsWidths(components); + for (int i = 0; i < components; i++) + { + PushID(i); + value_changed |= SliderInt("##v", &v[i], v_min, v_max, display_format); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); + } + PopID(); + + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); + + return value_changed; +} + +bool ImGui::SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format) +{ + return SliderIntN(label, v, 2, v_min, v_max, display_format); +} + +bool ImGui::SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format) +{ + return SliderIntN(label, v, 3, v_min, v_max, display_format); +} + +bool ImGui::SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format) +{ + return SliderIntN(label, v, 4, v_min, v_max, display_format); +} + +bool ImGui::DragBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v_speed, float v_min, float v_max, int decimal_precision, float power) +{ + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + + // Draw frame + const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg); + RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, style.FrameRounding); + + bool value_changed = false; + + // Process clicking on the drag + if (g.ActiveId == id) + { + if (g.IO.MouseDown[0]) + { + if (g.ActiveIdIsJustActivated) + { + // Lock current value on click + g.DragCurrentValue = *v; + g.DragLastMouseDelta = ImVec2(0.f, 0.f); + } + + float v_cur = g.DragCurrentValue; + const ImVec2 mouse_drag_delta = GetMouseDragDelta(0, 1.0f); + if (fabsf(mouse_drag_delta.x - g.DragLastMouseDelta.x) > 0.0f) + { + float speed = v_speed; + if (speed == 0.0f && (v_max - v_min) != 0.0f && (v_max - v_min) < FLT_MAX) + speed = (v_max - v_min) * g.DragSpeedDefaultRatio; + if (g.IO.KeyShift && g.DragSpeedScaleFast >= 0.0f) + speed = speed * g.DragSpeedScaleFast; + if (g.IO.KeyAlt && g.DragSpeedScaleSlow >= 0.0f) + speed = speed * g.DragSpeedScaleSlow; + + float delta = (mouse_drag_delta.x - g.DragLastMouseDelta.x) * speed; + if (fabsf(power - 1.0f) > 0.001f) + { + // Logarithmic curve on both side of 0.0 + float v0_abs = v_cur >= 0.0f ? v_cur : -v_cur; + float v0_sign = v_cur >= 0.0f ? 1.0f : -1.0f; + float v1 = powf(v0_abs, 1.0f / power) + (delta * v0_sign); + float v1_abs = v1 >= 0.0f ? v1 : -v1; + float v1_sign = v1 >= 0.0f ? 1.0f : -1.0f; // Crossed sign line + v_cur = powf(v1_abs, power) * v0_sign * v1_sign; // Reapply sign + } + else + { + v_cur += delta; + } + g.DragLastMouseDelta.x = mouse_drag_delta.x; + + // Clamp + if (v_min < v_max) + v_cur = ImClamp(v_cur, v_min, v_max); + g.DragCurrentValue = v_cur; + } + + // Round to user desired precision, then apply + v_cur = RoundScalar(v_cur, decimal_precision); + if (*v != v_cur) + { + *v = v_cur; + value_changed = true; + } + } + else + { + SetActiveID(0); + } + } + + return value_changed; +} + +bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* display_format, float power) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(label); + const float w = CalcItemWidth(); + + const ImVec2 label_size = CalcTextSize(label, NULL, true); + const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); + const ImRect inner_bb(frame_bb.Min + style.FramePadding, frame_bb.Max - style.FramePadding); + const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); + + // NB- we don't call ItemSize() yet because we may turn into a text edit box below + if (!ItemAdd(total_bb, &id)) + { + ItemSize(total_bb, style.FramePadding.y); + return false; + } + + const bool hovered = IsHovered(frame_bb, id); + if (hovered) + SetHoveredID(id); + + if (!display_format) + display_format = "%.3f"; + int decimal_precision = ParseFormatPrecision(display_format, 3); + + // Tabbing or CTRL-clicking on Drag turns it into an input box + bool start_text_input = false; + const bool tab_focus_requested = FocusableItemRegister(window, g.ActiveId == id); + if (tab_focus_requested || (hovered && (g.IO.MouseClicked[0] | g.IO.MouseDoubleClicked[0]))) + { + SetActiveID(id, window); + FocusWindow(window); + + if (tab_focus_requested || g.IO.KeyCtrl || g.IO.MouseDoubleClicked[0]) + { + start_text_input = true; + g.ScalarAsInputTextId = 0; + } + } + if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id)) + return InputScalarAsWidgetReplacement(frame_bb, label, ImGuiDataType_Float, v, id, decimal_precision); + + // Actual drag behavior + ItemSize(total_bb, style.FramePadding.y); + const bool value_changed = DragBehavior(frame_bb, id, v, v_speed, v_min, v_max, decimal_precision, power); + + // Display value using user-provided display format so user can add prefix/suffix/decorations to the value. + char value_buf[64]; + const char* value_buf_end = value_buf + ImFormatString(value_buf, IM_ARRAYSIZE(value_buf), display_format, *v); + RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.5f)); + + if (label_size.x > 0.0f) + RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, inner_bb.Min.y), label); + + return value_changed; +} + +bool ImGui::DragFloatN(const char* label, float* v, int components, float v_speed, float v_min, float v_max, const char* display_format, float power) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + bool value_changed = false; + BeginGroup(); + PushID(label); + PushMultiItemsWidths(components); + for (int i = 0; i < components; i++) + { + PushID(i); + value_changed |= DragFloat("##v", &v[i], v_speed, v_min, v_max, display_format, power); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); + } + PopID(); + + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); + + return value_changed; +} + +bool ImGui::DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* display_format, float power) +{ + return DragFloatN(label, v, 2, v_speed, v_min, v_max, display_format, power); +} + +bool ImGui::DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* display_format, float power) +{ + return DragFloatN(label, v, 3, v_speed, v_min, v_max, display_format, power); +} + +bool ImGui::DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* display_format, float power) +{ + return DragFloatN(label, v, 4, v_speed, v_min, v_max, display_format, power); +} + +bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* display_format, const char* display_format_max, float power) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + PushID(label); + BeginGroup(); + PushMultiItemsWidths(2); + + bool value_changed = DragFloat("##min", v_current_min, v_speed, (v_min >= v_max) ? -FLT_MAX : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), display_format, power); + PopItemWidth(); + SameLine(0, g.Style.ItemInnerSpacing.x); + value_changed |= DragFloat("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? FLT_MAX : v_max, display_format_max ? display_format_max : display_format, power); + PopItemWidth(); + SameLine(0, g.Style.ItemInnerSpacing.x); + + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); + PopID(); + + return value_changed; +} + +// NB: v_speed is float to allow adjusting the drag speed with more precision +bool ImGui::DragInt(const char* label, int* v, float v_speed, int v_min, int v_max, const char* display_format) +{ + if (!display_format) + display_format = "%.0f"; + float v_f = (float)*v; + bool value_changed = DragFloat(label, &v_f, v_speed, (float)v_min, (float)v_max, display_format); + *v = (int)v_f; + return value_changed; +} + +bool ImGui::DragIntN(const char* label, int* v, int components, float v_speed, int v_min, int v_max, const char* display_format) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + bool value_changed = false; + BeginGroup(); + PushID(label); + PushMultiItemsWidths(components); + for (int i = 0; i < components; i++) + { + PushID(i); + value_changed |= DragInt("##v", &v[i], v_speed, v_min, v_max, display_format); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); + } + PopID(); + + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); + + return value_changed; +} + +bool ImGui::DragInt2(const char* label, int v[2], float v_speed, int v_min, int v_max, const char* display_format) +{ + return DragIntN(label, v, 2, v_speed, v_min, v_max, display_format); +} + +bool ImGui::DragInt3(const char* label, int v[3], float v_speed, int v_min, int v_max, const char* display_format) +{ + return DragIntN(label, v, 3, v_speed, v_min, v_max, display_format); +} + +bool ImGui::DragInt4(const char* label, int v[4], float v_speed, int v_min, int v_max, const char* display_format) +{ + return DragIntN(label, v, 4, v_speed, v_min, v_max, display_format); +} + +bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed, int v_min, int v_max, const char* display_format, const char* display_format_max) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + PushID(label); + BeginGroup(); + PushMultiItemsWidths(2); + + bool value_changed = DragInt("##min", v_current_min, v_speed, (v_min >= v_max) ? INT_MIN : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), display_format); + PopItemWidth(); + SameLine(0, g.Style.ItemInnerSpacing.x); + value_changed |= DragInt("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? INT_MAX : v_max, display_format_max ? display_format_max : display_format); + PopItemWidth(); + SameLine(0, g.Style.ItemInnerSpacing.x); + + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); + PopID(); + + return value_changed; +} + +void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + + const ImVec2 label_size = CalcTextSize(label, NULL, true); + if (graph_size.x == 0.0f) + graph_size.x = CalcItemWidth(); + if (graph_size.y == 0.0f) + graph_size.y = label_size.y + (style.FramePadding.y * 2); + + const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(graph_size.x, graph_size.y)); + const ImRect inner_bb(frame_bb.Min + style.FramePadding, frame_bb.Max - style.FramePadding); + const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0)); + ItemSize(total_bb, style.FramePadding.y); + if (!ItemAdd(total_bb, NULL)) + return; + + // Determine scale from values if not specified + if (scale_min == FLT_MAX || scale_max == FLT_MAX) + { + float v_min = FLT_MAX; + float v_max = -FLT_MAX; + for (int i = 0; i < values_count; i++) + { + const float v = values_getter(data, i); + v_min = ImMin(v_min, v); + v_max = ImMax(v_max, v); + } + if (scale_min == FLT_MAX) + scale_min = v_min; + if (scale_max == FLT_MAX) + scale_max = v_max; + } + + RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding); + + if (values_count > 0) + { + int res_w = ImMin((int)graph_size.x, values_count) + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0); + int item_count = values_count + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0); + + // Tooltip on hover + int v_hovered = -1; + if (IsHovered(inner_bb, 0)) + { + const float t = ImClamp((g.IO.MousePos.x - inner_bb.Min.x) / (inner_bb.Max.x - inner_bb.Min.x), 0.0f, 0.9999f); + const int v_idx = (int)(t * item_count); + IM_ASSERT(v_idx >= 0 && v_idx < values_count); + + const float v0 = values_getter(data, (v_idx + values_offset) % values_count); + const float v1 = values_getter(data, (v_idx + 1 + values_offset) % values_count); + if (plot_type == ImGuiPlotType_Lines) + SetTooltip("%d: %8.4g\n%d: %8.4g", v_idx, v0, v_idx+1, v1); + else if (plot_type == ImGuiPlotType_Histogram) + SetTooltip("%d: %8.4g", v_idx, v0); + v_hovered = v_idx; + } + + const float t_step = 1.0f / (float)res_w; + + float v0 = values_getter(data, (0 + values_offset) % values_count); + float t0 = 0.0f; + ImVec2 tp0 = ImVec2( t0, 1.0f - ImSaturate((v0 - scale_min) / (scale_max - scale_min)) ); // Point in the normalized space of our target rectangle + + const ImU32 col_base = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLines : ImGuiCol_PlotHistogram); + const ImU32 col_hovered = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLinesHovered : ImGuiCol_PlotHistogramHovered); + + for (int n = 0; n < res_w; n++) + { + const float t1 = t0 + t_step; + const int v1_idx = (int)(t0 * item_count + 0.5f); + IM_ASSERT(v1_idx >= 0 && v1_idx < values_count); + const float v1 = values_getter(data, (v1_idx + values_offset + 1) % values_count); + const ImVec2 tp1 = ImVec2( t1, 1.0f - ImSaturate((v1 - scale_min) / (scale_max - scale_min)) ); + + // NB: Draw calls are merged together by the DrawList system. Still, we should render our batch are lower level to save a bit of CPU. + ImVec2 pos0 = ImLerp(inner_bb.Min, inner_bb.Max, tp0); + ImVec2 pos1 = ImLerp(inner_bb.Min, inner_bb.Max, (plot_type == ImGuiPlotType_Lines) ? tp1 : ImVec2(tp1.x, 1.0f)); + if (plot_type == ImGuiPlotType_Lines) + { + window->DrawList->AddLine(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base); + } + else if (plot_type == ImGuiPlotType_Histogram) + { + if (pos1.x >= pos0.x + 2.0f) + pos1.x -= 1.0f; + window->DrawList->AddRectFilled(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base); + } + + t0 = t1; + tp0 = tp1; + } + } + + // Text overlay + if (overlay_text) + RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, overlay_text, NULL, NULL, ImVec2(0.5f,0.0f)); + + if (label_size.x > 0.0f) + RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, inner_bb.Min.y), label); +} + +struct ImGuiPlotArrayGetterData +{ + const float* Values; + int Stride; + + ImGuiPlotArrayGetterData(const float* values, int stride) { Values = values; Stride = stride; } +}; + +static float Plot_ArrayGetter(void* data, int idx) +{ + ImGuiPlotArrayGetterData* plot_data = (ImGuiPlotArrayGetterData*)data; + const float v = *(float*)(void*)((unsigned char*)plot_data->Values + (size_t)idx * plot_data->Stride); + return v; +} + +void ImGui::PlotLines(const char* label, const float* values, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride) +{ + ImGuiPlotArrayGetterData data(values, stride); + PlotEx(ImGuiPlotType_Lines, label, &Plot_ArrayGetter, (void*)&data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size); +} + +void ImGui::PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size) +{ + PlotEx(ImGuiPlotType_Lines, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size); +} + +void ImGui::PlotHistogram(const char* label, const float* values, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride) +{ + ImGuiPlotArrayGetterData data(values, stride); + PlotEx(ImGuiPlotType_Histogram, label, &Plot_ArrayGetter, (void*)&data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size); +} + +void ImGui::PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size) +{ + PlotEx(ImGuiPlotType_Histogram, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size); +} + +// size_arg (for each axis) < 0.0f: align to end, 0.0f: auto, > 0.0f: specified size +void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* overlay) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + + ImVec2 pos = window->DC.CursorPos; + ImRect bb(pos, pos + CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y*2.0f)); + ItemSize(bb, style.FramePadding.y); + if (!ItemAdd(bb, NULL)) + return; + + // Render + fraction = ImSaturate(fraction); + RenderFrame(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding); + bb.Reduce(ImVec2(window->BorderSize, window->BorderSize)); + const ImVec2 fill_br = ImVec2(ImLerp(bb.Min.x, bb.Max.x, fraction), bb.Max.y); + RenderFrame(bb.Min, fill_br, GetColorU32(ImGuiCol_PlotHistogram), false, style.FrameRounding); + + // Default displaying the fraction as percentage string, but user can override it + char overlay_buf[32]; + if (!overlay) + { + ImFormatString(overlay_buf, IM_ARRAYSIZE(overlay_buf), "%.0f%%", fraction*100+0.01f); + overlay = overlay_buf; + } + + ImVec2 overlay_size = CalcTextSize(overlay, NULL); + if (overlay_size.x > 0.0f) + RenderTextClipped(ImVec2(ImClamp(fill_br.x + style.ItemSpacing.x, bb.Min.x, bb.Max.x - overlay_size.x - style.ItemInnerSpacing.x), bb.Min.y), bb.Max, overlay, NULL, &overlay_size, ImVec2(0.0f,0.5f), &bb); +} + +bool ImGui::Checkbox(const char* label, bool* v) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(label); + const ImVec2 label_size = CalcTextSize(label, NULL, true); + + const ImRect check_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(label_size.y + style.FramePadding.y*2, label_size.y + style.FramePadding.y*2)); + ItemSize(check_bb, style.FramePadding.y); + + ImRect total_bb = check_bb; + if (label_size.x > 0) + SameLine(0, style.ItemInnerSpacing.x); + const ImRect text_bb(window->DC.CursorPos + ImVec2(0,style.FramePadding.y), window->DC.CursorPos + ImVec2(0,style.FramePadding.y) + label_size); + if (label_size.x > 0) + { + ItemSize(ImVec2(text_bb.GetWidth(), check_bb.GetHeight()), style.FramePadding.y); + total_bb = ImRect(ImMin(check_bb.Min, text_bb.Min), ImMax(check_bb.Max, text_bb.Max)); + } + + if (!ItemAdd(total_bb, &id)) + return false; + + bool hovered, held; + bool pressed = ButtonBehavior(total_bb, id, &hovered, &held); + if (pressed) + *v = !(*v); + + RenderFrame(check_bb.Min, check_bb.Max, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding); + if (*v) + { + const float check_sz = ImMin(check_bb.GetWidth(), check_bb.GetHeight()); + const float pad = ImMax(1.0f, (float)(int)(check_sz / 6.0f)); + window->DrawList->AddRectFilled(check_bb.Min+ImVec2(pad,pad), check_bb.Max-ImVec2(pad,pad), GetColorU32(ImGuiCol_CheckMark), style.FrameRounding); + } + + if (g.LogEnabled) + LogRenderedText(text_bb.GetTL(), *v ? "[x]" : "[ ]"); + if (label_size.x > 0.0f) + RenderText(text_bb.GetTL(), label); + + return pressed; +} + +bool ImGui::CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value) +{ + bool v = ((*flags & flags_value) == flags_value); + bool pressed = Checkbox(label, &v); + if (pressed) + { + if (v) + *flags |= flags_value; + else + *flags &= ~flags_value; + } + + return pressed; +} + +bool ImGui::RadioButton(const char* label, bool active) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(label); + const ImVec2 label_size = CalcTextSize(label, NULL, true); + + const ImRect check_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(label_size.y + style.FramePadding.y*2-1, label_size.y + style.FramePadding.y*2-1)); + ItemSize(check_bb, style.FramePadding.y); + + ImRect total_bb = check_bb; + if (label_size.x > 0) + SameLine(0, style.ItemInnerSpacing.x); + const ImRect text_bb(window->DC.CursorPos + ImVec2(0, style.FramePadding.y), window->DC.CursorPos + ImVec2(0, style.FramePadding.y) + label_size); + if (label_size.x > 0) + { + ItemSize(ImVec2(text_bb.GetWidth(), check_bb.GetHeight()), style.FramePadding.y); + total_bb.Add(text_bb); + } + + if (!ItemAdd(total_bb, &id)) + return false; + + ImVec2 center = check_bb.GetCenter(); + center.x = (float)(int)center.x + 0.5f; + center.y = (float)(int)center.y + 0.5f; + const float radius = check_bb.GetHeight() * 0.5f; + + bool hovered, held; + bool pressed = ButtonBehavior(total_bb, id, &hovered, &held); + + window->DrawList->AddCircleFilled(center, radius, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), 16); + if (active) + { + const float check_sz = ImMin(check_bb.GetWidth(), check_bb.GetHeight()); + const float pad = ImMax(1.0f, (float)(int)(check_sz / 6.0f)); + window->DrawList->AddCircleFilled(center, radius-pad, GetColorU32(ImGuiCol_CheckMark), 16); + } + + if (window->Flags & ImGuiWindowFlags_ShowBorders) + { + window->DrawList->AddCircle(center+ImVec2(1,1), radius, GetColorU32(ImGuiCol_BorderShadow), 16); + window->DrawList->AddCircle(center, radius, GetColorU32(ImGuiCol_Border), 16); + } + + if (g.LogEnabled) + LogRenderedText(text_bb.GetTL(), active ? "(x)" : "( )"); + if (label_size.x > 0.0f) + RenderText(text_bb.GetTL(), label); + + return pressed; +} + +bool ImGui::RadioButton(const char* label, int* v, int v_button) +{ + const bool pressed = RadioButton(label, *v == v_button); + if (pressed) + { + *v = v_button; + } + return pressed; +} + +static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end) +{ + int line_count = 0; + const char* s = text_begin; + while (char c = *s++) // We are only matching for \n so we can ignore UTF-8 decoding + if (c == '\n') + line_count++; + s--; + if (s[0] != '\n' && s[0] != '\r') + line_count++; + *out_text_end = s; + return line_count; +} + +static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining, ImVec2* out_offset, bool stop_on_new_line) +{ + ImFont* font = GImGui->Font; + const float line_height = GImGui->FontSize; + const float scale = line_height / font->FontSize; + + ImVec2 text_size = ImVec2(0,0); + float line_width = 0.0f; + + const ImWchar* s = text_begin; + while (s < text_end) + { + unsigned int c = (unsigned int)(*s++); + if (c == '\n') + { + text_size.x = ImMax(text_size.x, line_width); + text_size.y += line_height; + line_width = 0.0f; + if (stop_on_new_line) + break; + continue; + } + if (c == '\r') + continue; + + const float char_width = font->GetCharAdvance((unsigned short)c) * scale; + line_width += char_width; + } + + if (text_size.x < line_width) + text_size.x = line_width; + + if (out_offset) + *out_offset = ImVec2(line_width, text_size.y + line_height); // offset allow for the possibility of sitting after a trailing \n + + if (line_width > 0 || text_size.y == 0.0f) // whereas size.y will ignore the trailing \n + text_size.y += line_height; + + if (remaining) + *remaining = s; + + return text_size; +} + +// Wrapper for stb_textedit.h to edit text (our wrapper is for: statically sized buffer, single-line, wchar characters. InputText converts between UTF-8 and wchar) +namespace ImGuiStb +{ + +static int STB_TEXTEDIT_STRINGLEN(const STB_TEXTEDIT_STRING* obj) { return obj->CurLenW; } +static ImWchar STB_TEXTEDIT_GETCHAR(const STB_TEXTEDIT_STRING* obj, int idx) { return obj->Text[idx]; } +static float STB_TEXTEDIT_GETWIDTH(STB_TEXTEDIT_STRING* obj, int line_start_idx, int char_idx) { ImWchar c = obj->Text[line_start_idx+char_idx]; if (c == '\n') return STB_TEXTEDIT_GETWIDTH_NEWLINE; return GImGui->Font->GetCharAdvance(c) * (GImGui->FontSize / GImGui->Font->FontSize); } +static int STB_TEXTEDIT_KEYTOTEXT(int key) { return key >= 0x10000 ? 0 : key; } +static ImWchar STB_TEXTEDIT_NEWLINE = '\n'; +static void STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, STB_TEXTEDIT_STRING* obj, int line_start_idx) +{ + const ImWchar* text = obj->Text.Data; + const ImWchar* text_remaining = NULL; + const ImVec2 size = InputTextCalcTextSizeW(text + line_start_idx, text + obj->CurLenW, &text_remaining, NULL, true); + r->x0 = 0.0f; + r->x1 = size.x; + r->baseline_y_delta = size.y; + r->ymin = 0.0f; + r->ymax = size.y; + r->num_chars = (int)(text_remaining - (text + line_start_idx)); +} + +static bool is_separator(unsigned int c) { return ImCharIsSpace(c) || c==',' || c==';' || c=='(' || c==')' || c=='{' || c=='}' || c=='[' || c==']' || c=='|'; } +static int is_word_boundary_from_right(STB_TEXTEDIT_STRING* obj, int idx) { return idx > 0 ? (is_separator( obj->Text[idx-1] ) && !is_separator( obj->Text[idx] ) ) : 1; } +static int STB_TEXTEDIT_MOVEWORDLEFT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { idx--; while (idx >= 0 && !is_word_boundary_from_right(obj, idx)) idx--; return idx < 0 ? 0 : idx; } +#ifdef __APPLE__ // FIXME: Move setting to IO structure +static int is_word_boundary_from_left(STB_TEXTEDIT_STRING* obj, int idx) { return idx > 0 ? (!is_separator( obj->Text[idx-1] ) && is_separator( obj->Text[idx] ) ) : 1; } +static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_left(obj, idx)) idx++; return idx > len ? len : idx; } +#else +static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_right(obj, idx)) idx++; return idx > len ? len : idx; } +#endif +#define STB_TEXTEDIT_MOVEWORDLEFT STB_TEXTEDIT_MOVEWORDLEFT_IMPL // They need to be #define for stb_textedit.h +#define STB_TEXTEDIT_MOVEWORDRIGHT STB_TEXTEDIT_MOVEWORDRIGHT_IMPL + +static void STB_TEXTEDIT_DELETECHARS(STB_TEXTEDIT_STRING* obj, int pos, int n) +{ + ImWchar* dst = obj->Text.Data + pos; + + // We maintain our buffer length in both UTF-8 and wchar formats + obj->CurLenA -= ImTextCountUtf8BytesFromStr(dst, dst + n); + obj->CurLenW -= n; + + // Offset remaining text + const ImWchar* src = obj->Text.Data + pos + n; + while (ImWchar c = *src++) + *dst++ = c; + *dst = '\0'; +} + +static bool STB_TEXTEDIT_INSERTCHARS(STB_TEXTEDIT_STRING* obj, int pos, const ImWchar* new_text, int new_text_len) +{ + const int text_len = obj->CurLenW; + IM_ASSERT(pos <= text_len); + if (new_text_len + text_len + 1 > obj->Text.Size) + return false; + + const int new_text_len_utf8 = ImTextCountUtf8BytesFromStr(new_text, new_text + new_text_len); + if (new_text_len_utf8 + obj->CurLenA + 1 > obj->BufSizeA) + return false; + + ImWchar* text = obj->Text.Data; + if (pos != text_len) + memmove(text + pos + new_text_len, text + pos, (size_t)(text_len - pos) * sizeof(ImWchar)); + memcpy(text + pos, new_text, (size_t)new_text_len * sizeof(ImWchar)); + + obj->CurLenW += new_text_len; + obj->CurLenA += new_text_len_utf8; + obj->Text[obj->CurLenW] = '\0'; + + return true; +} + +// We don't use an enum so we can build even with conflicting symbols (if another user of stb_textedit.h leak their STB_TEXTEDIT_K_* symbols) +#define STB_TEXTEDIT_K_LEFT 0x10000 // keyboard input to move cursor left +#define STB_TEXTEDIT_K_RIGHT 0x10001 // keyboard input to move cursor right +#define STB_TEXTEDIT_K_UP 0x10002 // keyboard input to move cursor up +#define STB_TEXTEDIT_K_DOWN 0x10003 // keyboard input to move cursor down +#define STB_TEXTEDIT_K_LINESTART 0x10004 // keyboard input to move cursor to start of line +#define STB_TEXTEDIT_K_LINEEND 0x10005 // keyboard input to move cursor to end of line +#define STB_TEXTEDIT_K_TEXTSTART 0x10006 // keyboard input to move cursor to start of text +#define STB_TEXTEDIT_K_TEXTEND 0x10007 // keyboard input to move cursor to end of text +#define STB_TEXTEDIT_K_DELETE 0x10008 // keyboard input to delete selection or character under cursor +#define STB_TEXTEDIT_K_BACKSPACE 0x10009 // keyboard input to delete selection or character left of cursor +#define STB_TEXTEDIT_K_UNDO 0x1000A // keyboard input to perform undo +#define STB_TEXTEDIT_K_REDO 0x1000B // keyboard input to perform redo +#define STB_TEXTEDIT_K_WORDLEFT 0x1000C // keyboard input to move cursor left one word +#define STB_TEXTEDIT_K_WORDRIGHT 0x1000D // keyboard input to move cursor right one word +#define STB_TEXTEDIT_K_SHIFT 0x20000 + +#define STB_TEXTEDIT_IMPLEMENTATION +#include "stb_textedit.h" + +} + +void ImGuiTextEditState::OnKeyPressed(int key) +{ + stb_textedit_key(this, &StbState, key); + CursorFollow = true; + CursorAnimReset(); +} + +// Public API to manipulate UTF-8 text +// We expose UTF-8 to the user (unlike the STB_TEXTEDIT_* functions which are manipulating wchar) +// FIXME: The existence of this rarely exercised code path is a bit of a nuisance. +void ImGuiTextEditCallbackData::DeleteChars(int pos, int bytes_count) +{ + IM_ASSERT(pos + bytes_count <= BufTextLen); + char* dst = Buf + pos; + const char* src = Buf + pos + bytes_count; + while (char c = *src++) + *dst++ = c; + *dst = '\0'; + + if (CursorPos + bytes_count >= pos) + CursorPos -= bytes_count; + else if (CursorPos >= pos) + CursorPos = pos; + SelectionStart = SelectionEnd = CursorPos; + BufDirty = true; + BufTextLen -= bytes_count; +} + +void ImGuiTextEditCallbackData::InsertChars(int pos, const char* new_text, const char* new_text_end) +{ + const int new_text_len = new_text_end ? (int)(new_text_end - new_text) : (int)strlen(new_text); + if (new_text_len + BufTextLen + 1 >= BufSize) + return; + + if (BufTextLen != pos) + memmove(Buf + pos + new_text_len, Buf + pos, (size_t)(BufTextLen - pos)); + memcpy(Buf + pos, new_text, (size_t)new_text_len * sizeof(char)); + Buf[BufTextLen + new_text_len] = '\0'; + + if (CursorPos >= pos) + CursorPos += new_text_len; + SelectionStart = SelectionEnd = CursorPos; + BufDirty = true; + BufTextLen += new_text_len; +} + +// Return false to discard a character. +static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiTextEditCallback callback, void* user_data) +{ + unsigned int c = *p_char; + + if (c < 128 && c != ' ' && !isprint((int)(c & 0xFF))) + { + bool pass = false; + pass |= (c == '\n' && (flags & ImGuiInputTextFlags_Multiline)); + pass |= (c == '\t' && (flags & ImGuiInputTextFlags_AllowTabInput)); + if (!pass) + return false; + } + + if (c >= 0xE000 && c <= 0xF8FF) // Filter private Unicode range. I don't imagine anybody would want to input them. GLFW on OSX seems to send private characters for special keys like arrow keys. + return false; + + if (flags & (ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_CharsNoBlank)) + { + if (flags & ImGuiInputTextFlags_CharsDecimal) + if (!(c >= '0' && c <= '9') && (c != '.') && (c != '-') && (c != '+') && (c != '*') && (c != '/')) + return false; + + if (flags & ImGuiInputTextFlags_CharsHexadecimal) + if (!(c >= '0' && c <= '9') && !(c >= 'a' && c <= 'f') && !(c >= 'A' && c <= 'F')) + return false; + + if (flags & ImGuiInputTextFlags_CharsUppercase) + if (c >= 'a' && c <= 'z') + *p_char = (c += (unsigned int)('A'-'a')); + + if (flags & ImGuiInputTextFlags_CharsNoBlank) + if (ImCharIsSpace(c)) + return false; + } + + if (flags & ImGuiInputTextFlags_CallbackCharFilter) + { + ImGuiTextEditCallbackData callback_data; + memset(&callback_data, 0, sizeof(ImGuiTextEditCallbackData)); + callback_data.EventFlag = ImGuiInputTextFlags_CallbackCharFilter; + callback_data.EventChar = (ImWchar)c; + callback_data.Flags = flags; + callback_data.UserData = user_data; + if (callback(&callback_data) != 0) + return false; + *p_char = callback_data.EventChar; + if (!callback_data.EventChar) + return false; + } + + return true; +} + +// Edit a string of text +// NB: when active, hold on a privately held copy of the text (and apply back to 'buf'). So changing 'buf' while active has no effect. +// FIXME: Rather messy function partly because we are doing UTF8 > u16 > UTF8 conversions on the go to more easily handle stb_textedit calls. Ideally we should stay in UTF-8 all the time. See https://github.com/nothings/stb/issues/188 +bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiTextEditCallback callback, void* user_data) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackHistory) && (flags & ImGuiInputTextFlags_Multiline))); // Can't use both together (they both use up/down keys) + IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackCompletion) && (flags & ImGuiInputTextFlags_AllowTabInput))); // Can't use both together (they both use tab key) + + ImGuiContext& g = *GImGui; + const ImGuiIO& io = g.IO; + const ImGuiStyle& style = g.Style; + + const bool is_multiline = (flags & ImGuiInputTextFlags_Multiline) != 0; + const bool is_editable = (flags & ImGuiInputTextFlags_ReadOnly) == 0; + const bool is_password = (flags & ImGuiInputTextFlags_Password) != 0; + + if (is_multiline) // Open group before calling GetID() because groups tracks id created during their spawn + BeginGroup(); + const ImGuiID id = window->GetID(label); + const ImVec2 label_size = CalcTextSize(label, NULL, true); + ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? GetTextLineHeight() * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line + const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + size); + const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? (style.ItemInnerSpacing.x + label_size.x) : 0.0f, 0.0f)); + + ImGuiWindow* draw_window = window; + if (is_multiline) + { + if (!BeginChildFrame(id, frame_bb.GetSize())) + { + EndChildFrame(); + EndGroup(); + return false; + } + draw_window = GetCurrentWindow(); + size.x -= draw_window->ScrollbarSizes.x; + } + else + { + ItemSize(total_bb, style.FramePadding.y); + if (!ItemAdd(total_bb, &id)) + return false; + } + + // Password pushes a temporary font with only a fallback glyph + if (is_password) + { + const ImFont::Glyph* glyph = g.Font->FindGlyph('*'); + ImFont* password_font = &g.InputTextPasswordFont; + password_font->FontSize = g.Font->FontSize; + password_font->Scale = g.Font->Scale; + password_font->DisplayOffset = g.Font->DisplayOffset; + password_font->Ascent = g.Font->Ascent; + password_font->Descent = g.Font->Descent; + password_font->ContainerAtlas = g.Font->ContainerAtlas; + password_font->FallbackGlyph = glyph; + password_font->FallbackXAdvance = glyph->XAdvance; + IM_ASSERT(password_font->Glyphs.empty() && password_font->IndexXAdvance.empty() && password_font->IndexLookup.empty()); + PushFont(password_font); + } + + // NB: we are only allowed to access 'edit_state' if we are the active widget. + ImGuiTextEditState& edit_state = g.InputTextState; + + const bool focus_requested = FocusableItemRegister(window, g.ActiveId == id, (flags & (ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_AllowTabInput)) == 0); // Using completion callback disable keyboard tabbing + const bool focus_requested_by_code = focus_requested && (window->FocusIdxAllCounter == window->FocusIdxAllRequestCurrent); + const bool focus_requested_by_tab = focus_requested && !focus_requested_by_code; + + const bool hovered = IsHovered(frame_bb, id); + if (hovered) + { + SetHoveredID(id); + g.MouseCursor = ImGuiMouseCursor_TextInput; + } + const bool user_clicked = hovered && io.MouseClicked[0]; + const bool user_scrolled = is_multiline && g.ActiveId == 0 && edit_state.Id == id && g.ActiveIdPreviousFrame == draw_window->GetIDNoKeepAlive("#SCROLLY"); + + bool select_all = (g.ActiveId != id) && (flags & ImGuiInputTextFlags_AutoSelectAll) != 0; + if (focus_requested || user_clicked || user_scrolled) + { + if (g.ActiveId != id) + { + // Start edition + // Take a copy of the initial buffer value (both in original UTF-8 format and converted to wchar) + // From the moment we focused we are ignoring the content of 'buf' (unless we are in read-only mode) + const int prev_len_w = edit_state.CurLenW; + edit_state.Text.resize(buf_size+1); // wchar count <= UTF-8 count. we use +1 to make sure that .Data isn't NULL so it doesn't crash. + edit_state.InitialText.resize(buf_size+1); // UTF-8. we use +1 to make sure that .Data isn't NULL so it doesn't crash. + ImStrncpy(edit_state.InitialText.Data, buf, edit_state.InitialText.Size); + const char* buf_end = NULL; + edit_state.CurLenW = ImTextStrFromUtf8(edit_state.Text.Data, edit_state.Text.Size, buf, NULL, &buf_end); + edit_state.CurLenA = (int)(buf_end - buf); // We can't get the result from ImFormatString() above because it is not UTF-8 aware. Here we'll cut off malformed UTF-8. + edit_state.CursorAnimReset(); + + // Preserve cursor position and undo/redo stack if we come back to same widget + // FIXME: We should probably compare the whole buffer to be on the safety side. Comparing buf (utf8) and edit_state.Text (wchar). + const bool recycle_state = (edit_state.Id == id) && (prev_len_w == edit_state.CurLenW); + if (recycle_state) + { + // Recycle existing cursor/selection/undo stack but clamp position + // Note a single mouse click will override the cursor/position immediately by calling stb_textedit_click handler. + edit_state.CursorClamp(); + } + else + { + edit_state.Id = id; + edit_state.ScrollX = 0.0f; + stb_textedit_initialize_state(&edit_state.StbState, !is_multiline); + if (!is_multiline && focus_requested_by_code) + select_all = true; + } + if (flags & ImGuiInputTextFlags_AlwaysInsertMode) + edit_state.StbState.insert_mode = true; + if (!is_multiline && (focus_requested_by_tab || (user_clicked && io.KeyCtrl))) + select_all = true; + } + SetActiveID(id, window); + FocusWindow(window); + } + else if (io.MouseClicked[0]) + { + // Release focus when we click outside + if (g.ActiveId == id) + SetActiveID(0); + } + + bool value_changed = false; + bool enter_pressed = false; + + if (g.ActiveId == id) + { + if (!is_editable && !g.ActiveIdIsJustActivated) + { + // When read-only we always use the live data passed to the function + edit_state.Text.resize(buf_size+1); + const char* buf_end = NULL; + edit_state.CurLenW = ImTextStrFromUtf8(edit_state.Text.Data, edit_state.Text.Size, buf, NULL, &buf_end); + edit_state.CurLenA = (int)(buf_end - buf); + edit_state.CursorClamp(); + } + + edit_state.BufSizeA = buf_size; + + // Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget. + // Down the line we should have a cleaner library-wide concept of Selected vs Active. + g.ActiveIdAllowOverlap = !io.MouseDown[0]; + + // Edit in progress + const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + edit_state.ScrollX; + const float mouse_y = (is_multiline ? (io.MousePos.y - draw_window->DC.CursorPos.y - style.FramePadding.y) : (g.FontSize*0.5f)); + + const bool osx_double_click_selects_words = io.OSXBehaviors; // OS X style: Double click selects by word instead of selecting whole text + if (select_all || (hovered && !osx_double_click_selects_words && io.MouseDoubleClicked[0])) + { + edit_state.SelectAll(); + edit_state.SelectedAllMouseLock = true; + } + else if (hovered && osx_double_click_selects_words && io.MouseDoubleClicked[0]) + { + // Select a word only, OS X style (by simulating keystrokes) + edit_state.OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT); + edit_state.OnKeyPressed(STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT); + } + else if (io.MouseClicked[0] && !edit_state.SelectedAllMouseLock) + { + stb_textedit_click(&edit_state, &edit_state.StbState, mouse_x, mouse_y); + edit_state.CursorAnimReset(); + } + else if (io.MouseDown[0] && !edit_state.SelectedAllMouseLock && (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f)) + { + stb_textedit_drag(&edit_state, &edit_state.StbState, mouse_x, mouse_y); + edit_state.CursorAnimReset(); + edit_state.CursorFollow = true; + } + if (edit_state.SelectedAllMouseLock && !io.MouseDown[0]) + edit_state.SelectedAllMouseLock = false; + + if (io.InputCharacters[0]) + { + // Process text input (before we check for Return because using some IME will effectively send a Return?) + // We ignore CTRL inputs, but need to allow CTRL+ALT as some keyboards (e.g. German) use AltGR - which is Alt+Ctrl - to input certain characters. + if (!(io.KeyCtrl && !io.KeyAlt) && is_editable) + { + for (int n = 0; n < IM_ARRAYSIZE(io.InputCharacters) && io.InputCharacters[n]; n++) + if (unsigned int c = (unsigned int)io.InputCharacters[n]) + { + // Insert character if they pass filtering + if (!InputTextFilterCharacter(&c, flags, callback, user_data)) + continue; + edit_state.OnKeyPressed((int)c); + } + } + + // Consume characters + memset(g.IO.InputCharacters, 0, sizeof(g.IO.InputCharacters)); + } + + // Handle various key-presses + bool cancel_edit = false; + const int k_mask = (io.KeyShift ? STB_TEXTEDIT_K_SHIFT : 0); + const bool is_shortcut_key_only = (io.OSXBehaviors ? (io.KeySuper && !io.KeyCtrl) : (io.KeyCtrl && !io.KeySuper)) && !io.KeyAlt && !io.KeyShift; // OS X style: Shortcuts using Cmd/Super instead of Ctrl + const bool is_wordmove_key_down = io.OSXBehaviors ? io.KeyAlt : io.KeyCtrl; // OS X style: Text editing cursor movement using Alt instead of Ctrl + const bool is_startend_key_down = io.OSXBehaviors && io.KeySuper && !io.KeyCtrl && !io.KeyAlt; // OS X style: Line/Text Start and End using Cmd+Arrows instead of Home/End + + if (IsKeyPressedMap(ImGuiKey_LeftArrow)) { edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT) | k_mask); } + else if (IsKeyPressedMap(ImGuiKey_RightArrow)) { edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT) | k_mask); } + else if (IsKeyPressedMap(ImGuiKey_UpArrow) && is_multiline) { if (io.KeyCtrl) SetWindowScrollY(draw_window, ImMax(draw_window->Scroll.y - g.FontSize, 0.0f)); else edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTSTART : STB_TEXTEDIT_K_UP) | k_mask); } + else if (IsKeyPressedMap(ImGuiKey_DownArrow) && is_multiline) { if (io.KeyCtrl) SetWindowScrollY(draw_window, ImMin(draw_window->Scroll.y + g.FontSize, GetScrollMaxY())); else edit_state.OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTEND : STB_TEXTEDIT_K_DOWN) | k_mask); } + else if (IsKeyPressedMap(ImGuiKey_Home)) { edit_state.OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask); } + else if (IsKeyPressedMap(ImGuiKey_End)) { edit_state.OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask); } + else if (IsKeyPressedMap(ImGuiKey_Delete) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_DELETE | k_mask); } + else if (IsKeyPressedMap(ImGuiKey_Backspace) && is_editable) + { + if (!edit_state.HasSelection()) + { + if (is_wordmove_key_down) edit_state.OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT|STB_TEXTEDIT_K_SHIFT); + else if (io.OSXBehaviors && io.KeySuper && !io.KeyAlt && !io.KeyCtrl) edit_state.OnKeyPressed(STB_TEXTEDIT_K_LINESTART|STB_TEXTEDIT_K_SHIFT); + } + edit_state.OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask); + } + else if (IsKeyPressedMap(ImGuiKey_Enter)) + { + bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0; + if (!is_multiline || (ctrl_enter_for_new_line && !io.KeyCtrl) || (!ctrl_enter_for_new_line && io.KeyCtrl)) + { + SetActiveID(0); + enter_pressed = true; + } + else if (is_editable) + { + unsigned int c = '\n'; // Insert new line + if (InputTextFilterCharacter(&c, flags, callback, user_data)) + edit_state.OnKeyPressed((int)c); + } + } + else if ((flags & ImGuiInputTextFlags_AllowTabInput) && IsKeyPressedMap(ImGuiKey_Tab) && !io.KeyCtrl && !io.KeyShift && !io.KeyAlt && is_editable) + { + unsigned int c = '\t'; // Insert TAB + if (InputTextFilterCharacter(&c, flags, callback, user_data)) + edit_state.OnKeyPressed((int)c); + } + else if (IsKeyPressedMap(ImGuiKey_Escape)) { SetActiveID(0); cancel_edit = true; } + else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Z) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_UNDO); edit_state.ClearSelection(); } + else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Y) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_REDO); edit_state.ClearSelection(); } + else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_A)) { edit_state.SelectAll(); edit_state.CursorFollow = true; } + else if (is_shortcut_key_only && !is_password && ((IsKeyPressedMap(ImGuiKey_X) && is_editable) || IsKeyPressedMap(ImGuiKey_C)) && (!is_multiline || edit_state.HasSelection())) + { + // Cut, Copy + const bool cut = IsKeyPressedMap(ImGuiKey_X); + if (cut && !edit_state.HasSelection()) + edit_state.SelectAll(); + + if (io.SetClipboardTextFn) + { + const int ib = edit_state.HasSelection() ? ImMin(edit_state.StbState.select_start, edit_state.StbState.select_end) : 0; + const int ie = edit_state.HasSelection() ? ImMax(edit_state.StbState.select_start, edit_state.StbState.select_end) : edit_state.CurLenW; + edit_state.TempTextBuffer.resize((ie-ib) * 4 + 1); + ImTextStrToUtf8(edit_state.TempTextBuffer.Data, edit_state.TempTextBuffer.Size, edit_state.Text.Data+ib, edit_state.Text.Data+ie); + SetClipboardText(edit_state.TempTextBuffer.Data); + } + + if (cut) + { + edit_state.CursorFollow = true; + stb_textedit_cut(&edit_state, &edit_state.StbState); + } + } + else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_V) && is_editable) + { + // Paste + if (const char* clipboard = GetClipboardText()) + { + // Filter pasted buffer + const int clipboard_len = (int)strlen(clipboard); + ImWchar* clipboard_filtered = (ImWchar*)ImGui::MemAlloc((clipboard_len+1) * sizeof(ImWchar)); + int clipboard_filtered_len = 0; + for (const char* s = clipboard; *s; ) + { + unsigned int c; + s += ImTextCharFromUtf8(&c, s, NULL); + if (c == 0) + break; + if (c >= 0x10000 || !InputTextFilterCharacter(&c, flags, callback, user_data)) + continue; + clipboard_filtered[clipboard_filtered_len++] = (ImWchar)c; + } + clipboard_filtered[clipboard_filtered_len] = 0; + if (clipboard_filtered_len > 0) // If everything was filtered, ignore the pasting operation + { + stb_textedit_paste(&edit_state, &edit_state.StbState, clipboard_filtered, clipboard_filtered_len); + edit_state.CursorFollow = true; + } + ImGui::MemFree(clipboard_filtered); + } + } + + if (cancel_edit) + { + // Restore initial value + if (is_editable) + { + ImStrncpy(buf, edit_state.InitialText.Data, buf_size); + value_changed = true; + } + } + else + { + // Apply new value immediately - copy modified buffer back + // Note that as soon as the input box is active, the in-widget value gets priority over any underlying modification of the input buffer + // FIXME: We actually always render 'buf' when calling DrawList->AddText, making the comment above incorrect. + // FIXME-OPT: CPU waste to do this every time the widget is active, should mark dirty state from the stb_textedit callbacks. + if (is_editable) + { + edit_state.TempTextBuffer.resize(edit_state.Text.Size * 4); + ImTextStrToUtf8(edit_state.TempTextBuffer.Data, edit_state.TempTextBuffer.Size, edit_state.Text.Data, NULL); + } + + // User callback + if ((flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_CallbackHistory | ImGuiInputTextFlags_CallbackAlways)) != 0) + { + IM_ASSERT(callback != NULL); + + // The reason we specify the usage semantic (Completion/History) is that Completion needs to disable keyboard TABBING at the moment. + ImGuiInputTextFlags event_flag = 0; + ImGuiKey event_key = ImGuiKey_COUNT; + if ((flags & ImGuiInputTextFlags_CallbackCompletion) != 0 && IsKeyPressedMap(ImGuiKey_Tab)) + { + event_flag = ImGuiInputTextFlags_CallbackCompletion; + event_key = ImGuiKey_Tab; + } + else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressedMap(ImGuiKey_UpArrow)) + { + event_flag = ImGuiInputTextFlags_CallbackHistory; + event_key = ImGuiKey_UpArrow; + } + else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressedMap(ImGuiKey_DownArrow)) + { + event_flag = ImGuiInputTextFlags_CallbackHistory; + event_key = ImGuiKey_DownArrow; + } + else if (flags & ImGuiInputTextFlags_CallbackAlways) + event_flag = ImGuiInputTextFlags_CallbackAlways; + + if (event_flag) + { + ImGuiTextEditCallbackData callback_data; + memset(&callback_data, 0, sizeof(ImGuiTextEditCallbackData)); + callback_data.EventFlag = event_flag; + callback_data.Flags = flags; + callback_data.UserData = user_data; + callback_data.ReadOnly = !is_editable; + + callback_data.EventKey = event_key; + callback_data.Buf = edit_state.TempTextBuffer.Data; + callback_data.BufTextLen = edit_state.CurLenA; + callback_data.BufSize = edit_state.BufSizeA; + callback_data.BufDirty = false; + + // We have to convert from wchar-positions to UTF-8-positions, which can be pretty slow (an incentive to ditch the ImWchar buffer, see https://github.com/nothings/stb/issues/188) + ImWchar* text = edit_state.Text.Data; + const int utf8_cursor_pos = callback_data.CursorPos = ImTextCountUtf8BytesFromStr(text, text + edit_state.StbState.cursor); + const int utf8_selection_start = callback_data.SelectionStart = ImTextCountUtf8BytesFromStr(text, text + edit_state.StbState.select_start); + const int utf8_selection_end = callback_data.SelectionEnd = ImTextCountUtf8BytesFromStr(text, text + edit_state.StbState.select_end); + + // Call user code + callback(&callback_data); + + // Read back what user may have modified + IM_ASSERT(callback_data.Buf == edit_state.TempTextBuffer.Data); // Invalid to modify those fields + IM_ASSERT(callback_data.BufSize == edit_state.BufSizeA); + IM_ASSERT(callback_data.Flags == flags); + if (callback_data.CursorPos != utf8_cursor_pos) edit_state.StbState.cursor = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.CursorPos); + if (callback_data.SelectionStart != utf8_selection_start) edit_state.StbState.select_start = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionStart); + if (callback_data.SelectionEnd != utf8_selection_end) edit_state.StbState.select_end = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionEnd); + if (callback_data.BufDirty) + { + IM_ASSERT(callback_data.BufTextLen == (int)strlen(callback_data.Buf)); // You need to maintain BufTextLen if you change the text! + edit_state.CurLenW = ImTextStrFromUtf8(edit_state.Text.Data, edit_state.Text.Size, callback_data.Buf, NULL); + edit_state.CurLenA = callback_data.BufTextLen; // Assume correct length and valid UTF-8 from user, saves us an extra strlen() + edit_state.CursorAnimReset(); + } + } + } + + // Copy back to user buffer + if (is_editable && strcmp(edit_state.TempTextBuffer.Data, buf) != 0) + { + ImStrncpy(buf, edit_state.TempTextBuffer.Data, buf_size); + value_changed = true; + } + } + } + + // Render + // Select which buffer we are going to display. When ImGuiInputTextFlags_NoLiveEdit is set 'buf' might still be the old value. We set buf to NULL to prevent accidental usage from now on. + const char* buf_display = (g.ActiveId == id && is_editable) ? edit_state.TempTextBuffer.Data : buf; buf = NULL; + + if (!is_multiline) + RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding); + + const ImVec4 clip_rect(frame_bb.Min.x, frame_bb.Min.y, frame_bb.Min.x + size.x, frame_bb.Min.y + size.y); // Not using frame_bb.Max because we have adjusted size + ImVec2 render_pos = is_multiline ? draw_window->DC.CursorPos : frame_bb.Min + style.FramePadding; + ImVec2 text_size(0.f, 0.f); + const bool is_currently_scrolling = (edit_state.Id == id && is_multiline && g.ActiveId == draw_window->GetIDNoKeepAlive("#SCROLLY")); + if (g.ActiveId == id || is_currently_scrolling) + { + edit_state.CursorAnim += io.DeltaTime; + + // This is going to be messy. We need to: + // - Display the text (this alone can be more easily clipped) + // - Handle scrolling, highlight selection, display cursor (those all requires some form of 1d->2d cursor position calculation) + // - Measure text height (for scrollbar) + // We are attempting to do most of that in **one main pass** to minimize the computation cost (non-negligible for large amount of text) + 2nd pass for selection rendering (we could merge them by an extra refactoring effort) + // FIXME: This should occur on buf_display but we'd need to maintain cursor/select_start/select_end for UTF-8. + const ImWchar* text_begin = edit_state.Text.Data; + ImVec2 cursor_offset, select_start_offset; + + { + // Count lines + find lines numbers straddling 'cursor' and 'select_start' position. + const ImWchar* searches_input_ptr[2]; + searches_input_ptr[0] = text_begin + edit_state.StbState.cursor; + searches_input_ptr[1] = NULL; + int searches_remaining = 1; + int searches_result_line_number[2] = { -1, -999 }; + if (edit_state.StbState.select_start != edit_state.StbState.select_end) + { + searches_input_ptr[1] = text_begin + ImMin(edit_state.StbState.select_start, edit_state.StbState.select_end); + searches_result_line_number[1] = -1; + searches_remaining++; + } + + // Iterate all lines to find our line numbers + // In multi-line mode, we never exit the loop until all lines are counted, so add one extra to the searches_remaining counter. + searches_remaining += is_multiline ? 1 : 0; + int line_count = 0; + for (const ImWchar* s = text_begin; *s != 0; s++) + if (*s == '\n') + { + line_count++; + if (searches_result_line_number[0] == -1 && s >= searches_input_ptr[0]) { searches_result_line_number[0] = line_count; if (--searches_remaining <= 0) break; } + if (searches_result_line_number[1] == -1 && s >= searches_input_ptr[1]) { searches_result_line_number[1] = line_count; if (--searches_remaining <= 0) break; } + } + line_count++; + if (searches_result_line_number[0] == -1) searches_result_line_number[0] = line_count; + if (searches_result_line_number[1] == -1) searches_result_line_number[1] = line_count; + + // Calculate 2d position by finding the beginning of the line and measuring distance + cursor_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[0], text_begin), searches_input_ptr[0]).x; + cursor_offset.y = searches_result_line_number[0] * g.FontSize; + if (searches_result_line_number[1] >= 0) + { + select_start_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[1], text_begin), searches_input_ptr[1]).x; + select_start_offset.y = searches_result_line_number[1] * g.FontSize; + } + + // Calculate text height + if (is_multiline) + text_size = ImVec2(size.x, line_count * g.FontSize); + } + + // Scroll + if (edit_state.CursorFollow) + { + // Horizontal scroll in chunks of quarter width + if (!(flags & ImGuiInputTextFlags_NoHorizontalScroll)) + { + const float scroll_increment_x = size.x * 0.25f; + if (cursor_offset.x < edit_state.ScrollX) + edit_state.ScrollX = (float)(int)ImMax(0.0f, cursor_offset.x - scroll_increment_x); + else if (cursor_offset.x - size.x >= edit_state.ScrollX) + edit_state.ScrollX = (float)(int)(cursor_offset.x - size.x + scroll_increment_x); + } + else + { + edit_state.ScrollX = 0.0f; + } + + // Vertical scroll + if (is_multiline) + { + float scroll_y = draw_window->Scroll.y; + if (cursor_offset.y - g.FontSize < scroll_y) + scroll_y = ImMax(0.0f, cursor_offset.y - g.FontSize); + else if (cursor_offset.y - size.y >= scroll_y) + scroll_y = cursor_offset.y - size.y; + draw_window->DC.CursorPos.y += (draw_window->Scroll.y - scroll_y); // To avoid a frame of lag + draw_window->Scroll.y = scroll_y; + render_pos.y = draw_window->DC.CursorPos.y; + } + } + edit_state.CursorFollow = false; + const ImVec2 render_scroll = ImVec2(edit_state.ScrollX, 0.0f); + + // Draw selection + if (edit_state.StbState.select_start != edit_state.StbState.select_end) + { + const ImWchar* text_selected_begin = text_begin + ImMin(edit_state.StbState.select_start, edit_state.StbState.select_end); + const ImWchar* text_selected_end = text_begin + ImMax(edit_state.StbState.select_start, edit_state.StbState.select_end); + + float bg_offy_up = is_multiline ? 0.0f : -1.0f; // FIXME: those offsets should be part of the style? they don't play so well with multi-line selection. + float bg_offy_dn = is_multiline ? 0.0f : 2.0f; + ImU32 bg_color = GetColorU32(ImGuiCol_TextSelectedBg); + ImVec2 rect_pos = render_pos + select_start_offset - render_scroll; + for (const ImWchar* p = text_selected_begin; p < text_selected_end; ) + { + if (rect_pos.y > clip_rect.w + g.FontSize) + break; + if (rect_pos.y < clip_rect.y) + { + while (p < text_selected_end) + if (*p++ == '\n') + break; + } + else + { + ImVec2 rect_size = InputTextCalcTextSizeW(p, text_selected_end, &p, NULL, true); + if (rect_size.x <= 0.0f) rect_size.x = (float)(int)(g.Font->GetCharAdvance((unsigned short)' ') * 0.50f); // So we can see selected empty lines + ImRect rect(rect_pos + ImVec2(0.0f, bg_offy_up - g.FontSize), rect_pos +ImVec2(rect_size.x, bg_offy_dn)); + rect.Clip(clip_rect); + if (rect.Overlaps(clip_rect)) + draw_window->DrawList->AddRectFilled(rect.Min, rect.Max, bg_color); + } + rect_pos.x = render_pos.x - render_scroll.x; + rect_pos.y += g.FontSize; + } + } + + draw_window->DrawList->AddText(g.Font, g.FontSize, render_pos - render_scroll, GetColorU32(ImGuiCol_Text), buf_display, buf_display + edit_state.CurLenA, 0.0f, is_multiline ? NULL : &clip_rect); + + // Draw blinking cursor + bool cursor_is_visible = (g.InputTextState.CursorAnim <= 0.0f) || fmodf(g.InputTextState.CursorAnim, 1.20f) <= 0.80f; + ImVec2 cursor_screen_pos = render_pos + cursor_offset - render_scroll; + ImRect cursor_screen_rect(cursor_screen_pos.x, cursor_screen_pos.y-g.FontSize+0.5f, cursor_screen_pos.x+1.0f, cursor_screen_pos.y-1.5f); + if (cursor_is_visible && cursor_screen_rect.Overlaps(clip_rect)) + draw_window->DrawList->AddLine(cursor_screen_rect.Min, cursor_screen_rect.GetBL(), GetColorU32(ImGuiCol_Text)); + + // Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.) + if (is_editable) + g.OsImePosRequest = ImVec2(cursor_screen_pos.x - 1, cursor_screen_pos.y - g.FontSize); + } + else + { + // Render text only + const char* buf_end = NULL; + if (is_multiline) + text_size = ImVec2(size.x, InputTextCalcTextLenAndLineCount(buf_display, &buf_end) * g.FontSize); // We don't need width + draw_window->DrawList->AddText(g.Font, g.FontSize, render_pos, GetColorU32(ImGuiCol_Text), buf_display, buf_end, 0.0f, is_multiline ? NULL : &clip_rect); + } + + if (is_multiline) + { + Dummy(text_size + ImVec2(0.0f, g.FontSize)); // Always add room to scroll an extra line + EndChildFrame(); + EndGroup(); + } + + if (is_password) + PopFont(); + + // Log as text + if (g.LogEnabled && !is_password) + LogRenderedText(render_pos, buf_display, NULL); + + if (label_size.x > 0) + RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); + + if ((flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0) + return enter_pressed; + else + return value_changed; +} + +bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiTextEditCallback callback, void* user_data) +{ + IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline() + return InputTextEx(label, buf, (int)buf_size, ImVec2(0,0), flags, callback, user_data); +} + +bool ImGui::InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size, ImGuiInputTextFlags flags, ImGuiTextEditCallback callback, void* user_data) +{ + return InputTextEx(label, buf, (int)buf_size, size, flags | ImGuiInputTextFlags_Multiline, callback, user_data); +} + +// NB: scalar_format here must be a simple "%xx" format string with no prefix/suffix (unlike the Drag/Slider functions "display_format" argument) +bool ImGui::InputScalarEx(const char* label, ImGuiDataType data_type, void* data_ptr, void* step_ptr, void* step_fast_ptr, const char* scalar_format, ImGuiInputTextFlags extra_flags) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImVec2 label_size = CalcTextSize(label, NULL, true); + + BeginGroup(); + PushID(label); + const ImVec2 button_sz = ImVec2(g.FontSize, g.FontSize) + style.FramePadding*2.0f; + if (step_ptr) + PushItemWidth(ImMax(1.0f, CalcItemWidth() - (button_sz.x + style.ItemInnerSpacing.x)*2)); + + char buf[64]; + DataTypeFormatString(data_type, data_ptr, scalar_format, buf, IM_ARRAYSIZE(buf)); + + bool value_changed = false; + if (!(extra_flags & ImGuiInputTextFlags_CharsHexadecimal)) + extra_flags |= ImGuiInputTextFlags_CharsDecimal; + extra_flags |= ImGuiInputTextFlags_AutoSelectAll; + if (InputText("", buf, IM_ARRAYSIZE(buf), extra_flags)) // PushId(label) + "" gives us the expected ID from outside point of view + value_changed = DataTypeApplyOpFromText(buf, GImGui->InputTextState.InitialText.begin(), data_type, data_ptr, scalar_format); + + // Step buttons + if (step_ptr) + { + PopItemWidth(); + SameLine(0, style.ItemInnerSpacing.x); + if (ButtonEx("-", button_sz, ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups)) + { + DataTypeApplyOp(data_type, '-', data_ptr, g.IO.KeyCtrl && step_fast_ptr ? step_fast_ptr : step_ptr); + value_changed = true; + } + SameLine(0, style.ItemInnerSpacing.x); + if (ButtonEx("+", button_sz, ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups)) + { + DataTypeApplyOp(data_type, '+', data_ptr, g.IO.KeyCtrl && step_fast_ptr ? step_fast_ptr : step_ptr); + value_changed = true; + } + } + PopID(); + + if (label_size.x > 0) + { + SameLine(0, style.ItemInnerSpacing.x); + RenderText(ImVec2(window->DC.CursorPos.x, window->DC.CursorPos.y + style.FramePadding.y), label); + ItemSize(label_size, style.FramePadding.y); + } + EndGroup(); + + return value_changed; +} + +bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags) +{ + char display_format[16]; + if (decimal_precision < 0) + strcpy(display_format, "%f"); // Ideally we'd have a minimum decimal precision of 1 to visually denote that this is a float, while hiding non-significant digits? %f doesn't have a minimum of 1 + else + ImFormatString(display_format, IM_ARRAYSIZE(display_format), "%%.%df", decimal_precision); + return InputScalarEx(label, ImGuiDataType_Float, (void*)v, (void*)(step>0.0f ? &step : NULL), (void*)(step_fast>0.0f ? &step_fast : NULL), display_format, extra_flags); +} + +bool ImGui::InputInt(const char* label, int* v, int step, int step_fast, ImGuiInputTextFlags extra_flags) +{ + // Hexadecimal input provided as a convenience but the flag name is awkward. Typically you'd use InputText() to parse your own data, if you want to handle prefixes. + const char* scalar_format = (extra_flags & ImGuiInputTextFlags_CharsHexadecimal) ? "%08X" : "%d"; + return InputScalarEx(label, ImGuiDataType_Int, (void*)v, (void*)(step>0.0f ? &step : NULL), (void*)(step_fast>0.0f ? &step_fast : NULL), scalar_format, extra_flags); +} + +bool ImGui::InputFloatN(const char* label, float* v, int components, int decimal_precision, ImGuiInputTextFlags extra_flags) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + bool value_changed = false; + BeginGroup(); + PushID(label); + PushMultiItemsWidths(components); + for (int i = 0; i < components; i++) + { + PushID(i); + value_changed |= InputFloat("##v", &v[i], 0, 0, decimal_precision, extra_flags); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); + } + PopID(); + + window->DC.CurrentLineTextBaseOffset = ImMax(window->DC.CurrentLineTextBaseOffset, g.Style.FramePadding.y); + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); + + return value_changed; +} + +bool ImGui::InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags extra_flags) +{ + return InputFloatN(label, v, 2, decimal_precision, extra_flags); +} + +bool ImGui::InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags extra_flags) +{ + return InputFloatN(label, v, 3, decimal_precision, extra_flags); +} + +bool ImGui::InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags extra_flags) +{ + return InputFloatN(label, v, 4, decimal_precision, extra_flags); +} + +bool ImGui::InputIntN(const char* label, int* v, int components, ImGuiInputTextFlags extra_flags) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + bool value_changed = false; + BeginGroup(); + PushID(label); + PushMultiItemsWidths(components); + for (int i = 0; i < components; i++) + { + PushID(i); + value_changed |= InputInt("##v", &v[i], 0, 0, extra_flags); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); + } + PopID(); + + window->DC.CurrentLineTextBaseOffset = ImMax(window->DC.CurrentLineTextBaseOffset, g.Style.FramePadding.y); + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); + + return value_changed; +} + +bool ImGui::InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags) +{ + return InputIntN(label, v, 2, extra_flags); +} + +bool ImGui::InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags) +{ + return InputIntN(label, v, 3, extra_flags); +} + +bool ImGui::InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags) +{ + return InputIntN(label, v, 4, extra_flags); +} + +static bool Items_ArrayGetter(void* data, int idx, const char** out_text) +{ + const char** items = (const char**)data; + if (out_text) + *out_text = items[idx]; + return true; +} + +static bool Items_SingleStringGetter(void* data, int idx, const char** out_text) +{ + // FIXME-OPT: we could pre-compute the indices to fasten this. But only 1 active combo means the waste is limited. + const char* items_separated_by_zeros = (const char*)data; + int items_count = 0; + const char* p = items_separated_by_zeros; + while (*p) + { + if (idx == items_count) + break; + p += strlen(p) + 1; + items_count++; + } + if (!*p) + return false; + if (out_text) + *out_text = p; + return true; +} + +// Combo box helper allowing to pass an array of strings. +bool ImGui::Combo(const char* label, int* current_item, const char** items, int items_count, int height_in_items) +{ + const bool value_changed = Combo(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_in_items); + return value_changed; +} + +// Combo box helper allowing to pass all items in a single string. +bool ImGui::Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items) +{ + int items_count = 0; + const char* p = items_separated_by_zeros; // FIXME-OPT: Avoid computing this, or at least only when combo is open + while (*p) + { + p += strlen(p) + 1; + items_count++; + } + bool value_changed = Combo(label, current_item, Items_SingleStringGetter, (void*)items_separated_by_zeros, items_count, height_in_items); + return value_changed; +} + +// Combo box function. +bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(label); + const float w = CalcItemWidth(); + + const ImVec2 label_size = CalcTextSize(label, NULL, true); + const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); + const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); + ItemSize(total_bb, style.FramePadding.y); + if (!ItemAdd(total_bb, &id)) + return false; + + const float arrow_size = (g.FontSize + style.FramePadding.x * 2.0f); + const bool hovered = IsHovered(frame_bb, id); + bool popup_open = IsPopupOpen(id); + bool popup_opened_now = false; + + const ImRect value_bb(frame_bb.Min, frame_bb.Max - ImVec2(arrow_size, 0.0f)); + RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding); + RenderFrame(ImVec2(frame_bb.Max.x-arrow_size, frame_bb.Min.y), frame_bb.Max, GetColorU32(popup_open || hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button), true, style.FrameRounding); // FIXME-ROUNDING + RenderCollapseTriangle(ImVec2(frame_bb.Max.x-arrow_size, frame_bb.Min.y) + style.FramePadding, true); + + if (*current_item >= 0 && *current_item < items_count) + { + const char* item_text; + if (items_getter(data, *current_item, &item_text)) + RenderTextClipped(frame_bb.Min + style.FramePadding, value_bb.Max, item_text, NULL, NULL, ImVec2(0.0f,0.0f)); + } + + if (label_size.x > 0) + RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); + + if (hovered) + { + SetHoveredID(id); + if (g.IO.MouseClicked[0]) + { + SetActiveID(0); + if (IsPopupOpen(id)) + { + ClosePopup(id); + } + else + { + FocusWindow(window); + OpenPopup(label); + popup_open = popup_opened_now = true; + } + } + } + + bool value_changed = false; + if (IsPopupOpen(id)) + { + // Size default to hold ~7 items + if (height_in_items < 0) + height_in_items = 7; + + float popup_height = (label_size.y + style.ItemSpacing.y) * ImMin(items_count, height_in_items) + (style.FramePadding.y * 3); + float popup_y1 = frame_bb.Max.y; + float popup_y2 = ImClamp(popup_y1 + popup_height, popup_y1, g.IO.DisplaySize.y - style.DisplaySafeAreaPadding.y); + if ((popup_y2 - popup_y1) < ImMin(popup_height, frame_bb.Min.y - style.DisplaySafeAreaPadding.y)) + { + // Position our combo ABOVE because there's more space to fit! (FIXME: Handle in Begin() or use a shared helper. We have similar code in Begin() for popup placement) + popup_y1 = ImClamp(frame_bb.Min.y - popup_height, style.DisplaySafeAreaPadding.y, frame_bb.Min.y); + popup_y2 = frame_bb.Min.y; + } + ImRect popup_rect(ImVec2(frame_bb.Min.x, popup_y1), ImVec2(frame_bb.Max.x, popup_y2)); + SetNextWindowPos(popup_rect.Min); + SetNextWindowSize(popup_rect.GetSize()); + PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding); + + const ImGuiWindowFlags flags = ImGuiWindowFlags_ComboBox | ((window->Flags & ImGuiWindowFlags_ShowBorders) ? ImGuiWindowFlags_ShowBorders : 0); + if (BeginPopupEx(label, flags)) + { + // Display items + Spacing(); + for (int i = 0; i < items_count; i++) + { + PushID((void*)(intptr_t)i); + const bool item_selected = (i == *current_item); + const char* item_text; + if (!items_getter(data, i, &item_text)) + item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) + { + SetActiveID(0); + value_changed = true; + *current_item = i; + } + if (item_selected && popup_opened_now) + SetScrollHere(); + PopID(); + } + EndPopup(); + } + PopStyleVar(); + } + return value_changed; +} + +// Tip: pass an empty label (e.g. "##dummy") then you can use the space to draw other text or image. +// But you need to make sure the ID is unique, e.g. enclose calls in PushID/PopID. +bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags flags, const ImVec2& size_arg) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + + if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.ColumnsCount > 1) + PopClipRect(); + + ImGuiID id = window->GetID(label); + ImVec2 label_size = CalcTextSize(label, NULL, true); + ImVec2 size(size_arg.x != 0.0f ? size_arg.x : label_size.x, size_arg.y != 0.0f ? size_arg.y : label_size.y); + ImVec2 pos = window->DC.CursorPos; + pos.y += window->DC.CurrentLineTextBaseOffset; + ImRect bb(pos, pos + size); + ItemSize(bb); + + // Fill horizontal space. + ImVec2 window_padding = window->WindowPadding; + float max_x = (flags & ImGuiSelectableFlags_SpanAllColumns) ? GetWindowContentRegionMax().x : GetContentRegionMax().x; + float w_draw = ImMax(label_size.x, window->Pos.x + max_x - window_padding.x - window->DC.CursorPos.x); + ImVec2 size_draw((size_arg.x != 0 && !(flags & ImGuiSelectableFlags_DrawFillAvailWidth)) ? size_arg.x : w_draw, size_arg.y != 0.0f ? size_arg.y : size.y); + ImRect bb_with_spacing(pos, pos + size_draw); + if (size_arg.x == 0.0f || (flags & ImGuiSelectableFlags_DrawFillAvailWidth)) + bb_with_spacing.Max.x += window_padding.x; + + // Selectables are tightly packed together, we extend the box to cover spacing between selectable. + float spacing_L = (float)(int)(style.ItemSpacing.x * 0.5f); + float spacing_U = (float)(int)(style.ItemSpacing.y * 0.5f); + float spacing_R = style.ItemSpacing.x - spacing_L; + float spacing_D = style.ItemSpacing.y - spacing_U; + bb_with_spacing.Min.x -= spacing_L; + bb_with_spacing.Min.y -= spacing_U; + bb_with_spacing.Max.x += spacing_R; + bb_with_spacing.Max.y += spacing_D; + if (!ItemAdd(bb_with_spacing, &id)) + { + if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.ColumnsCount > 1) + PushColumnClipRect(); + return false; + } + + ImGuiButtonFlags button_flags = 0; + if (flags & ImGuiSelectableFlags_Menu) button_flags |= ImGuiButtonFlags_PressedOnClick; + if (flags & ImGuiSelectableFlags_MenuItem) button_flags |= ImGuiButtonFlags_PressedOnClick|ImGuiButtonFlags_PressedOnRelease; + if (flags & ImGuiSelectableFlags_Disabled) button_flags |= ImGuiButtonFlags_Disabled; + if (flags & ImGuiSelectableFlags_AllowDoubleClick) button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick; + bool hovered, held; + bool pressed = ButtonBehavior(bb_with_spacing, id, &hovered, &held, button_flags); + if (flags & ImGuiSelectableFlags_Disabled) + selected = false; + + // Render + if (hovered || selected) + { + const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header); + RenderFrame(bb_with_spacing.Min, bb_with_spacing.Max, col, false, 0.0f); + } + + if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.ColumnsCount > 1) + { + PushColumnClipRect(); + bb_with_spacing.Max.x -= (GetContentRegionMax().x - max_x); + } + + if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); + RenderTextClipped(bb.Min, bb_with_spacing.Max, label, NULL, &label_size, ImVec2(0.0f,0.0f)); + if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor(); + + // Automatically close popups + if (pressed && !(flags & ImGuiSelectableFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup)) + CloseCurrentPopup(); + return pressed; +} + +bool ImGui::Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags, const ImVec2& size_arg) +{ + if (Selectable(label, *p_selected, flags, size_arg)) + { + *p_selected = !*p_selected; + return true; + } + return false; +} + +// Helper to calculate the size of a listbox and display a label on the right. +// Tip: To have a list filling the entire window width, PushItemWidth(-1) and pass an empty label "##empty" +bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + const ImGuiStyle& style = GetStyle(); + const ImGuiID id = GetID(label); + const ImVec2 label_size = CalcTextSize(label, NULL, true); + + // Size default to hold ~7 items. Fractional number of items helps seeing that we can scroll down/up without looking at scrollbar. + ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), GetTextLineHeightWithSpacing() * 7.4f + style.ItemSpacing.y); + ImVec2 frame_size = ImVec2(size.x, ImMax(size.y, label_size.y)); + ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size); + ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); + window->DC.LastItemRect = bb; + + BeginGroup(); + if (label_size.x > 0) + RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); + + BeginChildFrame(id, frame_bb.GetSize()); + return true; +} + +bool ImGui::ListBoxHeader(const char* label, int items_count, int height_in_items) +{ + // Size default to hold ~7 items. Fractional number of items helps seeing that we can scroll down/up without looking at scrollbar. + // However we don't add +0.40f if items_count <= height_in_items. It is slightly dodgy, because it means a dynamic list of items will make the widget resize occasionally when it crosses that size. + // I am expecting that someone will come and complain about this behavior in a remote future, then we can advise on a better solution. + if (height_in_items < 0) + height_in_items = ImMin(items_count, 7); + float height_in_items_f = height_in_items < items_count ? (height_in_items + 0.40f) : (height_in_items + 0.00f); + + // We include ItemSpacing.y so that a list sized for the exact number of items doesn't make a scrollbar appears. We could also enforce that by passing a flag to BeginChild(). + ImVec2 size; + size.x = 0.0f; + size.y = GetTextLineHeightWithSpacing() * height_in_items_f + GetStyle().ItemSpacing.y; + return ListBoxHeader(label, size); +} + +void ImGui::ListBoxFooter() +{ + ImGuiWindow* parent_window = GetParentWindow(); + const ImRect bb = parent_window->DC.LastItemRect; + const ImGuiStyle& style = GetStyle(); + + EndChildFrame(); + + // Redeclare item size so that it includes the label (we have stored the full size in LastItemRect) + // We call SameLine() to restore DC.CurrentLine* data + SameLine(); + parent_window->DC.CursorPos = bb.Min; + ItemSize(bb, style.FramePadding.y); + EndGroup(); +} + +bool ImGui::ListBox(const char* label, int* current_item, const char** items, int items_count, int height_items) +{ + const bool value_changed = ListBox(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_items); + return value_changed; +} + +bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items) +{ + if (!ListBoxHeader(label, items_count, height_in_items)) + return false; + + // Assume all items have even height (= 1 line of text). If you need items of different or variable sizes you can create a custom version of ListBox() in your code without using the clipper. + bool value_changed = false; + ImGuiListClipper clipper(items_count, GetTextLineHeightWithSpacing()); + while (clipper.Step()) + for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + { + const bool item_selected = (i == *current_item); + const char* item_text; + if (!items_getter(data, i, &item_text)) + item_text = "*Unknown item*"; + + PushID(i); + if (Selectable(item_text, item_selected)) + { + *current_item = i; + value_changed = true; + } + PopID(); + } + ListBoxFooter(); + return value_changed; +} + +bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, bool enabled) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + ImVec2 pos = window->DC.CursorPos; + ImVec2 label_size = CalcTextSize(label, NULL, true); + ImVec2 shortcut_size = shortcut ? CalcTextSize(shortcut, NULL) : ImVec2(0.0f, 0.0f); + float w = window->MenuColumns.DeclColumns(label_size.x, shortcut_size.x, (float)(int)(g.FontSize * 1.20f)); // Feedback for next frame + float extra_w = ImMax(0.0f, GetContentRegionAvail().x - w); + + bool pressed = Selectable(label, false, ImGuiSelectableFlags_MenuItem | ImGuiSelectableFlags_DrawFillAvailWidth | (enabled ? 0 : ImGuiSelectableFlags_Disabled), ImVec2(w, 0.0f)); + if (shortcut_size.x > 0.0f) + { + PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); + RenderText(pos + ImVec2(window->MenuColumns.Pos[1] + extra_w, 0.0f), shortcut, NULL, false); + PopStyleColor(); + } + + if (selected) + RenderCheckMark(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.20f, 0.0f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled)); + + return pressed; +} + +bool ImGui::MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled) +{ + if (MenuItem(label, shortcut, p_selected ? *p_selected : false, enabled)) + { + if (p_selected) + *p_selected = !*p_selected; + return true; + } + return false; +} + +bool ImGui::BeginMainMenuBar() +{ + ImGuiContext& g = *GImGui; + SetNextWindowPos(ImVec2(0.0f, 0.0f)); + SetNextWindowSize(ImVec2(g.IO.DisplaySize.x, g.FontBaseSize + g.Style.FramePadding.y * 2.0f)); + PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); + PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0,0)); + if (!Begin("##MainMenuBar", NULL, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_MenuBar) + || !BeginMenuBar()) + { + End(); + PopStyleVar(2); + return false; + } + g.CurrentWindow->DC.MenuBarOffsetX += g.Style.DisplaySafeAreaPadding.x; + return true; +} + +void ImGui::EndMainMenuBar() +{ + EndMenuBar(); + End(); + PopStyleVar(2); +} + +bool ImGui::BeginMenuBar() +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + if (!(window->Flags & ImGuiWindowFlags_MenuBar)) + return false; + + IM_ASSERT(!window->DC.MenuBarAppending); + BeginGroup(); // Save position + PushID("##menubar"); + ImRect rect = window->MenuBarRect(); + PushClipRect(ImVec2(ImFloor(rect.Min.x+0.5f), ImFloor(rect.Min.y + window->BorderSize + 0.5f)), ImVec2(ImFloor(rect.Max.x+0.5f), ImFloor(rect.Max.y+0.5f)), false); + window->DC.CursorPos = ImVec2(rect.Min.x + window->DC.MenuBarOffsetX, rect.Min.y);// + g.Style.FramePadding.y); + window->DC.LayoutType = ImGuiLayoutType_Horizontal; + window->DC.MenuBarAppending = true; + AlignFirstTextHeightToWidgets(); + return true; +} + +void ImGui::EndMenuBar() +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + IM_ASSERT(window->Flags & ImGuiWindowFlags_MenuBar); + IM_ASSERT(window->DC.MenuBarAppending); + PopClipRect(); + PopID(); + window->DC.MenuBarOffsetX = window->DC.CursorPos.x - window->MenuBarRect().Min.x; + window->DC.GroupStack.back().AdvanceCursor = false; + EndGroup(); + window->DC.LayoutType = ImGuiLayoutType_Vertical; + window->DC.MenuBarAppending = false; +} + +bool ImGui::BeginMenu(const char* label, bool enabled) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(label); + + ImVec2 label_size = CalcTextSize(label, NULL, true); + ImGuiWindow* backed_focused_window = g.FocusedWindow; + + bool pressed; + bool menu_is_open = IsPopupOpen(id); + bool menuset_is_open = !(window->Flags & ImGuiWindowFlags_Popup) && (g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].ParentMenuSet == window->GetID("##menus")); + if (menuset_is_open) + g.FocusedWindow = window; + + ImVec2 popup_pos, pos = window->DC.CursorPos; + if (window->DC.LayoutType == ImGuiLayoutType_Horizontal) + { + popup_pos = ImVec2(pos.x - window->WindowPadding.x, pos.y - style.FramePadding.y + window->MenuBarHeight()); + window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * 0.5f); + PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing * 2.0f); + float w = label_size.x; + pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_Menu | ImGuiSelectableFlags_DontClosePopups | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f)); + PopStyleVar(); + SameLine(); + window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * 0.5f); + } + else + { + popup_pos = ImVec2(pos.x, pos.y - style.WindowPadding.y); + float w = window->MenuColumns.DeclColumns(label_size.x, 0.0f, (float)(int)(g.FontSize * 1.20f)); // Feedback to next frame + float extra_w = ImMax(0.0f, GetContentRegionAvail().x - w); + pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_Menu | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_DrawFillAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f)); + if (!enabled) PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); + RenderCollapseTriangle(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.20f, 0.0f), false); + if (!enabled) PopStyleColor(); + } + + bool hovered = enabled && IsHovered(window->DC.LastItemRect, id); + if (menuset_is_open) + g.FocusedWindow = backed_focused_window; + + bool want_open = false, want_close = false; + if (window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu)) + { + // Implement http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown to avoid using timers, so menus feels more reactive. + bool moving_within_opened_triangle = false; + if (g.HoveredWindow == window && g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].ParentWindow == window) + { + if (ImGuiWindow* next_window = g.OpenPopupStack[g.CurrentPopupStack.Size].Window) + { + ImRect next_window_rect = next_window->Rect(); + ImVec2 ta = g.IO.MousePos - g.IO.MouseDelta; + ImVec2 tb = (window->Pos.x < next_window->Pos.x) ? next_window_rect.GetTL() : next_window_rect.GetTR(); + ImVec2 tc = (window->Pos.x < next_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR(); + float extra = ImClamp(fabsf(ta.x - tb.x) * 0.30f, 5.0f, 30.0f); // add a bit of extra slack. + ta.x += (window->Pos.x < next_window->Pos.x) ? -0.5f : +0.5f; // to avoid numerical issues + tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f); // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale? + tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f); + moving_within_opened_triangle = ImIsPointInTriangle(g.IO.MousePos, ta, tb, tc); + //window->DrawList->PushClipRectFullScreen(); window->DrawList->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); window->DrawList->PopClipRect(); // Debug + } + } + + want_close = (menu_is_open && !hovered && g.HoveredWindow == window && g.HoveredIdPreviousFrame != 0 && g.HoveredIdPreviousFrame != id && !moving_within_opened_triangle); + want_open = (!menu_is_open && hovered && !moving_within_opened_triangle) || (!menu_is_open && hovered && pressed); + } + else if (menu_is_open && pressed && menuset_is_open) // menu-bar: click open menu to close + { + want_close = true; + want_open = menu_is_open = false; + } + else if (pressed || (hovered && menuset_is_open && !menu_is_open)) // menu-bar: first click to open, then hover to open others + want_open = true; + if (!enabled) // explicitly close if an open menu becomes disabled, facilitate users code a lot in pattern such as 'if (BeginMenu("options", has_object)) { ..use object.. }' + want_close = true; + if (want_close && IsPopupOpen(id)) + ClosePopupToLevel(GImGui->CurrentPopupStack.Size); + + if (!menu_is_open && want_open && g.OpenPopupStack.Size > g.CurrentPopupStack.Size) + { + // Don't recycle same menu level in the same frame, first close the other menu and yield for a frame. + OpenPopup(label); + return false; + } + + menu_is_open |= want_open; + if (want_open) + OpenPopup(label); + + if (menu_is_open) + { + SetNextWindowPos(popup_pos, ImGuiSetCond_Always); + ImGuiWindowFlags flags = ImGuiWindowFlags_ShowBorders | ((window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu)) ? ImGuiWindowFlags_ChildMenu|ImGuiWindowFlags_ChildWindow : ImGuiWindowFlags_ChildMenu); + menu_is_open = BeginPopupEx(label, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display) + } + + return menu_is_open; +} + +void ImGui::EndMenu() +{ + EndPopup(); +} + +// A little colored square. Return true when clicked. +// FIXME: May want to display/ignore the alpha component in the color display? Yet show it in the tooltip. +bool ImGui::ColorButton(const ImVec4& col, bool small_height, bool outline_border) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID("#colorbutton"); + const float square_size = g.FontSize; + const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(square_size + style.FramePadding.y*2, square_size + (small_height ? 0 : style.FramePadding.y*2))); + ItemSize(bb, small_height ? 0.0f : style.FramePadding.y); + if (!ItemAdd(bb, &id)) + return false; + + bool hovered, held; + bool pressed = ButtonBehavior(bb, id, &hovered, &held); + RenderFrame(bb.Min, bb.Max, GetColorU32(col), outline_border, style.FrameRounding); + + if (hovered) + SetTooltip("Color:\n(%.2f,%.2f,%.2f,%.2f)\n#%02X%02X%02X%02X", col.x, col.y, col.z, col.w, IM_F32_TO_INT8_SAT(col.x), IM_F32_TO_INT8_SAT(col.y), IM_F32_TO_INT8_SAT(col.z), IM_F32_TO_INT8_SAT(col.z)); + + return pressed; +} + +bool ImGui::ColorEdit3(const char* label, float col[3]) +{ + float col4[4]; + col4[0] = col[0]; + col4[1] = col[1]; + col4[2] = col[2]; + col4[3] = 1.0f; + const bool value_changed = ColorEdit4(label, col4, false); + col[0] = col4[0]; + col[1] = col4[1]; + col[2] = col4[2]; + return value_changed; +} + +// Edit colors components (each component in 0.0f..1.0f range +// Use CTRL-Click to input value and TAB to go to next item. +bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return false; + + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(label); + const float w_full = CalcItemWidth(); + const float square_sz = (g.FontSize + style.FramePadding.y * 2.0f); + + ImGuiColorEditMode edit_mode = window->DC.ColorEditMode; + if (edit_mode == ImGuiColorEditMode_UserSelect || edit_mode == ImGuiColorEditMode_UserSelectShowButton) + edit_mode = g.ColorEditModeStorage.GetInt(id, 0) % 3; + + float f[4] = { col[0], col[1], col[2], col[3] }; + if (edit_mode == ImGuiColorEditMode_HSV) + ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]); + + int i[4] = { IM_F32_TO_INT8_UNBOUND(f[0]), IM_F32_TO_INT8_UNBOUND(f[1]), IM_F32_TO_INT8_UNBOUND(f[2]), IM_F32_TO_INT8_UNBOUND(f[3]) }; + + int components = alpha ? 4 : 3; + bool value_changed = false; + + BeginGroup(); + PushID(label); + + const bool hsv = (edit_mode == 1); + switch (edit_mode) + { + case ImGuiColorEditMode_RGB: + case ImGuiColorEditMode_HSV: + { + // RGB/HSV 0..255 Sliders + const float w_items_all = w_full - (square_sz + style.ItemInnerSpacing.x); + const float w_item_one = ImMax(1.0f, (float)(int)((w_items_all - (style.ItemInnerSpacing.x) * (components-1)) / (float)components)); + const float w_item_last = ImMax(1.0f, (float)(int)(w_items_all - (w_item_one + style.ItemInnerSpacing.x) * (components-1))); + + const bool hide_prefix = (w_item_one <= CalcTextSize("M:999").x); + const char* ids[4] = { "##X", "##Y", "##Z", "##W" }; + const char* fmt_table[3][4] = + { + { "%3.0f", "%3.0f", "%3.0f", "%3.0f" }, + { "R:%3.0f", "G:%3.0f", "B:%3.0f", "A:%3.0f" }, + { "H:%3.0f", "S:%3.0f", "V:%3.0f", "A:%3.0f" } + }; + const char** fmt = hide_prefix ? fmt_table[0] : hsv ? fmt_table[2] : fmt_table[1]; + + PushItemWidth(w_item_one); + for (int n = 0; n < components; n++) + { + if (n > 0) + SameLine(0, style.ItemInnerSpacing.x); + if (n + 1 == components) + PushItemWidth(w_item_last); + value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, 255, fmt[n]); + } + PopItemWidth(); + PopItemWidth(); + } + break; + case ImGuiColorEditMode_HEX: + { + // RGB Hexadecimal Input + const float w_slider_all = w_full - square_sz; + char buf[64]; + if (alpha) + ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", i[0], i[1], i[2], i[3]); + else + ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", i[0], i[1], i[2]); + PushItemWidth(w_slider_all - style.ItemInnerSpacing.x); + if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase)) + { + value_changed |= true; + char* p = buf; + while (*p == '#' || ImCharIsSpace(*p)) + p++; + i[0] = i[1] = i[2] = i[3] = 0; + if (alpha) + sscanf(p, "%02X%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2], (unsigned int*)&i[3]); // Treat at unsigned (%X is unsigned) + else + sscanf(p, "%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2]); + } + PopItemWidth(); + } + break; + } + + SameLine(0, style.ItemInnerSpacing.x); + + const ImVec4 col_display(col[0], col[1], col[2], 1.0f); + if (ColorButton(col_display)) + g.ColorEditModeStorage.SetInt(id, (edit_mode + 1) % 3); // Don't set local copy of 'edit_mode' right away! + + // Recreate our own tooltip over's ColorButton() one because we want to display correct alpha here + if (IsItemHovered()) + SetTooltip("Color:\n(%.2f,%.2f,%.2f,%.2f)\n#%02X%02X%02X%02X", col[0], col[1], col[2], col[3], IM_F32_TO_INT8_SAT(col[0]), IM_F32_TO_INT8_SAT(col[1]), IM_F32_TO_INT8_SAT(col[2]), IM_F32_TO_INT8_SAT(col[3])); + + if (window->DC.ColorEditMode == ImGuiColorEditMode_UserSelectShowButton) + { + SameLine(0, style.ItemInnerSpacing.x); + const char* button_titles[3] = { "RGB", "HSV", "HEX" }; + if (ButtonEx(button_titles[edit_mode], ImVec2(0,0), ImGuiButtonFlags_DontClosePopups)) + g.ColorEditModeStorage.SetInt(id, (edit_mode + 1) % 3); // Don't set local copy of 'edit_mode' right away! + } + + const char* label_display_end = FindRenderedTextEnd(label); + if (label != label_display_end) + { + SameLine(0, (window->DC.ColorEditMode == ImGuiColorEditMode_UserSelectShowButton) ? -1.0f : style.ItemInnerSpacing.x); + TextUnformatted(label, label_display_end); + } + + // Convert back + for (int n = 0; n < 4; n++) + f[n] = i[n] / 255.0f; + if (edit_mode == 1) + ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]); + + if (value_changed) + { + col[0] = f[0]; + col[1] = f[1]; + col[2] = f[2]; + if (alpha) + col[3] = f[3]; + } + + PopID(); + EndGroup(); + + return value_changed; +} + +void ImGui::ColorEditMode(ImGuiColorEditMode mode) +{ + ImGuiWindow* window = GetCurrentWindow(); + window->DC.ColorEditMode = mode; +} + +// Horizontal separating line. +void ImGui::Separator() +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + if (window->DC.ColumnsCount > 1) + PopClipRect(); + + float x1 = window->Pos.x; + float x2 = window->Pos.x + window->Size.x; + if (!window->DC.GroupStack.empty()) + x1 += window->DC.IndentX; + + const ImRect bb(ImVec2(x1, window->DC.CursorPos.y), ImVec2(x2, window->DC.CursorPos.y+1.0f)); + ItemSize(ImVec2(0.0f, 0.0f)); // NB: we don't provide our width so that it doesn't get feed back into AutoFit, we don't provide height to not alter layout. + if (!ItemAdd(bb, NULL)) + { + if (window->DC.ColumnsCount > 1) + PushColumnClipRect(); + return; + } + + window->DrawList->AddLine(bb.Min, ImVec2(bb.Max.x,bb.Min.y), GetColorU32(ImGuiCol_Border)); + + ImGuiContext& g = *GImGui; + if (g.LogEnabled) + LogText(IM_NEWLINE "--------------------------------"); + + if (window->DC.ColumnsCount > 1) + { + PushColumnClipRect(); + window->DC.ColumnsCellMinY = window->DC.CursorPos.y; + } +} + +void ImGui::Spacing() +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + ItemSize(ImVec2(0,0)); +} + +void ImGui::Dummy(const ImVec2& size) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size); + ItemSize(bb); + ItemAdd(bb, NULL); +} + +bool ImGui::IsRectVisible(const ImVec2& size) +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->ClipRect.Overlaps(ImRect(window->DC.CursorPos, window->DC.CursorPos + size)); +} + +bool ImGui::IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max) +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->ClipRect.Overlaps(ImRect(rect_min, rect_max)); +} + +// Lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +void ImGui::BeginGroup() +{ + ImGuiWindow* window = GetCurrentWindow(); + + window->DC.GroupStack.resize(window->DC.GroupStack.Size + 1); + ImGuiGroupData& group_data = window->DC.GroupStack.back(); + group_data.BackupCursorPos = window->DC.CursorPos; + group_data.BackupCursorMaxPos = window->DC.CursorMaxPos; + group_data.BackupIndentX = window->DC.IndentX; + group_data.BackupGroupOffsetX = window->DC.GroupOffsetX; + group_data.BackupCurrentLineHeight = window->DC.CurrentLineHeight; + group_data.BackupCurrentLineTextBaseOffset = window->DC.CurrentLineTextBaseOffset; + group_data.BackupLogLinePosY = window->DC.LogLinePosY; + group_data.BackupActiveIdIsAlive = GImGui->ActiveIdIsAlive; + group_data.AdvanceCursor = true; + + window->DC.GroupOffsetX = window->DC.CursorPos.x - window->Pos.x - window->DC.ColumnsOffsetX; + window->DC.IndentX = window->DC.GroupOffsetX; + window->DC.CursorMaxPos = window->DC.CursorPos; + window->DC.CurrentLineHeight = 0.0f; + window->DC.LogLinePosY = window->DC.CursorPos.y - 9999.0f; +} + +void ImGui::EndGroup() +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + + IM_ASSERT(!window->DC.GroupStack.empty()); // Mismatched BeginGroup()/EndGroup() calls + + ImGuiGroupData& group_data = window->DC.GroupStack.back(); + + ImRect group_bb(group_data.BackupCursorPos, window->DC.CursorMaxPos); + group_bb.Max.y -= g.Style.ItemSpacing.y; // Cancel out last vertical spacing because we are adding one ourselves. + group_bb.Max = ImMax(group_bb.Min, group_bb.Max); + + window->DC.CursorPos = group_data.BackupCursorPos; + window->DC.CursorMaxPos = ImMax(group_data.BackupCursorMaxPos, window->DC.CursorMaxPos); + window->DC.CurrentLineHeight = group_data.BackupCurrentLineHeight; + window->DC.CurrentLineTextBaseOffset = group_data.BackupCurrentLineTextBaseOffset; + window->DC.IndentX = group_data.BackupIndentX; + window->DC.GroupOffsetX = group_data.BackupGroupOffsetX; + window->DC.LogLinePosY = window->DC.CursorPos.y - 9999.0f; + + if (group_data.AdvanceCursor) + { + window->DC.CurrentLineTextBaseOffset = ImMax(window->DC.PrevLineTextBaseOffset, group_data.BackupCurrentLineTextBaseOffset); // FIXME: Incorrect, we should grab the base offset from the *first line* of the group but it is hard to obtain now. + ItemSize(group_bb.GetSize(), group_data.BackupCurrentLineTextBaseOffset); + ItemAdd(group_bb, NULL); + } + + // If the current ActiveId was declared within the boundary of our group, we copy it to LastItemId so IsItemActive() will function on the entire group. + // It would be be neater if we replaced window.DC.LastItemId by e.g. 'bool LastItemIsActive', but if you search for LastItemId you'll notice it is only used in that context. + const bool active_id_within_group = (!group_data.BackupActiveIdIsAlive && g.ActiveIdIsAlive && g.ActiveId && g.ActiveIdWindow->RootWindow == window->RootWindow); + if (active_id_within_group) + window->DC.LastItemId = g.ActiveId; + if (active_id_within_group && g.HoveredId == g.ActiveId) + window->DC.LastItemHoveredAndUsable = window->DC.LastItemHoveredRect = true; + + window->DC.GroupStack.pop_back(); + + //window->DrawList->AddRect(group_bb.Min, group_bb.Max, IM_COL32(255,0,255,255)); // Debug +} + +// Gets back to previous line and continue with horizontal layout +// pos_x == 0 : follow right after previous item +// pos_x != 0 : align to specified x position (relative to window/group left) +// spacing_w < 0 : use default spacing if pos_x == 0, no spacing if pos_x != 0 +// spacing_w >= 0 : enforce spacing amount +void ImGui::SameLine(float pos_x, float spacing_w) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + + ImGuiContext& g = *GImGui; + if (pos_x != 0.0f) + { + if (spacing_w < 0.0f) spacing_w = 0.0f; + window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + pos_x + spacing_w + window->DC.GroupOffsetX + window->DC.ColumnsOffsetX; + window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y; + } + else + { + if (spacing_w < 0.0f) spacing_w = g.Style.ItemSpacing.x; + window->DC.CursorPos.x = window->DC.CursorPosPrevLine.x + spacing_w; + window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y; + } + window->DC.CurrentLineHeight = window->DC.PrevLineHeight; + window->DC.CurrentLineTextBaseOffset = window->DC.PrevLineTextBaseOffset; +} + +void ImGui::NewLine() +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems) + return; + if (window->DC.CurrentLineHeight > 0.0f) // In the event that we are on a line with items that is smaller that FontSize high, we will preserve its height. + ItemSize(ImVec2(0,0)); + else + ItemSize(ImVec2(0.0f, GImGui->FontSize)); +} + +void ImGui::NextColumn() +{ + ImGuiWindow* window = GetCurrentWindow(); + if (window->SkipItems || window->DC.ColumnsCount <= 1) + return; + + ImGuiContext& g = *GImGui; + PopItemWidth(); + PopClipRect(); + + window->DC.ColumnsCellMaxY = ImMax(window->DC.ColumnsCellMaxY, window->DC.CursorPos.y); + if (++window->DC.ColumnsCurrent < window->DC.ColumnsCount) + { + // Columns 1+ cancel out IndentX + window->DC.ColumnsOffsetX = GetColumnOffset(window->DC.ColumnsCurrent) - window->DC.IndentX + g.Style.ItemSpacing.x; + window->DrawList->ChannelsSetCurrent(window->DC.ColumnsCurrent); + } + else + { + window->DC.ColumnsCurrent = 0; + window->DC.ColumnsOffsetX = 0.0f; + window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY; + window->DrawList->ChannelsSetCurrent(0); + } + window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX); + window->DC.CursorPos.y = window->DC.ColumnsCellMinY; + window->DC.CurrentLineHeight = 0.0f; + window->DC.CurrentLineTextBaseOffset = 0.0f; + + PushColumnClipRect(); + PushItemWidth(GetColumnWidth() * 0.65f); // FIXME: Move on columns setup +} + +int ImGui::GetColumnIndex() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.ColumnsCurrent; +} + +int ImGui::GetColumnsCount() +{ + ImGuiWindow* window = GetCurrentWindowRead(); + return window->DC.ColumnsCount; +} + +static float GetDraggedColumnOffset(int column_index) +{ + // Active (dragged) column always follow mouse. The reason we need this is that dragging a column to the right edge of an auto-resizing + // window creates a feedback loop because we store normalized positions. So while dragging we enforce absolute positioning. + ImGuiContext& g = *GImGui; + ImGuiWindow* window = ImGui::GetCurrentWindowRead(); + IM_ASSERT(column_index > 0); // We cannot drag column 0. If you get this assert you may have a conflict between the ID of your columns and another widgets. + IM_ASSERT(g.ActiveId == window->DC.ColumnsSetId + ImGuiID(column_index)); + + float x = g.IO.MousePos.x - g.ActiveIdClickOffset.x - window->Pos.x; + x = ImClamp(x, ImGui::GetColumnOffset(column_index-1)+g.Style.ColumnsMinSpacing, ImGui::GetColumnOffset(column_index+1)-g.Style.ColumnsMinSpacing); + + return (float)(int)x; +} + +float ImGui::GetColumnOffset(int column_index) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindowRead(); + if (column_index < 0) + column_index = window->DC.ColumnsCurrent; + + if (g.ActiveId) + { + const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(column_index); + if (g.ActiveId == column_id) + return GetDraggedColumnOffset(column_index); + } + + IM_ASSERT(column_index < window->DC.ColumnsData.Size); + const float t = window->DC.ColumnsData[column_index].OffsetNorm; + const float x_offset = window->DC.ColumnsMinX + t * (window->DC.ColumnsMaxX - window->DC.ColumnsMinX); + return (float)(int)x_offset; +} + +void ImGui::SetColumnOffset(int column_index, float offset) +{ + ImGuiWindow* window = GetCurrentWindow(); + if (column_index < 0) + column_index = window->DC.ColumnsCurrent; + + IM_ASSERT(column_index < window->DC.ColumnsData.Size); + const float t = (offset - window->DC.ColumnsMinX) / (window->DC.ColumnsMaxX - window->DC.ColumnsMinX); + window->DC.ColumnsData[column_index].OffsetNorm = t; + + const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(column_index); + window->DC.StateStorage->SetFloat(column_id, t); +} + +float ImGui::GetColumnWidth(int column_index) +{ + ImGuiWindow* window = GetCurrentWindowRead(); + if (column_index < 0) + column_index = window->DC.ColumnsCurrent; + + float w = GetColumnOffset(column_index+1) - GetColumnOffset(column_index); + return w; +} + +static void PushColumnClipRect(int column_index) +{ + ImGuiWindow* window = ImGui::GetCurrentWindow(); + if (column_index < 0) + column_index = window->DC.ColumnsCurrent; + + float x1 = ImFloor(0.5f + window->Pos.x + ImGui::GetColumnOffset(column_index) - 1.0f); + float x2 = ImFloor(0.5f + window->Pos.x + ImGui::GetColumnOffset(column_index+1) - 1.0f); + ImGui::PushClipRect(ImVec2(x1,-FLT_MAX), ImVec2(x2,+FLT_MAX), true); +} + +void ImGui::Columns(int columns_count, const char* id, bool border) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + IM_ASSERT(columns_count >= 1); + + if (window->DC.ColumnsCount != 1) + { + if (window->DC.ColumnsCurrent != 0) + ItemSize(ImVec2(0,0)); // Advance to column 0 + PopItemWidth(); + PopClipRect(); + window->DrawList->ChannelsMerge(); + + window->DC.ColumnsCellMaxY = ImMax(window->DC.ColumnsCellMaxY, window->DC.CursorPos.y); + window->DC.CursorPos.y = window->DC.ColumnsCellMaxY; + } + + // Draw columns borders and handle resize at the time of "closing" a columns set + if (window->DC.ColumnsCount != columns_count && window->DC.ColumnsCount != 1 && window->DC.ColumnsShowBorders && !window->SkipItems) + { + const float y1 = window->DC.ColumnsStartPosY; + const float y2 = window->DC.CursorPos.y; + for (int i = 1; i < window->DC.ColumnsCount; i++) + { + float x = window->Pos.x + GetColumnOffset(i); + const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(i); + const ImRect column_rect(ImVec2(x-4,y1),ImVec2(x+4,y2)); + if (IsClippedEx(column_rect, &column_id, false)) + continue; + + bool hovered, held; + ButtonBehavior(column_rect, column_id, &hovered, &held); + if (hovered || held) + g.MouseCursor = ImGuiMouseCursor_ResizeEW; + + // Draw before resize so our items positioning are in sync with the line being drawn + const ImU32 col = GetColorU32(held ? ImGuiCol_ColumnActive : hovered ? ImGuiCol_ColumnHovered : ImGuiCol_Column); + const float xi = (float)(int)x; + window->DrawList->AddLine(ImVec2(xi, y1+1.0f), ImVec2(xi, y2), col); + + if (held) + { + if (g.ActiveIdIsJustActivated) + g.ActiveIdClickOffset.x -= 4; // Store from center of column line (we used a 8 wide rect for columns clicking) + x = GetDraggedColumnOffset(i); + SetColumnOffset(i, x); + } + } + } + + // Differentiate column ID with an arbitrary prefix for cases where users name their columns set the same as another widget. + // In addition, when an identifier isn't explicitly provided we include the number of columns in the hash to make it uniquer. + PushID(0x11223347 + (id ? 0 : columns_count)); + window->DC.ColumnsSetId = window->GetID(id ? id : "columns"); + PopID(); + + // Set state for first column + window->DC.ColumnsCurrent = 0; + window->DC.ColumnsCount = columns_count; + window->DC.ColumnsShowBorders = border; + + const float content_region_width = (window->SizeContentsExplicit.x != 0.0f) ? window->SizeContentsExplicit.x : window->Size.x; + window->DC.ColumnsMinX = window->DC.IndentX; // Lock our horizontal range + window->DC.ColumnsMaxX = content_region_width - window->Scroll.x - ((window->Flags & ImGuiWindowFlags_NoScrollbar) ? 0 : g.Style.ScrollbarSize);// - window->WindowPadding().x; + window->DC.ColumnsStartPosY = window->DC.CursorPos.y; + window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY = window->DC.CursorPos.y; + window->DC.ColumnsOffsetX = 0.0f; + window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX); + + if (window->DC.ColumnsCount != 1) + { + // Cache column offsets + window->DC.ColumnsData.resize(columns_count + 1); + for (int column_index = 0; column_index < columns_count + 1; column_index++) + { + const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(column_index); + KeepAliveID(column_id); + const float default_t = column_index / (float)window->DC.ColumnsCount; + const float t = window->DC.StateStorage->GetFloat(column_id, default_t); // Cheaply store our floating point value inside the integer (could store a union into the map?) + window->DC.ColumnsData[column_index].OffsetNorm = t; + } + window->DrawList->ChannelsSplit(window->DC.ColumnsCount); + PushColumnClipRect(); + PushItemWidth(GetColumnWidth() * 0.65f); + } + else + { + window->DC.ColumnsData.resize(0); + } +} + +void ImGui::Indent(float indent_w) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + window->DC.IndentX += (indent_w > 0.0f) ? indent_w : g.Style.IndentSpacing; + window->DC.CursorPos.x = window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX; +} + +void ImGui::Unindent(float indent_w) +{ + ImGuiContext& g = *GImGui; + ImGuiWindow* window = GetCurrentWindow(); + window->DC.IndentX -= (indent_w > 0.0f) ? indent_w : g.Style.IndentSpacing; + window->DC.CursorPos.x = window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX; +} + +void ImGui::TreePush(const char* str_id) +{ + ImGuiWindow* window = GetCurrentWindow(); + Indent(); + window->DC.TreeDepth++; + PushID(str_id ? str_id : "#TreePush"); +} + +void ImGui::TreePush(const void* ptr_id) +{ + ImGuiWindow* window = GetCurrentWindow(); + Indent(); + window->DC.TreeDepth++; + PushID(ptr_id ? ptr_id : (const void*)"#TreePush"); +} + +void ImGui::TreePushRawID(ImGuiID id) +{ + ImGuiWindow* window = GetCurrentWindow(); + Indent(); + window->DC.TreeDepth++; + window->IDStack.push_back(id); +} + +void ImGui::TreePop() +{ + ImGuiWindow* window = GetCurrentWindow(); + Unindent(); + window->DC.TreeDepth--; + PopID(); +} + +void ImGui::Value(const char* prefix, bool b) +{ + Text("%s: %s", prefix, (b ? "true" : "false")); +} + +void ImGui::Value(const char* prefix, int v) +{ + Text("%s: %d", prefix, v); +} + +void ImGui::Value(const char* prefix, unsigned int v) +{ + Text("%s: %d", prefix, v); +} + +void ImGui::Value(const char* prefix, float v, const char* float_format) +{ + if (float_format) + { + char fmt[64]; + ImFormatString(fmt, IM_ARRAYSIZE(fmt), "%%s: %s", float_format); + Text(fmt, prefix, v); + } + else + { + Text("%s: %.3f", prefix, v); + } +} + +// FIXME: May want to remove those helpers? +void ImGui::ValueColor(const char* prefix, const ImVec4& v) +{ + Text("%s: (%.2f,%.2f,%.2f,%.2f)", prefix, v.x, v.y, v.z, v.w); + SameLine(); + ColorButton(v, true); +} + +void ImGui::ValueColor(const char* prefix, ImU32 v) +{ + Text("%s: %08X", prefix, v); + SameLine(); + ColorButton(ColorConvertU32ToFloat4(v), true); +} + +//----------------------------------------------------------------------------- +// PLATFORM DEPENDENT HELPERS +//----------------------------------------------------------------------------- + +#if defined(_WIN32) && !defined(_WINDOWS_) && (!defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS) || !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS)) +#undef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#include +#endif + +// Win32 API clipboard implementation +#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS) + +#ifdef _MSC_VER +#pragma comment(lib, "user32") +#endif + +static const char* GetClipboardTextFn_DefaultImpl(void*) +{ + static ImVector buf_local; + buf_local.clear(); + if (!OpenClipboard(NULL)) + return NULL; + HANDLE wbuf_handle = GetClipboardData(CF_UNICODETEXT); + if (wbuf_handle == NULL) + return NULL; + if (ImWchar* wbuf_global = (ImWchar*)GlobalLock(wbuf_handle)) + { + int buf_len = ImTextCountUtf8BytesFromStr(wbuf_global, NULL) + 1; + buf_local.resize(buf_len); + ImTextStrToUtf8(buf_local.Data, buf_len, wbuf_global, NULL); + } + GlobalUnlock(wbuf_handle); + CloseClipboard(); + return buf_local.Data; +} + +static void SetClipboardTextFn_DefaultImpl(void*, const char* text) +{ + if (!OpenClipboard(NULL)) + return; + const int wbuf_length = ImTextCountCharsFromUtf8(text, NULL) + 1; + HGLOBAL wbuf_handle = GlobalAlloc(GMEM_MOVEABLE, (SIZE_T)wbuf_length * sizeof(ImWchar)); + if (wbuf_handle == NULL) + return; + ImWchar* wbuf_global = (ImWchar*)GlobalLock(wbuf_handle); + ImTextStrFromUtf8(wbuf_global, wbuf_length, text, NULL); + GlobalUnlock(wbuf_handle); + EmptyClipboard(); + SetClipboardData(CF_UNICODETEXT, wbuf_handle); + CloseClipboard(); +} + +#else + +// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers +static const char* GetClipboardTextFn_DefaultImpl(void*) +{ + return GImGui->PrivateClipboard; +} + +// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers +static void SetClipboardTextFn_DefaultImpl(void*, const char* text) +{ + ImGuiContext& g = *GImGui; + if (g.PrivateClipboard) + { + ImGui::MemFree(g.PrivateClipboard); + g.PrivateClipboard = NULL; + } + const char* text_end = text + strlen(text); + g.PrivateClipboard = (char*)ImGui::MemAlloc((size_t)(text_end - text) + 1); + memcpy(g.PrivateClipboard, text, (size_t)(text_end - text)); + g.PrivateClipboard[(int)(text_end - text)] = 0; +} + +#endif + +// Win32 API IME support (for Asian languages, etc.) +#if defined(_WIN32) && !defined(__GNUC__) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS) + +#include +#ifdef _MSC_VER +#pragma comment(lib, "imm32") +#endif + +static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y) +{ + // Notify OS Input Method Editor of text input position + if (HWND hwnd = (HWND)GImGui->IO.ImeWindowHandle) + if (HIMC himc = ImmGetContext(hwnd)) + { + COMPOSITIONFORM cf; + cf.ptCurrentPos.x = x; + cf.ptCurrentPos.y = y; + cf.dwStyle = CFS_FORCE_POSITION; + ImmSetCompositionWindow(himc, &cf); + } +} + +#else + +static void ImeSetInputScreenPosFn_DefaultImpl(int, int) {} + +#endif + +//----------------------------------------------------------------------------- +// HELP +//----------------------------------------------------------------------------- + +void ImGui::ShowMetricsWindow(bool* p_open) +{ + if (ImGui::Begin("ImGui Metrics", p_open)) + { + ImGui::Text("ImGui %s", ImGui::GetVersion()); + ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); + ImGui::Text("%d vertices, %d indices (%d triangles)", ImGui::GetIO().MetricsRenderVertices, ImGui::GetIO().MetricsRenderIndices, ImGui::GetIO().MetricsRenderIndices / 3); + ImGui::Text("%d allocations", ImGui::GetIO().MetricsAllocs); + static bool show_clip_rects = true; + ImGui::Checkbox("Show clipping rectangles when hovering a ImDrawCmd", &show_clip_rects); + ImGui::Separator(); + + struct Funcs + { + static void NodeDrawList(ImDrawList* draw_list, const char* label) + { + bool node_open = ImGui::TreeNode(draw_list, "%s: '%s' %d vtx, %d indices, %d cmds", label, draw_list->_OwnerName ? draw_list->_OwnerName : "", draw_list->VtxBuffer.Size, draw_list->IdxBuffer.Size, draw_list->CmdBuffer.Size); + if (draw_list == ImGui::GetWindowDrawList()) + { + ImGui::SameLine(); + ImGui::TextColored(ImColor(255,100,100), "CURRENTLY APPENDING"); // Can't display stats for active draw list! (we don't have the data double-buffered) + if (node_open) ImGui::TreePop(); + return; + } + if (!node_open) + return; + + ImDrawList* overlay_draw_list = &GImGui->OverlayDrawList; // Render additional visuals into the top-most draw list + overlay_draw_list->PushClipRectFullScreen(); + int elem_offset = 0; + for (const ImDrawCmd* pcmd = draw_list->CmdBuffer.begin(); pcmd < draw_list->CmdBuffer.end(); elem_offset += pcmd->ElemCount, pcmd++) + { + if (pcmd->UserCallback) + { + ImGui::BulletText("Callback %p, user_data %p", pcmd->UserCallback, pcmd->UserCallbackData); + continue; + } + ImDrawIdx* idx_buffer = (draw_list->IdxBuffer.Size > 0) ? draw_list->IdxBuffer.Data : NULL; + bool pcmd_node_open = ImGui::TreeNode((void*)(pcmd - draw_list->CmdBuffer.begin()), "Draw %-4d %s vtx, tex = %p, clip_rect = (%.0f,%.0f)..(%.0f,%.0f)", pcmd->ElemCount, draw_list->IdxBuffer.Size > 0 ? "indexed" : "non-indexed", pcmd->TextureId, pcmd->ClipRect.x, pcmd->ClipRect.y, pcmd->ClipRect.z, pcmd->ClipRect.w); + if (show_clip_rects && ImGui::IsItemHovered()) + { + ImRect clip_rect = pcmd->ClipRect; + ImRect vtxs_rect; + for (int i = elem_offset; i < elem_offset + (int)pcmd->ElemCount; i++) + vtxs_rect.Add(draw_list->VtxBuffer[idx_buffer ? idx_buffer[i] : i].pos); + clip_rect.Floor(); overlay_draw_list->AddRect(clip_rect.Min, clip_rect.Max, IM_COL32(255,255,0,255)); + vtxs_rect.Floor(); overlay_draw_list->AddRect(vtxs_rect.Min, vtxs_rect.Max, IM_COL32(255,0,255,255)); + } + if (!pcmd_node_open) + continue; + ImGuiListClipper clipper(pcmd->ElemCount/3); // Manually coarse clip our print out of individual vertices to save CPU, only items that may be visible. + while (clipper.Step()) + for (int prim = clipper.DisplayStart, vtx_i = elem_offset + clipper.DisplayStart*3; prim < clipper.DisplayEnd; prim++) + { + char buf[300], *buf_p = buf; + ImVec2 triangles_pos[3]; + for (int n = 0; n < 3; n++, vtx_i++) + { + ImDrawVert& v = draw_list->VtxBuffer[idx_buffer ? idx_buffer[vtx_i] : vtx_i]; + triangles_pos[n] = v.pos; + buf_p += sprintf(buf_p, "%s %04d { pos = (%8.2f,%8.2f), uv = (%.6f,%.6f), col = %08X }\n", (n == 0) ? "vtx" : " ", vtx_i, v.pos.x, v.pos.y, v.uv.x, v.uv.y, v.col); + } + ImGui::Selectable(buf, false); + if (ImGui::IsItemHovered()) + overlay_draw_list->AddPolyline(triangles_pos, 3, IM_COL32(255,255,0,255), true, 1.0f, false); // Add triangle without AA, more readable for large-thin triangle + } + ImGui::TreePop(); + } + overlay_draw_list->PopClipRect(); + ImGui::TreePop(); + } + + static void NodeWindows(ImVector& windows, const char* label) + { + if (!ImGui::TreeNode(label, "%s (%d)", label, windows.Size)) + return; + for (int i = 0; i < windows.Size; i++) + Funcs::NodeWindow(windows[i], "Window"); + ImGui::TreePop(); + } + + static void NodeWindow(ImGuiWindow* window, const char* label) + { + if (!ImGui::TreeNode(window, "%s '%s', %d @ 0x%p", label, window->Name, window->Active || window->WasActive, window)) + return; + NodeDrawList(window->DrawList, "DrawList"); + ImGui::BulletText("Pos: (%.1f,%.1f)", window->Pos.x, window->Pos.y); + ImGui::BulletText("Size: (%.1f,%.1f), SizeContents (%.1f,%.1f)", window->Size.x, window->Size.y, window->SizeContents.x, window->SizeContents.y); + ImGui::BulletText("Scroll: (%.2f,%.2f)", window->Scroll.x, window->Scroll.y); + if (window->RootWindow != window) NodeWindow(window->RootWindow, "RootWindow"); + if (window->DC.ChildWindows.Size > 0) NodeWindows(window->DC.ChildWindows, "ChildWindows"); + ImGui::BulletText("Storage: %d bytes", window->StateStorage.Data.Size * (int)sizeof(ImGuiStorage::Pair)); + ImGui::TreePop(); + } + }; + + ImGuiContext& g = *GImGui; // Access private state + Funcs::NodeWindows(g.Windows, "Windows"); + if (ImGui::TreeNode("DrawList", "Active DrawLists (%d)", g.RenderDrawLists[0].Size)) + { + for (int i = 0; i < g.RenderDrawLists[0].Size; i++) + Funcs::NodeDrawList(g.RenderDrawLists[0][i], "DrawList"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Popups", "Open Popups Stack (%d)", g.OpenPopupStack.Size)) + { + for (int i = 0; i < g.OpenPopupStack.Size; i++) + { + ImGuiWindow* window = g.OpenPopupStack[i].Window; + ImGui::BulletText("PopupID: %08x, Window: '%s'%s%s", g.OpenPopupStack[i].PopupId, window ? window->Name : "NULL", window && (window->Flags & ImGuiWindowFlags_ChildWindow) ? " ChildWindow" : "", window && (window->Flags & ImGuiWindowFlags_ChildMenu) ? " ChildMenu" : ""); + } + ImGui::TreePop(); + } + if (ImGui::TreeNode("Basic state")) + { + ImGui::Text("FocusedWindow: '%s'", g.FocusedWindow ? g.FocusedWindow->Name : "NULL"); + ImGui::Text("HoveredWindow: '%s'", g.HoveredWindow ? g.HoveredWindow->Name : "NULL"); + ImGui::Text("HoveredRootWindow: '%s'", g.HoveredRootWindow ? g.HoveredRootWindow->Name : "NULL"); + ImGui::Text("HoveredID: 0x%08X/0x%08X", g.HoveredId, g.HoveredIdPreviousFrame); // Data is "in-flight" so depending on when the Metrics window is called we may see current frame information or not + ImGui::Text("ActiveID: 0x%08X/0x%08X", g.ActiveId, g.ActiveIdPreviousFrame); + ImGui::TreePop(); + } + } + ImGui::End(); +} + +//----------------------------------------------------------------------------- + +// Include imgui_user.inl at the end of imgui.cpp to access private data/functions that aren't exposed. +// Prefer just including imgui_internal.h from your code rather than using this define. If a declaration is missing from imgui_internal.h add it or request it on the github. +#ifdef IMGUI_INCLUDE_IMGUI_USER_INL +#include "imgui_user.inl" +#endif + +//----------------------------------------------------------------------------- diff --git a/lib/imgui/imgui.h b/lib/imgui/imgui.h new file mode 100644 index 0000000..776b4d5 --- /dev/null +++ b/lib/imgui/imgui.h @@ -0,0 +1,1400 @@ +// dear imgui, v1.50 WIP +// (headers) + +// See imgui.cpp file for documentation. +// See ImGui::ShowTestWindow() in imgui_demo.cpp for demo code. +// Read 'Programmer guide' in imgui.cpp for notes on how to setup ImGui in your codebase. +// Get latest version at https://github.com/ocornut/imgui + +#pragma once + +#if !defined(IMGUI_DISABLE_INCLUDE_IMCONFIG_H) || defined(IMGUI_INCLUDE_IMCONFIG_H) +#include "imconfig.h" // User-editable configuration file +#endif +#include // FLT_MAX +#include // va_list +#include // ptrdiff_t, NULL +#include // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp + +#define IMGUI_VERSION "1.50 WIP" + +// Define attributes of all API symbols declarations, e.g. for DLL under Windows. +#ifndef IMGUI_API +#define IMGUI_API +#endif + +// Define assertion handler. +#ifndef IM_ASSERT +#include +#define IM_ASSERT(_EXPR) assert(_EXPR) +#endif + +// Some compilers support applying printf-style warnings to user functions. +#if defined(__clang__) || defined(__GNUC__) +#define IM_PRINTFARGS(FMT) __attribute__((format(printf, FMT, (FMT+1)))) +#else +#define IM_PRINTFARGS(FMT) +#endif + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" +#endif + +// Forward declarations +struct ImDrawChannel; // Temporary storage for outputting drawing commands out of order, used by ImDrawList::ChannelsSplit() +struct ImDrawCmd; // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call) +struct ImDrawData; // All draw command lists required to render the frame +struct ImDrawList; // A single draw command list (generally one per window) +struct ImDrawVert; // A single vertex (20 bytes by default, override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT) +struct ImFont; // Runtime data for a single font within a parent ImFontAtlas +struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF font loader +struct ImFontConfig; // Configuration data when adding a font or merging fonts +struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4 +struct ImGuiIO; // Main configuration and I/O between your application and ImGui +struct ImGuiOnceUponAFrame; // Simple helper for running a block of code not more than once a frame, used by IMGUI_ONCE_UPON_A_FRAME macro +struct ImGuiStorage; // Simple custom key value storage +struct ImGuiStyle; // Runtime data for styling/colors +struct ImGuiTextFilter; // Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +struct ImGuiTextBuffer; // Text buffer for logging/accumulating text +struct ImGuiTextEditCallbackData; // Shared state of ImGui::InputText() when using custom ImGuiTextEditCallback (rare/advanced use) +struct ImGuiSizeConstraintCallbackData;// Structure used to constraint window size in custom ways when using custom ImGuiSizeConstraintCallback (rare/advanced use) +struct ImGuiListClipper; // Helper to manually clip large list of items +struct ImGuiContext; // ImGui context (opaque) + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +typedef unsigned short ImWchar; // character for keyboard input/display +typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +typedef int ImGuiCol; // a color identifier for styling // enum ImGuiCol_ +typedef int ImGuiStyleVar; // a variable identifier for styling // enum ImGuiStyleVar_ +typedef int ImGuiKey; // a key identifier (ImGui-side enum) // enum ImGuiKey_ +typedef int ImGuiColorEditMode; // color edit mode for ColorEdit*() // enum ImGuiColorEditMode_ +typedef int ImGuiMouseCursor; // a mouse cursor identifier // enum ImGuiMouseCursor_ +typedef int ImGuiWindowFlags; // window flags for Begin*() // enum ImGuiWindowFlags_ +typedef int ImGuiSetCond; // condition flags for Set*() // enum ImGuiSetCond_ +typedef int ImGuiInputTextFlags; // flags for InputText*() // enum ImGuiInputTextFlags_ +typedef int ImGuiSelectableFlags; // flags for Selectable() // enum ImGuiSelectableFlags_ +typedef int ImGuiTreeNodeFlags; // flags for TreeNode*(), Collapsing*() // enum ImGuiTreeNodeFlags_ +typedef int (*ImGuiTextEditCallback)(ImGuiTextEditCallbackData *data); +typedef void (*ImGuiSizeConstraintCallback)(ImGuiSizeConstraintCallbackData* data); + +// Others helpers at bottom of the file: +// class ImVector<> // Lightweight std::vector like class. +// IMGUI_ONCE_UPON_A_FRAME // Execute a block of code once per frame only (convenient for creating UI within deep-nested code that runs multiple times) + +struct ImVec2 +{ + float x, y; + ImVec2() { x = y = 0.0f; } + ImVec2(float _x, float _y) { x = _x; y = _y; } +#ifdef IM_VEC2_CLASS_EXTRA // Define constructor and implicit cast operators in imconfig.h to convert back<>forth from your math types and ImVec2. + IM_VEC2_CLASS_EXTRA +#endif +}; + +struct ImVec4 +{ + float x, y, z, w; + ImVec4() { x = y = z = w = 0.0f; } + ImVec4(float _x, float _y, float _z, float _w) { x = _x; y = _y; z = _z; w = _w; } +#ifdef IM_VEC4_CLASS_EXTRA // Define constructor and implicit cast operators in imconfig.h to convert back<>forth from your math types and ImVec4. + IM_VEC4_CLASS_EXTRA +#endif +}; + +// ImGui end-user API +// In a namespace so that user can add extra functions in a separate file (e.g. Value() helpers for your vector or common types) +namespace ImGui +{ + // Main + IMGUI_API ImGuiIO& GetIO(); + IMGUI_API ImGuiStyle& GetStyle(); + IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until NewFrame()/Render(). + IMGUI_API void Render(); // ends the ImGui frame, finalize rendering data, then call your io.RenderDrawListsFn() function if set. + IMGUI_API void Shutdown(); + IMGUI_API void ShowUserGuide(); // help block + IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // style editor block. you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + IMGUI_API void ShowTestWindow(bool* p_open = NULL); // test window demonstrating ImGui features + IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // metrics window for debugging ImGui + + // Window + IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + IMGUI_API bool Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha = -1.0f, ImGuiWindowFlags flags = 0); // OBSOLETE. this is the older/longer API. the extra parameters aren't very relevant. call SetNextWindowSize() instead if you want to set a window size. For regular windows, 'size_on_first_use' only applies to the first time EVER the window is created and probably not what you want! might obsolete this API eventually. + IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + IMGUI_API void EndChild(); + IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + IMGUI_API float GetContentRegionAvailWidth(); // + IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + IMGUI_API float GetWindowContentRegionWidth(); // + IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + IMGUI_API ImVec2 GetWindowSize(); // get current window size + IMGUI_API float GetWindowWidth(); + IMGUI_API float GetWindowHeight(); + IMGUI_API bool IsWindowCollapsed(); + IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + + IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiSetCond cond = 0); // set next window position. call before Begin() + IMGUI_API void SetNextWindowPosCenter(ImGuiSetCond cond = 0); // set next window position to be centered on screen. call before Begin() + IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiSetCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (enforce the range of scrollbars). set axis to 0.0f to leave it automatic. call before Begin() + IMGUI_API void SetNextWindowContentWidth(float width); // set next window content width (enforce the range of horizontal scrollbar). call before Begin() + IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiSetCond cond = 0); // set next window collapsed state. call before Begin() + IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiSetCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiSetCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiSetCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiSetCond cond = 0); // set named window position. + IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiSetCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiSetCond cond = 0); // set named window collapsed state + IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + + IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. + IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use negative 'offset' to access previous widgets. + IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + IMGUI_API ImGuiStorage* GetStateStorage(); + + // Parameters stacks (shared) + IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + IMGUI_API void PopFont(); + IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + IMGUI_API void PopStyleColor(int count = 1); + IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); + IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); + IMGUI_API void PopStyleVar(int count = 1); + IMGUI_API ImFont* GetFont(); // get current font + IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + + // Parameters stacks (current window) + IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + IMGUI_API void PopItemWidth(); + IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + IMGUI_API void PopTextWrapPos(); + IMGUI_API void PushAllowKeyboardFocus(bool v); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + IMGUI_API void PopAllowKeyboardFocus(); + IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (uses io.KeyRepeatDelay/io.KeyRepeatRate for now). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + IMGUI_API void PopButtonRepeat(); + + // Cursor / Layout + IMGUI_API void Separator(); // horizontal line + IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + IMGUI_API void NewLine(); // undo a SameLine() + IMGUI_API void Spacing(); // add vertical spacing + IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if >0 + IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if >0 + IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + IMGUI_API void EndGroup(); + IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + IMGUI_API float GetCursorPosX(); // " + IMGUI_API float GetCursorPosY(); // " + IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + IMGUI_API void SetCursorPosX(float x); // " + IMGUI_API void SetCursorPosY(float y); // " + IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + IMGUI_API void AlignFirstTextHeightToWidgets(); // call once if the first item on the line is a Text() item and you want to vertically lower it to match subsequent (bigger) widgets + IMGUI_API float GetTextLineHeight(); // height of font == GetWindowFontSize() + IMGUI_API float GetTextLineHeightWithSpacing(); // distance (in pixels) between 2 consecutive lines of text == GetWindowFontSize() + GetStyle().ItemSpacing.y + IMGUI_API float GetItemsLineHeightWithSpacing(); // distance (in pixels) between 2 consecutive lines of standard height widgets == GetWindowFontSize() + GetStyle().FramePadding.y*2 + GetStyle().ItemSpacing.y + + // Columns + // You can also use SameLine(pos_x) for simplified columning. The columns API is still work-in-progress and rather lacking. + IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); // setup number of columns. use an identifier to distinguish multiple column sets. close with Columns(1). + IMGUI_API void NextColumn(); // next column + IMGUI_API int GetColumnIndex(); // get current column index + IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetcolumnsCount() inclusive. column 0 is usually 0.0f and not resizable unless you call this + IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + IMGUI_API float GetColumnWidth(int column_index = -1); // column width (== GetColumnOffset(GetColumnIndex()+1) - GetColumnOffset(GetColumnOffset()) + IMGUI_API int GetColumnsCount(); // number of columns (what was passed to Columns()) + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the *entire* stack! + IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + IMGUI_API void PushID(const void* ptr_id); + IMGUI_API void PushID(int int_id); + IMGUI_API void PopID(); + IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). useful if you want to query into ImGuiStorage yourself. otherwise rarely needed + IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + IMGUI_API ImGuiID GetID(const void* ptr_id); + + // Widgets + IMGUI_API void Text(const char* fmt, ...) IM_PRINTFARGS(1); + IMGUI_API void TextV(const char* fmt, va_list args); + IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_PRINTFARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args); + IMGUI_API void TextDisabled(const char* fmt, ...) IM_PRINTFARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + IMGUI_API void TextDisabledV(const char* fmt, va_list args); + IMGUI_API void TextWrapped(const char* fmt, ...) IM_PRINTFARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + IMGUI_API void TextWrappedV(const char* fmt, va_list args); + IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // doesn't require null terminated string if 'text_end' is specified. no copy done to any bounded stack buffer, recommended for long chunks of text + IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_PRINTFARGS(2); // display text+label aligned the same way as value+label widgets + IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args); + IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + IMGUI_API void BulletText(const char* fmt, ...) IM_PRINTFARGS(1); // shortcut for Bullet()+Text() + IMGUI_API void BulletTextV(const char* fmt, va_list args); + IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) + IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); + IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + IMGUI_API bool Checkbox(const char* label, bool* v); + IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + IMGUI_API bool RadioButton(const char* label, bool active); + IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + IMGUI_API bool Combo(const char* label, int* current_item, const char** items, int items_count, int height_in_items = -1); + IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items = -1); // separate items with \0, end item-list with \0\0 + IMGUI_API bool Combo(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + IMGUI_API bool ColorButton(const ImVec4& col, bool small_height = false, bool outline_border = true); + IMGUI_API bool ColorEdit3(const char* label, float col[3]); // Hint: 'float col[3]' function argument is same as 'float* col'. You can pass address of first element out of a contiguous set, e.g. &myvector.x + IMGUI_API bool ColorEdit4(const char* label, float col[4], bool show_alpha = true); // " + IMGUI_API void ColorEditMode(ImGuiColorEditMode mode); // FIXME-OBSOLETE: This is inconsistent with most of the API and will be obsoleted/replaced. + IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, remember than a 'float v[3]' function argument is the same as 'float* v'. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + + // Widgets: Input with Keyboard + IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix. Use power!=1.0 for logarithmic sliders + IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + + // Widgets: Trees + IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_PRINTFARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_PRINTFARGS(2); // " + IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args); // " + IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args); // " + IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_PRINTFARGS(3); + IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_PRINTFARGS(3); + IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args); + IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args); + IMGUI_API void TreePush(const char* str_id = NULL); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + IMGUI_API void TreePush(const void* ptr_id = NULL); // " + IMGUI_API void TreePop(); // ~ Unindent()+PopId() + IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiSetCond cond = 0); // set next TreeNode/CollapsingHeader open state. + IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + + // Widgets: Selectable / Lists + IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + IMGUI_API bool ListBox(const char* label, int* current_item, const char** items, int items_count, int height_in_items = -1); + IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + IMGUI_API void ListBoxFooter(); // terminate the scrolling region + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + IMGUI_API void Value(const char* prefix, bool b); + IMGUI_API void Value(const char* prefix, int v); + IMGUI_API void Value(const char* prefix, unsigned int v); + IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + IMGUI_API void ValueColor(const char* prefix, const ImVec4& v); + IMGUI_API void ValueColor(const char* prefix, ImU32 v); + + // Tooltips + IMGUI_API void SetTooltip(const char* fmt, ...) IM_PRINTFARGS(1); // set tooltip under mouse-cursor, typically use with ImGui::IsHovered(). last call wins + IMGUI_API void SetTooltipV(const char* fmt, va_list args); + IMGUI_API void BeginTooltip(); // use to create full-featured tooltip windows that aren't just text + IMGUI_API void EndTooltip(); + + // Menus + IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + IMGUI_API void EndMainMenuBar(); + IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set). only call EndMenuBar() if this returns true! + IMGUI_API void EndMenuBar(); + IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + IMGUI_API void EndMenu(); + IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + + // Popups + IMGUI_API void OpenPopup(const char* str_id); // mark popup as open. popups are closed when user click outside, or activate a pressable item, or CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (can't close them by clicking outside) + IMGUI_API bool BeginPopupContextItem(const char* str_id, int mouse_button = 1); // helper to open and begin popup when clicked on last item. read comments in .cpp! + IMGUI_API bool BeginPopupContextWindow(bool also_over_items = true, const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on current window. + IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (no window). + IMGUI_API void EndPopup(); + IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + + // Logging: all text output from interface is redirected to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + IMGUI_API void LogFinish(); // stop logging (close file, etc.) + IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + IMGUI_API void LogText(const char* fmt, ...) IM_PRINTFARGS(1); // pass text data straight to log (without being displayed) + + // Clipping + IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + IMGUI_API void PopClipRect(); + + // Utilities + IMGUI_API bool IsItemHovered(); // was the last item hovered by mouse? + IMGUI_API bool IsItemHoveredRect(); // was the last item hovered by mouse? even if another item is active or window is blocked by popup while we are hovering this + IMGUI_API bool IsItemActive(); // was the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + IMGUI_API bool IsItemClicked(int mouse_button = 0); // was the last item clicked? (e.g. button/node just clicked on) + IMGUI_API bool IsItemVisible(); // was the last item visible? (aka not out of sight due to clipping/scrolling.) + IMGUI_API bool IsAnyItemHovered(); + IMGUI_API bool IsAnyItemActive(); + IMGUI_API ImVec2 GetItemRectMin(); // get bounding rect of last item in screen space + IMGUI_API ImVec2 GetItemRectMax(); // " + IMGUI_API ImVec2 GetItemRectSize(); // " + IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + IMGUI_API bool IsWindowHovered(); // is current window hovered and hoverable (not blocked by a popup) (differentiate child windows from each others) + IMGUI_API bool IsWindowFocused(); // is current window focused + IMGUI_API bool IsRootWindowFocused(); // is current root window focused (root = top-most parent of a child, otherwise self) + IMGUI_API bool IsRootWindowOrAnyChildFocused(); // is current root window or any of its child (including current window) focused + IMGUI_API bool IsRootWindowOrAnyChildHovered(); // is current root window or any of its child (including current window) hovered and hoverable (not blocked by a popup) + IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + IMGUI_API bool IsPosHoveringAnyWindow(const ImVec2& pos); // is given position hovering any active imgui window + IMGUI_API float GetTime(); + IMGUI_API int GetFrameCount(); + IMGUI_API const char* GetStyleColName(ImGuiCol idx); + IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + + IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + IMGUI_API void EndChildFrame(); + + IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + + // Inputs + IMGUI_API int GetKeyIndex(ImGuiKey key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + IMGUI_API bool IsKeyDown(int key_index); // key_index into the keys_down[] array, imgui doesn't know the semantic of each entry, uses your own indices! + IMGUI_API bool IsKeyPressed(int key_index, bool repeat = true); // uses user's key indices as stored in the keys_down[] array. if repeat=true. uses io.KeyRepeatDelay / KeyRepeatRate + IMGUI_API bool IsKeyReleased(int key_index); // " + IMGUI_API bool IsMouseDown(int button); // is mouse button held + IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + IMGUI_API bool IsMouseHoveringWindow(); // is mouse hovering current window ("window" in API names always refer to current window). disregarding of any consideration of being blocked by a popup. (unlike IsWindowHovered() this will return true even if the window is blocked because of a popup) + IMGUI_API bool IsMouseHoveringAnyWindow(); // is mouse hovering any visible window + IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + IMGUI_API void ResetMouseDragDelta(int button = 0); // + IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + + // Helpers functions to access functions pointers in ImGui::GetIO() + IMGUI_API void* MemAlloc(size_t sz); + IMGUI_API void MemFree(void* ptr); + IMGUI_API const char* GetClipboardText(); + IMGUI_API void SetClipboardText(const char* text); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + IMGUI_API const char* GetVersion(); + IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + IMGUI_API void DestroyContext(ImGuiContext* ctx); + IMGUI_API ImGuiContext* GetCurrentContext(); + IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + + // Obsolete (will be removed) +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + static inline bool CollapsingHeader(const char* label, const char* str_id, bool framed = true, bool default_open = false) { (void)str_id; (void)framed; ImGuiTreeNodeFlags default_open_flags = 1<<5; return CollapsingHeader(label, (default_open ? default_open_flags : 0)); } // OBSOLETE 1.49+ + static inline ImFont* GetWindowFont() { return GetFont(); } // OBSOLETE 1.48+ + static inline float GetWindowFontSize() { return GetFontSize(); } // OBSOLETE 1.48+ + static inline void SetScrollPosHere() { SetScrollHere(); } // OBSOLETE 1.42+ + static inline bool GetWindowCollapsed() { return ImGui::IsWindowCollapsed(); } // OBSOLETE 1.39+ + static inline bool IsRectClipped(const ImVec2& size) { return !IsRectVisible(size); } // OBSOLETE 1.39+ +#endif + +} // namespace ImGui + +// Flags for ImGui::Begin() +enum ImGuiWindowFlags_ +{ + // Default: 0 + ImGuiWindowFlags_NoTitleBar = 1 << 0, // Disable title-bar + ImGuiWindowFlags_NoResize = 1 << 1, // Disable user resizing with the lower-right grip + ImGuiWindowFlags_NoMove = 1 << 2, // Disable user moving the window + ImGuiWindowFlags_NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + ImGuiWindowFlags_NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel + ImGuiWindowFlags_NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + ImGuiWindowFlags_ShowBorders = 1 << 7, // Show borders around windows and items + ImGuiWindowFlags_NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + ImGuiWindowFlags_NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs + ImGuiWindowFlags_MenuBar = 1 << 10, // Has a menu-bar + ImGuiWindowFlags_HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + // [Internal] + ImGuiWindowFlags_ChildWindow = 1 << 20, // Don't use! For internal use by BeginChild() + ImGuiWindowFlags_ChildWindowAutoFitX = 1 << 21, // Don't use! For internal use by BeginChild() + ImGuiWindowFlags_ChildWindowAutoFitY = 1 << 22, // Don't use! For internal use by BeginChild() + ImGuiWindowFlags_ComboBox = 1 << 23, // Don't use! For internal use by ComboBox() + ImGuiWindowFlags_Tooltip = 1 << 24, // Don't use! For internal use by BeginTooltip() + ImGuiWindowFlags_Popup = 1 << 25, // Don't use! For internal use by BeginPopup() + ImGuiWindowFlags_Modal = 1 << 26, // Don't use! For internal use by BeginPopupModal() + ImGuiWindowFlags_ChildMenu = 1 << 27 // Don't use! For internal use by BeginMenu() +}; + +// Flags for ImGui::InputText() +enum ImGuiInputTextFlags_ +{ + // Default: 0 + ImGuiInputTextFlags_CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + ImGuiInputTextFlags_CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + ImGuiInputTextFlags_CharsUppercase = 1 << 2, // Turn a..z into A..Z + ImGuiInputTextFlags_CharsNoBlank = 1 << 3, // Filter out spaces, tabs + ImGuiInputTextFlags_AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + ImGuiInputTextFlags_CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + ImGuiInputTextFlags_CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + ImGuiInputTextFlags_CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + ImGuiInputTextFlags_AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, // In multi-line mode, allow exiting edition by pressing Enter. Ctrl+Enter to add new line (by default adds new lines with Enter). + ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + ImGuiInputTextFlags_AlwaysInsertMode = 1 << 13, // Insert mode + ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode + ImGuiInputTextFlags_Password = 1 << 15, // Password mode, display all characters as '*' + // [Internal] + ImGuiInputTextFlags_Multiline = 1 << 20 // For internal use by InputTextMultiline() +}; + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +enum ImGuiTreeNodeFlags_ +{ + ImGuiTreeNodeFlags_Selected = 1 << 0, // Draw as selected + ImGuiTreeNodeFlags_Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + ImGuiTreeNodeFlags_AllowOverlapMode = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + ImGuiTreeNodeFlags_DefaultOpen = 1 << 5, // Default node to be open + ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6, // Need double-click to open node + ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + ImGuiTreeNodeFlags_Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + ImGuiTreeNodeFlags_Bullet = 1 << 9, // Display a bullet instead of arrow + //ImGuITreeNodeFlags_SpanAllAvailWidth = 1 << 10, // FIXME: TODO: Extend hit box horizontally even if not framed + //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 11, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + ImGuiTreeNodeFlags_CollapsingHeader = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoAutoOpenOnLog +}; + +// Flags for ImGui::Selectable() +enum ImGuiSelectableFlags_ +{ + // Default: 0 + ImGuiSelectableFlags_DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + ImGuiSelectableFlags_SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + ImGuiSelectableFlags_AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +}; + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +enum ImGuiKey_ +{ + ImGuiKey_Tab, // for tabbing through fields + ImGuiKey_LeftArrow, // for text edit + ImGuiKey_RightArrow,// for text edit + ImGuiKey_UpArrow, // for text edit + ImGuiKey_DownArrow, // for text edit + ImGuiKey_PageUp, + ImGuiKey_PageDown, + ImGuiKey_Home, // for text edit + ImGuiKey_End, // for text edit + ImGuiKey_Delete, // for text edit + ImGuiKey_Backspace, // for text edit + ImGuiKey_Enter, // for text edit + ImGuiKey_Escape, // for text edit + ImGuiKey_A, // for text edit CTRL+A: select all + ImGuiKey_C, // for text edit CTRL+C: copy + ImGuiKey_V, // for text edit CTRL+V: paste + ImGuiKey_X, // for text edit CTRL+X: cut + ImGuiKey_Y, // for text edit CTRL+Y: redo + ImGuiKey_Z, // for text edit CTRL+Z: undo + ImGuiKey_COUNT +}; + +// Enumeration for PushStyleColor() / PopStyleColor() +enum ImGuiCol_ +{ + ImGuiCol_Text, + ImGuiCol_TextDisabled, + ImGuiCol_WindowBg, // Background of normal windows + ImGuiCol_ChildWindowBg, // Background of child windows + ImGuiCol_PopupBg, // Background of popups, menus, tooltips windows + ImGuiCol_Border, + ImGuiCol_BorderShadow, + ImGuiCol_FrameBg, // Background of checkbox, radio button, plot, slider, text input + ImGuiCol_FrameBgHovered, + ImGuiCol_FrameBgActive, + ImGuiCol_TitleBg, + ImGuiCol_TitleBgCollapsed, + ImGuiCol_TitleBgActive, + ImGuiCol_MenuBarBg, + ImGuiCol_ScrollbarBg, + ImGuiCol_ScrollbarGrab, + ImGuiCol_ScrollbarGrabHovered, + ImGuiCol_ScrollbarGrabActive, + ImGuiCol_ComboBg, + ImGuiCol_CheckMark, + ImGuiCol_SliderGrab, + ImGuiCol_SliderGrabActive, + ImGuiCol_Button, + ImGuiCol_ButtonHovered, + ImGuiCol_ButtonActive, + ImGuiCol_Header, + ImGuiCol_HeaderHovered, + ImGuiCol_HeaderActive, + ImGuiCol_Column, + ImGuiCol_ColumnHovered, + ImGuiCol_ColumnActive, + ImGuiCol_ResizeGrip, + ImGuiCol_ResizeGripHovered, + ImGuiCol_ResizeGripActive, + ImGuiCol_CloseButton, + ImGuiCol_CloseButtonHovered, + ImGuiCol_CloseButtonActive, + ImGuiCol_PlotLines, + ImGuiCol_PlotLinesHovered, + ImGuiCol_PlotHistogram, + ImGuiCol_PlotHistogramHovered, + ImGuiCol_TextSelectedBg, + ImGuiCol_ModalWindowDarkening, // darken entire screen when a modal window is active + ImGuiCol_COUNT +}; + +// Enumeration for PushStyleVar() / PopStyleVar() +// NB: the enum only refers to fields of ImGuiStyle() which makes sense to be pushed/poped in UI code. Feel free to add others. +enum ImGuiStyleVar_ +{ + ImGuiStyleVar_Alpha, // float + ImGuiStyleVar_WindowPadding, // ImVec2 + ImGuiStyleVar_WindowRounding, // float + ImGuiStyleVar_WindowMinSize, // ImVec2 + ImGuiStyleVar_ChildWindowRounding, // float + ImGuiStyleVar_FramePadding, // ImVec2 + ImGuiStyleVar_FrameRounding, // float + ImGuiStyleVar_ItemSpacing, // ImVec2 + ImGuiStyleVar_ItemInnerSpacing, // ImVec2 + ImGuiStyleVar_IndentSpacing, // float + ImGuiStyleVar_GrabMinSize, // float + ImGuiStyleVar_ButtonTextAlign, // flags ImGuiAlign_* + ImGuiStyleVar_Count_ +}; + +// Enumeration for ColorEditMode() +// FIXME-OBSOLETE: Will be replaced by future color/picker api +enum ImGuiColorEditMode_ +{ + ImGuiColorEditMode_UserSelect = -2, + ImGuiColorEditMode_UserSelectShowButton = -1, + ImGuiColorEditMode_RGB = 0, + ImGuiColorEditMode_HSV = 1, + ImGuiColorEditMode_HEX = 2 +}; + +// Enumeration for GetMouseCursor() +enum ImGuiMouseCursor_ +{ + ImGuiMouseCursor_None = -1, + ImGuiMouseCursor_Arrow = 0, + ImGuiMouseCursor_TextInput, // When hovering over InputText, etc. + ImGuiMouseCursor_Move, // Unused + ImGuiMouseCursor_ResizeNS, // Unused + ImGuiMouseCursor_ResizeEW, // When hovering over a column + ImGuiMouseCursor_ResizeNESW, // Unused + ImGuiMouseCursor_ResizeNWSE, // When hovering over the bottom-right corner of a window + ImGuiMouseCursor_Count_ +}; + +// Condition flags for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to ImGuiSetCond_Always +enum ImGuiSetCond_ +{ + ImGuiSetCond_Always = 1 << 0, // Set the variable + ImGuiSetCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + ImGuiSetCond_FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + ImGuiSetCond_Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +}; + +struct ImGuiStyle +{ + float Alpha; // Global alpha applies to everything in ImGui + ImVec2 WindowPadding; // Padding within a window + ImVec2 WindowMinSize; // Minimum window size + float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + float ChildWindowRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows + ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + float ScrollbarRounding; // Radius of grab corners for scrollbar + float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + bool AntiAliasedShapes; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + float CurveTessellationTol; // Tessellation tolerance. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + ImVec4 Colors[ImGuiCol_COUNT]; + + IMGUI_API ImGuiStyle(); +}; + +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +struct ImGuiIO +{ + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + float KeyRepeatRate; // = 0.020f // When holding a key/button, rate at which it repeats, in seconds. + void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + float FontGlobalScale; // = 1.0f // Global scale all fonts + bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + bool OSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + + //------------------------------------------------------------------ + // User Functions + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + const char* (*GetClipboardTextFn)(void* user_data); + void (*SetClipboardTextFn)(void* user_data, const char* text); + void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + void* (*MemAllocFn)(size_t sz); + void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + void (*ImeSetInputScreenPosFn)(int x, int y); + void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + ImVec2 MousePos; // Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.) + bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + bool KeyCtrl; // Keyboard modifier pressed: Control + bool KeyShift; // Keyboard modifier pressed: Shift + bool KeyAlt; // Keyboard modifier pressed: Alt + bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + IMGUI_API void AddInputCharacter(ImWchar c); // Helper to add a new character into InputCharacters[] + IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Helper to add new characters into InputCharacters[] from an UTF-8 string + inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Helper to clear the text input buffer + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame(), you can use them to discard inputs or hide them from the rest of your application + //------------------------------------------------------------------ + + bool WantCaptureMouse; // Mouse is hovering a window or widget is active (= ImGui will use your mouse input) + bool WantCaptureKeyboard; // Widget is active (= ImGui will use your keyboard input) + bool WantTextInput; // Some text input widget is active, which will read input characters from the InputCharacters array. + float Framerate; // Framerate estimation, in frame per second. Rolling average estimation based on IO.DeltaTime over 120 frames + int MetricsAllocs; // Number of active memory allocations + int MetricsRenderVertices; // Vertices output during last call to Render() + int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + int MetricsActiveWindows; // Number of visible windows (exclude child windows) + + //------------------------------------------------------------------ + // [Private] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + ImVec2 MousePosPrev; // Previous mouse position + ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are negative to allow mouse enabling/disabling. + bool MouseClicked[5]; // Mouse button went from !Down to Down + ImVec2 MouseClickedPos[5]; // Position at time of clicking + float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + bool MouseReleased[5]; // Mouse button went from Down to !Down + bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the click point + float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + float KeysDownDurationPrev[512]; // Previous duration the key has been down + + IMGUI_API ImGuiIO(); +}; + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call c++ constructors because we don't use them in ImGui. Don't use this class as a straight std::vector replacement in your code! +template +class ImVector +{ +public: + int Size; + int Capacity; + T* Data; + + typedef T value_type; + typedef value_type* iterator; + typedef const value_type* const_iterator; + + ImVector() { Size = Capacity = 0; Data = NULL; } + ~ImVector() { if (Data) ImGui::MemFree(Data); } + + inline bool empty() const { return Size == 0; } + inline int size() const { return Size; } + inline int capacity() const { return Capacity; } + + inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + + inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + inline iterator begin() { return Data; } + inline const_iterator begin() const { return Data; } + inline iterator end() { return Data + Size; } + inline const_iterator end() const { return Data + Size; } + inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size-1]; } + inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size-1]; } + inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + + inline int _grow_capacity(int new_size) { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > new_size ? new_capacity : new_size; } + + inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + inline void reserve(int new_capacity) + { + if (new_capacity <= Capacity) return; + T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(value_type)); + if (Data) + memcpy(new_data, Data, (size_t)Size * sizeof(value_type)); + ImGui::MemFree(Data); + Data = new_data; + Capacity = new_capacity; + } + + inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size+1)); Data[Size++] = v; } + inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + + inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(Capacity ? Capacity * 2 : 4); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } +}; + +// Helper: execute a block of code at maximum once a frame +// Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame. +// Usage: +// IMGUI_ONCE_UPON_A_FRAME +// { +// // code block will be executed one per frame +// } +// Attention! the macro expands into 2 statement so make sure you don't use it within e.g. an if() statement without curly braces. +#define IMGUI_ONCE_UPON_A_FRAME static ImGuiOnceUponAFrame imgui_oaf##__LINE__; if (imgui_oaf##__LINE__) +struct ImGuiOnceUponAFrame +{ + ImGuiOnceUponAFrame() { RefFrame = -1; } + mutable int RefFrame; + operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; } +}; + +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +struct ImGuiTextFilter +{ + struct TextRange + { + const char* b; + const char* e; + + TextRange() { b = e = NULL; } + TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + const char* begin() const { return b; } + const char* end() const { return e; } + bool empty() const { return b == e; } + char front() const { return *b; } + static bool is_blank(char c) { return c == ' ' || c == '\t'; } + void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + IMGUI_API void split(char separator, ImVector& out); + }; + + char InputBuf[256]; + ImVector Filters; + int CountGrep; + + ImGuiTextFilter(const char* default_filter = ""); + ~ImGuiTextFilter() {} + void Clear() { InputBuf[0] = 0; Build(); } + bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + bool PassFilter(const char* text, const char* text_end = NULL) const; + bool IsActive() const { return !Filters.empty(); } + IMGUI_API void Build(); +}; + +// Helper: Text buffer for logging/accumulating text +struct ImGuiTextBuffer +{ + ImVector Buf; + + ImGuiTextBuffer() { Buf.push_back(0); } + inline char operator[](int i) { return Buf.Data[i]; } + const char* begin() const { return &Buf.front(); } + const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + int size() const { return Buf.Size - 1; } + bool empty() { return Buf.Size <= 1; } + void clear() { Buf.clear(); Buf.push_back(0); } + const char* c_str() const { return Buf.Data; } + IMGUI_API void append(const char* fmt, ...) IM_PRINTFARGS(2); + IMGUI_API void appendv(const char* fmt, va_list args); +}; + +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// You can use it as custom user storage for temporary values. +// Declare your own storage if: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code. +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +struct ImGuiStorage +{ + struct Pair + { + ImGuiID key; + union { int val_i; float val_f; void* val_p; }; + Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; } + Pair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; } + Pair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; } + }; + ImVector Data; + + // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N) + // - Set***() functions find pair, insertion on demand if missing. + // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair. + IMGUI_API void Clear(); + IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const; + IMGUI_API void SetInt(ImGuiID key, int val); + IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const; + IMGUI_API void SetBool(ImGuiID key, bool val); + IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const; + IMGUI_API void SetFloat(ImGuiID key, float val); + IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL + IMGUI_API void SetVoidPtr(ImGuiID key, void* val); + + // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set. + // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. + // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct) + // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar; + IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0); + IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false); + IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f); + IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL); + + // Use on your own storage if you know only integer are being stored (open/close all tree nodes) + IMGUI_API void SetAllInt(int val); +}; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +struct ImGuiTextEditCallbackData +{ + ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + void* UserData; // What user passed to InputText() // Read-only + bool ReadOnly; // Read-only mode // Read-only + + // CharFilter event: + ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + int BufTextLen; // Current text length in bytes // Read-write + int BufSize; // Maximum text length in bytes // Read-only + bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + int CursorPos; // // Read-write + int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + int SelectionEnd; // // Read-write + + // NB: Helper functions for text manipulation. Calling those function loses selection. + void DeleteChars(int pos, int bytes_count); + void InsertChars(int pos, const char* text, const char* text_end = NULL); + bool HasSelection() const { return SelectionStart != SelectionEnd; } +}; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +struct ImGuiSizeConstraintCallbackData +{ + void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + ImVec2 Pos; // Read-only. Window position, for reference. + ImVec2 CurrentSize; // Read-only. Current window size. + ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +}; + +// Helpers macros to generate 32-bits encoded colors +#ifdef IMGUI_USE_BGRA_PACKED_COLOR +#define IM_COL32_R_SHIFT 16 +#define IM_COL32_G_SHIFT 8 +#define IM_COL32_B_SHIFT 0 +#define IM_COL32_A_SHIFT 24 +#define IM_COL32_A_MASK 0xFF000000 +#else +#define IM_COL32_R_SHIFT 0 +#define IM_COL32_G_SHIFT 8 +#define IM_COL32_B_SHIFT 16 +#define IM_COL32_A_SHIFT 24 +#define IM_COL32_A_MASK 0xFF000000 +#endif +#define IM_COL32(R,G,B,A) (((ImU32)(A)<>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + ImColor(const ImVec4& col) { Value = col; } + inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + inline operator ImVec4() const { return Value; } + + inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + + static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } +}; + +// Helper: Manually clip large list of items. +// If you are submitting lots of evenly spaced items and you have a random access to the list, you can perform coarse clipping based on visibility to save yourself from processing those items at all. +// The clipper calculates the range of visible items and advance the cursor to compensate for the non-visible items we have skipped. +// ImGui already clip items based on their bounds but it needs to measure text size to do so. Coarse clipping before submission makes this cost and your own data fetching/submission cost null. +// Usage: +// ImGuiListClipper clipper(1000); // we have 1000 elements, evenly spaced. +// while (clipper.Step()) +// for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) +// ImGui::Text("line number %d", i); +// - Step 0: the clipper let you process the first element, regardless of it being visible or not, so we can measure the element height (step skipped if we passed a known height as second arg to constructor). +// - Step 1: the clipper infer height from first element, calculate the actual range of elements to display, and position the cursor before the first element. +// - (Step 2: dummy step only required if an explicit items_height was passed to constructor or Begin() and user call Step(). Does nothing and switch to Step 3.) +// - Step 3: the clipper validate that we have reached the expected Y position (corresponding to element DisplayEnd), advance the cursor to the end of the list and then returns 'false' to end the loop. +struct ImGuiListClipper +{ + float StartPosY; + float ItemsHeight; + int ItemsCount, StepNo, DisplayStart, DisplayEnd; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetItemsLineHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. +}; + +//----------------------------------------------------------------------------- +// Draw List +// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList. +//----------------------------------------------------------------------------- + +// Draw callbacks for advanced uses. +// NB- You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering (you can poke into the draw list for that) +// Draw callback may be useful for example, A) Change your GPU render state, B) render a complex 3D scene inside a UI element (without an intermediate texture/render target), etc. +// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) cmd.UserCallback(parent_list, cmd); else RenderTriangles()' +typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd); + +// Typically, 1 command = 1 gpu draw call (unless command is a callback) +struct ImDrawCmd +{ + unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + void* UserCallbackData; // The draw callback code can access this. + + ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = -8192.0f; ClipRect.z = ClipRect.w = +8192.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } +}; + +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +#ifndef ImDrawIdx +typedef unsigned short ImDrawIdx; +#endif + +// Vertex layout +#ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +struct ImDrawVert +{ + ImVec2 pos; + ImVec2 uv; + ImU32 col; +}; +#else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +#endif + +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +struct ImDrawChannel +{ + ImVector CmdBuffer; + ImVector IdxBuffer; +}; + +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// At the moment, each ImGui window contains its own ImDrawList but they could potentially be merged in the future. +// If you want to add custom rendering within a window, you can use ImGui::GetWindowDrawList() to access the current draw list and add your own primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are in screen coordinates (0,0=top-left, 1 pixel per unit). Primitives are always added to the list and not culled (culling is done at render time and at a higher-level by ImGui:: functions). +struct ImDrawList +{ + // This is what you have to render + ImVector CmdBuffer; // Commands. Typically 1 command = 1 gpu draw call. + ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + ImVector VtxBuffer; // Vertex buffer. + + // [Internal, used while building lists] + const char* _OwnerName; // Pointer to owner window's name for debugging + unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + ImVector _ClipRectStack; // [Internal] + ImVector _TextureIdStack; // [Internal] + ImVector _Path; // [Internal] current path building + int _ChannelsCurrent; // [Internal] current channel number (0) + int _ChannelsCount; // [Internal] number of active channels (1+) + ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + ImDrawList() { _OwnerName = NULL; Clear(); } + ~ImDrawList() { ClearFreeMemory(); } + IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + IMGUI_API void PushClipRectFullScreen(); + IMGUI_API void PopClipRect(); + IMGUI_API void PushTextureID(const ImTextureID& texture_id); + IMGUI_API void PopTextureID(); + + // Primitives + IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ~0, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ~0); // a: upper-left, b: lower-right + IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness, bool anti_aliased); + IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col, bool anti_aliased); + IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + + // Stateful path API, add points then finish with PathFill() or PathStroke() + inline void PathClear() { _Path.resize(0); } + inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + inline void PathFill(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col, true); PathClear(); } + inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness, true); PathClear(); } + IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ~0); // rounding_corners_flags: 4-bits corresponding to which corner to round + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + IMGUI_API void ChannelsSplit(int channels_count); + IMGUI_API void ChannelsMerge(); + IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + IMGUI_API void Clear(); + IMGUI_API void ClearFreeMemory(); + IMGUI_API void PrimReserve(int idx_count, int vtx_count); + IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + IMGUI_API void UpdateClipRect(); + IMGUI_API void UpdateTextureID(); +}; + +// All draw data to render an ImGui frame +struct ImDrawData +{ + bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + ImDrawList** CmdLists; + int CmdListsCount; + int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + + // Functions + ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + IMGUI_API void DeIndexAllBuffers(); // For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. +}; + +struct ImFontConfig +{ + void* FontData; // // TTF data + int FontDataSize; // // TTF data size + bool FontDataOwnedByAtlas; // true // TTF data ownership taken by the container ImFontAtlas (will delete memory itself). Set to true + int FontNo; // 0 // Index of font within TTF file + float SizePixels; // // Size in pixels for rasterizer + int OversampleH, OversampleV; // 3, 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. + bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. + ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs + const ImWchar* GlyphRanges; // // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. + bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). + bool MergeGlyphCenterV; // false // When merging (multiple ImFontInput for one ImFont), vertically center new glyphs instead of aligning their baseline + + // [Internal] + char Name[32]; // Name (strictly for debugging) + ImFont* DstFont; + + IMGUI_API ImFontConfig(); +}; + +// Load and rasterize multiple TTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// 5. Call ClearTexData() to free textures memory on the heap. +// NB: If you use a 'glyph_ranges' array you need to make sure that your array persist up until the ImFont is cleared. We only copy the pointer, not the data. +struct ImFontAtlas +{ + IMGUI_API ImFontAtlas(); + IMGUI_API ~ImFontAtlas(); + IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + IMGUI_API ImFont* AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Transfer ownership of 'ttf_data' to ImFontAtlas, will be deleted after Build() + IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_ttf_data' still owned by caller. Compress with binary_to_compressed_c.cpp + IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_ttf_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 paramaeter + IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + IMGUI_API void Clear(); // Clear all + + // Retrieve texture data + // User is in charge of copying the pixels into graphics memory, then call SetTextureUserID() + // After loading the texture into your graphic system, store your texture handle in 'TexID' (ignore if you aren't using multiple fonts nor images) + // RGBA32 format is provided for convenience and high compatibility, but note that all RGB pixels are white, so 75% of the memory is wasted. + // Pitch = Width * BytesPerPixels + IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + void SetTexID(void* id) { TexID = id; } + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. See FAQ for details. + IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Japanese + full set of about 21000 CJK Unified Ideographs + IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Members + // (Access texture data via GetTexData*() calls which will setup a default font for you.) + void* TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It ia passed back to you during rendering. + unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + int TexWidth; // Texture width calculated during Build(). + int TexHeight; // Texture height calculated during Build(). + int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + + // Private + ImVector ConfigData; // Internal data + IMGUI_API bool Build(); // Build pixels data. This is automatically for you by the GetTexData*** functions. + IMGUI_API void RenderCustomTexData(int pass, void* rects); +}; + +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +struct ImFont +{ + struct Glyph + { + ImWchar Codepoint; + float XAdvance; + float X0, Y0, X1, Y1; + float U0, V0, U1, V1; // Texture coordinates + }; + + // Members: Hot ~62/78 bytes + float FontSize; // // Height of characters, set during loading (don't change after loading) + float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + ImVector Glyphs; // // All glyphs. + ImVector IndexXAdvance; // // Sparse. Glyphs->XAdvance in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + const Glyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + float FallbackXAdvance; // == FallbackGlyph->XAdvance + ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + ImFontAtlas* ContainerAtlas; // // What we has been loaded into + float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + + // Methods + IMGUI_API ImFont(); + IMGUI_API ~ImFont(); + IMGUI_API void Clear(); + IMGUI_API void BuildLookupTable(); + IMGUI_API const Glyph* FindGlyph(ImWchar c) const; + IMGUI_API void SetFallbackChar(ImWchar c); + float GetCharAdvance(ImWchar c) const { return ((int)c < IndexXAdvance.Size) ? IndexXAdvance[(int)c] : FallbackXAdvance; } + bool IsLoaded() const { return ContainerAtlas != NULL; } + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // Private + IMGUI_API void GrowIndex(int new_size); + IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. +}; + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +// Include imgui_user.h at the end of imgui.h (convenient for user to only explicitly include vanilla imgui.h) +#ifdef IMGUI_INCLUDE_IMGUI_USER_H +#include "imgui_user.h" +#endif diff --git a/lib/imgui/imgui_demo.cpp b/lib/imgui/imgui_demo.cpp new file mode 100644 index 0000000..d42d148 --- /dev/null +++ b/lib/imgui/imgui_demo.cpp @@ -0,0 +1,2638 @@ +// dear imgui, v1.50 WIP +// (demo code) + +// Don't remove this file from your project! It is useful reference code that you can execute. +// You can call ImGui::ShowTestWindow() in your code to learn about various features of ImGui. +// Everything in this file will be stripped out by the linker if you don't call ImGui::ShowTestWindow(). + +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include "imgui.h" +#include // toupper, isprint +#include // sqrtf, powf, cosf, sinf, floorf, ceilf +#include // vsnprintf, sscanf, printf +#include // NULL, malloc, free, qsort, atoi +#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +#include // intptr_t +#else +#include // intptr_t +#endif + +#ifdef _MSC_VER +#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +#define snprintf _snprintf +#endif +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +#pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +#pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +#if __has_warning("-Wreserved-id-macro") +#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +#endif +#elif defined(__GNUC__) +#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +#pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +#if (__GNUC__ >= 6) +#pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on github. +#endif +#endif + +// Play it nice with Windows users. Notepad in 2015 still doesn't display text data with Unix-style \n. +#ifdef _WIN32 +#define IM_NEWLINE "\r\n" +#else +#define IM_NEWLINE "\n" +#endif + +#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR)/sizeof(*_ARR))) +#define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) + +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- + +#ifndef IMGUI_DISABLE_TEST_WINDOWS + +static void ShowExampleAppConsole(bool* p_open); +static void ShowExampleAppLog(bool* p_open); +static void ShowExampleAppLayout(bool* p_open); +static void ShowExampleAppPropertyEditor(bool* p_open); +static void ShowExampleAppLongText(bool* p_open); +static void ShowExampleAppAutoResize(bool* p_open); +static void ShowExampleAppConstrainedResize(bool* p_open); +static void ShowExampleAppFixedOverlay(bool* p_open); +static void ShowExampleAppManipulatingWindowTitle(bool* p_open); +static void ShowExampleAppCustomRendering(bool* p_open); +static void ShowExampleAppMainMenuBar(); +static void ShowExampleMenuFile(); + +static void ShowHelpMarker(const char* desc) +{ + ImGui::TextDisabled("(?)"); + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(450.0f); + ImGui::TextUnformatted(desc); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } +} + +void ImGui::ShowUserGuide() +{ + ImGui::BulletText("Double-click on title bar to collapse window."); + ImGui::BulletText("Click and drag on lower right corner to resize window."); + ImGui::BulletText("Click and drag on any empty space to move window."); + ImGui::BulletText("Mouse Wheel to scroll."); + if (ImGui::GetIO().FontAllowUserScaling) + ImGui::BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui::BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui::BulletText("CTRL+Click on a slider or drag box to input text."); + ImGui::BulletText( + "While editing text:\n" + "- Hold SHIFT or use mouse to select text\n" + "- CTRL+Left/Right to word jump\n" + "- CTRL+A or double-click to select all\n" + "- CTRL+X,CTRL+C,CTRL+V clipboard\n" + "- CTRL+Z,CTRL+Y undo/redo\n" + "- ESCAPE to revert\n" + "- You can apply arithmetic operators +,*,/ on numerical values.\n" + " Use +- to subtract.\n"); +} + +// Demonstrate most ImGui features (big function!) +void ImGui::ShowTestWindow(bool* p_open) +{ + // Examples apps + static bool show_app_main_menu_bar = false; + static bool show_app_console = false; + static bool show_app_log = false; + static bool show_app_layout = false; + static bool show_app_property_editor = false; + static bool show_app_long_text = false; + static bool show_app_auto_resize = false; + static bool show_app_constrained_resize = false; + static bool show_app_fixed_overlay = false; + static bool show_app_manipulating_window_title = false; + static bool show_app_custom_rendering = false; + static bool show_app_style_editor = false; + + static bool show_app_metrics = false; + static bool show_app_about = false; + + if (show_app_main_menu_bar) ShowExampleAppMainMenuBar(); + if (show_app_console) ShowExampleAppConsole(&show_app_console); + if (show_app_log) ShowExampleAppLog(&show_app_log); + if (show_app_layout) ShowExampleAppLayout(&show_app_layout); + if (show_app_property_editor) ShowExampleAppPropertyEditor(&show_app_property_editor); + if (show_app_long_text) ShowExampleAppLongText(&show_app_long_text); + if (show_app_auto_resize) ShowExampleAppAutoResize(&show_app_auto_resize); + if (show_app_constrained_resize) ShowExampleAppConstrainedResize(&show_app_constrained_resize); + if (show_app_fixed_overlay) ShowExampleAppFixedOverlay(&show_app_fixed_overlay); + if (show_app_manipulating_window_title) ShowExampleAppManipulatingWindowTitle(&show_app_manipulating_window_title); + if (show_app_custom_rendering) ShowExampleAppCustomRendering(&show_app_custom_rendering); + + if (show_app_metrics) ImGui::ShowMetricsWindow(&show_app_metrics); + if (show_app_style_editor) { ImGui::Begin("Style Editor", &show_app_style_editor); ImGui::ShowStyleEditor(); ImGui::End(); } + if (show_app_about) + { + ImGui::Begin("About ImGui", &show_app_about, ImGuiWindowFlags_AlwaysAutoResize); + ImGui::Text("dear imgui, %s", ImGui::GetVersion()); + ImGui::Separator(); + ImGui::Text("By Omar Cornut and all github contributors."); + ImGui::Text("ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui::End(); + } + + static bool no_titlebar = false; + static bool no_border = true; + static bool no_resize = false; + static bool no_move = false; + static bool no_scrollbar = false; + static bool no_collapse = false; + static bool no_menu = false; + + // Demonstrate the various window flags. Typically you would just use the default. + ImGuiWindowFlags window_flags = 0; + if (no_titlebar) window_flags |= ImGuiWindowFlags_NoTitleBar; + if (!no_border) window_flags |= ImGuiWindowFlags_ShowBorders; + if (no_resize) window_flags |= ImGuiWindowFlags_NoResize; + if (no_move) window_flags |= ImGuiWindowFlags_NoMove; + if (no_scrollbar) window_flags |= ImGuiWindowFlags_NoScrollbar; + if (no_collapse) window_flags |= ImGuiWindowFlags_NoCollapse; + if (!no_menu) window_flags |= ImGuiWindowFlags_MenuBar; + ImGui::SetNextWindowSize(ImVec2(550,680), ImGuiSetCond_FirstUseEver); + if (!ImGui::Begin("ImGui Demo", p_open, window_flags)) + { + // Early out if the window is collapsed, as an optimization. + ImGui::End(); + return; + } + + //ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.65f); // 2/3 of the space for widget and 1/3 for labels + ImGui::PushItemWidth(-140); // Right align, keep 140 pixels for labels + + ImGui::Text("Dear ImGui says hello."); + + // Menu + if (ImGui::BeginMenuBar()) + { + if (ImGui::BeginMenu("Menu")) + { + ShowExampleMenuFile(); + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("Examples")) + { + ImGui::MenuItem("Main menu bar", NULL, &show_app_main_menu_bar); + ImGui::MenuItem("Console", NULL, &show_app_console); + ImGui::MenuItem("Log", NULL, &show_app_log); + ImGui::MenuItem("Simple layout", NULL, &show_app_layout); + ImGui::MenuItem("Property editor", NULL, &show_app_property_editor); + ImGui::MenuItem("Long text display", NULL, &show_app_long_text); + ImGui::MenuItem("Auto-resizing window", NULL, &show_app_auto_resize); + ImGui::MenuItem("Constrained-resizing window", NULL, &show_app_constrained_resize); + ImGui::MenuItem("Simple overlay", NULL, &show_app_fixed_overlay); + ImGui::MenuItem("Manipulating window title", NULL, &show_app_manipulating_window_title); + ImGui::MenuItem("Custom rendering", NULL, &show_app_custom_rendering); + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("Help")) + { + ImGui::MenuItem("Metrics", NULL, &show_app_metrics); + ImGui::MenuItem("Style Editor", NULL, &show_app_style_editor); + ImGui::MenuItem("About ImGui", NULL, &show_app_about); + ImGui::EndMenu(); + } + ImGui::EndMenuBar(); + } + + ImGui::Spacing(); + if (ImGui::CollapsingHeader("Help")) + { + ImGui::TextWrapped("This window is being created by the ShowTestWindow() function. Please refer to the code for programming reference.\n\nUser Guide:"); + ImGui::ShowUserGuide(); + } + + if (ImGui::CollapsingHeader("Window options")) + { + ImGui::Checkbox("No titlebar", &no_titlebar); ImGui::SameLine(150); + ImGui::Checkbox("No border", &no_border); ImGui::SameLine(300); + ImGui::Checkbox("No resize", &no_resize); + ImGui::Checkbox("No move", &no_move); ImGui::SameLine(150); + ImGui::Checkbox("No scrollbar", &no_scrollbar); ImGui::SameLine(300); + ImGui::Checkbox("No collapse", &no_collapse); + ImGui::Checkbox("No menu", &no_menu); + + if (ImGui::TreeNode("Style")) + { + ImGui::ShowStyleEditor(); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Logging")) + { + ImGui::TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui::LogText() to output directly to the log without a visual output."); + ImGui::LogButtons(); + ImGui::TreePop(); + } + } + + if (ImGui::CollapsingHeader("Widgets")) + { + if (ImGui::TreeNode("Trees")) + { + if (ImGui::TreeNode("Basic trees")) + { + for (int i = 0; i < 5; i++) + if (ImGui::TreeNode((void*)(intptr_t)i, "Child %d", i)) + { + ImGui::Text("blah blah"); + ImGui::SameLine(); + if (ImGui::SmallButton("print")) printf("Child %d pressed", i); + ImGui::TreePop(); + } + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Advanced, with Selectable nodes")) + { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + static bool align_label_with_current_x_position = false; + ImGui::Checkbox("Align label with current X position)", &align_label_with_current_x_position); + ImGui::Text("Hello!"); + if (align_label_with_current_x_position) + ImGui::Unindent(ImGui::GetTreeNodeToLabelSpacing()); + + static int selection_mask = (1 << 2); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + int node_clicked = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui::PushStyleVar(ImGuiStyleVar_IndentSpacing, ImGui::GetFontSize()*3); // Increase spacing to differentiate leaves from expanded contents. + for (int i = 0; i < 6; i++) + { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + ImGuiTreeNodeFlags node_flags = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick | ((selection_mask & (1 << i)) ? ImGuiTreeNodeFlags_Selected : 0); + if (i < 3) + { + // Node + bool node_open = ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Node %d", i); + if (ImGui::IsItemClicked()) + node_clicked = i; + if (node_open) + { + ImGui::Text("Blah blah\nBlah Blah"); + ImGui::TreePop(); + } + } + else + { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags | ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen, "Selectable Leaf %d", i); + if (ImGui::IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked != -1) + { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui::GetIO().KeyCtrl) + selection_mask ^= (1 << node_clicked); // CTRL+click to toggle + else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection + selection_mask = (1 << node_clicked); // Click to single-select + } + ImGui::PopStyleVar(); + if (align_label_with_current_x_position) + ImGui::Indent(ImGui::GetTreeNodeToLabelSpacing()); + ImGui::TreePop(); + } + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Collapsing Headers")) + { + static bool closable_group = true; + if (ImGui::CollapsingHeader("Header")) + { + ImGui::Checkbox("Enable extra group", &closable_group); + for (int i = 0; i < 5; i++) + ImGui::Text("Some content %d", i); + } + if (ImGui::CollapsingHeader("Header with a close button", &closable_group)) + { + for (int i = 0; i < 5; i++) + ImGui::Text("More content %d", i); + } + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Bullets")) + { + ImGui::BulletText("Bullet point 1"); + ImGui::BulletText("Bullet point 2\nOn multiple lines"); + ImGui::Bullet(); ImGui::Text("Bullet point 3 (two calls)"); + ImGui::Bullet(); ImGui::SmallButton("Button"); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Colored Text")) + { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui::TextColored(ImVec4(1.0f,0.0f,1.0f,1.0f), "Pink"); + ImGui::TextColored(ImVec4(1.0f,1.0f,0.0f,1.0f), "Yellow"); + ImGui::TextDisabled("Disabled"); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Word Wrapping")) + { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui::TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui::Spacing(); + + static float wrap_width = 200.0f; + ImGui::SliderFloat("Wrap width", &wrap_width, -20, 600, "%.0f"); + + ImGui::Text("Test paragraph 1:"); + ImVec2 pos = ImGui::GetCursorScreenPos(); + ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width); + ImGui::Text("lazy dog. This paragraph is made to fit within %.0f pixels. The quick brown fox jumps over the lazy dog.", wrap_width); + ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui::PopTextWrapPos(); + + ImGui::Text("Test paragraph 2:"); + pos = ImGui::GetCursorScreenPos(); + ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width); + ImGui::Text("aaaaaaaa bbbbbbbb, cccccccc,dddddddd. eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui::PopTextWrapPos(); + + ImGui::TreePop(); + } + + if (ImGui::TreeNode("UTF-8 Text")) + { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // Most compiler appears to support UTF-8 in source code (with Visual Studio you need to save your file as 'UTF-8 without signature') + // However for the sake for maximum portability here we are *not* including raw UTF-8 character in this source file, instead we encode the string with hexadecimal constants. + // In your own application be reasonable and use UTF-8 in source or retrieve the data from file system! + // Note that characters values are preserved even if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui::TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + static char buf[32] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"; + ImGui::InputText("UTF-8 input", buf, IM_ARRAYSIZE(buf)); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Images")) + { + ImGui::TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + ImVec2 tex_screen_pos = ImGui::GetCursorScreenPos(); + float tex_w = (float)ImGui::GetIO().Fonts->TexWidth; + float tex_h = (float)ImGui::GetIO().Fonts->TexHeight; + ImTextureID tex_id = ImGui::GetIO().Fonts->TexID; + ImGui::Text("%.0fx%.0f", tex_w, tex_h); + ImGui::Image(tex_id, ImVec2(tex_w, tex_h), ImVec2(0,0), ImVec2(1,1), ImColor(255,255,255,255), ImColor(255,255,255,128)); + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + float focus_sz = 32.0f; + float focus_x = ImGui::GetMousePos().x - tex_screen_pos.x - focus_sz * 0.5f; if (focus_x < 0.0f) focus_x = 0.0f; else if (focus_x > tex_w - focus_sz) focus_x = tex_w - focus_sz; + float focus_y = ImGui::GetMousePos().y - tex_screen_pos.y - focus_sz * 0.5f; if (focus_y < 0.0f) focus_y = 0.0f; else if (focus_y > tex_h - focus_sz) focus_y = tex_h - focus_sz; + ImGui::Text("Min: (%.2f, %.2f)", focus_x, focus_y); + ImGui::Text("Max: (%.2f, %.2f)", focus_x + focus_sz, focus_y + focus_sz); + ImVec2 uv0 = ImVec2((focus_x) / tex_w, (focus_y) / tex_h); + ImVec2 uv1 = ImVec2((focus_x + focus_sz) / tex_w, (focus_y + focus_sz) / tex_h); + ImGui::Image(tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui::EndTooltip(); + } + ImGui::TextWrapped("And now some textured buttons.."); + static int pressed_count = 0; + for (int i = 0; i < 8; i++) + { + ImGui::PushID(i); + int frame_padding = -1 + i; // -1 = uses default padding + if (ImGui::ImageButton(tex_id, ImVec2(32,32), ImVec2(0,0), ImVec2(32.0f/tex_w,32/tex_h), frame_padding, ImColor(0,0,0,255))) + pressed_count += 1; + ImGui::PopID(); + ImGui::SameLine(); + } + ImGui::NewLine(); + ImGui::Text("Pressed %d times.", pressed_count); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Selectables")) + { + if (ImGui::TreeNode("Basic")) + { + static bool selected[4] = { false, true, false, false }; + ImGui::Selectable("1. I am selectable", &selected[0]); + ImGui::Selectable("2. I am selectable", &selected[1]); + ImGui::Text("3. I am not selectable"); + ImGui::Selectable("4. I am selectable", &selected[2]); + if (ImGui::Selectable("5. I am double clickable", selected[3], ImGuiSelectableFlags_AllowDoubleClick)) + if (ImGui::IsMouseDoubleClicked(0)) + selected[3] = !selected[3]; + ImGui::TreePop(); + } + if (ImGui::TreeNode("Rendering more text into the same block")) + { + static bool selected[3] = { false, false, false }; + ImGui::Selectable("main.c", &selected[0]); ImGui::SameLine(300); ImGui::Text(" 2,345 bytes"); + ImGui::Selectable("Hello.cpp", &selected[1]); ImGui::SameLine(300); ImGui::Text("12,345 bytes"); + ImGui::Selectable("Hello.h", &selected[2]); ImGui::SameLine(300); ImGui::Text(" 2,345 bytes"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("In columns")) + { + ImGui::Columns(3, NULL, false); + static bool selected[16] = { 0 }; + for (int i = 0; i < 16; i++) + { + char label[32]; sprintf(label, "Item %d", i); + if (ImGui::Selectable(label, &selected[i])) {} + ImGui::NextColumn(); + } + ImGui::Columns(1); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Grid")) + { + static bool selected[16] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true }; + for (int i = 0; i < 16; i++) + { + ImGui::PushID(i); + if (ImGui::Selectable("Sailor", &selected[i], 0, ImVec2(50,50))) + { + int x = i % 4, y = i / 4; + if (x > 0) selected[i - 1] ^= 1; + if (x < 3) selected[i + 1] ^= 1; + if (y > 0) selected[i - 4] ^= 1; + if (y < 3) selected[i + 4] ^= 1; + } + if ((i % 4) < 3) ImGui::SameLine(); + ImGui::PopID(); + } + ImGui::TreePop(); + } + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Filtered Text Input")) + { + static char buf1[64] = ""; ImGui::InputText("default", buf1, 64); + static char buf2[64] = ""; ImGui::InputText("decimal", buf2, 64, ImGuiInputTextFlags_CharsDecimal); + static char buf3[64] = ""; ImGui::InputText("hexadecimal", buf3, 64, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase); + static char buf4[64] = ""; ImGui::InputText("uppercase", buf4, 64, ImGuiInputTextFlags_CharsUppercase); + static char buf5[64] = ""; ImGui::InputText("no blank", buf5, 64, ImGuiInputTextFlags_CharsNoBlank); + struct TextFilters { static int FilterImGuiLetters(ImGuiTextEditCallbackData* data) { if (data->EventChar < 256 && strchr("imgui", (char)data->EventChar)) return 0; return 1; } }; + static char buf6[64] = ""; ImGui::InputText("\"imgui\" letters", buf6, 64, ImGuiInputTextFlags_CallbackCharFilter, TextFilters::FilterImGuiLetters); + + ImGui::Text("Password input"); + static char bufpass[64] = "password123"; + ImGui::InputText("password", bufpass, 64, ImGuiInputTextFlags_Password | ImGuiInputTextFlags_CharsNoBlank); + ImGui::SameLine(); ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui::InputText("password (clear)", bufpass, 64, ImGuiInputTextFlags_CharsNoBlank); + + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Multi-line Text Input")) + { + static bool read_only = false; + static char text[1024*16] = + "/*\n" + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + " the hexadecimal encoding of one offending instruction,\n" + " more formally, the invalid operand with locked CMPXCHG8B\n" + " instruction bug, is a design flaw in the majority of\n" + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + " processors (all in the P5 microarchitecture).\n" + "*/\n\n" + "label:\n" + "\tlock cmpxchg8b eax\n"; + + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0,0)); + ImGui::Checkbox("Read-only", &read_only); + ImGui::PopStyleVar(); + ImGui::InputTextMultiline("##source", text, IM_ARRAYSIZE(text), ImVec2(-1.0f, ImGui::GetTextLineHeight() * 16), ImGuiInputTextFlags_AllowTabInput | (read_only ? ImGuiInputTextFlags_ReadOnly : 0)); + ImGui::TreePop(); + } + + static bool a=false; + if (ImGui::Button("Button")) { printf("Clicked\n"); a ^= 1; } + if (a) + { + ImGui::SameLine(); + ImGui::Text("Thanks for clicking me!"); + } + + static bool check = true; + ImGui::Checkbox("checkbox", &check); + + static int e = 0; + ImGui::RadioButton("radio a", &e, 0); ImGui::SameLine(); + ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine(); + ImGui::RadioButton("radio c", &e, 2); + + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (int i = 0; i < 7; i++) + { + if (i > 0) ImGui::SameLine(); + ImGui::PushID(i); + ImGui::PushStyleColor(ImGuiCol_Button, ImColor::HSV(i/7.0f, 0.6f, 0.6f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImColor::HSV(i/7.0f, 0.7f, 0.7f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImColor::HSV(i/7.0f, 0.8f, 0.8f)); + ImGui::Button("Click"); + ImGui::PopStyleColor(3); + ImGui::PopID(); + } + + ImGui::Text("Hover over me"); + if (ImGui::IsItemHovered()) + ImGui::SetTooltip("I am a tooltip"); + + ImGui::SameLine(); + ImGui::Text("- or me"); + if (ImGui::IsItemHovered()) + { + ImGui::BeginTooltip(); + ImGui::Text("I am a fancy tooltip"); + static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f }; + ImGui::PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui::EndTooltip(); + } + + // Testing IMGUI_ONCE_UPON_A_FRAME macro + //for (int i = 0; i < 5; i++) + //{ + // IMGUI_ONCE_UPON_A_FRAME + // { + // ImGui::Text("This will be displayed only once."); + // } + //} + + ImGui::Separator(); + + ImGui::LabelText("label", "Value"); + + static int item = 1; + ImGui::Combo("combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); // Combo using values packed in a single constant string (for really quick combo) + + const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK" }; + static int item2 = -1; + ImGui::Combo("combo scroll", &item2, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + + { + static char str0[128] = "Hello, world!"; + static int i0=123; + static float f0=0.001f; + ImGui::InputText("input text", str0, IM_ARRAYSIZE(str0)); + ImGui::SameLine(); ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" "CTRL+Left/Right to word jump.\n" "CTRL+A or double-click to select all.\n" "CTRL+X,CTRL+C,CTRL+V clipboard.\n" "CTRL+Z,CTRL+Y undo/redo.\n" "ESCAPE to revert.\n"); + + ImGui::InputInt("input int", &i0); + ImGui::SameLine(); ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + + ImGui::InputFloat("input float", &f0, 0.01f, 1.0f); + + static float vec4a[4] = { 0.10f, 0.20f, 0.30f, 0.44f }; + ImGui::InputFloat3("input float3", vec4a); + } + + { + static int i1=50, i2=42; + ImGui::DragInt("drag int", &i1, 1); + ImGui::SameLine(); ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + + ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%.0f%%"); + + static float f1=1.00f, f2=0.0067f; + ImGui::DragFloat("drag float", &f1, 0.005f); + ImGui::DragFloat("drag small float", &f2, 0.0001f, 0.0f, 0.0f, "%.06f ns"); + } + + { + static int i1=0; + ImGui::SliderInt("slider int", &i1, -1, 3); + ImGui::SameLine(); ShowHelpMarker("CTRL+click to input value."); + + static float f1=0.123f, f2=0.0f; + ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f"); + ImGui::SliderFloat("slider log float", &f2, -10.0f, 10.0f, "%.4f", 3.0f); + static float angle = 0.0f; + ImGui::SliderAngle("slider angle", &angle); + } + + static float col1[3] = { 1.0f,0.0f,0.2f }; + static float col2[4] = { 0.4f,0.7f,0.0f,0.5f }; + ImGui::ColorEdit3("color 1", col1); + ImGui::SameLine(); ShowHelpMarker("Click on the colored square to change edit mode.\nCTRL+click on individual component to input value.\n"); + + ImGui::ColorEdit4("color 2", col2); + + const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" }; + static int listbox_item_current = 1; + ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + + //static int listbox_item_current2 = 2; + //ImGui::PushItemWidth(-1); + //ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + //ImGui::PopItemWidth(); + + if (ImGui::TreeNode("Range Widgets")) + { + ImGui::Unindent(); + + static float begin = 10, end = 90; + static int begin_i = 100, end_i = 1000; + ImGui::DragFloatRange2("range", &begin, &end, 0.25f, 0.0f, 100.0f, "Min: %.1f %%", "Max: %.1f %%"); + ImGui::DragIntRange2("range int (no bounds)", &begin_i, &end_i, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + + ImGui::Indent(); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Multi-component Widgets")) + { + ImGui::Unindent(); + + static float vec4f[4] = { 0.10f, 0.20f, 0.30f, 0.44f }; + static int vec4i[4] = { 1, 5, 100, 255 }; + + ImGui::InputFloat2("input float2", vec4f); + ImGui::DragFloat2("drag float2", vec4f, 0.01f, 0.0f, 1.0f); + ImGui::SliderFloat2("slider float2", vec4f, 0.0f, 1.0f); + ImGui::DragInt2("drag int2", vec4i, 1, 0, 255); + ImGui::InputInt2("input int2", vec4i); + ImGui::SliderInt2("slider int2", vec4i, 0, 255); + ImGui::Spacing(); + + ImGui::InputFloat3("input float3", vec4f); + ImGui::DragFloat3("drag float3", vec4f, 0.01f, 0.0f, 1.0f); + ImGui::SliderFloat3("slider float3", vec4f, 0.0f, 1.0f); + ImGui::DragInt3("drag int3", vec4i, 1, 0, 255); + ImGui::InputInt3("input int3", vec4i); + ImGui::SliderInt3("slider int3", vec4i, 0, 255); + ImGui::Spacing(); + + ImGui::InputFloat4("input float4", vec4f); + ImGui::DragFloat4("drag float4", vec4f, 0.01f, 0.0f, 1.0f); + ImGui::SliderFloat4("slider float4", vec4f, 0.0f, 1.0f); + ImGui::InputInt4("input int4", vec4i); + ImGui::DragInt4("drag int4", vec4i, 1, 0, 255); + ImGui::SliderInt4("slider int4", vec4i, 0, 255); + + ImGui::Indent(); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Vertical Sliders")) + { + ImGui::Unindent(); + const float spacing = 4; + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(spacing, spacing)); + + static int int_value = 0; + ImGui::VSliderInt("##int", ImVec2(18,160), &int_value, 0, 5); + ImGui::SameLine(); + + static float values[7] = { 0.0f, 0.60f, 0.35f, 0.9f, 0.70f, 0.20f, 0.0f }; + ImGui::PushID("set1"); + for (int i = 0; i < 7; i++) + { + if (i > 0) ImGui::SameLine(); + ImGui::PushID(i); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImColor::HSV(i/7.0f, 0.5f, 0.5f)); + ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImColor::HSV(i/7.0f, 0.6f, 0.5f)); + ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImColor::HSV(i/7.0f, 0.7f, 0.5f)); + ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImColor::HSV(i/7.0f, 0.9f, 0.9f)); + ImGui::VSliderFloat("##v", ImVec2(18,160), &values[i], 0.0f, 1.0f, ""); + if (ImGui::IsItemActive() || ImGui::IsItemHovered()) + ImGui::SetTooltip("%.3f", values[i]); + ImGui::PopStyleColor(4); + ImGui::PopID(); + } + ImGui::PopID(); + + ImGui::SameLine(); + ImGui::PushID("set2"); + static float values2[4] = { 0.20f, 0.80f, 0.40f, 0.25f }; + const int rows = 3; + const ImVec2 small_slider_size(18, (160.0f-(rows-1)*spacing)/rows); + for (int nx = 0; nx < 4; nx++) + { + if (nx > 0) ImGui::SameLine(); + ImGui::BeginGroup(); + for (int ny = 0; ny < rows; ny++) + { + ImGui::PushID(nx*rows+ny); + ImGui::VSliderFloat("##v", small_slider_size, &values2[nx], 0.0f, 1.0f, ""); + if (ImGui::IsItemActive() || ImGui::IsItemHovered()) + ImGui::SetTooltip("%.3f", values2[nx]); + ImGui::PopID(); + } + ImGui::EndGroup(); + } + ImGui::PopID(); + + ImGui::SameLine(); + ImGui::PushID("set3"); + for (int i = 0; i < 4; i++) + { + if (i > 0) ImGui::SameLine(); + ImGui::PushID(i); + ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40); + ImGui::VSliderFloat("##v", ImVec2(40,160), &values[i], 0.0f, 1.0f, "%.2f\nsec"); + ImGui::PopStyleVar(); + ImGui::PopID(); + } + ImGui::PopID(); + ImGui::PopStyleVar(); + + ImGui::Indent(); + ImGui::TreePop(); + } + } + + if (ImGui::CollapsingHeader("Graphs widgets")) + { + static bool animate = true; + ImGui::Checkbox("Animate", &animate); + + static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f }; + ImGui::PlotLines("Frame Times", arr, IM_ARRAYSIZE(arr)); + + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + static float values[90] = { 0 }; + static int values_offset = 0; + if (animate) + { + static float refresh_time = ImGui::GetTime(); // Create dummy data at fixed 60 hz rate for the demo + for (; ImGui::GetTime() > refresh_time + 1.0f/60.0f; refresh_time += 1.0f/60.0f) + { + static float phase = 0.0f; + values[values_offset] = cosf(phase); + values_offset = (values_offset+1) % IM_ARRAYSIZE(values); + phase += 0.10f*values_offset; + } + } + ImGui::PlotLines("Lines", values, IM_ARRAYSIZE(values), values_offset, "avg 0.0", -1.0f, 1.0f, ImVec2(0,80)); + ImGui::PlotHistogram("Histogram", arr, IM_ARRAYSIZE(arr), 0, NULL, 0.0f, 1.0f, ImVec2(0,80)); + + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + struct Funcs + { + static float Sin(void*, int i) { return sinf(i * 0.1f); } + static float Saw(void*, int i) { return (i & 1) ? 1.0f : 0.0f; } + }; + static int func_type = 0, display_count = 70; + ImGui::Separator(); + ImGui::PushItemWidth(100); ImGui::Combo("func", &func_type, "Sin\0Saw\0"); ImGui::PopItemWidth(); + ImGui::SameLine(); + ImGui::SliderInt("Sample count", &display_count, 1, 400); + float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw; + ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80)); + ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80)); + ImGui::Separator(); + + // Animate a simple progress bar + static float progress = 0.0f, progress_dir = 1.0f; + if (animate) + { + progress += progress_dir * 0.4f * ImGui::GetIO().DeltaTime; + if (progress >= +1.1f) { progress = +1.1f; progress_dir *= -1.0f; } + if (progress <= -0.1f) { progress = -0.1f; progress_dir *= -1.0f; } + } + + // Typically we would use ImVec2(-1.0f,0.0f) to use all available width, or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth. + ImGui::ProgressBar(progress, ImVec2(0.0f,0.0f)); + ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x); + ImGui::Text("Progress Bar"); + + float progress_saturated = (progress < 0.0f) ? 0.0f : (progress > 1.0f) ? 1.0f : progress; + char buf[32]; + sprintf(buf, "%d/%d", (int)(progress_saturated*1753), 1753); + ImGui::ProgressBar(progress, ImVec2(0.f,0.f), buf); + } + + if (ImGui::CollapsingHeader("Layout")) + { + if (ImGui::TreeNode("Child regions")) + { + ImGui::Text("Without border"); + static int line = 50; + bool goto_line = ImGui::Button("Goto"); + ImGui::SameLine(); + ImGui::PushItemWidth(100); + goto_line |= ImGui::InputInt("##Line", &line, 0, 0, ImGuiInputTextFlags_EnterReturnsTrue); + ImGui::PopItemWidth(); + ImGui::BeginChild("Sub1", ImVec2(ImGui::GetWindowContentRegionWidth() * 0.5f,300), false, ImGuiWindowFlags_HorizontalScrollbar); + for (int i = 0; i < 100; i++) + { + ImGui::Text("%04d: scrollable region", i); + if (goto_line && line == i) + ImGui::SetScrollHere(); + } + if (goto_line && line >= 100) + ImGui::SetScrollHere(); + ImGui::EndChild(); + + ImGui::SameLine(); + + ImGui::PushStyleVar(ImGuiStyleVar_ChildWindowRounding, 5.0f); + ImGui::BeginChild("Sub2", ImVec2(0,300), true); + ImGui::Text("With border"); + ImGui::Columns(2); + for (int i = 0; i < 100; i++) + { + if (i == 50) + ImGui::NextColumn(); + char buf[32]; + sprintf(buf, "%08x", i*5731); + ImGui::Button(buf, ImVec2(-1.0f, 0.0f)); + } + ImGui::EndChild(); + ImGui::PopStyleVar(); + + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Widgets Width")) + { + static float f = 0.0f; + ImGui::Text("PushItemWidth(100)"); + ImGui::SameLine(); ShowHelpMarker("Fixed width."); + ImGui::PushItemWidth(100); + ImGui::DragFloat("float##1", &f); + ImGui::PopItemWidth(); + + ImGui::Text("PushItemWidth(GetWindowWidth() * 0.5f)"); + ImGui::SameLine(); ShowHelpMarker("Half of window width."); + ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.5f); + ImGui::DragFloat("float##2", &f); + ImGui::PopItemWidth(); + + ImGui::Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5f)"); + ImGui::SameLine(); ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui::PushItemWidth(ImGui::GetContentRegionAvailWidth() * 0.5f); + ImGui::DragFloat("float##3", &f); + ImGui::PopItemWidth(); + + ImGui::Text("PushItemWidth(-100)"); + ImGui::SameLine(); ShowHelpMarker("Align to right edge minus 100"); + ImGui::PushItemWidth(-100); + ImGui::DragFloat("float##4", &f); + ImGui::PopItemWidth(); + + ImGui::Text("PushItemWidth(-1)"); + ImGui::SameLine(); ShowHelpMarker("Align to right edge"); + ImGui::PushItemWidth(-1); + ImGui::DragFloat("float##5", &f); + ImGui::PopItemWidth(); + + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Basic Horizontal Layout")) + { + ImGui::TextWrapped("(Use ImGui::SameLine() to keep adding items to the right of the preceding item)"); + + // Text + ImGui::Text("Two items: Hello"); ImGui::SameLine(); + ImGui::TextColored(ImVec4(1,1,0,1), "Sailor"); + + // Adjust spacing + ImGui::Text("More spacing: Hello"); ImGui::SameLine(0, 20); + ImGui::TextColored(ImVec4(1,1,0,1), "Sailor"); + + // Button + ImGui::AlignFirstTextHeightToWidgets(); + ImGui::Text("Normal buttons"); ImGui::SameLine(); + ImGui::Button("Banana"); ImGui::SameLine(); + ImGui::Button("Apple"); ImGui::SameLine(); + ImGui::Button("Corniflower"); + + // Button + ImGui::Text("Small buttons"); ImGui::SameLine(); + ImGui::SmallButton("Like this one"); ImGui::SameLine(); + ImGui::Text("can fit within a text block."); + + // Aligned to arbitrary position. Easy/cheap column. + ImGui::Text("Aligned"); + ImGui::SameLine(150); ImGui::Text("x=150"); + ImGui::SameLine(300); ImGui::Text("x=300"); + ImGui::Text("Aligned"); + ImGui::SameLine(150); ImGui::SmallButton("x=150"); + ImGui::SameLine(300); ImGui::SmallButton("x=300"); + + // Checkbox + static bool c1=false,c2=false,c3=false,c4=false; + ImGui::Checkbox("My", &c1); ImGui::SameLine(); + ImGui::Checkbox("Tailor", &c2); ImGui::SameLine(); + ImGui::Checkbox("Is", &c3); ImGui::SameLine(); + ImGui::Checkbox("Rich", &c4); + + // Various + static float f0=1.0f, f1=2.0f, f2=3.0f; + ImGui::PushItemWidth(80); + const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD" }; + static int item = -1; + ImGui::Combo("Combo", &item, items, IM_ARRAYSIZE(items)); ImGui::SameLine(); + ImGui::SliderFloat("X", &f0, 0.0f,5.0f); ImGui::SameLine(); + ImGui::SliderFloat("Y", &f1, 0.0f,5.0f); ImGui::SameLine(); + ImGui::SliderFloat("Z", &f2, 0.0f,5.0f); + ImGui::PopItemWidth(); + + ImGui::PushItemWidth(80); + ImGui::Text("Lists:"); + static int selection[4] = { 0, 1, 2, 3 }; + for (int i = 0; i < 4; i++) + { + if (i > 0) ImGui::SameLine(); + ImGui::PushID(i); + ImGui::ListBox("", &selection[i], items, IM_ARRAYSIZE(items)); + ImGui::PopID(); + //if (ImGui::IsItemHovered()) ImGui::SetTooltip("ListBox %d hovered", i); + } + ImGui::PopItemWidth(); + + // Dummy + ImVec2 sz(30,30); + ImGui::Button("A", sz); ImGui::SameLine(); + ImGui::Dummy(sz); ImGui::SameLine(); + ImGui::Button("B", sz); + + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Groups")) + { + ImGui::TextWrapped("(Using ImGui::BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui::BeginGroup(); + { + ImGui::BeginGroup(); + ImGui::Button("AAA"); + ImGui::SameLine(); + ImGui::Button("BBB"); + ImGui::SameLine(); + ImGui::BeginGroup(); + ImGui::Button("CCC"); + ImGui::Button("DDD"); + ImGui::EndGroup(); + if (ImGui::IsItemHovered()) + ImGui::SetTooltip("Group hovered"); + ImGui::SameLine(); + ImGui::Button("EEE"); + ImGui::EndGroup(); + } + // Capture the group size and create widgets using the same size + ImVec2 size = ImGui::GetItemRectSize(); + const float values[5] = { 0.5f, 0.20f, 0.80f, 0.60f, 0.25f }; + ImGui::PlotHistogram("##values", values, IM_ARRAYSIZE(values), 0, NULL, 0.0f, 1.0f, size); + + ImGui::Button("ACTION", ImVec2((size.x - ImGui::GetStyle().ItemSpacing.x)*0.5f,size.y)); + ImGui::SameLine(); + ImGui::Button("REACTION", ImVec2((size.x - ImGui::GetStyle().ItemSpacing.x)*0.5f,size.y)); + ImGui::EndGroup(); + ImGui::SameLine(); + + ImGui::Button("LEVERAGE\nBUZZWORD", size); + ImGui::SameLine(); + + ImGui::ListBoxHeader("List", size); + ImGui::Selectable("Selected", true); + ImGui::Selectable("Not Selected", false); + ImGui::ListBoxFooter(); + + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Text Baseline Alignment")) + { + ImGui::TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + + ImGui::Text("One\nTwo\nThree"); ImGui::SameLine(); + ImGui::Text("Hello\nWorld"); ImGui::SameLine(); + ImGui::Text("Banana"); + + ImGui::Text("Banana"); ImGui::SameLine(); + ImGui::Text("Hello\nWorld"); ImGui::SameLine(); + ImGui::Text("One\nTwo\nThree"); + + ImGui::Button("HOP##1"); ImGui::SameLine(); + ImGui::Text("Banana"); ImGui::SameLine(); + ImGui::Text("Hello\nWorld"); ImGui::SameLine(); + ImGui::Text("Banana"); + + ImGui::Button("HOP##2"); ImGui::SameLine(); + ImGui::Text("Hello\nWorld"); ImGui::SameLine(); + ImGui::Text("Banana"); + + ImGui::Button("TEST##1"); ImGui::SameLine(); + ImGui::Text("TEST"); ImGui::SameLine(); + ImGui::SmallButton("TEST##2"); + + ImGui::AlignFirstTextHeightToWidgets(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui::Text("Text aligned to Widget"); ImGui::SameLine(); + ImGui::Button("Widget##1"); ImGui::SameLine(); + ImGui::Text("Widget"); ImGui::SameLine(); + ImGui::SmallButton("Widget##2"); + + // Tree + const float spacing = ImGui::GetStyle().ItemInnerSpacing.x; + ImGui::Button("Button##1"); + ImGui::SameLine(0.0f, spacing); + if (ImGui::TreeNode("Node##1")) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); } // Dummy tree data + + ImGui::AlignFirstTextHeightToWidgets(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + bool node_open = ImGui::TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##2"); + if (node_open) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); } // Dummy tree data + + // Bullet + ImGui::Button("Button##3"); + ImGui::SameLine(0.0f, spacing); + ImGui::BulletText("Bullet text"); + + ImGui::AlignFirstTextHeightToWidgets(); + ImGui::BulletText("Node"); + ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##4"); + + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Scrolling")) + { + ImGui::TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + static bool track = true; + static int track_line = 50, scroll_to_px = 200; + ImGui::Checkbox("Track", &track); + ImGui::PushItemWidth(100); + ImGui::SameLine(130); track |= ImGui::DragInt("##line", &track_line, 0.25f, 0, 99, "Line %.0f"); + bool scroll_to = ImGui::Button("Scroll To"); + ImGui::SameLine(130); scroll_to |= ImGui::DragInt("##pos_y", &scroll_to_px, 1.00f, 0, 9999, "y = %.0f px"); + ImGui::PopItemWidth(); + if (scroll_to) track = false; + + for (int i = 0; i < 5; i++) + { + if (i > 0) ImGui::SameLine(); + ImGui::BeginGroup(); + ImGui::Text("%s", i == 0 ? "Top" : i == 1 ? "25%" : i == 2 ? "Center" : i == 3 ? "75%" : "Bottom"); + ImGui::BeginChild(ImGui::GetID((void*)(intptr_t)i), ImVec2(ImGui::GetWindowWidth() * 0.17f, 200.0f), true); + if (scroll_to) + ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + scroll_to_px, i * 0.25f); + for (int line = 0; line < 100; line++) + { + if (track && line == track_line) + { + ImGui::TextColored(ImColor(255,255,0), "Line %d", line); + ImGui::SetScrollHere(i * 0.25f); // 0.0f:top, 0.5f:center, 1.0f:bottom + } + else + { + ImGui::Text("Line %d", line); + } + } + ImGui::EndChild(); + ImGui::EndGroup(); + } + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Horizontal Scrolling")) + { + ImGui::Bullet(); ImGui::TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags_HorizontalScrollbar flag."); + ImGui::Bullet(); ImGui::TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + static int lines = 7; + ImGui::SliderInt("Lines", &lines, 1, 15); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2.0f, 1.0f)); + ImGui::BeginChild("scrolling", ImVec2(0, ImGui::GetItemsLineHeightWithSpacing()*7 + 30), true, ImGuiWindowFlags_HorizontalScrollbar); + for (int line = 0; line < lines; line++) + { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + int num_buttons = 10 + ((line & 1) ? line * 9 : line * 3); + for (int n = 0; n < num_buttons; n++) + { + if (n > 0) ImGui::SameLine(); + ImGui::PushID(n + line * 1000); + char num_buf[16]; + const char* label = (!(n%15)) ? "FizzBuzz" : (!(n%3)) ? "Fizz" : (!(n%5)) ? "Buzz" : (sprintf(num_buf, "%d", n), num_buf); + float hue = n*0.05f; + ImGui::PushStyleColor(ImGuiCol_Button, ImColor::HSV(hue, 0.6f, 0.6f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImColor::HSV(hue, 0.7f, 0.7f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImColor::HSV(hue, 0.8f, 0.8f)); + ImGui::Button(label, ImVec2(40.0f + sinf((float)(line + n)) * 20.0f, 0.0f)); + ImGui::PopStyleColor(3); + ImGui::PopID(); + } + } + ImGui::EndChild(); + ImGui::PopStyleVar(2); + float scroll_x_delta = 0.0f; + ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f; + ImGui::SameLine(); ImGui::Text("Scroll from code"); ImGui::SameLine(); + ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f; + if (scroll_x_delta != 0.0f) + { + ImGui::BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui::SetScrollX(ImGui::GetScrollX() + scroll_x_delta); + ImGui::End(); + } + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Clipping")) + { + static ImVec2 size(100, 100), offset(50, 20); + ImGui::TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui::DragFloat2("size", (float*)&size, 0.5f, 0.0f, 200.0f, "%.0f"); + ImGui::TextWrapped("(Click and drag)"); + ImVec2 pos = ImGui::GetCursorScreenPos(); + ImVec4 clip_rect(pos.x, pos.y, pos.x+size.x, pos.y+size.y); + ImGui::InvisibleButton("##dummy", size); + if (ImGui::IsItemActive() && ImGui::IsMouseDragging()) { offset.x += ImGui::GetIO().MouseDelta.x; offset.y += ImGui::GetIO().MouseDelta.y; } + ImGui::GetWindowDrawList()->AddRectFilled(pos, ImVec2(pos.x+size.x,pos.y+size.y), ImColor(90,90,120,255)); + ImGui::GetWindowDrawList()->AddText(ImGui::GetFont(), ImGui::GetFontSize()*2.0f, ImVec2(pos.x+offset.x,pos.y+offset.y), ImColor(255,255,255,255), "Line 1 hello\nLine 2 clip me!", NULL, 0.0f, &clip_rect); + ImGui::TreePop(); + } + } + + if (ImGui::CollapsingHeader("Popups & Modal windows")) + { + if (ImGui::TreeNode("Popups")) + { + ImGui::TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + + static int selected_fish = -1; + const char* names[] = { "Bream", "Haddock", "Mackerel", "Pollock", "Tilefish" }; + static bool toggles[] = { true, false, false, false, false }; + + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui::Button("Select..")) + ImGui::OpenPopup("select"); + ImGui::SameLine(); + ImGui::Text(selected_fish == -1 ? "" : names[selected_fish]); + if (ImGui::BeginPopup("select")) + { + ImGui::Text("Aquarium"); + ImGui::Separator(); + for (int i = 0; i < IM_ARRAYSIZE(names); i++) + if (ImGui::Selectable(names[i])) + selected_fish = i; + ImGui::EndPopup(); + } + + // Showing a menu with toggles + if (ImGui::Button("Toggle..")) + ImGui::OpenPopup("toggle"); + if (ImGui::BeginPopup("toggle")) + { + for (int i = 0; i < IM_ARRAYSIZE(names); i++) + ImGui::MenuItem(names[i], "", &toggles[i]); + if (ImGui::BeginMenu("Sub-menu")) + { + ImGui::MenuItem("Click me"); + ImGui::EndMenu(); + } + + ImGui::Separator(); + ImGui::Text("Tooltip here"); + if (ImGui::IsItemHovered()) + ImGui::SetTooltip("I am a tooltip over a popup"); + + if (ImGui::Button("Stacked Popup")) + ImGui::OpenPopup("another popup"); + if (ImGui::BeginPopup("another popup")) + { + for (int i = 0; i < IM_ARRAYSIZE(names); i++) + ImGui::MenuItem(names[i], "", &toggles[i]); + if (ImGui::BeginMenu("Sub-menu")) + { + ImGui::MenuItem("Click me"); + ImGui::EndMenu(); + } + ImGui::EndPopup(); + } + ImGui::EndPopup(); + } + + if (ImGui::Button("Popup Menu..")) + ImGui::OpenPopup("FilePopup"); + if (ImGui::BeginPopup("FilePopup")) + { + ShowExampleMenuFile(); + ImGui::EndPopup(); + } + + ImGui::Spacing(); + ImGui::TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui::Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui::PushID("foo"); + ImGui::MenuItem("Menu item", "CTRL+M"); + if (ImGui::BeginMenu("Menu inside a regular window")) + { + ShowExampleMenuFile(); + ImGui::EndMenu(); + } + ImGui::PopID(); + ImGui::Separator(); + + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Context menus")) + { + static float value = 0.5f; + ImGui::Text("Value = %.3f (<-- right-click here)", value); + if (ImGui::BeginPopupContextItem("item context menu")) + { + if (ImGui::Selectable("Set to zero")) value = 0.0f; + if (ImGui::Selectable("Set to PI")) value = 3.1415f; + ImGui::EndPopup(); + } + + static ImVec4 color = ImColor(0.8f, 0.5f, 1.0f, 1.0f); + ImGui::ColorButton(color); + if (ImGui::BeginPopupContextItem("color context menu")) + { + ImGui::Text("Edit color"); + ImGui::ColorEdit3("##edit", (float*)&color); + if (ImGui::Button("Close")) + ImGui::CloseCurrentPopup(); + ImGui::EndPopup(); + } + ImGui::SameLine(); ImGui::Text("(<-- right-click here)"); + + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Modals")) + { + ImGui::TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + + if (ImGui::Button("Delete..")) + ImGui::OpenPopup("Delete?"); + if (ImGui::BeginPopupModal("Delete?", NULL, ImGuiWindowFlags_AlwaysAutoResize)) + { + ImGui::Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui::Separator(); + + //static int dummy_i = 0; + //ImGui::Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + + static bool dont_ask_me_next_time = false; + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0,0)); + ImGui::Checkbox("Don't ask me next time", &dont_ask_me_next_time); + ImGui::PopStyleVar(); + + if (ImGui::Button("OK", ImVec2(120,0))) { ImGui::CloseCurrentPopup(); } + ImGui::SameLine(); + if (ImGui::Button("Cancel", ImVec2(120,0))) { ImGui::CloseCurrentPopup(); } + ImGui::EndPopup(); + } + + if (ImGui::Button("Stacked modals..")) + ImGui::OpenPopup("Stacked 1"); + if (ImGui::BeginPopupModal("Stacked 1")) + { + ImGui::Text("Hello from Stacked The First"); + + if (ImGui::Button("Another one..")) + ImGui::OpenPopup("Stacked 2"); + if (ImGui::BeginPopupModal("Stacked 2")) + { + ImGui::Text("Hello from Stacked The Second"); + if (ImGui::Button("Close")) + ImGui::CloseCurrentPopup(); + ImGui::EndPopup(); + } + + if (ImGui::Button("Close")) + ImGui::CloseCurrentPopup(); + ImGui::EndPopup(); + } + + ImGui::TreePop(); + } + } + + if (ImGui::CollapsingHeader("Columns")) + { + // Basic columns + if (ImGui::TreeNode("Basic")) + { + ImGui::Text("Without border:"); + ImGui::Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui::Separator(); + for (int n = 0; n < 14; n++) + { + char label[32]; + sprintf(label, "Item %d", n); + if (ImGui::Selectable(label)) {} + //if (ImGui::Button(label, ImVec2(-1,0))) {} + ImGui::NextColumn(); + } + ImGui::Columns(1); + ImGui::Separator(); + + ImGui::Text("With border:"); + ImGui::Columns(4, "mycolumns"); // 4-ways, with border + ImGui::Separator(); + ImGui::Text("ID"); ImGui::NextColumn(); + ImGui::Text("Name"); ImGui::NextColumn(); + ImGui::Text("Path"); ImGui::NextColumn(); + ImGui::Text("Flags"); ImGui::NextColumn(); + ImGui::Separator(); + const char* names[3] = { "One", "Two", "Three" }; + const char* paths[3] = { "/path/one", "/path/two", "/path/three" }; + static int selected = -1; + for (int i = 0; i < 3; i++) + { + char label[32]; + sprintf(label, "%04d", i); + if (ImGui::Selectable(label, selected == i, ImGuiSelectableFlags_SpanAllColumns)) + selected = i; + ImGui::NextColumn(); + ImGui::Text(names[i]); ImGui::NextColumn(); + ImGui::Text(paths[i]); ImGui::NextColumn(); + ImGui::Text("...."); ImGui::NextColumn(); + } + ImGui::Columns(1); + ImGui::Separator(); + ImGui::TreePop(); + } + + // Scrolling columns + /* + if (ImGui::TreeNode("Scrolling")) + { + ImGui::BeginChild("##header", ImVec2(0, ImGui::GetTextLineHeightWithSpacing()+ImGui::GetStyle().ItemSpacing.y)); + ImGui::Columns(3); + ImGui::Text("ID"); ImGui::NextColumn(); + ImGui::Text("Name"); ImGui::NextColumn(); + ImGui::Text("Path"); ImGui::NextColumn(); + ImGui::Columns(1); + ImGui::Separator(); + ImGui::EndChild(); + ImGui::BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui::Columns(3); + for (int i = 0; i < 10; i++) + { + ImGui::Text("%04d", i); ImGui::NextColumn(); + ImGui::Text("Foobar"); ImGui::NextColumn(); + ImGui::Text("/path/foobar/%04d/", i); ImGui::NextColumn(); + } + ImGui::Columns(1); + ImGui::EndChild(); + ImGui::TreePop(); + } + */ + + // Create multiple items in a same cell before switching to next column + if (ImGui::TreeNode("Mixed items")) + { + ImGui::Columns(3, "mixed"); + ImGui::Separator(); + + ImGui::Text("Hello"); + ImGui::Button("Banana"); + ImGui::NextColumn(); + + ImGui::Text("ImGui"); + ImGui::Button("Apple"); + static float foo = 1.0f; + ImGui::InputFloat("red", &foo, 0.05f, 0, 3); + ImGui::Text("An extra line here."); + ImGui::NextColumn(); + + ImGui::Text("Sailor"); + ImGui::Button("Corniflower"); + static float bar = 1.0f; + ImGui::InputFloat("blue", &bar, 0.05f, 0, 3); + ImGui::NextColumn(); + + if (ImGui::CollapsingHeader("Category A")) ImGui::Text("Blah blah blah"); ImGui::NextColumn(); + if (ImGui::CollapsingHeader("Category B")) ImGui::Text("Blah blah blah"); ImGui::NextColumn(); + if (ImGui::CollapsingHeader("Category C")) ImGui::Text("Blah blah blah"); ImGui::NextColumn(); + ImGui::Columns(1); + ImGui::Separator(); + ImGui::TreePop(); + } + + // Word wrapping + if (ImGui::TreeNode("Word-wrapping")) + { + ImGui::Columns(2, "word-wrapping"); + ImGui::Separator(); + ImGui::TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui::TextWrapped("Hello Left"); + ImGui::NextColumn(); + ImGui::TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui::TextWrapped("Hello Right"); + ImGui::Columns(1); + ImGui::Separator(); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Borders")) + { + static bool h_borders = true; + static bool v_borders = true; + ImGui::Checkbox("horizontal", &h_borders); + ImGui::SameLine(); + ImGui::Checkbox("vertical", &v_borders); + ImGui::Columns(4, NULL, v_borders); + if (h_borders) ImGui::Separator(); + for (int i = 0; i < 8; i++) + { + ImGui::Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + ImGui::NextColumn(); + } + ImGui::Columns(1); + if (h_borders) ImGui::Separator(); + ImGui::TreePop(); + } + + bool node_open = ImGui::TreeNode("Tree within single cell"); + ImGui::SameLine(); ShowHelpMarker("NB: Tree node must be poped before ending the cell.\nThere's no storage of state per-cell."); + if (node_open) + { + ImGui::Columns(2, "tree items"); + ImGui::Separator(); + if (ImGui::TreeNode("Hello")) { ImGui::BulletText("Sailor"); ImGui::TreePop(); } ImGui::NextColumn(); + if (ImGui::TreeNode("Bonjour")) { ImGui::BulletText("Marin"); ImGui::TreePop(); } ImGui::NextColumn(); + ImGui::Columns(1); + ImGui::Separator(); + ImGui::TreePop(); + } + } + + if (ImGui::CollapsingHeader("Filtering")) + { + static ImGuiTextFilter filter; + ImGui::Text("Filter usage:\n" + " \"\" display all lines\n" + " \"xxx\" display lines containing \"xxx\"\n" + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + " \"-xxx\" hide lines containing \"xxx\""); + filter.Draw(); + const char* lines[] = { "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" }; + for (int i = 0; i < IM_ARRAYSIZE(lines); i++) + if (filter.PassFilter(lines[i])) + ImGui::BulletText("%s", lines[i]); + } + + if (ImGui::CollapsingHeader("Keyboard, Mouse & Focus")) + { + if (ImGui::TreeNode("Tabbing")) + { + ImGui::Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + static char buf[32] = "dummy"; + ImGui::InputText("1", buf, IM_ARRAYSIZE(buf)); + ImGui::InputText("2", buf, IM_ARRAYSIZE(buf)); + ImGui::InputText("3", buf, IM_ARRAYSIZE(buf)); + ImGui::PushAllowKeyboardFocus(false); + ImGui::InputText("4 (tab skip)", buf, IM_ARRAYSIZE(buf)); + //ImGui::SameLine(); ShowHelperMarker("Use ImGui::PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui::PopAllowKeyboardFocus(); + ImGui::InputText("5", buf, IM_ARRAYSIZE(buf)); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Focus from code")) + { + bool focus_1 = ImGui::Button("Focus on 1"); ImGui::SameLine(); + bool focus_2 = ImGui::Button("Focus on 2"); ImGui::SameLine(); + bool focus_3 = ImGui::Button("Focus on 3"); + int has_focus = 0; + static char buf[128] = "click on a button to set focus"; + + if (focus_1) ImGui::SetKeyboardFocusHere(); + ImGui::InputText("1", buf, IM_ARRAYSIZE(buf)); + if (ImGui::IsItemActive()) has_focus = 1; + + if (focus_2) ImGui::SetKeyboardFocusHere(); + ImGui::InputText("2", buf, IM_ARRAYSIZE(buf)); + if (ImGui::IsItemActive()) has_focus = 2; + + ImGui::PushAllowKeyboardFocus(false); + if (focus_3) ImGui::SetKeyboardFocusHere(); + ImGui::InputText("3 (tab skip)", buf, IM_ARRAYSIZE(buf)); + if (ImGui::IsItemActive()) has_focus = 3; + ImGui::PopAllowKeyboardFocus(); + if (has_focus) + ImGui::Text("Item with focus: %d", has_focus); + else + ImGui::Text("Item with focus: "); + ImGui::TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Dragging")) + { + ImGui::TextWrapped("You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget."); + ImGui::Button("Drag Me"); + if (ImGui::IsItemActive()) + { + // Draw a line between the button and the mouse cursor + ImDrawList* draw_list = ImGui::GetWindowDrawList(); + draw_list->PushClipRectFullScreen(); + draw_list->AddLine(ImGui::CalcItemRectClosestPoint(ImGui::GetIO().MousePos, true, -2.0f), ImGui::GetIO().MousePos, ImColor(ImGui::GetStyle().Colors[ImGuiCol_Button]), 4.0f); + draw_list->PopClipRect(); + ImVec2 value_raw = ImGui::GetMouseDragDelta(0, 0.0f); + ImVec2 value_with_lock_threshold = ImGui::GetMouseDragDelta(0); + ImVec2 mouse_delta = ImGui::GetIO().MouseDelta; + ImGui::SameLine(); ImGui::Text("Raw (%.1f, %.1f), WithLockThresold (%.1f, %.1f), MouseDelta (%.1f, %.1f)", value_raw.x, value_raw.y, value_with_lock_threshold.x, value_with_lock_threshold.y, mouse_delta.x, mouse_delta.y); + } + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Keyboard & Mouse State")) + { + ImGuiIO& io = ImGui::GetIO(); + + ImGui::Text("MousePos: (%g, %g)", io.MousePos.x, io.MousePos.y); + ImGui::Text("Mouse down:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); } + ImGui::Text("Mouse clicked:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); } + ImGui::Text("Mouse dbl-clicked:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseDoubleClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); } + ImGui::Text("Mouse released:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseReleased(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); } + ImGui::Text("MouseWheel: %.1f", io.MouseWheel); + + ImGui::Text("Keys down:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("%d (%.02f secs)", i, io.KeysDownDuration[i]); } + ImGui::Text("Keys pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyPressed(i)) { ImGui::SameLine(); ImGui::Text("%d", i); } + ImGui::Text("Keys release:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyReleased(i)) { ImGui::SameLine(); ImGui::Text("%d", i); } + ImGui::Text("KeyMods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : ""); + + ImGui::Text("WantCaptureMouse: %s", io.WantCaptureMouse ? "true" : "false"); + ImGui::Text("WantCaptureKeyboard: %s", io.WantCaptureKeyboard ? "true" : "false"); + ImGui::Text("WantTextInput: %s", io.WantTextInput ? "true" : "false"); + + ImGui::Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui::IsItemHovered()) + ImGui::CaptureKeyboardFromApp(true); + ImGui::SameLine(); + ImGui::Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui::IsItemActive()) + ImGui::CaptureKeyboardFromApp(false); + + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Mouse cursors")) + { + ImGui::TextWrapped("Your application can render a different mouse cursor based on what ImGui::GetMouseCursor() returns. You can also set io.MouseDrawCursor to ask ImGui to render the cursor for you in software."); + ImGui::Checkbox("io.MouseDrawCursor", &ImGui::GetIO().MouseDrawCursor); + ImGui::Text("Hover to see mouse cursors:"); + for (int i = 0; i < ImGuiMouseCursor_Count_; i++) + { + char label[32]; + sprintf(label, "Mouse cursor %d", i); + ImGui::Bullet(); ImGui::Selectable(label, false); + if (ImGui::IsItemHovered()) + ImGui::SetMouseCursor(i); + } + ImGui::TreePop(); + } + } + + ImGui::End(); +} + +void ImGui::ShowStyleEditor(ImGuiStyle* ref) +{ + ImGuiStyle& style = ImGui::GetStyle(); + + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to the default style) + const ImGuiStyle default_style; // Default style + if (ImGui::Button("Revert Style")) + style = ref ? *ref : default_style; + + if (ref) + { + ImGui::SameLine(); + if (ImGui::Button("Save Style")) + *ref = style; + } + + ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.55f); + + if (ImGui::TreeNode("Rendering")) + { + ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines); + ImGui::Checkbox("Anti-aliased shapes", &style.AntiAliasedShapes); + ImGui::PushItemWidth(100); + ImGui::DragFloat("Curve Tessellation Tolerance", &style.CurveTessellationTol, 0.02f, 0.10f, FLT_MAX, NULL, 2.0f); + if (style.CurveTessellationTol < 0.0f) style.CurveTessellationTol = 0.10f; + ImGui::DragFloat("Global Alpha", &style.Alpha, 0.005f, 0.20f, 1.0f, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui::PopItemWidth(); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Settings")) + { + ImGui::SliderFloat2("WindowPadding", (float*)&style.WindowPadding, 0.0f, 20.0f, "%.0f"); + ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 16.0f, "%.0f"); + ImGui::SliderFloat("ChildWindowRounding", &style.ChildWindowRounding, 0.0f, 16.0f, "%.0f"); + ImGui::SliderFloat2("FramePadding", (float*)&style.FramePadding, 0.0f, 20.0f, "%.0f"); + ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 16.0f, "%.0f"); + ImGui::SliderFloat2("ItemSpacing", (float*)&style.ItemSpacing, 0.0f, 20.0f, "%.0f"); + ImGui::SliderFloat2("ItemInnerSpacing", (float*)&style.ItemInnerSpacing, 0.0f, 20.0f, "%.0f"); + ImGui::SliderFloat2("TouchExtraPadding", (float*)&style.TouchExtraPadding, 0.0f, 10.0f, "%.0f"); + ImGui::SliderFloat("IndentSpacing", &style.IndentSpacing, 0.0f, 30.0f, "%.0f"); + ImGui::SliderFloat("ScrollbarSize", &style.ScrollbarSize, 1.0f, 20.0f, "%.0f"); + ImGui::SliderFloat("ScrollbarRounding", &style.ScrollbarRounding, 0.0f, 16.0f, "%.0f"); + ImGui::SliderFloat("GrabMinSize", &style.GrabMinSize, 1.0f, 20.0f, "%.0f"); + ImGui::SliderFloat("GrabRounding", &style.GrabRounding, 0.0f, 16.0f, "%.0f"); + ImGui::Text("Alignment"); + ImGui::SliderFloat2("WindowTitleAlign", (float*)&style.WindowTitleAlign, 0.0f, 1.0f, "%.2f"); + ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Colors")) + { + static int output_dest = 0; + static bool output_only_modified = false; + if (ImGui::Button("Copy Colors")) + { + if (output_dest == 0) + ImGui::LogToClipboard(); + else + ImGui::LogToTTY(); + ImGui::LogText("ImGuiStyle& style = ImGui::GetStyle();" IM_NEWLINE); + for (int i = 0; i < ImGuiCol_COUNT; i++) + { + const ImVec4& col = style.Colors[i]; + const char* name = ImGui::GetStyleColName(i); + if (!output_only_modified || memcmp(&col, (ref ? &ref->Colors[i] : &default_style.Colors[i]), sizeof(ImVec4)) != 0) + ImGui::LogText("style.Colors[ImGuiCol_%s]%*s= ImVec4(%.2ff, %.2ff, %.2ff, %.2ff);" IM_NEWLINE, name, 22 - (int)strlen(name), "", col.x, col.y, col.z, col.w); + } + ImGui::LogFinish(); + } + ImGui::SameLine(); ImGui::PushItemWidth(120); ImGui::Combo("##output_type", &output_dest, "To Clipboard\0To TTY\0"); ImGui::PopItemWidth(); + ImGui::SameLine(); ImGui::Checkbox("Only Modified Fields", &output_only_modified); + + static ImGuiColorEditMode edit_mode = ImGuiColorEditMode_RGB; + ImGui::RadioButton("RGB", &edit_mode, ImGuiColorEditMode_RGB); + ImGui::SameLine(); + ImGui::RadioButton("HSV", &edit_mode, ImGuiColorEditMode_HSV); + ImGui::SameLine(); + ImGui::RadioButton("HEX", &edit_mode, ImGuiColorEditMode_HEX); + //ImGui::Text("Tip: Click on colored square to change edit mode."); + + static ImGuiTextFilter filter; + filter.Draw("Filter colors", 200); + + ImGui::BeginChild("#colors", ImVec2(0, 300), true, ImGuiWindowFlags_AlwaysVerticalScrollbar); + ImGui::PushItemWidth(-160); + ImGui::ColorEditMode(edit_mode); + for (int i = 0; i < ImGuiCol_COUNT; i++) + { + const char* name = ImGui::GetStyleColName(i); + if (!filter.PassFilter(name)) + continue; + ImGui::PushID(i); + ImGui::ColorEdit4(name, (float*)&style.Colors[i], true); + if (memcmp(&style.Colors[i], (ref ? &ref->Colors[i] : &default_style.Colors[i]), sizeof(ImVec4)) != 0) + { + ImGui::SameLine(); if (ImGui::Button("Revert")) style.Colors[i] = ref ? ref->Colors[i] : default_style.Colors[i]; + if (ref) { ImGui::SameLine(); if (ImGui::Button("Save")) ref->Colors[i] = style.Colors[i]; } + } + ImGui::PopID(); + } + ImGui::PopItemWidth(); + ImGui::EndChild(); + + ImGui::TreePop(); + } + + if (ImGui::TreeNode("Fonts", "Fonts (%d)", ImGui::GetIO().Fonts->Fonts.Size)) + { + ImGui::SameLine(); ShowHelpMarker("Tip: Load fonts with io.Fonts->AddFontFromFileTTF()\nbefore calling io.Fonts->GetTex* functions."); + ImFontAtlas* atlas = ImGui::GetIO().Fonts; + if (ImGui::TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight)) + { + ImGui::Image(atlas->TexID, ImVec2((float)atlas->TexWidth, (float)atlas->TexHeight), ImVec2(0,0), ImVec2(1,1), ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui::TreePop(); + } + ImGui::PushItemWidth(100); + for (int i = 0; i < atlas->Fonts.Size; i++) + { + ImFont* font = atlas->Fonts[i]; + ImGui::BulletText("Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + ImGui::TreePush((void*)(intptr_t)i); + ImGui::SameLine(); if (ImGui::SmallButton("Set as default")) ImGui::GetIO().FontDefault = font; + ImGui::PushFont(font); + ImGui::Text("The quick brown fox jumps over the lazy dog"); + ImGui::PopFont(); + if (ImGui::TreeNode("Details")) + { + ImGui::DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + ImGui::SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + ImGui::Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + ImGui::Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + for (int config_i = 0; config_i < font->ConfigDataCount; config_i++) + { + ImFontConfig* cfg = &font->ConfigData[config_i]; + ImGui::BulletText("Input %d: \'%s\'\nOversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + } + if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + { + // Display all glyphs of the fonts in separate pages of 256 characters + const ImFont::Glyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return NULL on fallback, which isn't the default behavior. + font->FallbackGlyph = NULL; + for (int base = 0; base < 0x10000; base += 256) + { + int count = 0; + for (int n = 0; n < 256; n++) + count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + if (count > 0 && ImGui::TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + { + float cell_spacing = style.ItemSpacing.y; + ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + ImVec2 base_pos = ImGui::GetCursorScreenPos(); + ImDrawList* draw_list = ImGui::GetWindowDrawList(); + for (int n = 0; n < 256; n++) + { + ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + const ImFont::Glyph* glyph = font->FindGlyph((ImWchar)(base+n));; + draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui::GetColorU32(ImGuiCol_Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + if (glyph && ImGui::IsMouseHoveringRect(cell_p1, cell_p2)) + { + ImGui::BeginTooltip(); + ImGui::Text("Codepoint: U+%04X", base+n); + ImGui::Separator(); + ImGui::Text("XAdvance+1: %.1f", glyph->XAdvance); + ImGui::Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + ImGui::Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + ImGui::EndTooltip(); + } + } + ImGui::Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + ImGui::TreePop(); + } + } + font->FallbackGlyph = glyph_fallback; + ImGui::TreePop(); + } + ImGui::TreePop(); + } + ImGui::TreePop(); + } + static float window_scale = 1.0f; + ImGui::DragFloat("this window scale", &window_scale, 0.005f, 0.3f, 2.0f, "%.1f"); // scale only this window + ImGui::DragFloat("global scale", &ImGui::GetIO().FontGlobalScale, 0.005f, 0.3f, 2.0f, "%.1f"); // scale everything + ImGui::PopItemWidth(); + ImGui::SetWindowFontScale(window_scale); + ImGui::TreePop(); + } + + ImGui::PopItemWidth(); +} + +// Demonstrate creating a fullscreen menu bar and populating it. +static void ShowExampleAppMainMenuBar() +{ + if (ImGui::BeginMainMenuBar()) + { + if (ImGui::BeginMenu("File")) + { + ShowExampleMenuFile(); + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("Edit")) + { + if (ImGui::MenuItem("Undo", "CTRL+Z")) {} + if (ImGui::MenuItem("Redo", "CTRL+Y", false, false)) {} // Disabled item + ImGui::Separator(); + if (ImGui::MenuItem("Cut", "CTRL+X")) {} + if (ImGui::MenuItem("Copy", "CTRL+C")) {} + if (ImGui::MenuItem("Paste", "CTRL+V")) {} + ImGui::EndMenu(); + } + ImGui::EndMainMenuBar(); + } +} + +static void ShowExampleMenuFile() +{ + ImGui::MenuItem("(dummy menu)", NULL, false, false); + if (ImGui::MenuItem("New")) {} + if (ImGui::MenuItem("Open", "Ctrl+O")) {} + if (ImGui::BeginMenu("Open Recent")) + { + ImGui::MenuItem("fish_hat.c"); + ImGui::MenuItem("fish_hat.inl"); + ImGui::MenuItem("fish_hat.h"); + if (ImGui::BeginMenu("More..")) + { + ImGui::MenuItem("Hello"); + ImGui::MenuItem("Sailor"); + if (ImGui::BeginMenu("Recurse..")) + { + ShowExampleMenuFile(); + ImGui::EndMenu(); + } + ImGui::EndMenu(); + } + ImGui::EndMenu(); + } + if (ImGui::MenuItem("Save", "Ctrl+S")) {} + if (ImGui::MenuItem("Save As..")) {} + ImGui::Separator(); + if (ImGui::BeginMenu("Options")) + { + static bool enabled = true; + ImGui::MenuItem("Enabled", "", &enabled); + ImGui::BeginChild("child", ImVec2(0, 60), true); + for (int i = 0; i < 10; i++) + ImGui::Text("Scrolling Text %d", i); + ImGui::EndChild(); + static float f = 0.5f; + static int n = 0; + ImGui::SliderFloat("Value", &f, 0.0f, 1.0f); + ImGui::InputFloat("Input", &f, 0.1f); + ImGui::Combo("Combo", &n, "Yes\0No\0Maybe\0\0"); + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("Colors")) + { + for (int i = 0; i < ImGuiCol_COUNT; i++) + ImGui::MenuItem(ImGui::GetStyleColName((ImGuiCol)i)); + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("Disabled", false)) // Disabled + { + IM_ASSERT(0); + } + if (ImGui::MenuItem("Checked", NULL, true)) {} + if (ImGui::MenuItem("Quit", "Alt+F4")) {} +} + +// Demonstrate creating a window which gets auto-resized according to its content. +static void ShowExampleAppAutoResize(bool* p_open) +{ + if (!ImGui::Begin("Example: Auto-resizing window", p_open, ImGuiWindowFlags_AlwaysAutoResize)) + { + ImGui::End(); + return; + } + + static int lines = 10; + ImGui::Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui::SliderInt("Number of lines", &lines, 1, 20); + for (int i = 0; i < lines; i++) + ImGui::Text("%*sThis is line %d", i*4, "", i); // Pad with space to extend size horizontally + ImGui::End(); +} + +// Demonstrate creating a window with custom resize constraints. +static void ShowExampleAppConstrainedResize(bool* p_open) +{ + struct CustomConstraints // Helper functions to demonstrate programmatic constraints + { + static void Square(ImGuiSizeConstraintCallbackData* data) { data->DesiredSize = ImVec2(IM_MAX(data->DesiredSize.x, data->DesiredSize.y), IM_MAX(data->DesiredSize.x, data->DesiredSize.y)); } + static void Step(ImGuiSizeConstraintCallbackData* data) { float step = (float)(int)(intptr_t)data->UserData; data->DesiredSize = ImVec2((int)(data->DesiredSize.x / step + 0.5f) * step, (int)(data->DesiredSize.y / step + 0.5f) * step); } + }; + + static int type = 0; + if (type == 0) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 0), ImVec2(-1, FLT_MAX)); // Vertical only + if (type == 1) ImGui::SetNextWindowSizeConstraints(ImVec2(0, -1), ImVec2(FLT_MAX, -1)); // Horizontal only + if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100 + if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(300, 0), ImVec2(400, FLT_MAX)); // Width 300-400 + if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square); // Always Square + if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)100);// Fixed Step + + if (ImGui::Begin("Example: Constrained Resize", p_open)) + { + const char* desc[] = + { + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 300-400", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + }; + ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc)); + if (ImGui::Button("200x200")) ImGui::SetWindowSize(ImVec2(200,200)); ImGui::SameLine(); + if (ImGui::Button("500x500")) ImGui::SetWindowSize(ImVec2(500,500)); ImGui::SameLine(); + if (ImGui::Button("800x200")) ImGui::SetWindowSize(ImVec2(800,200)); + for (int i = 0; i < 10; i++) + ImGui::Text("Hello, sailor! Making this line long enough for the example."); + } + ImGui::End(); +} + +// Demonstrate creating a simple static window with no decoration. +static void ShowExampleAppFixedOverlay(bool* p_open) +{ + ImGui::SetNextWindowPos(ImVec2(10,10)); + if (!ImGui::Begin("Example: Fixed Overlay", p_open, ImVec2(0,0), 0.3f, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoSavedSettings)) + { + ImGui::End(); + return; + } + ImGui::Text("Simple overlay\non the top-left side of the screen."); + ImGui::Separator(); + ImGui::Text("Mouse Position: (%.1f,%.1f)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y); + ImGui::End(); +} + +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// Read section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." about ID. +static void ShowExampleAppManipulatingWindowTitle(bool*) +{ + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + + // Using "##" to display same title but have unique identifier. + ImGui::SetNextWindowPos(ImVec2(100,100), ImGuiSetCond_FirstUseEver); + ImGui::Begin("Same title as another window##1"); + ImGui::Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui::End(); + + ImGui::SetNextWindowPos(ImVec2(100,200), ImGuiSetCond_FirstUseEver); + ImGui::Begin("Same title as another window##2"); + ImGui::Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui::End(); + + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + char buf[128]; + sprintf(buf, "Animated title %c %d###AnimatedTitle", "|/-\\"[(int)(ImGui::GetTime()/0.25f)&3], rand()); + ImGui::SetNextWindowPos(ImVec2(100,300), ImGuiSetCond_FirstUseEver); + ImGui::Begin(buf); + ImGui::Text("This window has a changing title."); + ImGui::End(); +} + +// Demonstrate using the low-level ImDrawList to draw custom shapes. +static void ShowExampleAppCustomRendering(bool* p_open) +{ + ImGui::SetNextWindowSize(ImVec2(350,560), ImGuiSetCond_FirstUseEver); + if (!ImGui::Begin("Example: Custom rendering", p_open)) + { + ImGui::End(); + return; + } + + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + ImDrawList* draw_list = ImGui::GetWindowDrawList(); + + // Primitives + ImGui::Text("Primitives"); + static float sz = 36.0f; + static ImVec4 col = ImVec4(1.0f,1.0f,0.4f,1.0f); + ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 72.0f, "%.0f"); + ImGui::ColorEdit3("Color", &col.x); + { + const ImVec2 p = ImGui::GetCursorScreenPos(); + const ImU32 col32 = ImColor(col); + float x = p.x + 4.0f, y = p.y + 4.0f, spacing = 8.0f; + for (int n = 0; n < 2; n++) + { + float thickness = (n == 0) ? 1.0f : 4.0f; + draw_list->AddCircle(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 20, thickness); x += sz+spacing; + draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 0.0f, ~0, thickness); x += sz+spacing; + draw_list->AddRect(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f, ~0, thickness); x += sz+spacing; + draw_list->AddTriangle(ImVec2(x+sz*0.5f, y), ImVec2(x+sz,y+sz-0.5f), ImVec2(x,y+sz-0.5f), col32, thickness); x += sz+spacing; + draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y ), col32, thickness); x += sz+spacing; + draw_list->AddLine(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, thickness); x += sz+spacing; + draw_list->AddLine(ImVec2(x, y), ImVec2(x, y+sz), col32, thickness); x += spacing; + draw_list->AddBezierCurve(ImVec2(x, y), ImVec2(x+sz*1.3f,y+sz*0.3f), ImVec2(x+sz-sz*1.3f,y+sz-sz*0.3f), ImVec2(x+sz, y+sz), col32, thickness); + x = p.x + 4; + y += sz+spacing; + } + draw_list->AddCircleFilled(ImVec2(x+sz*0.5f, y+sz*0.5f), sz*0.5f, col32, 32); x += sz+spacing; + draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32); x += sz+spacing; + draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x+sz, y+sz), col32, 10.0f); x += sz+spacing; + draw_list->AddTriangleFilled(ImVec2(x+sz*0.5f, y), ImVec2(x+sz,y+sz-0.5f), ImVec2(x,y+sz-0.5f), col32); x += sz+spacing; + draw_list->AddRectFilledMultiColor(ImVec2(x, y), ImVec2(x+sz, y+sz), ImColor(0,0,0), ImColor(255,0,0), ImColor(255,255,0), ImColor(0,255,0)); + ImGui::Dummy(ImVec2((sz+spacing)*8, (sz+spacing)*3)); + } + ImGui::Separator(); + { + static ImVector points; + static bool adding_line = false; + ImGui::Text("Canvas example"); + if (ImGui::Button("Clear")) points.clear(); + if (points.Size >= 2) { ImGui::SameLine(); if (ImGui::Button("Undo")) { points.pop_back(); points.pop_back(); } } + ImGui::Text("Left-click and drag to add lines,\nRight-click to undo"); + + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + ImVec2 canvas_pos = ImGui::GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + ImVec2 canvas_size = ImGui::GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0f) canvas_size.x = 50.0f; + if (canvas_size.y < 50.0f) canvas_size.y = 50.0f; + draw_list->AddRectFilledMultiColor(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), ImColor(50,50,50), ImColor(50,50,60), ImColor(60,60,70), ImColor(50,50,60)); + draw_list->AddRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), ImColor(255,255,255)); + + bool adding_preview = false; + ImGui::InvisibleButton("canvas", canvas_size); + ImVec2 mouse_pos_in_canvas = ImVec2(ImGui::GetIO().MousePos.x - canvas_pos.x, ImGui::GetIO().MousePos.y - canvas_pos.y); + if (adding_line) + { + adding_preview = true; + points.push_back(mouse_pos_in_canvas); + if (!ImGui::GetIO().MouseDown[0]) + adding_line = adding_preview = false; + } + if (ImGui::IsItemHovered()) + { + if (!adding_line && ImGui::IsMouseClicked(0)) + { + points.push_back(mouse_pos_in_canvas); + adding_line = true; + } + if (ImGui::IsMouseClicked(1) && !points.empty()) + { + adding_line = adding_preview = false; + points.pop_back(); + points.pop_back(); + } + } + draw_list->PushClipRect(canvas_pos, ImVec2(canvas_pos.x+canvas_size.x, canvas_pos.y+canvas_size.y)); // clip lines within the canvas (if we resize it, etc.) + for (int i = 0; i < points.Size - 1; i += 2) + draw_list->AddLine(ImVec2(canvas_pos.x + points[i].x, canvas_pos.y + points[i].y), ImVec2(canvas_pos.x + points[i+1].x, canvas_pos.y + points[i+1].y), IM_COL32(255,255,0,255), 2.0f); + draw_list->PopClipRect(); + if (adding_preview) + points.pop_back(); + } + ImGui::End(); +} + +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +struct ExampleAppConsole +{ + char InputBuf[256]; + ImVector Items; + bool ScrollToBottom; + ImVector History; + int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + ImVector Commands; + + ExampleAppConsole() + { + ClearLog(); + memset(InputBuf, 0, sizeof(InputBuf)); + HistoryPos = -1; + Commands.push_back("HELP"); + Commands.push_back("HISTORY"); + Commands.push_back("CLEAR"); + Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + AddLog("Welcome to ImGui!"); + } + ~ExampleAppConsole() + { + ClearLog(); + for (int i = 0; i < History.Size; i++) + free(History[i]); + } + + // Portable helpers + static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; } return d; } + static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; n--; } return d; } + static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + + void ClearLog() + { + for (int i = 0; i < Items.Size; i++) + free(Items[i]); + Items.clear(); + ScrollToBottom = true; + } + + void AddLog(const char* fmt, ...) IM_PRINTFARGS(2) + { + char buf[1024]; + va_list args; + va_start(args, fmt); + vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + buf[IM_ARRAYSIZE(buf)-1] = 0; + va_end(args); + Items.push_back(Strdup(buf)); + ScrollToBottom = true; + } + + void Draw(const char* title, bool* p_open) + { + ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiSetCond_FirstUseEver); + if (!ImGui::Begin(title, p_open)) + { + ImGui::End(); + return; + } + + ImGui::TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui::TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + + // TODO: display items starting from the bottom + + if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine(); + if (ImGui::SmallButton("Add Dummy Error")) AddLog("[error] something went wrong"); ImGui::SameLine(); + if (ImGui::SmallButton("Clear")) ClearLog(); ImGui::SameLine(); + if (ImGui::SmallButton("Scroll to bottom")) ScrollToBottom = true; + //static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); } + + ImGui::Separator(); + + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0,0)); + static ImGuiTextFilter filter; + filter.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui::PopStyleVar(); + ImGui::Separator(); + + ImGui::BeginChild("ScrollingRegion", ImVec2(0,-ImGui::GetItemsLineHeightWithSpacing()), false, ImGuiWindowFlags_HorizontalScrollbar); + if (ImGui::BeginPopupContextWindow()) + { + if (ImGui::Selectable("Clear")) ClearLog(); + ImGui::EndPopup(); + } + + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui::TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (int i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4,1)); // Tighten spacing + for (int i = 0; i < Items.Size; i++) + { + const char* item = Items[i]; + if (!filter.PassFilter(item)) + continue; + ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + else if (strncmp(item, "# ", 2) == 0) col = ImColor(1.0f,0.78f,0.58f,1.0f); + ImGui::PushStyleColor(ImGuiCol_Text, col); + ImGui::TextUnformatted(item); + ImGui::PopStyleColor(); + } + if (ScrollToBottom) + ImGui::SetScrollHere(); + ScrollToBottom = false; + ImGui::PopStyleVar(); + ImGui::EndChild(); + ImGui::Separator(); + + // Command-line + if (ImGui::InputText("Input", InputBuf, IM_ARRAYSIZE(InputBuf), ImGuiInputTextFlags_EnterReturnsTrue|ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_CallbackHistory, &TextEditCallbackStub, (void*)this)) + { + char* input_end = InputBuf+strlen(InputBuf); + while (input_end > InputBuf && input_end[-1] == ' ') input_end--; *input_end = 0; + if (InputBuf[0]) + ExecCommand(InputBuf); + strcpy(InputBuf, ""); + } + + // Demonstrate keeping auto focus on the input box + if (ImGui::IsItemHovered() || (ImGui::IsRootWindowOrAnyChildFocused() && !ImGui::IsAnyItemActive() && !ImGui::IsMouseClicked(0))) + ImGui::SetKeyboardFocusHere(-1); // Auto focus previous widget + + ImGui::End(); + } + + void ExecCommand(const char* command_line) + { + AddLog("# %s\n", command_line); + + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + HistoryPos = -1; + for (int i = History.Size-1; i >= 0; i--) + if (Stricmp(History[i], command_line) == 0) + { + free(History[i]); + History.erase(History.begin() + i); + break; + } + History.push_back(Strdup(command_line)); + + // Process command + if (Stricmp(command_line, "CLEAR") == 0) + { + ClearLog(); + } + else if (Stricmp(command_line, "HELP") == 0) + { + AddLog("Commands:"); + for (int i = 0; i < Commands.Size; i++) + AddLog("- %s", Commands[i]); + } + else if (Stricmp(command_line, "HISTORY") == 0) + { + for (int i = History.Size >= 10 ? History.Size - 10 : 0; i < History.Size; i++) + AddLog("%3d: %s\n", i, History[i]); + } + else + { + AddLog("Unknown command: '%s'\n", command_line); + } + } + + static int TextEditCallbackStub(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + { + ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + return console->TextEditCallback(data); + } + + int TextEditCallback(ImGuiTextEditCallbackData* data) + { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data->EventFlag) + { + case ImGuiInputTextFlags_CallbackCompletion: + { + // Example of TEXT COMPLETION + + // Locate beginning of current word + const char* word_end = data->Buf + data->CursorPos; + const char* word_start = word_end; + while (word_start > data->Buf) + { + const char c = word_start[-1]; + if (c == ' ' || c == '\t' || c == ',' || c == ';') + break; + word_start--; + } + + // Build a list of candidates + ImVector candidates; + for (int i = 0; i < Commands.Size; i++) + if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) == 0) + candidates.push_back(Commands[i]); + + if (candidates.Size == 0) + { + // No match + AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + } + else if (candidates.Size == 1) + { + // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + data->InsertChars(data->CursorPos, candidates[0]); + data->InsertChars(data->CursorPos, " "); + } + else + { + // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + int match_len = (int)(word_end - word_start); + for (;;) + { + int c = 0; + bool all_candidates_matches = true; + for (int i = 0; i < candidates.Size && all_candidates_matches; i++) + if (i == 0) + c = toupper(candidates[i][match_len]); + else if (c != toupper(candidates[i][match_len])) + all_candidates_matches = false; + if (!all_candidates_matches) + break; + match_len++; + } + + if (match_len > 0) + { + data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + } + + // List matches + AddLog("Possible matches:\n"); + for (int i = 0; i < candidates.Size; i++) + AddLog("- %s\n", candidates[i]); + } + + break; + } + case ImGuiInputTextFlags_CallbackHistory: + { + // Example of HISTORY + const int prev_history_pos = HistoryPos; + if (data->EventKey == ImGuiKey_UpArrow) + { + if (HistoryPos == -1) + HistoryPos = History.Size - 1; + else if (HistoryPos > 0) + HistoryPos--; + } + else if (data->EventKey == ImGuiKey_DownArrow) + { + if (HistoryPos != -1) + if (++HistoryPos >= History.Size) + HistoryPos = -1; + } + + // A better implementation would preserve the data on the current input line along with cursor position. + if (prev_history_pos != HistoryPos) + { + data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + data->BufDirty = true; + } + } + } + return 0; + } +}; + +static void ShowExampleAppConsole(bool* p_open) +{ + static ExampleAppConsole console; + console.Draw("Example: Console", p_open); +} + +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +struct ExampleAppLog +{ + ImGuiTextBuffer Buf; + ImGuiTextFilter Filter; + ImVector LineOffsets; // Index to lines offset + bool ScrollToBottom; + + void Clear() { Buf.clear(); LineOffsets.clear(); } + + void AddLog(const char* fmt, ...) IM_PRINTFARGS(2) + { + int old_size = Buf.size(); + va_list args; + va_start(args, fmt); + Buf.appendv(fmt, args); + va_end(args); + for (int new_size = Buf.size(); old_size < new_size; old_size++) + if (Buf[old_size] == '\n') + LineOffsets.push_back(old_size); + ScrollToBottom = true; + } + + void Draw(const char* title, bool* p_open = NULL) + { + ImGui::SetNextWindowSize(ImVec2(500,400), ImGuiSetCond_FirstUseEver); + ImGui::Begin(title, p_open); + if (ImGui::Button("Clear")) Clear(); + ImGui::SameLine(); + bool copy = ImGui::Button("Copy"); + ImGui::SameLine(); + Filter.Draw("Filter", -100.0f); + ImGui::Separator(); + ImGui::BeginChild("scrolling", ImVec2(0,0), false, ImGuiWindowFlags_HorizontalScrollbar); + if (copy) ImGui::LogToClipboard(); + + if (Filter.IsActive()) + { + const char* buf_begin = Buf.begin(); + const char* line = buf_begin; + for (int line_no = 0; line != NULL; line_no++) + { + const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : NULL; + if (Filter.PassFilter(line, line_end)) + ImGui::TextUnformatted(line, line_end); + line = line_end && line_end[1] ? line_end + 1 : NULL; + } + } + else + { + ImGui::TextUnformatted(Buf.begin()); + } + + if (ScrollToBottom) + ImGui::SetScrollHere(1.0f); + ScrollToBottom = false; + ImGui::EndChild(); + ImGui::End(); + } +}; + +// Demonstrate creating a simple log window with basic filtering. +static void ShowExampleAppLog(bool* p_open) +{ + static ExampleAppLog log; + + // Demo fill + static float last_time = -1.0f; + float time = ImGui::GetTime(); + if (time - last_time >= 0.3f) + { + const char* random_words[] = { "system", "info", "warning", "error", "fatal", "notice", "log" }; + log.AddLog("[%s] Hello, time is %.1f, rand() %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, (int)rand()); + last_time = time; + } + + log.Draw("Example: Log", p_open); +} + +// Demonstrate create a window with multiple child windows. +static void ShowExampleAppLayout(bool* p_open) +{ + ImGui::SetNextWindowSize(ImVec2(500, 440), ImGuiSetCond_FirstUseEver); + if (ImGui::Begin("Example: Layout", p_open, ImGuiWindowFlags_MenuBar)) + { + if (ImGui::BeginMenuBar()) + { + if (ImGui::BeginMenu("File")) + { + if (ImGui::MenuItem("Close")) *p_open = false; + ImGui::EndMenu(); + } + ImGui::EndMenuBar(); + } + + // left + static int selected = 0; + ImGui::BeginChild("left pane", ImVec2(150, 0), true); + for (int i = 0; i < 100; i++) + { + char label[128]; + sprintf(label, "MyObject %d", i); + if (ImGui::Selectable(label, selected == i)) + selected = i; + } + ImGui::EndChild(); + ImGui::SameLine(); + + // right + ImGui::BeginGroup(); + ImGui::BeginChild("item view", ImVec2(0, -ImGui::GetItemsLineHeightWithSpacing())); // Leave room for 1 line below us + ImGui::Text("MyObject: %d", selected); + ImGui::Separator(); + ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui::EndChild(); + ImGui::BeginChild("buttons"); + if (ImGui::Button("Revert")) {} + ImGui::SameLine(); + if (ImGui::Button("Save")) {} + ImGui::EndChild(); + ImGui::EndGroup(); + } + ImGui::End(); +} + +// Demonstrate create a simple property editor. +static void ShowExampleAppPropertyEditor(bool* p_open) +{ + ImGui::SetNextWindowSize(ImVec2(430,450), ImGuiSetCond_FirstUseEver); + if (!ImGui::Begin("Example: Property editor", p_open)) + { + ImGui::End(); + return; + } + + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui::SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2,2)); + ImGui::Columns(2); + ImGui::Separator(); + + struct funcs + { + static void ShowDummyObject(const char* prefix, int uid) + { + ImGui::PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui::AlignFirstTextHeightToWidgets(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + bool node_open = ImGui::TreeNode("Object", "%s_%u", prefix, uid); + ImGui::NextColumn(); + ImGui::AlignFirstTextHeightToWidgets(); + ImGui::Text("my sailor is rich"); + ImGui::NextColumn(); + if (node_open) + { + static float dummy_members[8] = { 0.0f,0.0f,1.0f,3.1416f,100.0f,999.0f }; + for (int i = 0; i < 8; i++) + { + ImGui::PushID(i); // Use field index as identifier. + if (i < 2) + { + ShowDummyObject("Child", 424242); + } + else + { + ImGui::AlignFirstTextHeightToWidgets(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui::Text("Field_%d", i); + char label[32]; + sprintf(label, "Field_%d", i); + ImGui::Bullet(); + ImGui::Selectable(label); + ImGui::NextColumn(); + ImGui::PushItemWidth(-1); + if (i >= 5) + ImGui::InputFloat("##value", &dummy_members[i], 1.0f); + else + ImGui::DragFloat("##value", &dummy_members[i], 0.01f); + ImGui::PopItemWidth(); + ImGui::NextColumn(); + } + ImGui::PopID(); + } + ImGui::TreePop(); + } + ImGui::PopID(); + } + }; + + // Iterate dummy objects with dummy members (all the same data) + for (int obj_i = 0; obj_i < 3; obj_i++) + funcs::ShowDummyObject("Object", obj_i); + + ImGui::Columns(1); + ImGui::Separator(); + ImGui::PopStyleVar(); + ImGui::End(); +} + +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +static void ShowExampleAppLongText(bool* p_open) +{ + ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiSetCond_FirstUseEver); + if (!ImGui::Begin("Example: Long text display", p_open)) + { + ImGui::End(); + return; + } + + static int test_type = 0; + static ImGuiTextBuffer log; + static int lines = 0; + ImGui::Text("Printing unusually long amount of text."); + ImGui::Combo("Test type", &test_type, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped\0"); + ImGui::Text("Buffer contents: %d lines, %d bytes", lines, log.size()); + if (ImGui::Button("Clear")) { log.clear(); lines = 0; } + ImGui::SameLine(); + if (ImGui::Button("Add 1000 lines")) + { + for (int i = 0; i < 1000; i++) + log.append("%i The quick brown fox jumps over the lazy dog\n", lines+i); + lines += 1000; + } + ImGui::BeginChild("Log"); + switch (test_type) + { + case 0: + // Single call to TextUnformatted() with a big buffer + ImGui::TextUnformatted(log.begin(), log.end()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0,0)); + ImGuiListClipper clipper(lines); + while (clipper.Step()) + for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui::Text("%i The quick brown fox jumps over the lazy dog", i); + ImGui::PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0,0)); + for (int i = 0; i < lines; i++) + ImGui::Text("%i The quick brown fox jumps over the lazy dog", i); + ImGui::PopStyleVar(); + break; + } + ImGui::EndChild(); + ImGui::End(); +} + +// End of Demo code +#else + +void ImGui::ShowTestWindow(bool*) {} +void ImGui::ShowUserGuide() {} +void ImGui::ShowStyleEditor(ImGuiStyle*) {} + +#endif diff --git a/lib/imgui/imgui_draw.cpp b/lib/imgui/imgui_draw.cpp new file mode 100644 index 0000000..a660e30 --- /dev/null +++ b/lib/imgui/imgui_draw.cpp @@ -0,0 +1,2393 @@ +// dear imgui, v1.50 WIP +// (drawing and font code) + +// Contains implementation for +// - ImDrawList +// - ImDrawData +// - ImFontAtlas +// - ImFont +// - Default font data + +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include "imgui.h" +#define IMGUI_DEFINE_MATH_OPERATORS +#define IMGUI_DEFINE_PLACEMENT_NEW +#include "imgui_internal.h" + +#include // vsnprintf, sscanf, printf +#if !defined(alloca) +#ifdef _WIN32 +#include // alloca +#elif (defined(__FreeBSD__) || defined(FreeBSD_kernel) || defined(__DragonFly__)) && !defined(__GLIBC__) +#include // alloca. FreeBSD uses stdlib.h unless GLIBC +#else +#include // alloca +#endif +#endif + +#ifdef _MSC_VER +#pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff) +#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +#define snprintf _snprintf +#endif + +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +#pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants ok. +#pragma clang diagnostic ignored "-Wglobal-constructors" // warning : declaration requires a global destructor // similar to above, not sure what the exact difference it. +#pragma clang diagnostic ignored "-Wsign-conversion" // warning : implicit conversion changes signedness // +#if __has_warning("-Wreserved-id-macro") +#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +#endif +#elif defined(__GNUC__) +#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used +#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +#pragma GCC diagnostic ignored "-Wcast-qual" // warning: cast from type 'xxxx' to type 'xxxx' casts away qualifiers +#endif + +//------------------------------------------------------------------------- +// STB libraries implementation +//------------------------------------------------------------------------- + +//#define IMGUI_STB_NAMESPACE ImGuiStb +//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION +//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION + +#ifdef IMGUI_STB_NAMESPACE +namespace IMGUI_STB_NAMESPACE +{ +#endif + +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable: 4456) // declaration of 'xx' hides previous local declaration +#endif + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +#pragma clang diagnostic ignored "-Wunused-function" +#pragma clang diagnostic ignored "-Wmissing-prototypes" +#endif + +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wtype-limits" // warning: comparison is always true due to limited range of data type [-Wtype-limits] +#endif + +#define STBRP_ASSERT(x) IM_ASSERT(x) +#ifndef IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION +#define STBRP_STATIC +#define STB_RECT_PACK_IMPLEMENTATION +#endif +#include "stb_rect_pack.h" + +#define STBTT_malloc(x,u) ((void)(u), ImGui::MemAlloc(x)) +#define STBTT_free(x,u) ((void)(u), ImGui::MemFree(x)) +#define STBTT_assert(x) IM_ASSERT(x) +#ifndef IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION +#define STBTT_STATIC +#define STB_TRUETYPE_IMPLEMENTATION +#else +#define STBTT_DEF extern +#endif +#include "stb_truetype.h" + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#ifdef _MSC_VER +#pragma warning (pop) +#endif + +#ifdef IMGUI_STB_NAMESPACE +} // namespace ImGuiStb +using namespace IMGUI_STB_NAMESPACE; +#endif + +//----------------------------------------------------------------------------- +// ImDrawList +//----------------------------------------------------------------------------- + +static const ImVec4 GNullClipRect(-8192.0f, -8192.0f, +8192.0f, +8192.0f); // Large values that are easy to encode in a few bits+shift + +void ImDrawList::Clear() +{ + CmdBuffer.resize(0); + IdxBuffer.resize(0); + VtxBuffer.resize(0); + _VtxCurrentIdx = 0; + _VtxWritePtr = NULL; + _IdxWritePtr = NULL; + _ClipRectStack.resize(0); + _TextureIdStack.resize(0); + _Path.resize(0); + _ChannelsCurrent = 0; + _ChannelsCount = 1; + // NB: Do not clear channels so our allocations are re-used after the first frame. +} + +void ImDrawList::ClearFreeMemory() +{ + CmdBuffer.clear(); + IdxBuffer.clear(); + VtxBuffer.clear(); + _VtxCurrentIdx = 0; + _VtxWritePtr = NULL; + _IdxWritePtr = NULL; + _ClipRectStack.clear(); + _TextureIdStack.clear(); + _Path.clear(); + _ChannelsCurrent = 0; + _ChannelsCount = 1; + for (int i = 0; i < _Channels.Size; i++) + { + if (i == 0) memset(&_Channels[0], 0, sizeof(_Channels[0])); // channel 0 is a copy of CmdBuffer/IdxBuffer, don't destruct again + _Channels[i].CmdBuffer.clear(); + _Channels[i].IdxBuffer.clear(); + } + _Channels.clear(); +} + +// Use macros because C++ is a terrible language, we want guaranteed inline, no code in header, and no overhead in Debug mode +#define GetCurrentClipRect() (_ClipRectStack.Size ? _ClipRectStack.Data[_ClipRectStack.Size-1] : GNullClipRect) +#define GetCurrentTextureId() (_TextureIdStack.Size ? _TextureIdStack.Data[_TextureIdStack.Size-1] : NULL) + +void ImDrawList::AddDrawCmd() +{ + ImDrawCmd draw_cmd; + draw_cmd.ClipRect = GetCurrentClipRect(); + draw_cmd.TextureId = GetCurrentTextureId(); + + IM_ASSERT(draw_cmd.ClipRect.x <= draw_cmd.ClipRect.z && draw_cmd.ClipRect.y <= draw_cmd.ClipRect.w); + CmdBuffer.push_back(draw_cmd); +} + +void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data) +{ + ImDrawCmd* current_cmd = CmdBuffer.Size ? &CmdBuffer.back() : NULL; + if (!current_cmd || current_cmd->ElemCount != 0 || current_cmd->UserCallback != NULL) + { + AddDrawCmd(); + current_cmd = &CmdBuffer.back(); + } + current_cmd->UserCallback = callback; + current_cmd->UserCallbackData = callback_data; + + AddDrawCmd(); // Force a new command after us (see comment below) +} + +// Our scheme may appears a bit unusual, basically we want the most-common calls AddLine AddRect etc. to not have to perform any check so we always have a command ready in the stack. +// The cost of figuring out if a new command has to be added or if we can merge is paid in those Update** functions only. +void ImDrawList::UpdateClipRect() +{ + // If current command is used with different settings we need to add a new command + const ImVec4 curr_clip_rect = GetCurrentClipRect(); + ImDrawCmd* curr_cmd = CmdBuffer.Size > 0 ? &CmdBuffer.Data[CmdBuffer.Size-1] : NULL; + if (!curr_cmd || (curr_cmd->ElemCount != 0 && memcmp(&curr_cmd->ClipRect, &curr_clip_rect, sizeof(ImVec4)) != 0) || curr_cmd->UserCallback != NULL) + { + AddDrawCmd(); + return; + } + + // Try to merge with previous command if it matches, else use current command + ImDrawCmd* prev_cmd = CmdBuffer.Size > 1 ? curr_cmd - 1 : NULL; + if (curr_cmd->ElemCount == 0 && prev_cmd && memcmp(&prev_cmd->ClipRect, &curr_clip_rect, sizeof(ImVec4)) == 0 && prev_cmd->TextureId == GetCurrentTextureId() && prev_cmd->UserCallback == NULL) + CmdBuffer.pop_back(); + else + curr_cmd->ClipRect = curr_clip_rect; +} + +void ImDrawList::UpdateTextureID() +{ + // If current command is used with different settings we need to add a new command + const ImTextureID curr_texture_id = GetCurrentTextureId(); + ImDrawCmd* curr_cmd = CmdBuffer.Size ? &CmdBuffer.back() : NULL; + if (!curr_cmd || (curr_cmd->ElemCount != 0 && curr_cmd->TextureId != curr_texture_id) || curr_cmd->UserCallback != NULL) + { + AddDrawCmd(); + return; + } + + // Try to merge with previous command if it matches, else use current command + ImDrawCmd* prev_cmd = CmdBuffer.Size > 1 ? curr_cmd - 1 : NULL; + if (prev_cmd && prev_cmd->TextureId == curr_texture_id && memcmp(&prev_cmd->ClipRect, &GetCurrentClipRect(), sizeof(ImVec4)) == 0 && prev_cmd->UserCallback == NULL) + CmdBuffer.pop_back(); + else + curr_cmd->TextureId = curr_texture_id; +} + +#undef GetCurrentClipRect +#undef GetCurrentTextureId + +// Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) +void ImDrawList::PushClipRect(ImVec2 cr_min, ImVec2 cr_max, bool intersect_with_current_clip_rect) +{ + ImVec4 cr(cr_min.x, cr_min.y, cr_max.x, cr_max.y); + if (intersect_with_current_clip_rect && _ClipRectStack.Size) + { + ImVec4 current = _ClipRectStack.Data[_ClipRectStack.Size-1]; + if (cr.x < current.x) cr.x = current.x; + if (cr.y < current.y) cr.y = current.y; + if (cr.z > current.z) cr.z = current.z; + if (cr.w > current.w) cr.w = current.w; + } + cr.z = ImMax(cr.x, cr.z); + cr.w = ImMax(cr.y, cr.w); + + _ClipRectStack.push_back(cr); + UpdateClipRect(); +} + +void ImDrawList::PushClipRectFullScreen() +{ + PushClipRect(ImVec2(GNullClipRect.x, GNullClipRect.y), ImVec2(GNullClipRect.z, GNullClipRect.w)); + //PushClipRect(GetVisibleRect()); // FIXME-OPT: This would be more correct but we're not supposed to access ImGuiContext from here? +} + +void ImDrawList::PopClipRect() +{ + IM_ASSERT(_ClipRectStack.Size > 0); + _ClipRectStack.pop_back(); + UpdateClipRect(); +} + +void ImDrawList::PushTextureID(const ImTextureID& texture_id) +{ + _TextureIdStack.push_back(texture_id); + UpdateTextureID(); +} + +void ImDrawList::PopTextureID() +{ + IM_ASSERT(_TextureIdStack.Size > 0); + _TextureIdStack.pop_back(); + UpdateTextureID(); +} + +void ImDrawList::ChannelsSplit(int channels_count) +{ + IM_ASSERT(_ChannelsCurrent == 0 && _ChannelsCount == 1); + int old_channels_count = _Channels.Size; + if (old_channels_count < channels_count) + _Channels.resize(channels_count); + _ChannelsCount = channels_count; + + // _Channels[] (24 bytes each) hold storage that we'll swap with this->_CmdBuffer/_IdxBuffer + // The content of _Channels[0] at this point doesn't matter. We clear it to make state tidy in a debugger but we don't strictly need to. + // When we switch to the next channel, we'll copy _CmdBuffer/_IdxBuffer into _Channels[0] and then _Channels[1] into _CmdBuffer/_IdxBuffer + memset(&_Channels[0], 0, sizeof(ImDrawChannel)); + for (int i = 1; i < channels_count; i++) + { + if (i >= old_channels_count) + { + IM_PLACEMENT_NEW(&_Channels[i]) ImDrawChannel(); + } + else + { + _Channels[i].CmdBuffer.resize(0); + _Channels[i].IdxBuffer.resize(0); + } + if (_Channels[i].CmdBuffer.Size == 0) + { + ImDrawCmd draw_cmd; + draw_cmd.ClipRect = _ClipRectStack.back(); + draw_cmd.TextureId = _TextureIdStack.back(); + _Channels[i].CmdBuffer.push_back(draw_cmd); + } + } +} + +void ImDrawList::ChannelsMerge() +{ + // Note that we never use or rely on channels.Size because it is merely a buffer that we never shrink back to 0 to keep all sub-buffers ready for use. + if (_ChannelsCount <= 1) + return; + + ChannelsSetCurrent(0); + if (CmdBuffer.Size && CmdBuffer.back().ElemCount == 0) + CmdBuffer.pop_back(); + + int new_cmd_buffer_count = 0, new_idx_buffer_count = 0; + for (int i = 1; i < _ChannelsCount; i++) + { + ImDrawChannel& ch = _Channels[i]; + if (ch.CmdBuffer.Size && ch.CmdBuffer.back().ElemCount == 0) + ch.CmdBuffer.pop_back(); + new_cmd_buffer_count += ch.CmdBuffer.Size; + new_idx_buffer_count += ch.IdxBuffer.Size; + } + CmdBuffer.resize(CmdBuffer.Size + new_cmd_buffer_count); + IdxBuffer.resize(IdxBuffer.Size + new_idx_buffer_count); + + ImDrawCmd* cmd_write = CmdBuffer.Data + CmdBuffer.Size - new_cmd_buffer_count; + _IdxWritePtr = IdxBuffer.Data + IdxBuffer.Size - new_idx_buffer_count; + for (int i = 1; i < _ChannelsCount; i++) + { + ImDrawChannel& ch = _Channels[i]; + if (int sz = ch.CmdBuffer.Size) { memcpy(cmd_write, ch.CmdBuffer.Data, sz * sizeof(ImDrawCmd)); cmd_write += sz; } + if (int sz = ch.IdxBuffer.Size) { memcpy(_IdxWritePtr, ch.IdxBuffer.Data, sz * sizeof(ImDrawIdx)); _IdxWritePtr += sz; } + } + AddDrawCmd(); + _ChannelsCount = 1; +} + +void ImDrawList::ChannelsSetCurrent(int idx) +{ + IM_ASSERT(idx < _ChannelsCount); + if (_ChannelsCurrent == idx) return; + memcpy(&_Channels.Data[_ChannelsCurrent].CmdBuffer, &CmdBuffer, sizeof(CmdBuffer)); // copy 12 bytes, four times + memcpy(&_Channels.Data[_ChannelsCurrent].IdxBuffer, &IdxBuffer, sizeof(IdxBuffer)); + _ChannelsCurrent = idx; + memcpy(&CmdBuffer, &_Channels.Data[_ChannelsCurrent].CmdBuffer, sizeof(CmdBuffer)); + memcpy(&IdxBuffer, &_Channels.Data[_ChannelsCurrent].IdxBuffer, sizeof(IdxBuffer)); + _IdxWritePtr = IdxBuffer.Data + IdxBuffer.Size; +} + +// NB: this can be called with negative count for removing primitives (as long as the result does not underflow) +void ImDrawList::PrimReserve(int idx_count, int vtx_count) +{ + ImDrawCmd& draw_cmd = CmdBuffer.Data[CmdBuffer.Size-1]; + draw_cmd.ElemCount += idx_count; + + int vtx_buffer_size = VtxBuffer.Size; + VtxBuffer.resize(vtx_buffer_size + vtx_count); + _VtxWritePtr = VtxBuffer.Data + vtx_buffer_size; + + int idx_buffer_size = IdxBuffer.Size; + IdxBuffer.resize(idx_buffer_size + idx_count); + _IdxWritePtr = IdxBuffer.Data + idx_buffer_size; +} + +// Fully unrolled with inline call to keep our debug builds decently fast. +void ImDrawList::PrimRect(const ImVec2& a, const ImVec2& c, ImU32 col) +{ + ImVec2 b(c.x, a.y), d(a.x, c.y), uv(GImGui->FontTexUvWhitePixel); + ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx; + _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2); + _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3); + _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; + _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col; + _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col; + _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col; + _VtxWritePtr += 4; + _VtxCurrentIdx += 4; + _IdxWritePtr += 6; +} + +void ImDrawList::PrimRectUV(const ImVec2& a, const ImVec2& c, const ImVec2& uv_a, const ImVec2& uv_c, ImU32 col) +{ + ImVec2 b(c.x, a.y), d(a.x, c.y), uv_b(uv_c.x, uv_a.y), uv_d(uv_a.x, uv_c.y); + ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx; + _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2); + _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3); + _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col = col; + _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col = col; + _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col = col; + _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col = col; + _VtxWritePtr += 4; + _VtxCurrentIdx += 4; + _IdxWritePtr += 6; +} + +void ImDrawList::PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col) +{ + ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx; + _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2); + _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3); + _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col = col; + _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col = col; + _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col = col; + _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col = col; + _VtxWritePtr += 4; + _VtxCurrentIdx += 4; + _IdxWritePtr += 6; +} + +// TODO: Thickness anti-aliased lines cap are missing their AA fringe. +void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 col, bool closed, float thickness, bool anti_aliased) +{ + if (points_count < 2) + return; + + const ImVec2 uv = GImGui->FontTexUvWhitePixel; + anti_aliased &= GImGui->Style.AntiAliasedLines; + //if (ImGui::GetIO().KeyCtrl) anti_aliased = false; // Debug + + int count = points_count; + if (!closed) + count = points_count-1; + + const bool thick_line = thickness > 1.0f; + if (anti_aliased) + { + // Anti-aliased stroke + const float AA_SIZE = 1.0f; + const ImU32 col_trans = col & IM_COL32(255,255,255,0); + + const int idx_count = thick_line ? count*18 : count*12; + const int vtx_count = thick_line ? points_count*4 : points_count*3; + PrimReserve(idx_count, vtx_count); + + // Temporary buffer + ImVec2* temp_normals = (ImVec2*)alloca(points_count * (thick_line ? 5 : 3) * sizeof(ImVec2)); + ImVec2* temp_points = temp_normals + points_count; + + for (int i1 = 0; i1 < count; i1++) + { + const int i2 = (i1+1) == points_count ? 0 : i1+1; + ImVec2 diff = points[i2] - points[i1]; + diff *= ImInvLength(diff, 1.0f); + temp_normals[i1].x = diff.y; + temp_normals[i1].y = -diff.x; + } + if (!closed) + temp_normals[points_count-1] = temp_normals[points_count-2]; + + if (!thick_line) + { + if (!closed) + { + temp_points[0] = points[0] + temp_normals[0] * AA_SIZE; + temp_points[1] = points[0] - temp_normals[0] * AA_SIZE; + temp_points[(points_count-1)*2+0] = points[points_count-1] + temp_normals[points_count-1] * AA_SIZE; + temp_points[(points_count-1)*2+1] = points[points_count-1] - temp_normals[points_count-1] * AA_SIZE; + } + + // FIXME-OPT: Merge the different loops, possibly remove the temporary buffer. + unsigned int idx1 = _VtxCurrentIdx; + for (int i1 = 0; i1 < count; i1++) + { + const int i2 = (i1+1) == points_count ? 0 : i1+1; + unsigned int idx2 = (i1+1) == points_count ? _VtxCurrentIdx : idx1+3; + + // Average normals + ImVec2 dm = (temp_normals[i1] + temp_normals[i2]) * 0.5f; + float dmr2 = dm.x*dm.x + dm.y*dm.y; + if (dmr2 > 0.000001f) + { + float scale = 1.0f / dmr2; + if (scale > 100.0f) scale = 100.0f; + dm *= scale; + } + dm *= AA_SIZE; + temp_points[i2*2+0] = points[i2] + dm; + temp_points[i2*2+1] = points[i2] - dm; + + // Add indexes + _IdxWritePtr[0] = (ImDrawIdx)(idx2+0); _IdxWritePtr[1] = (ImDrawIdx)(idx1+0); _IdxWritePtr[2] = (ImDrawIdx)(idx1+2); + _IdxWritePtr[3] = (ImDrawIdx)(idx1+2); _IdxWritePtr[4] = (ImDrawIdx)(idx2+2); _IdxWritePtr[5] = (ImDrawIdx)(idx2+0); + _IdxWritePtr[6] = (ImDrawIdx)(idx2+1); _IdxWritePtr[7] = (ImDrawIdx)(idx1+1); _IdxWritePtr[8] = (ImDrawIdx)(idx1+0); + _IdxWritePtr[9] = (ImDrawIdx)(idx1+0); _IdxWritePtr[10]= (ImDrawIdx)(idx2+0); _IdxWritePtr[11]= (ImDrawIdx)(idx2+1); + _IdxWritePtr += 12; + + idx1 = idx2; + } + + // Add vertexes + for (int i = 0; i < points_count; i++) + { + _VtxWritePtr[0].pos = points[i]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; + _VtxWritePtr[1].pos = temp_points[i*2+0]; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans; + _VtxWritePtr[2].pos = temp_points[i*2+1]; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col_trans; + _VtxWritePtr += 3; + } + } + else + { + const float half_inner_thickness = (thickness - AA_SIZE) * 0.5f; + if (!closed) + { + temp_points[0] = points[0] + temp_normals[0] * (half_inner_thickness + AA_SIZE); + temp_points[1] = points[0] + temp_normals[0] * (half_inner_thickness); + temp_points[2] = points[0] - temp_normals[0] * (half_inner_thickness); + temp_points[3] = points[0] - temp_normals[0] * (half_inner_thickness + AA_SIZE); + temp_points[(points_count-1)*4+0] = points[points_count-1] + temp_normals[points_count-1] * (half_inner_thickness + AA_SIZE); + temp_points[(points_count-1)*4+1] = points[points_count-1] + temp_normals[points_count-1] * (half_inner_thickness); + temp_points[(points_count-1)*4+2] = points[points_count-1] - temp_normals[points_count-1] * (half_inner_thickness); + temp_points[(points_count-1)*4+3] = points[points_count-1] - temp_normals[points_count-1] * (half_inner_thickness + AA_SIZE); + } + + // FIXME-OPT: Merge the different loops, possibly remove the temporary buffer. + unsigned int idx1 = _VtxCurrentIdx; + for (int i1 = 0; i1 < count; i1++) + { + const int i2 = (i1+1) == points_count ? 0 : i1+1; + unsigned int idx2 = (i1+1) == points_count ? _VtxCurrentIdx : idx1+4; + + // Average normals + ImVec2 dm = (temp_normals[i1] + temp_normals[i2]) * 0.5f; + float dmr2 = dm.x*dm.x + dm.y*dm.y; + if (dmr2 > 0.000001f) + { + float scale = 1.0f / dmr2; + if (scale > 100.0f) scale = 100.0f; + dm *= scale; + } + ImVec2 dm_out = dm * (half_inner_thickness + AA_SIZE); + ImVec2 dm_in = dm * half_inner_thickness; + temp_points[i2*4+0] = points[i2] + dm_out; + temp_points[i2*4+1] = points[i2] + dm_in; + temp_points[i2*4+2] = points[i2] - dm_in; + temp_points[i2*4+3] = points[i2] - dm_out; + + // Add indexes + _IdxWritePtr[0] = (ImDrawIdx)(idx2+1); _IdxWritePtr[1] = (ImDrawIdx)(idx1+1); _IdxWritePtr[2] = (ImDrawIdx)(idx1+2); + _IdxWritePtr[3] = (ImDrawIdx)(idx1+2); _IdxWritePtr[4] = (ImDrawIdx)(idx2+2); _IdxWritePtr[5] = (ImDrawIdx)(idx2+1); + _IdxWritePtr[6] = (ImDrawIdx)(idx2+1); _IdxWritePtr[7] = (ImDrawIdx)(idx1+1); _IdxWritePtr[8] = (ImDrawIdx)(idx1+0); + _IdxWritePtr[9] = (ImDrawIdx)(idx1+0); _IdxWritePtr[10] = (ImDrawIdx)(idx2+0); _IdxWritePtr[11] = (ImDrawIdx)(idx2+1); + _IdxWritePtr[12] = (ImDrawIdx)(idx2+2); _IdxWritePtr[13] = (ImDrawIdx)(idx1+2); _IdxWritePtr[14] = (ImDrawIdx)(idx1+3); + _IdxWritePtr[15] = (ImDrawIdx)(idx1+3); _IdxWritePtr[16] = (ImDrawIdx)(idx2+3); _IdxWritePtr[17] = (ImDrawIdx)(idx2+2); + _IdxWritePtr += 18; + + idx1 = idx2; + } + + // Add vertexes + for (int i = 0; i < points_count; i++) + { + _VtxWritePtr[0].pos = temp_points[i*4+0]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col_trans; + _VtxWritePtr[1].pos = temp_points[i*4+1]; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col; + _VtxWritePtr[2].pos = temp_points[i*4+2]; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col; + _VtxWritePtr[3].pos = temp_points[i*4+3]; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col_trans; + _VtxWritePtr += 4; + } + } + _VtxCurrentIdx += (ImDrawIdx)vtx_count; + } + else + { + // Non Anti-aliased Stroke + const int idx_count = count*6; + const int vtx_count = count*4; // FIXME-OPT: Not sharing edges + PrimReserve(idx_count, vtx_count); + + for (int i1 = 0; i1 < count; i1++) + { + const int i2 = (i1+1) == points_count ? 0 : i1+1; + const ImVec2& p1 = points[i1]; + const ImVec2& p2 = points[i2]; + ImVec2 diff = p2 - p1; + diff *= ImInvLength(diff, 1.0f); + + const float dx = diff.x * (thickness * 0.5f); + const float dy = diff.y * (thickness * 0.5f); + _VtxWritePtr[0].pos.x = p1.x + dy; _VtxWritePtr[0].pos.y = p1.y - dx; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; + _VtxWritePtr[1].pos.x = p2.x + dy; _VtxWritePtr[1].pos.y = p2.y - dx; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col; + _VtxWritePtr[2].pos.x = p2.x - dy; _VtxWritePtr[2].pos.y = p2.y + dx; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col; + _VtxWritePtr[3].pos.x = p1.x - dy; _VtxWritePtr[3].pos.y = p1.y + dx; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col; + _VtxWritePtr += 4; + + _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx+1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx+2); + _IdxWritePtr[3] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[4] = (ImDrawIdx)(_VtxCurrentIdx+2); _IdxWritePtr[5] = (ImDrawIdx)(_VtxCurrentIdx+3); + _IdxWritePtr += 6; + _VtxCurrentIdx += 4; + } + } +} + +void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_count, ImU32 col, bool anti_aliased) +{ + const ImVec2 uv = GImGui->FontTexUvWhitePixel; + anti_aliased &= GImGui->Style.AntiAliasedShapes; + //if (ImGui::GetIO().KeyCtrl) anti_aliased = false; // Debug + + if (anti_aliased) + { + // Anti-aliased Fill + const float AA_SIZE = 1.0f; + const ImU32 col_trans = col & IM_COL32(255,255,255,0); + const int idx_count = (points_count-2)*3 + points_count*6; + const int vtx_count = (points_count*2); + PrimReserve(idx_count, vtx_count); + + // Add indexes for fill + unsigned int vtx_inner_idx = _VtxCurrentIdx; + unsigned int vtx_outer_idx = _VtxCurrentIdx+1; + for (int i = 2; i < points_count; i++) + { + _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx+((i-1)<<1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_inner_idx+(i<<1)); + _IdxWritePtr += 3; + } + + // Compute normals + ImVec2* temp_normals = (ImVec2*)alloca(points_count * sizeof(ImVec2)); + for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++) + { + const ImVec2& p0 = points[i0]; + const ImVec2& p1 = points[i1]; + ImVec2 diff = p1 - p0; + diff *= ImInvLength(diff, 1.0f); + temp_normals[i0].x = diff.y; + temp_normals[i0].y = -diff.x; + } + + for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++) + { + // Average normals + const ImVec2& n0 = temp_normals[i0]; + const ImVec2& n1 = temp_normals[i1]; + ImVec2 dm = (n0 + n1) * 0.5f; + float dmr2 = dm.x*dm.x + dm.y*dm.y; + if (dmr2 > 0.000001f) + { + float scale = 1.0f / dmr2; + if (scale > 100.0f) scale = 100.0f; + dm *= scale; + } + dm *= AA_SIZE * 0.5f; + + // Add vertices + _VtxWritePtr[0].pos = (points[i1] - dm); _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; // Inner + _VtxWritePtr[1].pos = (points[i1] + dm); _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans; // Outer + _VtxWritePtr += 2; + + // Add indexes for fringes + _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx+(i1<<1)); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx+(i0<<1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_outer_idx+(i0<<1)); + _IdxWritePtr[3] = (ImDrawIdx)(vtx_outer_idx+(i0<<1)); _IdxWritePtr[4] = (ImDrawIdx)(vtx_outer_idx+(i1<<1)); _IdxWritePtr[5] = (ImDrawIdx)(vtx_inner_idx+(i1<<1)); + _IdxWritePtr += 6; + } + _VtxCurrentIdx += (ImDrawIdx)vtx_count; + } + else + { + // Non Anti-aliased Fill + const int idx_count = (points_count-2)*3; + const int vtx_count = points_count; + PrimReserve(idx_count, vtx_count); + for (int i = 0; i < vtx_count; i++) + { + _VtxWritePtr[0].pos = points[i]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; + _VtxWritePtr++; + } + for (int i = 2; i < points_count; i++) + { + _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx+i-1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx+i); + _IdxWritePtr += 3; + } + _VtxCurrentIdx += (ImDrawIdx)vtx_count; + } +} + +void ImDrawList::PathArcToFast(const ImVec2& centre, float radius, int amin, int amax) +{ + static ImVec2 circle_vtx[12]; + static bool circle_vtx_builds = false; + const int circle_vtx_count = IM_ARRAYSIZE(circle_vtx); + if (!circle_vtx_builds) + { + for (int i = 0; i < circle_vtx_count; i++) + { + const float a = ((float)i / (float)circle_vtx_count) * 2*IM_PI; + circle_vtx[i].x = cosf(a); + circle_vtx[i].y = sinf(a); + } + circle_vtx_builds = true; + } + + if (amin > amax) return; + if (radius == 0.0f) + { + _Path.push_back(centre); + } + else + { + _Path.reserve(_Path.Size + (amax - amin + 1)); + for (int a = amin; a <= amax; a++) + { + const ImVec2& c = circle_vtx[a % circle_vtx_count]; + _Path.push_back(ImVec2(centre.x + c.x * radius, centre.y + c.y * radius)); + } + } +} + +void ImDrawList::PathArcTo(const ImVec2& centre, float radius, float amin, float amax, int num_segments) +{ + if (radius == 0.0f) + _Path.push_back(centre); + _Path.reserve(_Path.Size + (num_segments + 1)); + for (int i = 0; i <= num_segments; i++) + { + const float a = amin + ((float)i / (float)num_segments) * (amax - amin); + _Path.push_back(ImVec2(centre.x + cosf(a) * radius, centre.y + sinf(a) * radius)); + } +} + +static void PathBezierToCasteljau(ImVector* path, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float tess_tol, int level) +{ + float dx = x4 - x1; + float dy = y4 - y1; + float d2 = ((x2 - x4) * dy - (y2 - y4) * dx); + float d3 = ((x3 - x4) * dy - (y3 - y4) * dx); + d2 = (d2 >= 0) ? d2 : -d2; + d3 = (d3 >= 0) ? d3 : -d3; + if ((d2+d3) * (d2+d3) < tess_tol * (dx*dx + dy*dy)) + { + path->push_back(ImVec2(x4, y4)); + } + else if (level < 10) + { + float x12 = (x1+x2)*0.5f, y12 = (y1+y2)*0.5f; + float x23 = (x2+x3)*0.5f, y23 = (y2+y3)*0.5f; + float x34 = (x3+x4)*0.5f, y34 = (y3+y4)*0.5f; + float x123 = (x12+x23)*0.5f, y123 = (y12+y23)*0.5f; + float x234 = (x23+x34)*0.5f, y234 = (y23+y34)*0.5f; + float x1234 = (x123+x234)*0.5f, y1234 = (y123+y234)*0.5f; + + PathBezierToCasteljau(path, x1,y1, x12,y12, x123,y123, x1234,y1234, tess_tol, level+1); + PathBezierToCasteljau(path, x1234,y1234, x234,y234, x34,y34, x4,y4, tess_tol, level+1); + } +} + +void ImDrawList::PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments) +{ + ImVec2 p1 = _Path.back(); + if (num_segments == 0) + { + // Auto-tessellated + PathBezierToCasteljau(&_Path, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, GImGui->Style.CurveTessellationTol, 0); + } + else + { + float t_step = 1.0f / (float)num_segments; + for (int i_step = 1; i_step <= num_segments; i_step++) + { + float t = t_step * i_step; + float u = 1.0f - t; + float w1 = u*u*u; + float w2 = 3*u*u*t; + float w3 = 3*u*t*t; + float w4 = t*t*t; + _Path.push_back(ImVec2(w1*p1.x + w2*p2.x + w3*p3.x + w4*p4.x, w1*p1.y + w2*p2.y + w3*p3.y + w4*p4.y)); + } + } +} + +void ImDrawList::PathRect(const ImVec2& a, const ImVec2& b, float rounding, int rounding_corners) +{ + float r = rounding; + r = ImMin(r, fabsf(b.x-a.x) * ( ((rounding_corners&(1|2))==(1|2)) || ((rounding_corners&(4|8))==(4|8)) ? 0.5f : 1.0f ) - 1.0f); + r = ImMin(r, fabsf(b.y-a.y) * ( ((rounding_corners&(1|8))==(1|8)) || ((rounding_corners&(2|4))==(2|4)) ? 0.5f : 1.0f ) - 1.0f); + + if (r <= 0.0f || rounding_corners == 0) + { + PathLineTo(a); + PathLineTo(ImVec2(b.x,a.y)); + PathLineTo(b); + PathLineTo(ImVec2(a.x,b.y)); + } + else + { + const float r0 = (rounding_corners & 1) ? r : 0.0f; + const float r1 = (rounding_corners & 2) ? r : 0.0f; + const float r2 = (rounding_corners & 4) ? r : 0.0f; + const float r3 = (rounding_corners & 8) ? r : 0.0f; + PathArcToFast(ImVec2(a.x+r0,a.y+r0), r0, 6, 9); + PathArcToFast(ImVec2(b.x-r1,a.y+r1), r1, 9, 12); + PathArcToFast(ImVec2(b.x-r2,b.y-r2), r2, 0, 3); + PathArcToFast(ImVec2(a.x+r3,b.y-r3), r3, 3, 6); + } +} + +void ImDrawList::AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + PathLineTo(a + ImVec2(0.5f,0.5f)); + PathLineTo(b + ImVec2(0.5f,0.5f)); + PathStroke(col, false, thickness); +} + +// a: upper-left, b: lower-right. we don't render 1 px sized rectangles properly. +void ImDrawList::AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding, int rounding_corners_flags, float thickness) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + PathRect(a + ImVec2(0.5f,0.5f), b - ImVec2(0.5f,0.5f), rounding, rounding_corners_flags); + PathStroke(col, true, thickness); +} + +void ImDrawList::AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding, int rounding_corners_flags) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + if (rounding > 0.0f) + { + PathRect(a, b, rounding, rounding_corners_flags); + PathFill(col); + } + else + { + PrimReserve(6, 4); + PrimRect(a, b, col); + } +} + +void ImDrawList::AddRectFilledMultiColor(const ImVec2& a, const ImVec2& c, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left) +{ + if (((col_upr_left | col_upr_right | col_bot_right | col_bot_left) & IM_COL32_A_MASK) == 0) + return; + + const ImVec2 uv = GImGui->FontTexUvWhitePixel; + PrimReserve(6, 4); + PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2)); + PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+3)); + PrimWriteVtx(a, uv, col_upr_left); + PrimWriteVtx(ImVec2(c.x, a.y), uv, col_upr_right); + PrimWriteVtx(c, uv, col_bot_right); + PrimWriteVtx(ImVec2(a.x, c.y), uv, col_bot_left); +} + +void ImDrawList::AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + + PathLineTo(a); + PathLineTo(b); + PathLineTo(c); + PathLineTo(d); + PathStroke(col, true, thickness); +} + +void ImDrawList::AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + + PathLineTo(a); + PathLineTo(b); + PathLineTo(c); + PathLineTo(d); + PathFill(col); +} + +void ImDrawList::AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + + PathLineTo(a); + PathLineTo(b); + PathLineTo(c); + PathStroke(col, true, thickness); +} + +void ImDrawList::AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + + PathLineTo(a); + PathLineTo(b); + PathLineTo(c); + PathFill(col); +} + +void ImDrawList::AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments, float thickness) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + + const float a_max = IM_PI*2.0f * ((float)num_segments - 1.0f) / (float)num_segments; + PathArcTo(centre, radius-0.5f, 0.0f, a_max, num_segments); + PathStroke(col, true, thickness); +} + +void ImDrawList::AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + + const float a_max = IM_PI*2.0f * ((float)num_segments - 1.0f) / (float)num_segments; + PathArcTo(centre, radius, 0.0f, a_max, num_segments); + PathFill(col); +} + +void ImDrawList::AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + + PathLineTo(pos0); + PathBezierCurveTo(cp0, cp1, pos1, num_segments); + PathStroke(col, false, thickness); +} + +void ImDrawList::AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end, float wrap_width, const ImVec4* cpu_fine_clip_rect) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + + if (text_end == NULL) + text_end = text_begin + strlen(text_begin); + if (text_begin == text_end) + return; + + // Note: This is one of the few instance of breaking the encapsulation of ImDrawList, as we pull this from ImGui state, but it is just SO useful. + // Might just move Font/FontSize to ImDrawList? + if (font == NULL) + font = GImGui->Font; + if (font_size == 0.0f) + font_size = GImGui->FontSize; + + IM_ASSERT(font->ContainerAtlas->TexID == _TextureIdStack.back()); // Use high-level ImGui::PushFont() or low-level ImDrawList::PushTextureId() to change font. + + ImVec4 clip_rect = _ClipRectStack.back(); + if (cpu_fine_clip_rect) + { + clip_rect.x = ImMax(clip_rect.x, cpu_fine_clip_rect->x); + clip_rect.y = ImMax(clip_rect.y, cpu_fine_clip_rect->y); + clip_rect.z = ImMin(clip_rect.z, cpu_fine_clip_rect->z); + clip_rect.w = ImMin(clip_rect.w, cpu_fine_clip_rect->w); + } + font->RenderText(this, font_size, pos, col, clip_rect, text_begin, text_end, wrap_width, cpu_fine_clip_rect != NULL); +} + +void ImDrawList::AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end) +{ + AddText(GImGui->Font, GImGui->FontSize, pos, col, text_begin, text_end); +} + +void ImDrawList::AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv0, const ImVec2& uv1, ImU32 col) +{ + if ((col & IM_COL32_A_MASK) == 0) + return; + + // FIXME-OPT: This is wasting draw calls. + const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back(); + if (push_texture_id) + PushTextureID(user_texture_id); + + PrimReserve(6, 4); + PrimRectUV(a, b, uv0, uv1, col); + + if (push_texture_id) + PopTextureID(); +} + +//----------------------------------------------------------------------------- +// ImDrawData +//----------------------------------------------------------------------------- + +// For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! +void ImDrawData::DeIndexAllBuffers() +{ + ImVector new_vtx_buffer; + TotalVtxCount = TotalIdxCount = 0; + for (int i = 0; i < CmdListsCount; i++) + { + ImDrawList* cmd_list = CmdLists[i]; + if (cmd_list->IdxBuffer.empty()) + continue; + new_vtx_buffer.resize(cmd_list->IdxBuffer.Size); + for (int j = 0; j < cmd_list->IdxBuffer.Size; j++) + new_vtx_buffer[j] = cmd_list->VtxBuffer[cmd_list->IdxBuffer[j]]; + cmd_list->VtxBuffer.swap(new_vtx_buffer); + cmd_list->IdxBuffer.resize(0); + TotalVtxCount += cmd_list->VtxBuffer.Size; + } +} + +// Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. +void ImDrawData::ScaleClipRects(const ImVec2& scale) +{ + for (int i = 0; i < CmdListsCount; i++) + { + ImDrawList* cmd_list = CmdLists[i]; + for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) + { + ImDrawCmd* cmd = &cmd_list->CmdBuffer[cmd_i]; + cmd->ClipRect = ImVec4(cmd->ClipRect.x * scale.x, cmd->ClipRect.y * scale.y, cmd->ClipRect.z * scale.x, cmd->ClipRect.w * scale.y); + } + } +} + +//----------------------------------------------------------------------------- +// ImFontAtlas +//----------------------------------------------------------------------------- + +ImFontConfig::ImFontConfig() +{ + FontData = NULL; + FontDataSize = 0; + FontDataOwnedByAtlas = true; + FontNo = 0; + SizePixels = 0.0f; + OversampleH = 3; + OversampleV = 1; + PixelSnapH = false; + GlyphExtraSpacing = ImVec2(0.0f, 0.0f); + GlyphRanges = NULL; + MergeMode = false; + MergeGlyphCenterV = false; + DstFont = NULL; + memset(Name, 0, sizeof(Name)); +} + +ImFontAtlas::ImFontAtlas() +{ + TexID = NULL; + TexPixelsAlpha8 = NULL; + TexPixelsRGBA32 = NULL; + TexWidth = TexHeight = TexDesiredWidth = 0; + TexUvWhitePixel = ImVec2(0, 0); +} + +ImFontAtlas::~ImFontAtlas() +{ + Clear(); +} + +void ImFontAtlas::ClearInputData() +{ + for (int i = 0; i < ConfigData.Size; i++) + if (ConfigData[i].FontData && ConfigData[i].FontDataOwnedByAtlas) + { + ImGui::MemFree(ConfigData[i].FontData); + ConfigData[i].FontData = NULL; + } + + // When clearing this we lose access to the font name and other information used to build the font. + for (int i = 0; i < Fonts.Size; i++) + if (Fonts[i]->ConfigData >= ConfigData.Data && Fonts[i]->ConfigData < ConfigData.Data + ConfigData.Size) + { + Fonts[i]->ConfigData = NULL; + Fonts[i]->ConfigDataCount = 0; + } + ConfigData.clear(); +} + +void ImFontAtlas::ClearTexData() +{ + if (TexPixelsAlpha8) + ImGui::MemFree(TexPixelsAlpha8); + if (TexPixelsRGBA32) + ImGui::MemFree(TexPixelsRGBA32); + TexPixelsAlpha8 = NULL; + TexPixelsRGBA32 = NULL; +} + +void ImFontAtlas::ClearFonts() +{ + for (int i = 0; i < Fonts.Size; i++) + { + Fonts[i]->~ImFont(); + ImGui::MemFree(Fonts[i]); + } + Fonts.clear(); +} + +void ImFontAtlas::Clear() +{ + ClearInputData(); + ClearTexData(); + ClearFonts(); +} + +void ImFontAtlas::GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel) +{ + // Build atlas on demand + if (TexPixelsAlpha8 == NULL) + { + if (ConfigData.empty()) + AddFontDefault(); + Build(); + } + + *out_pixels = TexPixelsAlpha8; + if (out_width) *out_width = TexWidth; + if (out_height) *out_height = TexHeight; + if (out_bytes_per_pixel) *out_bytes_per_pixel = 1; +} + +void ImFontAtlas::GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel) +{ + // Convert to RGBA32 format on demand + // Although it is likely to be the most commonly used format, our font rendering is 1 channel / 8 bpp + if (!TexPixelsRGBA32) + { + unsigned char* pixels; + GetTexDataAsAlpha8(&pixels, NULL, NULL); + TexPixelsRGBA32 = (unsigned int*)ImGui::MemAlloc((size_t)(TexWidth * TexHeight * 4)); + const unsigned char* src = pixels; + unsigned int* dst = TexPixelsRGBA32; + for (int n = TexWidth * TexHeight; n > 0; n--) + *dst++ = IM_COL32(255, 255, 255, (unsigned int)(*src++)); + } + + *out_pixels = (unsigned char*)TexPixelsRGBA32; + if (out_width) *out_width = TexWidth; + if (out_height) *out_height = TexHeight; + if (out_bytes_per_pixel) *out_bytes_per_pixel = 4; +} + +ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg) +{ + IM_ASSERT(font_cfg->FontData != NULL && font_cfg->FontDataSize > 0); + IM_ASSERT(font_cfg->SizePixels > 0.0f); + + // Create new font + if (!font_cfg->MergeMode) + { + ImFont* font = (ImFont*)ImGui::MemAlloc(sizeof(ImFont)); + IM_PLACEMENT_NEW(font) ImFont(); + Fonts.push_back(font); + } + + ConfigData.push_back(*font_cfg); + ImFontConfig& new_font_cfg = ConfigData.back(); + if (!new_font_cfg.DstFont) + new_font_cfg.DstFont = Fonts.back(); + if (!new_font_cfg.FontDataOwnedByAtlas) + { + new_font_cfg.FontData = ImGui::MemAlloc(new_font_cfg.FontDataSize); + new_font_cfg.FontDataOwnedByAtlas = true; + memcpy(new_font_cfg.FontData, font_cfg->FontData, (size_t)new_font_cfg.FontDataSize); + } + + // Invalidate texture + ClearTexData(); + return new_font_cfg.DstFont; +} + +// Default font TTF is compressed with stb_compress then base85 encoded (see extra_fonts/binary_to_compressed_c.cpp for encoder) +static unsigned int stb_decompress_length(unsigned char *input); +static unsigned int stb_decompress(unsigned char *output, unsigned char *i, unsigned int length); +static const char* GetDefaultCompressedFontDataTTFBase85(); +static unsigned int Decode85Byte(char c) { return c >= '\\' ? c-36 : c-35; } +static void Decode85(const unsigned char* src, unsigned char* dst) +{ + while (*src) + { + unsigned int tmp = Decode85Byte(src[0]) + 85*(Decode85Byte(src[1]) + 85*(Decode85Byte(src[2]) + 85*(Decode85Byte(src[3]) + 85*Decode85Byte(src[4])))); + dst[0] = ((tmp >> 0) & 0xFF); dst[1] = ((tmp >> 8) & 0xFF); dst[2] = ((tmp >> 16) & 0xFF); dst[3] = ((tmp >> 24) & 0xFF); // We can't assume little-endianness. + src += 5; + dst += 4; + } +} + +// Load embedded ProggyClean.ttf at size 13, disable oversampling +ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template) +{ + ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); + if (!font_cfg_template) + { + font_cfg.OversampleH = font_cfg.OversampleV = 1; + font_cfg.PixelSnapH = true; + } + if (font_cfg.Name[0] == '\0') strcpy(font_cfg.Name, "ProggyClean.ttf, 13px"); + + const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85(); + ImFont* font = AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, 13.0f, &font_cfg, GetGlyphRangesDefault()); + return font; +} + +ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) +{ + int data_size = 0; + void* data = ImLoadFileToMemory(filename, "rb", &data_size, 0); + if (!data) + { + IM_ASSERT(0); // Could not load file. + return NULL; + } + ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); + if (font_cfg.Name[0] == '\0') + { + // Store a short copy of filename into into the font name for convenience + const char* p; + for (p = filename + strlen(filename); p > filename && p[-1] != '/' && p[-1] != '\\'; p--) {} + snprintf(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "%s, %.0fpx", p, size_pixels); + } + return AddFontFromMemoryTTF(data, data_size, size_pixels, &font_cfg, glyph_ranges); +} + +// NBM Transfer ownership of 'ttf_data' to ImFontAtlas, unless font_cfg_template->FontDataOwnedByAtlas == false. Owned TTF buffer will be deleted after Build(). +ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) +{ + ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); + IM_ASSERT(font_cfg.FontData == NULL); + font_cfg.FontData = ttf_data; + font_cfg.FontDataSize = ttf_size; + font_cfg.SizePixels = size_pixels; + if (glyph_ranges) + font_cfg.GlyphRanges = glyph_ranges; + return AddFont(&font_cfg); +} + +ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) +{ + const unsigned int buf_decompressed_size = stb_decompress_length((unsigned char*)compressed_ttf_data); + unsigned char* buf_decompressed_data = (unsigned char *)ImGui::MemAlloc(buf_decompressed_size); + stb_decompress(buf_decompressed_data, (unsigned char*)compressed_ttf_data, (unsigned int)compressed_ttf_size); + + ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); + IM_ASSERT(font_cfg.FontData == NULL); + font_cfg.FontDataOwnedByAtlas = true; + return AddFontFromMemoryTTF(buf_decompressed_data, (int)buf_decompressed_size, size_pixels, &font_cfg, glyph_ranges); +} + +ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg, const ImWchar* glyph_ranges) +{ + int compressed_ttf_size = (((int)strlen(compressed_ttf_data_base85) + 4) / 5) * 4; + void* compressed_ttf = ImGui::MemAlloc((size_t)compressed_ttf_size); + Decode85((const unsigned char*)compressed_ttf_data_base85, (unsigned char*)compressed_ttf); + ImFont* font = AddFontFromMemoryCompressedTTF(compressed_ttf, compressed_ttf_size, size_pixels, font_cfg, glyph_ranges); + ImGui::MemFree(compressed_ttf); + return font; +} + +bool ImFontAtlas::Build() +{ + IM_ASSERT(ConfigData.Size > 0); + + TexID = NULL; + TexWidth = TexHeight = 0; + TexUvWhitePixel = ImVec2(0, 0); + ClearTexData(); + + struct ImFontTempBuildData + { + stbtt_fontinfo FontInfo; + stbrp_rect* Rects; + stbtt_pack_range* Ranges; + int RangesCount; + }; + ImFontTempBuildData* tmp_array = (ImFontTempBuildData*)ImGui::MemAlloc((size_t)ConfigData.Size * sizeof(ImFontTempBuildData)); + + // Initialize font information early (so we can error without any cleanup) + count glyphs + int total_glyph_count = 0; + int total_glyph_range_count = 0; + for (int input_i = 0; input_i < ConfigData.Size; input_i++) + { + ImFontConfig& cfg = ConfigData[input_i]; + ImFontTempBuildData& tmp = tmp_array[input_i]; + + IM_ASSERT(cfg.DstFont && (!cfg.DstFont->IsLoaded() || cfg.DstFont->ContainerAtlas == this)); + const int font_offset = stbtt_GetFontOffsetForIndex((unsigned char*)cfg.FontData, cfg.FontNo); + IM_ASSERT(font_offset >= 0); + if (!stbtt_InitFont(&tmp.FontInfo, (unsigned char*)cfg.FontData, font_offset)) + return false; + + // Count glyphs + if (!cfg.GlyphRanges) + cfg.GlyphRanges = GetGlyphRangesDefault(); + for (const ImWchar* in_range = cfg.GlyphRanges; in_range[0] && in_range[1]; in_range += 2) + { + total_glyph_count += (in_range[1] - in_range[0]) + 1; + total_glyph_range_count++; + } + } + + // Start packing. We need a known width for the skyline algorithm. Using a cheap heuristic here to decide of width. User can override TexDesiredWidth if they wish. + // After packing is done, width shouldn't matter much, but some API/GPU have texture size limitations and increasing width can decrease height. + TexWidth = (TexDesiredWidth > 0) ? TexDesiredWidth : (total_glyph_count > 4000) ? 4096 : (total_glyph_count > 2000) ? 2048 : (total_glyph_count > 1000) ? 1024 : 512; + TexHeight = 0; + const int max_tex_height = 1024*32; + stbtt_pack_context spc; + stbtt_PackBegin(&spc, NULL, TexWidth, max_tex_height, 0, 1, NULL); + + // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values). + ImVector extra_rects; + RenderCustomTexData(0, &extra_rects); + stbtt_PackSetOversampling(&spc, 1, 1); + stbrp_pack_rects((stbrp_context*)spc.pack_info, &extra_rects[0], extra_rects.Size); + for (int i = 0; i < extra_rects.Size; i++) + if (extra_rects[i].was_packed) + TexHeight = ImMax(TexHeight, extra_rects[i].y + extra_rects[i].h); + + // Allocate packing character data and flag packed characters buffer as non-packed (x0=y0=x1=y1=0) + int buf_packedchars_n = 0, buf_rects_n = 0, buf_ranges_n = 0; + stbtt_packedchar* buf_packedchars = (stbtt_packedchar*)ImGui::MemAlloc(total_glyph_count * sizeof(stbtt_packedchar)); + stbrp_rect* buf_rects = (stbrp_rect*)ImGui::MemAlloc(total_glyph_count * sizeof(stbrp_rect)); + stbtt_pack_range* buf_ranges = (stbtt_pack_range*)ImGui::MemAlloc(total_glyph_range_count * sizeof(stbtt_pack_range)); + memset(buf_packedchars, 0, total_glyph_count * sizeof(stbtt_packedchar)); + memset(buf_rects, 0, total_glyph_count * sizeof(stbrp_rect)); // Unnecessary but let's clear this for the sake of sanity. + memset(buf_ranges, 0, total_glyph_range_count * sizeof(stbtt_pack_range)); + + // First font pass: pack all glyphs (no rendering at this point, we are working with rectangles in an infinitely tall texture at this point) + for (int input_i = 0; input_i < ConfigData.Size; input_i++) + { + ImFontConfig& cfg = ConfigData[input_i]; + ImFontTempBuildData& tmp = tmp_array[input_i]; + + // Setup ranges + int glyph_count = 0; + int glyph_ranges_count = 0; + for (const ImWchar* in_range = cfg.GlyphRanges; in_range[0] && in_range[1]; in_range += 2) + { + glyph_count += (in_range[1] - in_range[0]) + 1; + glyph_ranges_count++; + } + tmp.Ranges = buf_ranges + buf_ranges_n; + tmp.RangesCount = glyph_ranges_count; + buf_ranges_n += glyph_ranges_count; + for (int i = 0; i < glyph_ranges_count; i++) + { + const ImWchar* in_range = &cfg.GlyphRanges[i * 2]; + stbtt_pack_range& range = tmp.Ranges[i]; + range.font_size = cfg.SizePixels; + range.first_unicode_codepoint_in_range = in_range[0]; + range.num_chars = (in_range[1] - in_range[0]) + 1; + range.chardata_for_range = buf_packedchars + buf_packedchars_n; + buf_packedchars_n += range.num_chars; + } + + // Pack + tmp.Rects = buf_rects + buf_rects_n; + buf_rects_n += glyph_count; + stbtt_PackSetOversampling(&spc, cfg.OversampleH, cfg.OversampleV); + int n = stbtt_PackFontRangesGatherRects(&spc, &tmp.FontInfo, tmp.Ranges, tmp.RangesCount, tmp.Rects); + stbrp_pack_rects((stbrp_context*)spc.pack_info, tmp.Rects, n); + + // Extend texture height + for (int i = 0; i < n; i++) + if (tmp.Rects[i].was_packed) + TexHeight = ImMax(TexHeight, tmp.Rects[i].y + tmp.Rects[i].h); + } + IM_ASSERT(buf_rects_n == total_glyph_count); + IM_ASSERT(buf_packedchars_n == total_glyph_count); + IM_ASSERT(buf_ranges_n == total_glyph_range_count); + + // Create texture + TexHeight = ImUpperPowerOfTwo(TexHeight); + TexPixelsAlpha8 = (unsigned char*)ImGui::MemAlloc(TexWidth * TexHeight); + memset(TexPixelsAlpha8, 0, TexWidth * TexHeight); + spc.pixels = TexPixelsAlpha8; + spc.height = TexHeight; + + // Second pass: render characters + for (int input_i = 0; input_i < ConfigData.Size; input_i++) + { + ImFontConfig& cfg = ConfigData[input_i]; + ImFontTempBuildData& tmp = tmp_array[input_i]; + stbtt_PackSetOversampling(&spc, cfg.OversampleH, cfg.OversampleV); + stbtt_PackFontRangesRenderIntoRects(&spc, &tmp.FontInfo, tmp.Ranges, tmp.RangesCount, tmp.Rects); + tmp.Rects = NULL; + } + + // End packing + stbtt_PackEnd(&spc); + ImGui::MemFree(buf_rects); + buf_rects = NULL; + + // Third pass: setup ImFont and glyphs for runtime + for (int input_i = 0; input_i < ConfigData.Size; input_i++) + { + ImFontConfig& cfg = ConfigData[input_i]; + ImFontTempBuildData& tmp = tmp_array[input_i]; + ImFont* dst_font = cfg.DstFont; + + float font_scale = stbtt_ScaleForPixelHeight(&tmp.FontInfo, cfg.SizePixels); + int unscaled_ascent, unscaled_descent, unscaled_line_gap; + stbtt_GetFontVMetrics(&tmp.FontInfo, &unscaled_ascent, &unscaled_descent, &unscaled_line_gap); + + float ascent = unscaled_ascent * font_scale; + float descent = unscaled_descent * font_scale; + if (!cfg.MergeMode) + { + dst_font->ContainerAtlas = this; + dst_font->ConfigData = &cfg; + dst_font->ConfigDataCount = 0; + dst_font->FontSize = cfg.SizePixels; + dst_font->Ascent = ascent; + dst_font->Descent = descent; + dst_font->Glyphs.resize(0); + } + dst_font->ConfigDataCount++; + float off_y = (cfg.MergeMode && cfg.MergeGlyphCenterV) ? (ascent - dst_font->Ascent) * 0.5f : 0.0f; + + dst_font->FallbackGlyph = NULL; // Always clear fallback so FindGlyph can return NULL. It will be set again in BuildLookupTable() + for (int i = 0; i < tmp.RangesCount; i++) + { + stbtt_pack_range& range = tmp.Ranges[i]; + for (int char_idx = 0; char_idx < range.num_chars; char_idx += 1) + { + const stbtt_packedchar& pc = range.chardata_for_range[char_idx]; + if (!pc.x0 && !pc.x1 && !pc.y0 && !pc.y1) + continue; + + const int codepoint = range.first_unicode_codepoint_in_range + char_idx; + if (cfg.MergeMode && dst_font->FindGlyph((unsigned short)codepoint)) + continue; + + stbtt_aligned_quad q; + float dummy_x = 0.0f, dummy_y = 0.0f; + stbtt_GetPackedQuad(range.chardata_for_range, TexWidth, TexHeight, char_idx, &dummy_x, &dummy_y, &q, 0); + + dst_font->Glyphs.resize(dst_font->Glyphs.Size + 1); + ImFont::Glyph& glyph = dst_font->Glyphs.back(); + glyph.Codepoint = (ImWchar)codepoint; + glyph.X0 = q.x0; glyph.Y0 = q.y0; glyph.X1 = q.x1; glyph.Y1 = q.y1; + glyph.U0 = q.s0; glyph.V0 = q.t0; glyph.U1 = q.s1; glyph.V1 = q.t1; + glyph.Y0 += (float)(int)(dst_font->Ascent + off_y + 0.5f); + glyph.Y1 += (float)(int)(dst_font->Ascent + off_y + 0.5f); + glyph.XAdvance = (pc.xadvance + cfg.GlyphExtraSpacing.x); // Bake spacing into XAdvance + if (cfg.PixelSnapH) + glyph.XAdvance = (float)(int)(glyph.XAdvance + 0.5f); + } + } + cfg.DstFont->BuildLookupTable(); + } + + // Cleanup temporaries + ImGui::MemFree(buf_packedchars); + ImGui::MemFree(buf_ranges); + ImGui::MemFree(tmp_array); + + // Render into our custom data block + RenderCustomTexData(1, &extra_rects); + + return true; +} + +void ImFontAtlas::RenderCustomTexData(int pass, void* p_rects) +{ + // A work of art lies ahead! (. = white layer, X = black layer, others are blank) + // The white texels on the top left are the ones we'll use everywhere in ImGui to render filled shapes. + const int TEX_DATA_W = 90; + const int TEX_DATA_H = 27; + const char texture_data[TEX_DATA_W*TEX_DATA_H+1] = + { + "..- -XXXXXXX- X - X -XXXXXXX - XXXXXXX" + "..- -X.....X- X.X - X.X -X.....X - X.....X" + "--- -XXX.XXX- X...X - X...X -X....X - X....X" + "X - X.X - X.....X - X.....X -X...X - X...X" + "XX - X.X -X.......X- X.......X -X..X.X - X.X..X" + "X.X - X.X -XXXX.XXXX- XXXX.XXXX -X.X X.X - X.X X.X" + "X..X - X.X - X.X - X.X -XX X.X - X.X XX" + "X...X - X.X - X.X - XX X.X XX - X.X - X.X " + "X....X - X.X - X.X - X.X X.X X.X - X.X - X.X " + "X.....X - X.X - X.X - X..X X.X X..X - X.X - X.X " + "X......X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X XX-XX X.X " + "X.......X - X.X - X.X -X.....................X- X.X X.X-X.X X.X " + "X........X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X..X-X..X.X " + "X.........X -XXX.XXX- X.X - X..X X.X X..X - X...X-X...X " + "X..........X-X.....X- X.X - X.X X.X X.X - X....X-X....X " + "X......XXXXX-XXXXXXX- X.X - XX X.X XX - X.....X-X.....X " + "X...X..X --------- X.X - X.X - XXXXXXX-XXXXXXX " + "X..X X..X - -XXXX.XXXX- XXXX.XXXX ------------------------------------" + "X.X X..X - -X.......X- X.......X - XX XX - " + "XX X..X - - X.....X - X.....X - X.X X.X - " + " X..X - X...X - X...X - X..X X..X - " + " XX - X.X - X.X - X...XXXXXXXXXXXXX...X - " + "------------ - X - X -X.....................X- " + " ----------------------------------- X...XXXXXXXXXXXXX...X - " + " - X..X X..X - " + " - X.X X.X - " + " - XX XX - " + }; + + ImVector& rects = *(ImVector*)p_rects; + if (pass == 0) + { + // Request rectangles + stbrp_rect r; + memset(&r, 0, sizeof(r)); + r.w = (TEX_DATA_W*2)+1; + r.h = TEX_DATA_H+1; + rects.push_back(r); + } + else if (pass == 1) + { + // Render/copy pixels + const stbrp_rect& r = rects[0]; + for (int y = 0, n = 0; y < TEX_DATA_H; y++) + for (int x = 0; x < TEX_DATA_W; x++, n++) + { + const int offset0 = (int)(r.x + x) + (int)(r.y + y) * TexWidth; + const int offset1 = offset0 + 1 + TEX_DATA_W; + TexPixelsAlpha8[offset0] = texture_data[n] == '.' ? 0xFF : 0x00; + TexPixelsAlpha8[offset1] = texture_data[n] == 'X' ? 0xFF : 0x00; + } + const ImVec2 tex_uv_scale(1.0f / TexWidth, 1.0f / TexHeight); + TexUvWhitePixel = ImVec2((r.x + 0.5f) * tex_uv_scale.x, (r.y + 0.5f) * tex_uv_scale.y); + + // Setup mouse cursors + const ImVec2 cursor_datas[ImGuiMouseCursor_Count_][3] = + { + // Pos ........ Size ......... Offset ...... + { ImVec2(0,3), ImVec2(12,19), ImVec2( 0, 0) }, // ImGuiMouseCursor_Arrow + { ImVec2(13,0), ImVec2(7,16), ImVec2( 4, 8) }, // ImGuiMouseCursor_TextInput + { ImVec2(31,0), ImVec2(23,23), ImVec2(11,11) }, // ImGuiMouseCursor_Move + { ImVec2(21,0), ImVec2( 9,23), ImVec2( 5,11) }, // ImGuiMouseCursor_ResizeNS + { ImVec2(55,18),ImVec2(23, 9), ImVec2(11, 5) }, // ImGuiMouseCursor_ResizeEW + { ImVec2(73,0), ImVec2(17,17), ImVec2( 9, 9) }, // ImGuiMouseCursor_ResizeNESW + { ImVec2(55,0), ImVec2(17,17), ImVec2( 9, 9) }, // ImGuiMouseCursor_ResizeNWSE + }; + + for (int type = 0; type < ImGuiMouseCursor_Count_; type++) + { + ImGuiMouseCursorData& cursor_data = GImGui->MouseCursorData[type]; + ImVec2 pos = cursor_datas[type][0] + ImVec2((float)r.x, (float)r.y); + const ImVec2 size = cursor_datas[type][1]; + cursor_data.Type = type; + cursor_data.Size = size; + cursor_data.HotOffset = cursor_datas[type][2]; + cursor_data.TexUvMin[0] = (pos) * tex_uv_scale; + cursor_data.TexUvMax[0] = (pos + size) * tex_uv_scale; + pos.x += TEX_DATA_W+1; + cursor_data.TexUvMin[1] = (pos) * tex_uv_scale; + cursor_data.TexUvMax[1] = (pos + size) * tex_uv_scale; + } + } +} + +// Retrieve list of range (2 int per range, values are inclusive) +const ImWchar* ImFontAtlas::GetGlyphRangesDefault() +{ + static const ImWchar ranges[] = + { + 0x0020, 0x00FF, // Basic Latin + Latin Supplement + 0, + }; + return &ranges[0]; +} + +const ImWchar* ImFontAtlas::GetGlyphRangesKorean() +{ + static const ImWchar ranges[] = + { + 0x0020, 0x00FF, // Basic Latin + Latin Supplement + 0x3131, 0x3163, // Korean alphabets + 0xAC00, 0xD79D, // Korean characters + 0, + }; + return &ranges[0]; +} + +const ImWchar* ImFontAtlas::GetGlyphRangesChinese() +{ + static const ImWchar ranges[] = + { + 0x0020, 0x00FF, // Basic Latin + Latin Supplement + 0x3000, 0x30FF, // Punctuations, Hiragana, Katakana + 0x31F0, 0x31FF, // Katakana Phonetic Extensions + 0xFF00, 0xFFEF, // Half-width characters + 0x4e00, 0x9FAF, // CJK Ideograms + 0, + }; + return &ranges[0]; +} + +const ImWchar* ImFontAtlas::GetGlyphRangesJapanese() +{ + // Store the 1946 ideograms code points as successive offsets from the initial unicode codepoint 0x4E00. Each offset has an implicit +1. + // This encoding helps us reduce the source code size. + static const short offsets_from_0x4E00[] = + { + -1,0,1,3,0,0,0,0,1,0,5,1,1,0,7,4,6,10,0,1,9,9,7,1,3,19,1,10,7,1,0,1,0,5,1,0,6,4,2,6,0,0,12,6,8,0,3,5,0,1,0,9,0,0,8,1,1,3,4,5,13,0,0,8,2,17, + 4,3,1,1,9,6,0,0,0,2,1,3,2,22,1,9,11,1,13,1,3,12,0,5,9,2,0,6,12,5,3,12,4,1,2,16,1,1,4,6,5,3,0,6,13,15,5,12,8,14,0,0,6,15,3,6,0,18,8,1,6,14,1, + 5,4,12,24,3,13,12,10,24,0,0,0,1,0,1,1,2,9,10,2,2,0,0,3,3,1,0,3,8,0,3,2,4,4,1,6,11,10,14,6,15,3,4,15,1,0,0,5,2,2,0,0,1,6,5,5,6,0,3,6,5,0,0,1,0, + 11,2,2,8,4,7,0,10,0,1,2,17,19,3,0,2,5,0,6,2,4,4,6,1,1,11,2,0,3,1,2,1,2,10,7,6,3,16,0,8,24,0,0,3,1,1,3,0,1,6,0,0,0,2,0,1,5,15,0,1,0,0,2,11,19, + 1,4,19,7,6,5,1,0,0,0,0,5,1,0,1,9,0,0,5,0,2,0,1,0,3,0,11,3,0,2,0,0,0,0,0,9,3,6,4,12,0,14,0,0,29,10,8,0,14,37,13,0,31,16,19,0,8,30,1,20,8,3,48, + 21,1,0,12,0,10,44,34,42,54,11,18,82,0,2,1,2,12,1,0,6,2,17,2,12,7,0,7,17,4,2,6,24,23,8,23,39,2,16,23,1,0,5,1,2,15,14,5,6,2,11,0,8,6,2,2,2,14, + 20,4,15,3,4,11,10,10,2,5,2,1,30,2,1,0,0,22,5,5,0,3,1,5,4,1,0,0,2,2,21,1,5,1,2,16,2,1,3,4,0,8,4,0,0,5,14,11,2,16,1,13,1,7,0,22,15,3,1,22,7,14, + 22,19,11,24,18,46,10,20,64,45,3,2,0,4,5,0,1,4,25,1,0,0,2,10,0,0,0,1,0,1,2,0,0,9,1,2,0,0,0,2,5,2,1,1,5,5,8,1,1,1,5,1,4,9,1,3,0,1,0,1,1,2,0,0, + 2,0,1,8,22,8,1,0,0,0,0,4,2,1,0,9,8,5,0,9,1,30,24,2,6,4,39,0,14,5,16,6,26,179,0,2,1,1,0,0,0,5,2,9,6,0,2,5,16,7,5,1,1,0,2,4,4,7,15,13,14,0,0, + 3,0,1,0,0,0,2,1,6,4,5,1,4,9,0,3,1,8,0,0,10,5,0,43,0,2,6,8,4,0,2,0,0,9,6,0,9,3,1,6,20,14,6,1,4,0,7,2,3,0,2,0,5,0,3,1,0,3,9,7,0,3,4,0,4,9,1,6,0, + 9,0,0,2,3,10,9,28,3,6,2,4,1,2,32,4,1,18,2,0,3,1,5,30,10,0,2,2,2,0,7,9,8,11,10,11,7,2,13,7,5,10,0,3,40,2,0,1,6,12,0,4,5,1,5,11,11,21,4,8,3,7, + 8,8,33,5,23,0,0,19,8,8,2,3,0,6,1,1,1,5,1,27,4,2,5,0,3,5,6,3,1,0,3,1,12,5,3,3,2,0,7,7,2,1,0,4,0,1,1,2,0,10,10,6,2,5,9,7,5,15,15,21,6,11,5,20, + 4,3,5,5,2,5,0,2,1,0,1,7,28,0,9,0,5,12,5,5,18,30,0,12,3,3,21,16,25,32,9,3,14,11,24,5,66,9,1,2,0,5,9,1,5,1,8,0,8,3,3,0,1,15,1,4,8,1,2,7,0,7,2, + 8,3,7,5,3,7,10,2,1,0,0,2,25,0,6,4,0,10,0,4,2,4,1,12,5,38,4,0,4,1,10,5,9,4,0,14,4,2,5,18,20,21,1,3,0,5,0,7,0,3,7,1,3,1,1,8,1,0,0,0,3,2,5,2,11, + 6,0,13,1,3,9,1,12,0,16,6,2,1,0,2,1,12,6,13,11,2,0,28,1,7,8,14,13,8,13,0,2,0,5,4,8,10,2,37,42,19,6,6,7,4,14,11,18,14,80,7,6,0,4,72,12,36,27, + 7,7,0,14,17,19,164,27,0,5,10,7,3,13,6,14,0,2,2,5,3,0,6,13,0,0,10,29,0,4,0,3,13,0,3,1,6,51,1,5,28,2,0,8,0,20,2,4,0,25,2,10,13,10,0,16,4,0,1,0, + 2,1,7,0,1,8,11,0,0,1,2,7,2,23,11,6,6,4,16,2,2,2,0,22,9,3,3,5,2,0,15,16,21,2,9,20,15,15,5,3,9,1,0,0,1,7,7,5,4,2,2,2,38,24,14,0,0,15,5,6,24,14, + 5,5,11,0,21,12,0,3,8,4,11,1,8,0,11,27,7,2,4,9,21,59,0,1,39,3,60,62,3,0,12,11,0,3,30,11,0,13,88,4,15,5,28,13,1,4,48,17,17,4,28,32,46,0,16,0, + 18,11,1,8,6,38,11,2,6,11,38,2,0,45,3,11,2,7,8,4,30,14,17,2,1,1,65,18,12,16,4,2,45,123,12,56,33,1,4,3,4,7,0,0,0,3,2,0,16,4,2,4,2,0,7,4,5,2,26, + 2,25,6,11,6,1,16,2,6,17,77,15,3,35,0,1,0,5,1,0,38,16,6,3,12,3,3,3,0,9,3,1,3,5,2,9,0,18,0,25,1,3,32,1,72,46,6,2,7,1,3,14,17,0,28,1,40,13,0,20, + 15,40,6,38,24,12,43,1,1,9,0,12,6,0,6,2,4,19,3,7,1,48,0,9,5,0,5,6,9,6,10,15,2,11,19,3,9,2,0,1,10,1,27,8,1,3,6,1,14,0,26,0,27,16,3,4,9,6,2,23, + 9,10,5,25,2,1,6,1,1,48,15,9,15,14,3,4,26,60,29,13,37,21,1,6,4,0,2,11,22,23,16,16,2,2,1,3,0,5,1,6,4,0,0,4,0,0,8,3,0,2,5,0,7,1,7,3,13,2,4,10, + 3,0,2,31,0,18,3,0,12,10,4,1,0,7,5,7,0,5,4,12,2,22,10,4,2,15,2,8,9,0,23,2,197,51,3,1,1,4,13,4,3,21,4,19,3,10,5,40,0,4,1,1,10,4,1,27,34,7,21, + 2,17,2,9,6,4,2,3,0,4,2,7,8,2,5,1,15,21,3,4,4,2,2,17,22,1,5,22,4,26,7,0,32,1,11,42,15,4,1,2,5,0,19,3,1,8,6,0,10,1,9,2,13,30,8,2,24,17,19,1,4, + 4,25,13,0,10,16,11,39,18,8,5,30,82,1,6,8,18,77,11,13,20,75,11,112,78,33,3,0,0,60,17,84,9,1,1,12,30,10,49,5,32,158,178,5,5,6,3,3,1,3,1,4,7,6, + 19,31,21,0,2,9,5,6,27,4,9,8,1,76,18,12,1,4,0,3,3,6,3,12,2,8,30,16,2,25,1,5,5,4,3,0,6,10,2,3,1,0,5,1,19,3,0,8,1,5,2,6,0,0,0,19,1,2,0,5,1,2,5, + 1,3,7,0,4,12,7,3,10,22,0,9,5,1,0,2,20,1,1,3,23,30,3,9,9,1,4,191,14,3,15,6,8,50,0,1,0,0,4,0,0,1,0,2,4,2,0,2,3,0,2,0,2,2,8,7,0,1,1,1,3,3,17,11, + 91,1,9,3,2,13,4,24,15,41,3,13,3,1,20,4,125,29,30,1,0,4,12,2,21,4,5,5,19,11,0,13,11,86,2,18,0,7,1,8,8,2,2,22,1,2,6,5,2,0,1,2,8,0,2,0,5,2,1,0, + 2,10,2,0,5,9,2,1,2,0,1,0,4,0,0,10,2,5,3,0,6,1,0,1,4,4,33,3,13,17,3,18,6,4,7,1,5,78,0,4,1,13,7,1,8,1,0,35,27,15,3,0,0,0,1,11,5,41,38,15,22,6, + 14,14,2,1,11,6,20,63,5,8,27,7,11,2,2,40,58,23,50,54,56,293,8,8,1,5,1,14,0,1,12,37,89,8,8,8,2,10,6,0,0,0,4,5,2,1,0,1,1,2,7,0,3,3,0,4,6,0,3,2, + 19,3,8,0,0,0,4,4,16,0,4,1,5,1,3,0,3,4,6,2,17,10,10,31,6,4,3,6,10,126,7,3,2,2,0,9,0,0,5,20,13,0,15,0,6,0,2,5,8,64,50,3,2,12,2,9,0,0,11,8,20, + 109,2,18,23,0,0,9,61,3,0,28,41,77,27,19,17,81,5,2,14,5,83,57,252,14,154,263,14,20,8,13,6,57,39,38, + }; + static ImWchar base_ranges[] = + { + 0x0020, 0x00FF, // Basic Latin + Latin Supplement + 0x3000, 0x30FF, // Punctuations, Hiragana, Katakana + 0x31F0, 0x31FF, // Katakana Phonetic Extensions + 0xFF00, 0xFFEF, // Half-width characters + }; + static bool full_ranges_unpacked = false; + static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(offsets_from_0x4E00)*2 + 1]; + if (!full_ranges_unpacked) + { + // Unpack + int codepoint = 0x4e00; + memcpy(full_ranges, base_ranges, sizeof(base_ranges)); + ImWchar* dst = full_ranges + IM_ARRAYSIZE(base_ranges);; + for (int n = 0; n < IM_ARRAYSIZE(offsets_from_0x4E00); n++, dst += 2) + dst[0] = dst[1] = (ImWchar)(codepoint += (offsets_from_0x4E00[n] + 1)); + dst[0] = 0; + full_ranges_unpacked = true; + } + return &full_ranges[0]; +} + +const ImWchar* ImFontAtlas::GetGlyphRangesCyrillic() +{ + static const ImWchar ranges[] = + { + 0x0020, 0x00FF, // Basic Latin + Latin Supplement + 0x0400, 0x052F, // Cyrillic + Cyrillic Supplement + 0x2DE0, 0x2DFF, // Cyrillic Extended-A + 0xA640, 0xA69F, // Cyrillic Extended-B + 0, + }; + return &ranges[0]; +} + +const ImWchar* ImFontAtlas::GetGlyphRangesThai() +{ + static const ImWchar ranges[] = + { + 0x0020, 0x00FF, // Basic Latin + 0x0E00, 0x0E7F, // Thai + 0, + }; + return &ranges[0]; +} + +//----------------------------------------------------------------------------- +// ImFont +//----------------------------------------------------------------------------- + +ImFont::ImFont() +{ + Scale = 1.0f; + FallbackChar = (ImWchar)'?'; + Clear(); +} + +ImFont::~ImFont() +{ + // Invalidate active font so that the user gets a clear crash instead of a dangling pointer. + // If you want to delete fonts you need to do it between Render() and NewFrame(). + // FIXME-CLEANUP + /* + ImGuiContext& g = *GImGui; + if (g.Font == this) + g.Font = NULL; + */ + Clear(); +} + +void ImFont::Clear() +{ + FontSize = 0.0f; + DisplayOffset = ImVec2(0.0f, 1.0f); + ConfigData = NULL; + ConfigDataCount = 0; + Ascent = Descent = 0.0f; + ContainerAtlas = NULL; + Glyphs.clear(); + FallbackGlyph = NULL; + FallbackXAdvance = 0.0f; + IndexXAdvance.clear(); + IndexLookup.clear(); +} + +void ImFont::BuildLookupTable() +{ + int max_codepoint = 0; + for (int i = 0; i != Glyphs.Size; i++) + max_codepoint = ImMax(max_codepoint, (int)Glyphs[i].Codepoint); + + IM_ASSERT(Glyphs.Size < 0xFFFF); // -1 is reserved + IndexXAdvance.clear(); + IndexLookup.clear(); + GrowIndex(max_codepoint + 1); + for (int i = 0; i < Glyphs.Size; i++) + { + int codepoint = (int)Glyphs[i].Codepoint; + IndexXAdvance[codepoint] = Glyphs[i].XAdvance; + IndexLookup[codepoint] = (unsigned short)i; + } + + // Create a glyph to handle TAB + // FIXME: Needs proper TAB handling but it needs to be contextualized (or we could arbitrary say that each string starts at "column 0" ?) + if (FindGlyph((unsigned short)' ')) + { + if (Glyphs.back().Codepoint != '\t') // So we can call this function multiple times + Glyphs.resize(Glyphs.Size + 1); + ImFont::Glyph& tab_glyph = Glyphs.back(); + tab_glyph = *FindGlyph((unsigned short)' '); + tab_glyph.Codepoint = '\t'; + tab_glyph.XAdvance *= 4; + IndexXAdvance[(int)tab_glyph.Codepoint] = (float)tab_glyph.XAdvance; + IndexLookup[(int)tab_glyph.Codepoint] = (unsigned short)(Glyphs.Size-1); + } + + FallbackGlyph = NULL; + FallbackGlyph = FindGlyph(FallbackChar); + FallbackXAdvance = FallbackGlyph ? FallbackGlyph->XAdvance : 0.0f; + for (int i = 0; i < max_codepoint + 1; i++) + if (IndexXAdvance[i] < 0.0f) + IndexXAdvance[i] = FallbackXAdvance; +} + +void ImFont::SetFallbackChar(ImWchar c) +{ + FallbackChar = c; + BuildLookupTable(); +} + +void ImFont::GrowIndex(int new_size) +{ + IM_ASSERT(IndexXAdvance.Size == IndexLookup.Size); + int old_size = IndexLookup.Size; + if (new_size <= old_size) + return; + IndexXAdvance.resize(new_size); + IndexLookup.resize(new_size); + for (int i = old_size; i < new_size; i++) + { + IndexXAdvance[i] = -1.0f; + IndexLookup[i] = (unsigned short)-1; + } +} + +void ImFont::AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst) +{ + IM_ASSERT(IndexLookup.Size > 0); // Currently this can only be called AFTER the font has been built, aka after calling ImFontAtlas::GetTexDataAs*() function. + int index_size = IndexLookup.Size; + + if (dst < index_size && IndexLookup.Data[dst] == (unsigned short)-1 && !overwrite_dst) // 'dst' already exists + return; + if (src >= index_size && dst >= index_size) // both 'dst' and 'src' don't exist -> no-op + return; + + GrowIndex(dst + 1); + IndexLookup[dst] = (src < index_size) ? IndexLookup.Data[src] : (unsigned short)-1; + IndexXAdvance[dst] = (src < index_size) ? IndexXAdvance.Data[src] : 1.0f; +} + +const ImFont::Glyph* ImFont::FindGlyph(unsigned short c) const +{ + if (c < IndexLookup.Size) + { + const unsigned short i = IndexLookup[c]; + if (i != (unsigned short)-1) + return &Glyphs.Data[i]; + } + return FallbackGlyph; +} + +const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const +{ + // Simple word-wrapping for English, not full-featured. Please submit failing cases! + // FIXME: Much possible improvements (don't cut things like "word !", "word!!!" but cut within "word,,,,", more sensible support for punctuations, support for Unicode punctuations, etc.) + + // For references, possible wrap point marked with ^ + // "aaa bbb, ccc,ddd. eee fff. ggg!" + // ^ ^ ^ ^ ^__ ^ ^ + + // List of hardcoded separators: .,;!?'" + + // Skip extra blanks after a line returns (that includes not counting them in width computation) + // e.g. "Hello world" --> "Hello" "World" + + // Cut words that cannot possibly fit within one line. + // e.g.: "The tropical fish" with ~5 characters worth of width --> "The tr" "opical" "fish" + + float line_width = 0.0f; + float word_width = 0.0f; + float blank_width = 0.0f; + + const char* word_end = text; + const char* prev_word_end = NULL; + bool inside_word = true; + + const char* s = text; + while (s < text_end) + { + unsigned int c = (unsigned int)*s; + const char* next_s; + if (c < 0x80) + next_s = s + 1; + else + next_s = s + ImTextCharFromUtf8(&c, s, text_end); + if (c == 0) + break; + + if (c < 32) + { + if (c == '\n') + { + line_width = word_width = blank_width = 0.0f; + inside_word = true; + s = next_s; + continue; + } + if (c == '\r') + { + s = next_s; + continue; + } + } + + const float char_width = ((int)c < IndexXAdvance.Size ? IndexXAdvance[(int)c] : FallbackXAdvance) * scale; + if (ImCharIsSpace(c)) + { + if (inside_word) + { + line_width += blank_width; + blank_width = 0.0f; + } + blank_width += char_width; + inside_word = false; + } + else + { + word_width += char_width; + if (inside_word) + { + word_end = next_s; + } + else + { + prev_word_end = word_end; + line_width += word_width + blank_width; + word_width = blank_width = 0.0f; + } + + // Allow wrapping after punctuation. + inside_word = !(c == '.' || c == ',' || c == ';' || c == '!' || c == '?' || c == '\"'); + } + + // We ignore blank width at the end of the line (they can be skipped) + if (line_width + word_width >= wrap_width) + { + // Words that cannot possibly fit within an entire line will be cut anywhere. + if (word_width < wrap_width) + s = prev_word_end ? prev_word_end : word_end; + break; + } + + s = next_s; + } + + return s; +} + +ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end, const char** remaining) const +{ + if (!text_end) + text_end = text_begin + strlen(text_begin); // FIXME-OPT: Need to avoid this. + + const float line_height = size; + const float scale = size / FontSize; + + ImVec2 text_size = ImVec2(0,0); + float line_width = 0.0f; + + const bool word_wrap_enabled = (wrap_width > 0.0f); + const char* word_wrap_eol = NULL; + + const char* s = text_begin; + while (s < text_end) + { + if (word_wrap_enabled) + { + // Calculate how far we can render. Requires two passes on the string data but keeps the code simple and not intrusive for what's essentially an uncommon feature. + if (!word_wrap_eol) + { + word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - line_width); + if (word_wrap_eol == s) // Wrap_width is too small to fit anything. Force displaying 1 character to minimize the height discontinuity. + word_wrap_eol++; // +1 may not be a character start point in UTF-8 but it's ok because we use s >= word_wrap_eol below + } + + if (s >= word_wrap_eol) + { + if (text_size.x < line_width) + text_size.x = line_width; + text_size.y += line_height; + line_width = 0.0f; + word_wrap_eol = NULL; + + // Wrapping skips upcoming blanks + while (s < text_end) + { + const char c = *s; + if (ImCharIsSpace(c)) { s++; } else if (c == '\n') { s++; break; } else { break; } + } + continue; + } + } + + // Decode and advance source + const char* prev_s = s; + unsigned int c = (unsigned int)*s; + if (c < 0x80) + { + s += 1; + } + else + { + s += ImTextCharFromUtf8(&c, s, text_end); + if (c == 0) // Malformed UTF-8? + break; + } + + if (c < 32) + { + if (c == '\n') + { + text_size.x = ImMax(text_size.x, line_width); + text_size.y += line_height; + line_width = 0.0f; + continue; + } + if (c == '\r') + continue; + } + + const float char_width = ((int)c < IndexXAdvance.Size ? IndexXAdvance[(int)c] : FallbackXAdvance) * scale; + if (line_width + char_width >= max_width) + { + s = prev_s; + break; + } + + line_width += char_width; + } + + if (text_size.x < line_width) + text_size.x = line_width; + + if (line_width > 0 || text_size.y == 0.0f) + text_size.y += line_height; + + if (remaining) + *remaining = s; + + return text_size; +} + +void ImFont::RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const +{ + if (c == ' ' || c == '\t' || c == '\n' || c == '\r') // Match behavior of RenderText(), those 4 codepoints are hard-coded. + return; + if (const Glyph* glyph = FindGlyph(c)) + { + float scale = (size >= 0.0f) ? (size / FontSize) : 1.0f; + pos.x = (float)(int)pos.x + DisplayOffset.x; + pos.y = (float)(int)pos.y + DisplayOffset.y; + ImVec2 pos_tl(pos.x + glyph->X0 * scale, pos.y + glyph->Y0 * scale); + ImVec2 pos_br(pos.x + glyph->X1 * scale, pos.y + glyph->Y1 * scale); + draw_list->PrimReserve(6, 4); + draw_list->PrimRectUV(pos_tl, pos_br, ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V1), col); + } +} + +void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width, bool cpu_fine_clip) const +{ + if (!text_end) + text_end = text_begin + strlen(text_begin); // ImGui functions generally already provides a valid text_end, so this is merely to handle direct calls. + + // Align to be pixel perfect + pos.x = (float)(int)pos.x + DisplayOffset.x; + pos.y = (float)(int)pos.y + DisplayOffset.y; + float x = pos.x; + float y = pos.y; + if (y > clip_rect.w) + return; + + const float scale = size / FontSize; + const float line_height = FontSize * scale; + const bool word_wrap_enabled = (wrap_width > 0.0f); + const char* word_wrap_eol = NULL; + + // Skip non-visible lines + const char* s = text_begin; + if (!word_wrap_enabled && y + line_height < clip_rect.y) + while (s < text_end && *s != '\n') // Fast-forward to next line + s++; + + // Reserve vertices for remaining worse case (over-reserving is useful and easily amortized) + const int vtx_count_max = (int)(text_end - s) * 4; + const int idx_count_max = (int)(text_end - s) * 6; + const int idx_expected_size = draw_list->IdxBuffer.Size + idx_count_max; + draw_list->PrimReserve(idx_count_max, vtx_count_max); + + ImDrawVert* vtx_write = draw_list->_VtxWritePtr; + ImDrawIdx* idx_write = draw_list->_IdxWritePtr; + unsigned int vtx_current_idx = draw_list->_VtxCurrentIdx; + + while (s < text_end) + { + if (word_wrap_enabled) + { + // Calculate how far we can render. Requires two passes on the string data but keeps the code simple and not intrusive for what's essentially an uncommon feature. + if (!word_wrap_eol) + { + word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - (x - pos.x)); + if (word_wrap_eol == s) // Wrap_width is too small to fit anything. Force displaying 1 character to minimize the height discontinuity. + word_wrap_eol++; // +1 may not be a character start point in UTF-8 but it's ok because we use s >= word_wrap_eol below + } + + if (s >= word_wrap_eol) + { + x = pos.x; + y += line_height; + word_wrap_eol = NULL; + + // Wrapping skips upcoming blanks + while (s < text_end) + { + const char c = *s; + if (ImCharIsSpace(c)) { s++; } else if (c == '\n') { s++; break; } else { break; } + } + continue; + } + } + + // Decode and advance source + unsigned int c = (unsigned int)*s; + if (c < 0x80) + { + s += 1; + } + else + { + s += ImTextCharFromUtf8(&c, s, text_end); + if (c == 0) // Malformed UTF-8? + break; + } + + if (c < 32) + { + if (c == '\n') + { + x = pos.x; + y += line_height; + + if (y > clip_rect.w) + break; + if (!word_wrap_enabled && y + line_height < clip_rect.y) + while (s < text_end && *s != '\n') // Fast-forward to next line + s++; + continue; + } + if (c == '\r') + continue; + } + + float char_width = 0.0f; + if (const Glyph* glyph = FindGlyph((unsigned short)c)) + { + char_width = glyph->XAdvance * scale; + + // Arbitrarily assume that both space and tabs are empty glyphs as an optimization + if (c != ' ' && c != '\t') + { + // We don't do a second finer clipping test on the Y axis as we've already skipped anything before clip_rect.y and exit once we pass clip_rect.w + float x1 = x + glyph->X0 * scale; + float x2 = x + glyph->X1 * scale; + float y1 = y + glyph->Y0 * scale; + float y2 = y + glyph->Y1 * scale; + if (x1 <= clip_rect.z && x2 >= clip_rect.x) + { + // Render a character + float u1 = glyph->U0; + float v1 = glyph->V0; + float u2 = glyph->U1; + float v2 = glyph->V1; + + // CPU side clipping used to fit text in their frame when the frame is too small. Only does clipping for axis aligned quads. + if (cpu_fine_clip) + { + if (x1 < clip_rect.x) + { + u1 = u1 + (1.0f - (x2 - clip_rect.x) / (x2 - x1)) * (u2 - u1); + x1 = clip_rect.x; + } + if (y1 < clip_rect.y) + { + v1 = v1 + (1.0f - (y2 - clip_rect.y) / (y2 - y1)) * (v2 - v1); + y1 = clip_rect.y; + } + if (x2 > clip_rect.z) + { + u2 = u1 + ((clip_rect.z - x1) / (x2 - x1)) * (u2 - u1); + x2 = clip_rect.z; + } + if (y2 > clip_rect.w) + { + v2 = v1 + ((clip_rect.w - y1) / (y2 - y1)) * (v2 - v1); + y2 = clip_rect.w; + } + if (y1 >= y2) + { + x += char_width; + continue; + } + } + + // We are NOT calling PrimRectUV() here because non-inlined causes too much overhead in a debug build. + // Inlined here: + { + idx_write[0] = (ImDrawIdx)(vtx_current_idx); idx_write[1] = (ImDrawIdx)(vtx_current_idx+1); idx_write[2] = (ImDrawIdx)(vtx_current_idx+2); + idx_write[3] = (ImDrawIdx)(vtx_current_idx); idx_write[4] = (ImDrawIdx)(vtx_current_idx+2); idx_write[5] = (ImDrawIdx)(vtx_current_idx+3); + vtx_write[0].pos.x = x1; vtx_write[0].pos.y = y1; vtx_write[0].col = col; vtx_write[0].uv.x = u1; vtx_write[0].uv.y = v1; + vtx_write[1].pos.x = x2; vtx_write[1].pos.y = y1; vtx_write[1].col = col; vtx_write[1].uv.x = u2; vtx_write[1].uv.y = v1; + vtx_write[2].pos.x = x2; vtx_write[2].pos.y = y2; vtx_write[2].col = col; vtx_write[2].uv.x = u2; vtx_write[2].uv.y = v2; + vtx_write[3].pos.x = x1; vtx_write[3].pos.y = y2; vtx_write[3].col = col; vtx_write[3].uv.x = u1; vtx_write[3].uv.y = v2; + vtx_write += 4; + vtx_current_idx += 4; + idx_write += 6; + } + } + } + } + + x += char_width; + } + + // Give back unused vertices + draw_list->VtxBuffer.resize((int)(vtx_write - draw_list->VtxBuffer.Data)); + draw_list->IdxBuffer.resize((int)(idx_write - draw_list->IdxBuffer.Data)); + draw_list->CmdBuffer[draw_list->CmdBuffer.Size-1].ElemCount -= (idx_expected_size - draw_list->IdxBuffer.Size); + draw_list->_VtxWritePtr = vtx_write; + draw_list->_IdxWritePtr = idx_write; + draw_list->_VtxCurrentIdx = (unsigned int)draw_list->VtxBuffer.Size; +} + +//----------------------------------------------------------------------------- +// DEFAULT FONT DATA +//----------------------------------------------------------------------------- +// Compressed with stb_compress() then converted to a C array. +// Use the program in extra_fonts/binary_to_compressed_c.cpp to create the array from a TTF file. +// Decompression from stb.h (public domain) by Sean Barrett https://github.com/nothings/stb/blob/master/stb.h +//----------------------------------------------------------------------------- + +static unsigned int stb_decompress_length(unsigned char *input) +{ + return (input[8] << 24) + (input[9] << 16) + (input[10] << 8) + input[11]; +} + +static unsigned char *stb__barrier, *stb__barrier2, *stb__barrier3, *stb__barrier4; +static unsigned char *stb__dout; +static void stb__match(unsigned char *data, unsigned int length) +{ + // INVERSE of memmove... write each byte before copying the next... + IM_ASSERT (stb__dout + length <= stb__barrier); + if (stb__dout + length > stb__barrier) { stb__dout += length; return; } + if (data < stb__barrier4) { stb__dout = stb__barrier+1; return; } + while (length--) *stb__dout++ = *data++; +} + +static void stb__lit(unsigned char *data, unsigned int length) +{ + IM_ASSERT (stb__dout + length <= stb__barrier); + if (stb__dout + length > stb__barrier) { stb__dout += length; return; } + if (data < stb__barrier2) { stb__dout = stb__barrier+1; return; } + memcpy(stb__dout, data, length); + stb__dout += length; +} + +#define stb__in2(x) ((i[x] << 8) + i[(x)+1]) +#define stb__in3(x) ((i[x] << 16) + stb__in2((x)+1)) +#define stb__in4(x) ((i[x] << 24) + stb__in3((x)+1)) + +static unsigned char *stb_decompress_token(unsigned char *i) +{ + if (*i >= 0x20) { // use fewer if's for cases that expand small + if (*i >= 0x80) stb__match(stb__dout-i[1]-1, i[0] - 0x80 + 1), i += 2; + else if (*i >= 0x40) stb__match(stb__dout-(stb__in2(0) - 0x4000 + 1), i[2]+1), i += 3; + else /* *i >= 0x20 */ stb__lit(i+1, i[0] - 0x20 + 1), i += 1 + (i[0] - 0x20 + 1); + } else { // more ifs for cases that expand large, since overhead is amortized + if (*i >= 0x18) stb__match(stb__dout-(stb__in3(0) - 0x180000 + 1), i[3]+1), i += 4; + else if (*i >= 0x10) stb__match(stb__dout-(stb__in3(0) - 0x100000 + 1), stb__in2(3)+1), i += 5; + else if (*i >= 0x08) stb__lit(i+2, stb__in2(0) - 0x0800 + 1), i += 2 + (stb__in2(0) - 0x0800 + 1); + else if (*i == 0x07) stb__lit(i+3, stb__in2(1) + 1), i += 3 + (stb__in2(1) + 1); + else if (*i == 0x06) stb__match(stb__dout-(stb__in3(1)+1), i[4]+1), i += 5; + else if (*i == 0x04) stb__match(stb__dout-(stb__in3(1)+1), stb__in2(4)+1), i += 6; + } + return i; +} + +static unsigned int stb_adler32(unsigned int adler32, unsigned char *buffer, unsigned int buflen) +{ + const unsigned long ADLER_MOD = 65521; + unsigned long s1 = adler32 & 0xffff, s2 = adler32 >> 16; + unsigned long blocklen, i; + + blocklen = buflen % 5552; + while (buflen) { + for (i=0; i + 7 < blocklen; i += 8) { + s1 += buffer[0], s2 += s1; + s1 += buffer[1], s2 += s1; + s1 += buffer[2], s2 += s1; + s1 += buffer[3], s2 += s1; + s1 += buffer[4], s2 += s1; + s1 += buffer[5], s2 += s1; + s1 += buffer[6], s2 += s1; + s1 += buffer[7], s2 += s1; + + buffer += 8; + } + + for (; i < blocklen; ++i) + s1 += *buffer++, s2 += s1; + + s1 %= ADLER_MOD, s2 %= ADLER_MOD; + buflen -= blocklen; + blocklen = 5552; + } + return (unsigned int)(s2 << 16) + (unsigned int)s1; +} + +static unsigned int stb_decompress(unsigned char *output, unsigned char *i, unsigned int length) +{ + unsigned int olen; + if (stb__in4(0) != 0x57bC0000) return 0; + if (stb__in4(4) != 0) return 0; // error! stream is > 4GB + olen = stb_decompress_length(i); + stb__barrier2 = i; + stb__barrier3 = i+length; + stb__barrier = output + olen; + stb__barrier4 = output; + i += 16; + + stb__dout = output; + for (;;) { + unsigned char *old_i = i; + i = stb_decompress_token(i); + if (i == old_i) { + if (*i == 0x05 && i[1] == 0xfa) { + IM_ASSERT(stb__dout == output + olen); + if (stb__dout != output + olen) return 0; + if (stb_adler32(1, output, olen) != (unsigned int) stb__in4(2)) + return 0; + return olen; + } else { + IM_ASSERT(0); /* NOTREACHED */ + return 0; + } + } + IM_ASSERT(stb__dout <= output + olen); + if (stb__dout > output + olen) + return 0; + } +} + +//----------------------------------------------------------------------------- +// ProggyClean.ttf +// Copyright (c) 2004, 2005 Tristan Grimmer +// MIT license (see License.txt in http://www.upperbounds.net/download/ProggyClean.ttf.zip) +// Download and more information at http://upperbounds.net +//----------------------------------------------------------------------------- +// File: 'ProggyClean.ttf' (41208 bytes) +// Exported using binary_to_compressed_c.cpp +//----------------------------------------------------------------------------- +static const char proggy_clean_ttf_compressed_data_base85[11980+1] = + "7])#######hV0qs'/###[),##/l:$#Q6>##5[n42>c-TH`->>#/e>11NNV=Bv(*:.F?uu#(gRU.o0XGH`$vhLG1hxt9?W`#,5LsCp#-i>.r$<$6pD>Lb';9Crc6tgXmKVeU2cD4Eo3R/" + "2*>]b(MC;$jPfY.;h^`IWM9Qo#t'X#(v#Y9w0#1D$CIf;W'#pWUPXOuxXuU(H9M(1=Ke$$'5F%)]0^#0X@U.a$FBjVQTSDgEKnIS7EM9>ZY9w0#L;>>#Mx&4Mvt//L[MkA#W@lK.N'[0#7RL_&#w+F%HtG9M#XL`N&.,GM4Pg;--VsM.M0rJfLH2eTM`*oJMHRC`N" + "kfimM2J,W-jXS:)r0wK#@Fge$U>`w'N7G#$#fB#$E^$#:9:hk+eOe--6x)F7*E%?76%^GMHePW-Z5l'&GiF#$956:rS?dA#fiK:)Yr+`�j@'DbG&#^$PG.Ll+DNa&VZ>1i%h1S9u5o@YaaW$e+bROPOpxTO7Stwi1::iB1q)C_=dV26J;2,]7op$]uQr@_V7$q^%lQwtuHY]=DX,n3L#0PHDO4f9>dC@O>HBuKPpP*E,N+b3L#lpR/MrTEH.IAQk.a>D[.e;mc." + "x]Ip.PH^'/aqUO/$1WxLoW0[iLAw=4h(9.`G" + "CRUxHPeR`5Mjol(dUWxZa(>STrPkrJiWx`5U7F#.g*jrohGg`cg:lSTvEY/EV_7H4Q9[Z%cnv;JQYZ5q.l7Zeas:HOIZOB?Ggv:[7MI2k).'2($5FNP&EQ(,)" + "U]W]+fh18.vsai00);D3@4ku5P?DP8aJt+;qUM]=+b'8@;mViBKx0DE[-auGl8:PJ&Dj+M6OC]O^((##]`0i)drT;-7X`=-H3[igUnPG-NZlo.#k@h#=Ork$m>a>$-?Tm$UV(?#P6YY#" + "'/###xe7q.73rI3*pP/$1>s9)W,JrM7SN]'/4C#v$U`0#V.[0>xQsH$fEmPMgY2u7Kh(G%siIfLSoS+MK2eTM$=5,M8p`A.;_R%#u[K#$x4AG8.kK/HSB==-'Ie/QTtG?-.*^N-4B/ZM" + "_3YlQC7(p7q)&](`6_c)$/*JL(L-^(]$wIM`dPtOdGA,U3:w2M-0+WomX2u7lqM2iEumMTcsF?-aT=Z-97UEnXglEn1K-bnEO`gu" + "Ft(c%=;Am_Qs@jLooI&NX;]0#j4#F14;gl8-GQpgwhrq8'=l_f-b49'UOqkLu7-##oDY2L(te+Mch&gLYtJ,MEtJfLh'x'M=$CS-ZZ%P]8bZ>#S?YY#%Q&q'3^Fw&?D)UDNrocM3A76/" + "/oL?#h7gl85[qW/NDOk%16ij;+:1a'iNIdb-ou8.P*w,v5#EI$TWS>Pot-R*H'-SEpA:g)f+O$%%`kA#G=8RMmG1&O`>to8bC]T&$,n.LoO>29sp3dt-52U%VM#q7'DHpg+#Z9%H[Ket`e;)f#Km8&+DC$I46>#Kr]]u-[=99tts1.qb#q72g1WJO81q+eN'03'eM>&1XxY-caEnO" + "j%2n8)),?ILR5^.Ibn<-X-Mq7[a82Lq:F&#ce+S9wsCK*x`569E8ew'He]h:sI[2LM$[guka3ZRd6:t%IG:;$%YiJ:Nq=?eAw;/:nnDq0(CYcMpG)qLN4$##&J-XTt,%OVU4)S1+R-#dg0/Nn?Ku1^0f$B*P:Rowwm-`0PKjYDDM'3]d39VZHEl4,.j']Pk-M.h^&:0FACm$maq-&sgw0t7/6(^xtk%" + "LuH88Fj-ekm>GA#_>568x6(OFRl-IZp`&b,_P'$MhLbxfc$mj`,O;&%W2m`Zh:/)Uetw:aJ%]K9h:TcF]u_-Sj9,VK3M.*'&0D[Ca]J9gp8,kAW]" + "%(?A%R$f<->Zts'^kn=-^@c4%-pY6qI%J%1IGxfLU9CP8cbPlXv);C=b),<2mOvP8up,UVf3839acAWAW-W?#ao/^#%KYo8fRULNd2.>%m]UK:n%r$'sw]J;5pAoO_#2mO3n,'=H5(et" + "Hg*`+RLgv>=4U8guD$I%D:W>-r5V*%j*W:Kvej.Lp$'?;++O'>()jLR-^u68PHm8ZFWe+ej8h:9r6L*0//c&iH&R8pRbA#Kjm%upV1g:" + "a_#Ur7FuA#(tRh#.Y5K+@?3<-8m0$PEn;J:rh6?I6uG<-`wMU'ircp0LaE_OtlMb&1#6T.#FDKu#1Lw%u%+GM+X'e?YLfjM[VO0MbuFp7;>Q&#WIo)0@F%q7c#4XAXN-U&VBpqB>0ie&jhZ[?iLR@@_AvA-iQC(=ksRZRVp7`.=+NpBC%rh&3]R:8XDmE5^V8O(x<-+k?'(^](H.aREZSi,#1:[IXaZFOm<-ui#qUq2$##Ri;u75OK#(RtaW-K-F`S+cF]uN`-KMQ%rP/Xri.LRcB##=YL3BgM/3M" + "D?@f&1'BW-)Ju#bmmWCMkk&#TR`C,5d>g)F;t,4:@_l8G/5h4vUd%&%950:VXD'QdWoY-F$BtUwmfe$YqL'8(PWX(" + "P?^@Po3$##`MSs?DWBZ/S>+4%>fX,VWv/w'KD`LP5IbH;rTV>n3cEK8U#bX]l-/V+^lj3;vlMb&[5YQ8#pekX9JP3XUC72L,,?+Ni&co7ApnO*5NK,((W-i:$,kp'UDAO(G0Sq7MVjJs" + "bIu)'Z,*[>br5fX^:FPAWr-m2KgLQ_nN6'8uTGT5g)uLv:873UpTLgH+#FgpH'_o1780Ph8KmxQJ8#H72L4@768@Tm&Q" + "h4CB/5OvmA&,Q&QbUoi$a_%3M01H)4x7I^&KQVgtFnV+;[Pc>[m4k//,]1?#`VY[Jr*3&&slRfLiVZJ:]?=K3Sw=[$=uRB?3xk48@aege0jT6'N#(q%.O=?2S]u*(m<-" + "V8J'(1)G][68hW$5'q[GC&5j`TE?m'esFGNRM)j,ffZ?-qx8;->g4t*:CIP/[Qap7/9'#(1sao7w-.qNUdkJ)tCF&#B^;xGvn2r9FEPFFFcL@.iFNkTve$m%#QvQS8U@)2Z+3K:AKM5i" + "sZ88+dKQ)W6>J%CL`.d*(B`-n8D9oK-XV1q['-5k'cAZ69e;D_?$ZPP&s^+7])$*$#@QYi9,5P r+$%CE=68>K8r0=dSC%%(@p7" + ".m7jilQ02'0-VWAgTlGW'b)Tq7VT9q^*^$$.:&N@@" + "$&)WHtPm*5_rO0&e%K&#-30j(E4#'Zb.o/(Tpm$>K'f@[PvFl,hfINTNU6u'0pao7%XUp9]5.>%h`8_=VYbxuel.NTSsJfLacFu3B'lQSu/m6-Oqem8T+oE--$0a/k]uj9EwsG>%veR*" + "hv^BFpQj:K'#SJ,sB-'#](j.Lg92rTw-*n%@/;39rrJF,l#qV%OrtBeC6/,;qB3ebNW[?,Hqj2L.1NP&GjUR=1D8QaS3Up&@*9wP?+lo7b?@%'k4`p0Z$22%K3+iCZj?XJN4Nm&+YF]u" + "@-W$U%VEQ/,,>>#)D#%8cY#YZ?=,`Wdxu/ae&#" + "w6)R89tI#6@s'(6Bf7a&?S=^ZI_kS&ai`&=tE72L_D,;^R)7[$so8lKN%5/$(vdfq7+ebA#" + "u1p]ovUKW&Y%q]'>$1@-[xfn$7ZTp7mM,G,Ko7a&Gu%G[RMxJs[0MM%wci.LFDK)(%:_i2B5CsR8&9Z&#=mPEnm0f`<&c)QL5uJ#%u%lJj+D-r;BoFDoS97h5g)E#o:&S4weDF,9^Hoe`h*L+_a*NrLW-1pG_&2UdB8" + "6e%B/:=>)N4xeW.*wft-;$'58-ESqr#U`'6AQ]m&6/`Z>#S?YY#Vc;r7U2&326d=w&H####?TZ`*4?&.MK?LP8Vxg>$[QXc%QJv92.(Db*B)gb*BM9dM*hJMAo*c&#" + "b0v=Pjer]$gG&JXDf->'StvU7505l9$AFvgYRI^&<^b68?j#q9QX4SM'RO#&sL1IM.rJfLUAj221]d##DW=m83u5;'bYx,*Sl0hL(W;;$doB&O/TQ:(Z^xBdLjLV#*8U_72Lh+2Q8Cj0i:6hp&$C/:p(HK>T8Y[gHQ4`4)'$Ab(Nof%V'8hL&#SfD07&6D@M.*J:;$-rv29'M]8qMv-tLp,'886iaC=Hb*YJoKJ,(j%K=H`K.v9HggqBIiZu'QvBT.#=)0ukruV&.)3=(^1`o*Pj4<-#MJ+gLq9-##@HuZPN0]u:h7.T..G:;$/Usj(T7`Q8tT72LnYl<-qx8;-HV7Q-&Xdx%1a,hC=0u+HlsV>nuIQL-5" + "_>@kXQtMacfD.m-VAb8;IReM3$wf0''hra*so568'Ip&vRs849'MRYSp%:t:h5qSgwpEr$B>Q,;s(C#$)`svQuF$##-D,##,g68@2[T;.XSdN9Qe)rpt._K-#5wF)sP'##p#C0c%-Gb%" + "hd+<-j'Ai*x&&HMkT]C'OSl##5RG[JXaHN;d'uA#x._U;.`PU@(Z3dt4r152@:v,'R.Sj'w#0<-;kPI)FfJ&#AYJ&#//)>-k=m=*XnK$>=)72L]0I%>.G690a:$##<,);?;72#?x9+d;" + "^V'9;jY@;)br#q^YQpx:X#Te$Z^'=-=bGhLf:D6&bNwZ9-ZD#n^9HhLMr5G;']d&6'wYmTFmLq9wI>P(9mI[>kC-ekLC/R&CH+s'B;K-M6$EB%is00:" + "+A4[7xks.LrNk0&E)wILYF@2L'0Nb$+pv<(2.768/FrY&h$^3i&@+G%JT'<-,v`3;_)I9M^AE]CN?Cl2AZg+%4iTpT3$U4O]GKx'm9)b@p7YsvK3w^YR-" + "CdQ*:Ir<($u&)#(&?L9Rg3H)4fiEp^iI9O8KnTj,]H?D*r7'M;PwZ9K0E^k&-cpI;.p/6_vwoFMV<->#%Xi.LxVnrU(4&8/P+:hLSKj$#U%]49t'I:rgMi'FL@a:0Y-uA[39',(vbma*" + "hU%<-SRF`Tt:542R_VV$p@[p8DV[A,?1839FWdFTi1O*H&#(AL8[_P%.M>v^-))qOT*F5Cq0`Ye%+$B6i:7@0IXSsDiWP,##P`%/L-" + "S(qw%sf/@%#B6;/U7K]uZbi^Oc^2n%t<)'mEVE''n`WnJra$^TKvX5B>;_aSEK',(hwa0:i4G?.Bci.(X[?b*($,=-n<.Q%`(X=?+@Am*Js0&=3bh8K]mL69=Lb,OcZV/);TTm8VI;?%OtJ<(b4mq7M6:u?KRdFl*:xP?Yb.5)%w_I?7uk5JC+FS(m#i'k.'a0i)9<7b'fs'59hq$*5Uhv##pi^8+hIEBF`nvo`;'l0.^S1<-wUK2/Coh58KKhLj" + "M=SO*rfO`+qC`W-On.=AJ56>>i2@2LH6A:&5q`?9I3@@'04&p2/LVa*T-4<-i3;M9UvZd+N7>b*eIwg:CC)c<>nO&#$(>.Z-I&J(Q0Hd5Q%7Co-b`-cP)hI;*_F]u`Rb[.j8_Q/<&>uu+VsH$sM9TA%?)(vmJ80),P7E>)tjD%2L=-t#fK[%`v=Q8WlA2);Sa" + ">gXm8YB`1d@K#n]76-a$U,mF%Ul:#/'xoFM9QX-$.QN'>" + "[%$Z$uF6pA6Ki2O5:8w*vP1<-1`[G,)-m#>0`P&#eb#.3i)rtB61(o'$?X3B2Qft^ae_5tKL9MUe9b*sLEQ95C&`=G?@Mj=wh*'3E>=-<)Gt*Iw)'QG:`@I" + "wOf7&]1i'S01B+Ev/Nac#9S;=;YQpg_6U`*kVY39xK,[/6Aj7:'1Bm-_1EYfa1+o&o4hp7KN_Q(OlIo@S%;jVdn0'1h19w,WQhLI)3S#f$2(eb,jr*b;3Vw]*7NH%$c4Vs,eD9>XW8?N]o+(*pgC%/72LV-uW%iewS8W6m2rtCpo'RS1R84=@paTKt)>=%&1[)*vp'u+x,VrwN;&]kuO9JDbg=pO$J*.jVe;u'm0dr9l,<*wMK*Oe=g8lV_KEBFkO'oU]^=[-792#ok,)" + "i]lR8qQ2oA8wcRCZ^7w/Njh;?.stX?Q1>S1q4Bn$)K1<-rGdO'$Wr.Lc.CG)$/*JL4tNR/,SVO3,aUw'DJN:)Ss;wGn9A32ijw%FL+Z0Fn.U9;reSq)bmI32U==5ALuG&#Vf1398/pVo" + "1*c-(aY168o<`JsSbk-,1N;$>0:OUas(3:8Z972LSfF8eb=c-;>SPw7.6hn3m`9^Xkn(r.qS[0;T%&Qc=+STRxX'q1BNk3&*eu2;&8q$&x>Q#Q7^Tf+6<(d%ZVmj2bDi%.3L2n+4W'$P" + "iDDG)g,r%+?,$@?uou5tSe2aN_AQU*'IAO" + "URQ##V^Fv-XFbGM7Fl(N<3DhLGF%q.1rC$#:T__&Pi68%0xi_&[qFJ(77j_&JWoF.V735&T,[R*:xFR*K5>>#`bW-?4Ne_&6Ne_&6Ne_&n`kr-#GJcM6X;uM6X;uM(.a..^2TkL%oR(#" + ";u.T%fAr%4tJ8&><1=GHZ_+m9/#H1F^R#SC#*N=BA9(D?v[UiFY>>^8p,KKF.W]L29uLkLlu/+4T" + "w$)F./^n3+rlo+DB;5sIYGNk+i1t-69Jg--0pao7Sm#K)pdHW&;LuDNH@H>#/X-TI(;P>#,Gc>#0Su>#4`1?#8lC?#xL$#B.`$#F:r$#JF.%#NR@%#R_R%#Vke%#Zww%#_-4^Rh%Sflr-k'MS.o?.5/sWel/wpEM0%3'/1)K^f1-d>G21&v(35>V`39V7A4=onx4" + "A1OY5EI0;6Ibgr6M$HS7Q<)58C5w,;WoA*#[%T*#`1g*#d=#+#hI5+#lUG+#pbY+#tnl+#x$),#&1;,#*=M,#.I`,#2Ur,#6b.-#;w[H#iQtA#m^0B#qjBB#uvTB##-hB#'9$C#+E6C#" + "/QHC#3^ZC#7jmC#;v)D#?,)4kMYD4lVu`4m`:&5niUA5@(A5BA1]PBB:xlBCC=2CDLXMCEUtiCf&0g2'tN?PGT4CPGT4CPGT4CPGT4CPGT4CPGT4CPGT4CP" + "GT4CPGT4CPGT4CPGT4CPGT4CPGT4CP-qekC`.9kEg^+F$kwViFJTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5o,^<-28ZI'O?;xp" + "O?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xp;7q-#lLYI:xvD=#"; + +static const char* GetDefaultCompressedFontDataTTFBase85() +{ + return proggy_clean_ttf_compressed_data_base85; +} diff --git a/lib/imgui/imgui_internal.h b/lib/imgui/imgui_internal.h new file mode 100644 index 0000000..ff188b0 --- /dev/null +++ b/lib/imgui/imgui_internal.h @@ -0,0 +1,775 @@ +// dear imgui, v1.50 WIP +// (internals) + +// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility! +// Implement maths operators for ImVec2 (disabled by default to not collide with using IM_VEC2_CLASS_EXTRA along with your own math types+operators) +// #define IMGUI_DEFINE_MATH_OPERATORS + +#pragma once + +#ifndef IMGUI_VERSION +#error Must include imgui.h before imgui_internal.h +#endif + +#include // FILE* +#include // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf + +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable: 4251) // class 'xxx' needs to have dll-interface to be used by clients of struct 'xxx' // when IMGUI_API is set to__declspec(dllexport) +#endif + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-function" // for stb_textedit.h +#pragma clang diagnostic ignored "-Wmissing-prototypes" // for stb_textedit.h +#pragma clang diagnostic ignored "-Wold-style-cast" +#endif + +//----------------------------------------------------------------------------- +// Forward Declarations +//----------------------------------------------------------------------------- + +struct ImRect; +struct ImGuiColMod; +struct ImGuiStyleMod; +struct ImGuiGroupData; +struct ImGuiSimpleColumns; +struct ImGuiDrawContext; +struct ImGuiTextEditState; +struct ImGuiIniData; +struct ImGuiMouseCursorData; +struct ImGuiPopupRef; +struct ImGuiWindow; + +typedef int ImGuiLayoutType; // enum ImGuiLayoutType_ +typedef int ImGuiButtonFlags; // enum ImGuiButtonFlags_ +typedef int ImGuiTreeNodeFlags; // enum ImGuiTreeNodeFlags_ +typedef int ImGuiSliderFlags; // enum ImGuiSliderFlags_ + +//------------------------------------------------------------------------- +// STB libraries +//------------------------------------------------------------------------- + +namespace ImGuiStb +{ + +#undef STB_TEXTEDIT_STRING +#undef STB_TEXTEDIT_CHARTYPE +#define STB_TEXTEDIT_STRING ImGuiTextEditState +#define STB_TEXTEDIT_CHARTYPE ImWchar +#define STB_TEXTEDIT_GETWIDTH_NEWLINE -1.0f +#include "stb_textedit.h" + +} // namespace ImGuiStb + +//----------------------------------------------------------------------------- +// Context +//----------------------------------------------------------------------------- + +#ifndef GImGui +extern IMGUI_API ImGuiContext* GImGui; // Current implicit ImGui context pointer +#endif + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR)/sizeof(*_ARR))) +#define IM_PI 3.14159265358979323846f +#define IM_OFFSETOF(_TYPE,_ELM) ((size_t)&(((_TYPE*)0)->_ELM)) + +// Helpers: UTF-8 <> wchar +IMGUI_API int ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, const ImWchar* in_text_end); // return output UTF-8 bytes count +IMGUI_API int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end); // return input UTF-8 bytes count +IMGUI_API int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, const char* in_text_end, const char** in_remaining = NULL); // return input UTF-8 bytes count +IMGUI_API int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end); // return number of UTF-8 code-points (NOT bytes count) +IMGUI_API int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end); // return number of bytes to express string as UTF-8 code-points + +// Helpers: Misc +IMGUI_API ImU32 ImHash(const void* data, int data_size, ImU32 seed = 0); // Pass data_size==0 for zero-terminated strings +IMGUI_API void* ImLoadFileToMemory(const char* filename, const char* file_open_mode, int* out_file_size = NULL, int padding_bytes = 0); +IMGUI_API FILE* ImOpenFile(const char* filename, const char* file_open_mode); +IMGUI_API bool ImIsPointInTriangle(const ImVec2& p, const ImVec2& a, const ImVec2& b, const ImVec2& c); +static inline bool ImCharIsSpace(int c) { return c == ' ' || c == '\t' || c == 0x3000; } +static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; } + +// Helpers: String +IMGUI_API int ImStricmp(const char* str1, const char* str2); +IMGUI_API int ImStrnicmp(const char* str1, const char* str2, int count); +IMGUI_API char* ImStrdup(const char* str); +IMGUI_API int ImStrlenW(const ImWchar* str); +IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin); // Find beginning-of-line +IMGUI_API const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end); +IMGUI_API int ImFormatString(char* buf, int buf_size, const char* fmt, ...) IM_PRINTFARGS(3); +IMGUI_API int ImFormatStringV(char* buf, int buf_size, const char* fmt, va_list args); + +// Helpers: Math +// We are keeping those not leaking to the user by default, in the case the user has implicit cast operators between ImVec2 and its own types (when IM_VEC2_CLASS_EXTRA is defined) +#ifdef IMGUI_DEFINE_MATH_OPERATORS +static inline ImVec2 operator*(const ImVec2& lhs, const float rhs) { return ImVec2(lhs.x*rhs, lhs.y*rhs); } +static inline ImVec2 operator/(const ImVec2& lhs, const float rhs) { return ImVec2(lhs.x/rhs, lhs.y/rhs); } +static inline ImVec2 operator+(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x+rhs.x, lhs.y+rhs.y); } +static inline ImVec2 operator-(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x-rhs.x, lhs.y-rhs.y); } +static inline ImVec2 operator*(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x*rhs.x, lhs.y*rhs.y); } +static inline ImVec2 operator/(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x/rhs.x, lhs.y/rhs.y); } +static inline ImVec2& operator+=(ImVec2& lhs, const ImVec2& rhs) { lhs.x += rhs.x; lhs.y += rhs.y; return lhs; } +static inline ImVec2& operator-=(ImVec2& lhs, const ImVec2& rhs) { lhs.x -= rhs.x; lhs.y -= rhs.y; return lhs; } +static inline ImVec2& operator*=(ImVec2& lhs, const float rhs) { lhs.x *= rhs; lhs.y *= rhs; return lhs; } +static inline ImVec2& operator/=(ImVec2& lhs, const float rhs) { lhs.x /= rhs; lhs.y /= rhs; return lhs; } +static inline ImVec4 operator-(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x-rhs.x, lhs.y-rhs.y, lhs.z-rhs.z, lhs.w-rhs.w); } +#endif + +static inline int ImMin(int lhs, int rhs) { return lhs < rhs ? lhs : rhs; } +static inline int ImMax(int lhs, int rhs) { return lhs >= rhs ? lhs : rhs; } +static inline float ImMin(float lhs, float rhs) { return lhs < rhs ? lhs : rhs; } +static inline float ImMax(float lhs, float rhs) { return lhs >= rhs ? lhs : rhs; } +static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(ImMin(lhs.x,rhs.x), ImMin(lhs.y,rhs.y)); } +static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(ImMax(lhs.x,rhs.x), ImMax(lhs.y,rhs.y)); } +static inline int ImClamp(int v, int mn, int mx) { return (v < mn) ? mn : (v > mx) ? mx : v; } +static inline float ImClamp(float v, float mn, float mx) { return (v < mn) ? mn : (v > mx) ? mx : v; } +static inline ImVec2 ImClamp(const ImVec2& f, const ImVec2& mn, ImVec2 mx) { return ImVec2(ImClamp(f.x,mn.x,mx.x), ImClamp(f.y,mn.y,mx.y)); } +static inline float ImSaturate(float f) { return (f < 0.0f) ? 0.0f : (f > 1.0f) ? 1.0f : f; } +static inline float ImLerp(float a, float b, float t) { return a + (b - a) * t; } +static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVec2& t) { return ImVec2(a.x + (b.x - a.x) * t.x, a.y + (b.y - a.y) * t.y); } +static inline float ImLengthSqr(const ImVec2& lhs) { return lhs.x*lhs.x + lhs.y*lhs.y; } +static inline float ImLengthSqr(const ImVec4& lhs) { return lhs.x*lhs.x + lhs.y*lhs.y + lhs.z*lhs.z + lhs.w*lhs.w; } +static inline float ImInvLength(const ImVec2& lhs, float fail_value) { float d = lhs.x*lhs.x + lhs.y*lhs.y; if (d > 0.0f) return 1.0f / sqrtf(d); return fail_value; } +static inline float ImFloor(float f) { return (float)(int)f; } +static inline ImVec2 ImFloor(ImVec2 v) { return ImVec2((float)(int)v.x, (float)(int)v.y); } + +// We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax. +// Defining a custom placement new() with a dummy parameter allows us to bypass including which on some platforms complains when user has disabled exceptions. +#ifdef IMGUI_DEFINE_PLACEMENT_NEW +struct ImPlacementNewDummy {}; +inline void* operator new(size_t, ImPlacementNewDummy, void* ptr) { return ptr; } +inline void operator delete(void*, ImPlacementNewDummy, void*) {} +#define IM_PLACEMENT_NEW(_PTR) new(ImPlacementNewDummy(), _PTR) +#endif + +//----------------------------------------------------------------------------- +// Types +//----------------------------------------------------------------------------- + +enum ImGuiButtonFlags_ +{ + ImGuiButtonFlags_Repeat = 1 << 0, // hold to repeat + ImGuiButtonFlags_PressedOnClickRelease = 1 << 1, // (default) return pressed on click+release on same item (default if no PressedOn** flag is set) + ImGuiButtonFlags_PressedOnClick = 1 << 2, // return pressed on click (default requires click+release) + ImGuiButtonFlags_PressedOnRelease = 1 << 3, // return pressed on release (default requires click+release) + ImGuiButtonFlags_PressedOnDoubleClick = 1 << 4, // return pressed on double-click (default requires click+release) + ImGuiButtonFlags_FlattenChilds = 1 << 5, // allow interaction even if a child window is overlapping + ImGuiButtonFlags_DontClosePopups = 1 << 6, // disable automatically closing parent popup on press + ImGuiButtonFlags_Disabled = 1 << 7, // disable interaction + ImGuiButtonFlags_AlignTextBaseLine = 1 << 8, // vertically align button to match text baseline - ButtonEx() only + ImGuiButtonFlags_NoKeyModifiers = 1 << 9, // disable interaction if a key modifier is held + ImGuiButtonFlags_AllowOverlapMode = 1 << 10 // require previous frame HoveredId to either match id or be null before being usable +}; + +enum ImGuiSliderFlags_ +{ + ImGuiSliderFlags_Vertical = 1 << 0 +}; + +enum ImGuiSelectableFlagsPrivate_ +{ + // NB: need to be in sync with last value of ImGuiSelectableFlags_ + ImGuiSelectableFlags_Menu = 1 << 3, + ImGuiSelectableFlags_MenuItem = 1 << 4, + ImGuiSelectableFlags_Disabled = 1 << 5, + ImGuiSelectableFlags_DrawFillAvailWidth = 1 << 6 +}; + +// FIXME: this is in development, not exposed/functional as a generic feature yet. +enum ImGuiLayoutType_ +{ + ImGuiLayoutType_Vertical, + ImGuiLayoutType_Horizontal +}; + +enum ImGuiPlotType +{ + ImGuiPlotType_Lines, + ImGuiPlotType_Histogram +}; + +enum ImGuiDataType +{ + ImGuiDataType_Int, + ImGuiDataType_Float, + ImGuiDataType_Float2, +}; + +enum ImGuiCorner +{ + ImGuiCorner_TopLeft = 1 << 0, // 1 + ImGuiCorner_TopRight = 1 << 1, // 2 + ImGuiCorner_BottomRight = 1 << 2, // 4 + ImGuiCorner_BottomLeft = 1 << 3, // 8 + ImGuiCorner_All = 0x0F +}; + +// 2D axis aligned bounding-box +// NB: we can't rely on ImVec2 math operators being available here +struct IMGUI_API ImRect +{ + ImVec2 Min; // Upper-left + ImVec2 Max; // Lower-right + + ImRect() : Min(FLT_MAX,FLT_MAX), Max(-FLT_MAX,-FLT_MAX) {} + ImRect(const ImVec2& min, const ImVec2& max) : Min(min), Max(max) {} + ImRect(const ImVec4& v) : Min(v.x, v.y), Max(v.z, v.w) {} + ImRect(float x1, float y1, float x2, float y2) : Min(x1, y1), Max(x2, y2) {} + + ImVec2 GetCenter() const { return ImVec2((Min.x+Max.x)*0.5f, (Min.y+Max.y)*0.5f); } + ImVec2 GetSize() const { return ImVec2(Max.x-Min.x, Max.y-Min.y); } + float GetWidth() const { return Max.x-Min.x; } + float GetHeight() const { return Max.y-Min.y; } + ImVec2 GetTL() const { return Min; } // Top-left + ImVec2 GetTR() const { return ImVec2(Max.x, Min.y); } // Top-right + ImVec2 GetBL() const { return ImVec2(Min.x, Max.y); } // Bottom-left + ImVec2 GetBR() const { return Max; } // Bottom-right + bool Contains(const ImVec2& p) const { return p.x >= Min.x && p.y >= Min.y && p.x < Max.x && p.y < Max.y; } + bool Contains(const ImRect& r) const { return r.Min.x >= Min.x && r.Min.y >= Min.y && r.Max.x < Max.x && r.Max.y < Max.y; } + bool Overlaps(const ImRect& r) const { return r.Min.y < Max.y && r.Max.y > Min.y && r.Min.x < Max.x && r.Max.x > Min.x; } + void Add(const ImVec2& rhs) { if (Min.x > rhs.x) Min.x = rhs.x; if (Min.y > rhs.y) Min.y = rhs.y; if (Max.x < rhs.x) Max.x = rhs.x; if (Max.y < rhs.y) Max.y = rhs.y; } + void Add(const ImRect& rhs) { if (Min.x > rhs.Min.x) Min.x = rhs.Min.x; if (Min.y > rhs.Min.y) Min.y = rhs.Min.y; if (Max.x < rhs.Max.x) Max.x = rhs.Max.x; if (Max.y < rhs.Max.y) Max.y = rhs.Max.y; } + void Expand(const float amount) { Min.x -= amount; Min.y -= amount; Max.x += amount; Max.y += amount; } + void Expand(const ImVec2& amount) { Min.x -= amount.x; Min.y -= amount.y; Max.x += amount.x; Max.y += amount.y; } + void Reduce(const ImVec2& amount) { Min.x += amount.x; Min.y += amount.y; Max.x -= amount.x; Max.y -= amount.y; } + void Clip(const ImRect& clip) { if (Min.x < clip.Min.x) Min.x = clip.Min.x; if (Min.y < clip.Min.y) Min.y = clip.Min.y; if (Max.x > clip.Max.x) Max.x = clip.Max.x; if (Max.y > clip.Max.y) Max.y = clip.Max.y; } + void Floor() { Min.x = (float)(int)Min.x; Min.y = (float)(int)Min.y; Max.x = (float)(int)Max.x; Max.y = (float)(int)Max.y; } + ImVec2 GetClosestPoint(ImVec2 p, bool on_edge) const + { + if (!on_edge && Contains(p)) + return p; + if (p.x > Max.x) p.x = Max.x; + else if (p.x < Min.x) p.x = Min.x; + if (p.y > Max.y) p.y = Max.y; + else if (p.y < Min.y) p.y = Min.y; + return p; + } +}; + +// Stacked color modifier, backup of modified data so we can restore it +struct ImGuiColMod +{ + ImGuiCol Col; + ImVec4 BackupValue; +}; + +// Stacked style modifier, backup of modified data so we can restore it. Data type inferred from the variable. +struct ImGuiStyleMod +{ + ImGuiStyleVar VarIdx; + union { int BackupInt[2]; float BackupFloat[2]; }; + ImGuiStyleMod(ImGuiStyleVar idx, int v) { VarIdx = idx; BackupInt[0] = v; } + ImGuiStyleMod(ImGuiStyleVar idx, float v) { VarIdx = idx; BackupFloat[0] = v; } + ImGuiStyleMod(ImGuiStyleVar idx, ImVec2 v) { VarIdx = idx; BackupFloat[0] = v.x; BackupFloat[1] = v.y; } +}; + +// Stacked data for BeginGroup()/EndGroup() +struct ImGuiGroupData +{ + ImVec2 BackupCursorPos; + ImVec2 BackupCursorMaxPos; + float BackupIndentX; + float BackupGroupOffsetX; + float BackupCurrentLineHeight; + float BackupCurrentLineTextBaseOffset; + float BackupLogLinePosY; + bool BackupActiveIdIsAlive; + bool AdvanceCursor; +}; + +// Per column data for Columns() +struct ImGuiColumnData +{ + float OffsetNorm; // Column start offset, normalized 0.0 (far left) -> 1.0 (far right) + //float IndentX; +}; + +// Simple column measurement currently used for MenuItem() only. This is very short-sighted/throw-away code and NOT a generic helper. +struct IMGUI_API ImGuiSimpleColumns +{ + int Count; + float Spacing; + float Width, NextWidth; + float Pos[8], NextWidths[8]; + + ImGuiSimpleColumns(); + void Update(int count, float spacing, bool clear); + float DeclColumns(float w0, float w1, float w2); + float CalcExtraSpace(float avail_w); +}; + +// Internal state of the currently focused/edited text input box +struct IMGUI_API ImGuiTextEditState +{ + ImGuiID Id; // widget id owning the text state + ImVector Text; // edit buffer, we need to persist but can't guarantee the persistence of the user-provided buffer. so we copy into own buffer. + ImVector InitialText; // backup of end-user buffer at the time of focus (in UTF-8, unaltered) + ImVector TempTextBuffer; + int CurLenA, CurLenW; // we need to maintain our buffer length in both UTF-8 and wchar format. + int BufSizeA; // end-user buffer size + float ScrollX; + ImGuiStb::STB_TexteditState StbState; + float CursorAnim; + bool CursorFollow; + bool SelectedAllMouseLock; + + ImGuiTextEditState() { memset(this, 0, sizeof(*this)); } + void CursorAnimReset() { CursorAnim = -0.30f; } // After a user-input the cursor stays on for a while without blinking + void CursorClamp() { StbState.cursor = ImMin(StbState.cursor, CurLenW); StbState.select_start = ImMin(StbState.select_start, CurLenW); StbState.select_end = ImMin(StbState.select_end, CurLenW); } + bool HasSelection() const { return StbState.select_start != StbState.select_end; } + void ClearSelection() { StbState.select_start = StbState.select_end = StbState.cursor; } + void SelectAll() { StbState.select_start = 0; StbState.select_end = CurLenW; StbState.cursor = StbState.select_end; StbState.has_preferred_x = false; } + void OnKeyPressed(int key); +}; + +// Data saved in imgui.ini file +struct ImGuiIniData +{ + char* Name; + ImGuiID Id; + ImVec2 Pos; + ImVec2 Size; + bool Collapsed; +}; + +// Mouse cursor data (used when io.MouseDrawCursor is set) +struct ImGuiMouseCursorData +{ + ImGuiMouseCursor Type; + ImVec2 HotOffset; + ImVec2 Size; + ImVec2 TexUvMin[2]; + ImVec2 TexUvMax[2]; +}; + +// Storage for current popup stack +struct ImGuiPopupRef +{ + ImGuiID PopupId; // Set on OpenPopup() + ImGuiWindow* Window; // Resolved on BeginPopup() - may stay unresolved if user never calls OpenPopup() + ImGuiWindow* ParentWindow; // Set on OpenPopup() + ImGuiID ParentMenuSet; // Set on OpenPopup() + ImVec2 MousePosOnOpen; // Copy of mouse position at the time of opening popup + + ImGuiPopupRef(ImGuiID id, ImGuiWindow* parent_window, ImGuiID parent_menu_set, const ImVec2& mouse_pos) { PopupId = id; Window = NULL; ParentWindow = parent_window; ParentMenuSet = parent_menu_set; MousePosOnOpen = mouse_pos; } +}; + +// Main state for ImGui +struct ImGuiContext +{ + bool Initialized; + ImGuiIO IO; + ImGuiStyle Style; + ImFont* Font; // (Shortcut) == FontStack.empty() ? IO.Font : FontStack.back() + float FontSize; // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize() + float FontBaseSize; // (Shortcut) == IO.FontGlobalScale * Font->Scale * Font->FontSize. Size of characters. + ImVec2 FontTexUvWhitePixel; // (Shortcut) == Font->TexUvWhitePixel + + float Time; + int FrameCount; + int FrameCountEnded; + int FrameCountRendered; + ImVector Windows; + ImVector WindowsSortBuffer; + ImGuiWindow* CurrentWindow; // Being drawn into + ImVector CurrentWindowStack; + ImGuiWindow* FocusedWindow; // Will catch keyboard inputs + ImGuiWindow* HoveredWindow; // Will catch mouse inputs + ImGuiWindow* HoveredRootWindow; // Will catch mouse inputs (for focus/move only) + ImGuiID HoveredId; // Hovered widget + bool HoveredIdAllowOverlap; + ImGuiID HoveredIdPreviousFrame; + ImGuiID ActiveId; // Active widget + ImGuiID ActiveIdPreviousFrame; + bool ActiveIdIsAlive; + bool ActiveIdIsJustActivated; // Set at the time of activation for one frame + bool ActiveIdAllowOverlap; // Set only by active widget + ImVec2 ActiveIdClickOffset; // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior) + ImGuiWindow* ActiveIdWindow; + ImGuiWindow* MovedWindow; // Track the child window we clicked on to move a window. + ImGuiID MovedWindowMoveId; // == MovedWindow->RootWindow->MoveId + ImVector Settings; // .ini Settings + float SettingsDirtyTimer; // Save .ini Settings on disk when time reaches zero + ImVector ColorModifiers; // Stack for PushStyleColor()/PopStyleColor() + ImVector StyleModifiers; // Stack for PushStyleVar()/PopStyleVar() + ImVector FontStack; // Stack for PushFont()/PopFont() + ImVector OpenPopupStack; // Which popups are open (persistent) + ImVector CurrentPopupStack; // Which level of BeginPopup() we are in (reset every frame) + + // Storage for SetNexWindow** and SetNextTreeNode*** functions + ImVec2 SetNextWindowPosVal; + ImVec2 SetNextWindowSizeVal; + ImVec2 SetNextWindowContentSizeVal; + bool SetNextWindowCollapsedVal; + ImGuiSetCond SetNextWindowPosCond; + ImGuiSetCond SetNextWindowSizeCond; + ImGuiSetCond SetNextWindowContentSizeCond; + ImGuiSetCond SetNextWindowCollapsedCond; + ImRect SetNextWindowSizeConstraintRect; // Valid if 'SetNextWindowSizeConstraint' is true + ImGuiSizeConstraintCallback SetNextWindowSizeConstraintCallback; + void* SetNextWindowSizeConstraintCallbackUserData; + bool SetNextWindowSizeConstraint; + bool SetNextWindowFocus; + bool SetNextTreeNodeOpenVal; + ImGuiSetCond SetNextTreeNodeOpenCond; + + // Render + ImDrawData RenderDrawData; // Main ImDrawData instance to pass render information to the user + ImVector RenderDrawLists[3]; + float ModalWindowDarkeningRatio; + ImDrawList OverlayDrawList; // Optional software render of mouse cursors, if io.MouseDrawCursor is set + a few debug overlays + ImGuiMouseCursor MouseCursor; + ImGuiMouseCursorData MouseCursorData[ImGuiMouseCursor_Count_]; + + // Widget state + ImGuiTextEditState InputTextState; + ImFont InputTextPasswordFont; + ImGuiID ScalarAsInputTextId; // Temporary text input when CTRL+clicking on a slider, etc. + ImGuiStorage ColorEditModeStorage; // Store user selection of color edit mode + float DragCurrentValue; // Currently dragged value, always float, not rounded by end-user precision settings + ImVec2 DragLastMouseDelta; + float DragSpeedDefaultRatio; // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio + float DragSpeedScaleSlow; + float DragSpeedScaleFast; + ImVec2 ScrollbarClickDeltaToGrabCenter; // Distance between mouse and center of grab box, normalized in parent space. Use storage? + char Tooltip[1024]; + char* PrivateClipboard; // If no custom clipboard handler is defined + ImVec2 OsImePosRequest, OsImePosSet; // Cursor position request & last passed to the OS Input Method Editor + + // Logging + bool LogEnabled; + FILE* LogFile; // If != NULL log to stdout/ file + ImGuiTextBuffer* LogClipboard; // Else log to clipboard. This is pointer so our GImGui static constructor doesn't call heap allocators. + int LogStartDepth; + int LogAutoExpandMaxDepth; + + // Misc + float FramerateSecPerFrame[120]; // calculate estimate of framerate for user + int FramerateSecPerFrameIdx; + float FramerateSecPerFrameAccum; + int CaptureMouseNextFrame; // explicit capture via CaptureInputs() sets those flags + int CaptureKeyboardNextFrame; + char TempBuffer[1024*3+1]; // temporary text buffer + + ImGuiContext() + { + Initialized = false; + Font = NULL; + FontSize = FontBaseSize = 0.0f; + FontTexUvWhitePixel = ImVec2(0.0f, 0.0f); + + Time = 0.0f; + FrameCount = 0; + FrameCountEnded = FrameCountRendered = -1; + CurrentWindow = NULL; + FocusedWindow = NULL; + HoveredWindow = NULL; + HoveredRootWindow = NULL; + HoveredId = 0; + HoveredIdAllowOverlap = false; + HoveredIdPreviousFrame = 0; + ActiveId = 0; + ActiveIdPreviousFrame = 0; + ActiveIdIsAlive = false; + ActiveIdIsJustActivated = false; + ActiveIdAllowOverlap = false; + ActiveIdClickOffset = ImVec2(-1,-1); + ActiveIdWindow = NULL; + MovedWindow = NULL; + MovedWindowMoveId = 0; + SettingsDirtyTimer = 0.0f; + + SetNextWindowPosVal = ImVec2(0.0f, 0.0f); + SetNextWindowSizeVal = ImVec2(0.0f, 0.0f); + SetNextWindowCollapsedVal = false; + SetNextWindowPosCond = 0; + SetNextWindowSizeCond = 0; + SetNextWindowContentSizeCond = 0; + SetNextWindowCollapsedCond = 0; + SetNextWindowSizeConstraintRect = ImRect(); + SetNextWindowSizeConstraintCallback = NULL; + SetNextWindowSizeConstraintCallbackUserData = NULL; + SetNextWindowSizeConstraint = false; + SetNextWindowFocus = false; + SetNextTreeNodeOpenVal = false; + SetNextTreeNodeOpenCond = 0; + + ScalarAsInputTextId = 0; + DragCurrentValue = 0.0f; + DragLastMouseDelta = ImVec2(0.0f, 0.0f); + DragSpeedDefaultRatio = 1.0f / 100.0f; + DragSpeedScaleSlow = 0.01f; + DragSpeedScaleFast = 10.0f; + ScrollbarClickDeltaToGrabCenter = ImVec2(0.0f, 0.0f); + memset(Tooltip, 0, sizeof(Tooltip)); + PrivateClipboard = NULL; + OsImePosRequest = OsImePosSet = ImVec2(-1.0f, -1.0f); + + ModalWindowDarkeningRatio = 0.0f; + OverlayDrawList._OwnerName = "##Overlay"; // Give it a name for debugging + MouseCursor = ImGuiMouseCursor_Arrow; + memset(MouseCursorData, 0, sizeof(MouseCursorData)); + + LogEnabled = false; + LogFile = NULL; + LogClipboard = NULL; + LogStartDepth = 0; + LogAutoExpandMaxDepth = 2; + + memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame)); + FramerateSecPerFrameIdx = 0; + FramerateSecPerFrameAccum = 0.0f; + CaptureMouseNextFrame = CaptureKeyboardNextFrame = -1; + memset(TempBuffer, 0, sizeof(TempBuffer)); + } +}; + +// Transient per-window data, reset at the beginning of the frame +// FIXME: That's theory, in practice the delimitation between ImGuiWindow and ImGuiDrawContext is quite tenuous and could be reconsidered. +struct IMGUI_API ImGuiDrawContext +{ + ImVec2 CursorPos; + ImVec2 CursorPosPrevLine; + ImVec2 CursorStartPos; + ImVec2 CursorMaxPos; // Implicitly calculate the size of our contents, always extending. Saved into window->SizeContents at the end of the frame + float CurrentLineHeight; + float CurrentLineTextBaseOffset; + float PrevLineHeight; + float PrevLineTextBaseOffset; + float LogLinePosY; + int TreeDepth; + ImGuiID LastItemId; + ImRect LastItemRect; + bool LastItemHoveredAndUsable; // Item rectangle is hovered, and its window is currently interactable with (not blocked by a popup preventing access to the window) + bool LastItemHoveredRect; // Item rectangle is hovered, but its window may or not be currently interactable with (might be blocked by a popup preventing access to the window) + bool MenuBarAppending; + float MenuBarOffsetX; + ImVector ChildWindows; + ImGuiStorage* StateStorage; + ImGuiLayoutType LayoutType; + + // We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings. + float ItemWidth; // == ItemWidthStack.back(). 0.0: default, >0.0: width in pixels, <0.0: align xx pixels to the right of window + float TextWrapPos; // == TextWrapPosStack.back() [empty == -1.0f] + bool AllowKeyboardFocus; // == AllowKeyboardFocusStack.back() [empty == true] + bool ButtonRepeat; // == ButtonRepeatStack.back() [empty == false] + ImVector ItemWidthStack; + ImVector TextWrapPosStack; + ImVector AllowKeyboardFocusStack; + ImVector ButtonRepeatStack; + ImVectorGroupStack; + ImGuiColorEditMode ColorEditMode; + int StackSizesBackup[6]; // Store size of various stacks for asserting + + float IndentX; // Indentation / start position from left of window (increased by TreePush/TreePop, etc.) + float GroupOffsetX; + float ColumnsOffsetX; // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API. + int ColumnsCurrent; + int ColumnsCount; + float ColumnsMinX; + float ColumnsMaxX; + float ColumnsStartPosY; + float ColumnsCellMinY; + float ColumnsCellMaxY; + bool ColumnsShowBorders; + ImGuiID ColumnsSetId; + ImVector ColumnsData; + + ImGuiDrawContext() + { + CursorPos = CursorPosPrevLine = CursorStartPos = CursorMaxPos = ImVec2(0.0f, 0.0f); + CurrentLineHeight = PrevLineHeight = 0.0f; + CurrentLineTextBaseOffset = PrevLineTextBaseOffset = 0.0f; + LogLinePosY = -1.0f; + TreeDepth = 0; + LastItemId = 0; + LastItemRect = ImRect(0.0f,0.0f,0.0f,0.0f); + LastItemHoveredAndUsable = LastItemHoveredRect = false; + MenuBarAppending = false; + MenuBarOffsetX = 0.0f; + StateStorage = NULL; + LayoutType = ImGuiLayoutType_Vertical; + ItemWidth = 0.0f; + ButtonRepeat = false; + AllowKeyboardFocus = true; + TextWrapPos = -1.0f; + ColorEditMode = ImGuiColorEditMode_RGB; + memset(StackSizesBackup, 0, sizeof(StackSizesBackup)); + + IndentX = 0.0f; + GroupOffsetX = 0.0f; + ColumnsOffsetX = 0.0f; + ColumnsCurrent = 0; + ColumnsCount = 1; + ColumnsMinX = ColumnsMaxX = 0.0f; + ColumnsStartPosY = 0.0f; + ColumnsCellMinY = ColumnsCellMaxY = 0.0f; + ColumnsShowBorders = true; + ColumnsSetId = 0; + } +}; + +// Windows data +struct IMGUI_API ImGuiWindow +{ + char* Name; + ImGuiID ID; // == ImHash(Name) + ImGuiWindowFlags Flags; // See enum ImGuiWindowFlags_ + int IndexWithinParent; // Order within immediate parent window, if we are a child window. Otherwise 0. + ImVec2 PosFloat; + ImVec2 Pos; // Position rounded-up to nearest pixel + ImVec2 Size; // Current size (==SizeFull or collapsed title bar size) + ImVec2 SizeFull; // Size when non collapsed + ImVec2 SizeContents; // Size of contents (== extents reach of the drawing cursor) from previous frame + ImVec2 SizeContentsExplicit; // Size of contents explicitly set by the user via SetNextWindowContentSize() + ImRect ContentsRegionRect; // Maximum visible content position in window coordinates. ~~ (SizeContentsExplicit ? SizeContentsExplicit : Size - ScrollbarSizes) - CursorStartPos, per axis + ImVec2 WindowPadding; // Window padding at the time of begin. We need to lock it, in particular manipulation of the ShowBorder would have an effect + ImGuiID MoveId; // == window->GetID("#MOVE") + ImVec2 Scroll; + ImVec2 ScrollTarget; // target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change) + ImVec2 ScrollTargetCenterRatio; // 0.0f = scroll so that target position is at top, 0.5f = scroll so that target position is centered + bool ScrollbarX, ScrollbarY; + ImVec2 ScrollbarSizes; + float BorderSize; + bool Active; // Set to true on Begin() + bool WasActive; + bool Accessed; // Set to true when any widget access the current window + bool Collapsed; // Set when collapsing window to become only title-bar + bool SkipItems; // == Visible && !Collapsed + int BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs) + ImGuiID PopupId; // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling) + int AutoFitFramesX, AutoFitFramesY; + bool AutoFitOnlyGrows; + int AutoPosLastDirection; + int HiddenFrames; + int SetWindowPosAllowFlags; // bit ImGuiSetCond_*** specify if SetWindowPos() call will succeed with this particular flag. + int SetWindowSizeAllowFlags; // bit ImGuiSetCond_*** specify if SetWindowSize() call will succeed with this particular flag. + int SetWindowCollapsedAllowFlags; // bit ImGuiSetCond_*** specify if SetWindowCollapsed() call will succeed with this particular flag. + bool SetWindowPosCenterWanted; + + ImGuiDrawContext DC; // Temporary per-window data, reset at the beginning of the frame + ImVector IDStack; // ID stack. ID are hashes seeded with the value at the top of the stack + ImRect ClipRect; // = DrawList->clip_rect_stack.back(). Scissoring / clipping rectangle. x1, y1, x2, y2. + ImRect WindowRectClipped; // = WindowRect just after setup in Begin(). == window->Rect() for root window. + int LastFrameActive; + float ItemWidthDefault; + ImGuiSimpleColumns MenuColumns; // Simplified columns storage for menu items + ImGuiStorage StateStorage; + float FontWindowScale; // Scale multiplier per-window + ImDrawList* DrawList; + ImGuiWindow* RootWindow; // If we are a child window, this is pointing to the first non-child parent window. Else point to ourself. + ImGuiWindow* RootNonPopupWindow; // If we are a child window, this is pointing to the first non-child non-popup parent window. Else point to ourself. + ImGuiWindow* ParentWindow; // If we are a child window, this is pointing to our parent window. Else point to NULL. + + // Navigation / Focus + int FocusIdxAllCounter; // Start at -1 and increase as assigned via FocusItemRegister() + int FocusIdxTabCounter; // (same, but only count widgets which you can Tab through) + int FocusIdxAllRequestCurrent; // Item being requested for focus + int FocusIdxTabRequestCurrent; // Tab-able item being requested for focus + int FocusIdxAllRequestNext; // Item being requested for focus, for next update (relies on layout to be stable between the frame pressing TAB and the next frame) + int FocusIdxTabRequestNext; // " + +public: + ImGuiWindow(const char* name); + ~ImGuiWindow(); + + ImGuiID GetID(const char* str, const char* str_end = NULL); + ImGuiID GetID(const void* ptr); + ImGuiID GetIDNoKeepAlive(const char* str, const char* str_end = NULL); + + ImRect Rect() const { return ImRect(Pos.x, Pos.y, Pos.x+Size.x, Pos.y+Size.y); } + float CalcFontSize() const { return GImGui->FontBaseSize * FontWindowScale; } + float TitleBarHeight() const { return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + GImGui->Style.FramePadding.y * 2.0f; } + ImRect TitleBarRect() const { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); } + float MenuBarHeight() const { return (Flags & ImGuiWindowFlags_MenuBar) ? CalcFontSize() + GImGui->Style.FramePadding.y * 2.0f : 0.0f; } + ImRect MenuBarRect() const { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); } +}; + +//----------------------------------------------------------------------------- +// Internal API +// No guarantee of forward compatibility here. +//----------------------------------------------------------------------------- + +namespace ImGui +{ + // We should always have a CurrentWindow in the stack (there is an implicit "Debug" window) + // If this ever crash because g.CurrentWindow is NULL it means that either + // - ImGui::NewFrame() has never been called, which is illegal. + // - You are calling ImGui functions after ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal. + inline ImGuiWindow* GetCurrentWindowRead() { ImGuiContext& g = *GImGui; return g.CurrentWindow; } + inline ImGuiWindow* GetCurrentWindow() { ImGuiContext& g = *GImGui; g.CurrentWindow->Accessed = true; return g.CurrentWindow; } + IMGUI_API ImGuiWindow* GetParentWindow(); + IMGUI_API ImGuiWindow* FindWindowByName(const char* name); + IMGUI_API void FocusWindow(ImGuiWindow* window); + + IMGUI_API void EndFrame(); // Ends the ImGui frame. Automatically called by Render()! you most likely don't need to ever call that yourself directly. If you don't need to render you can call EndFrame() but you'll have wasted CPU already. If you don't need to render, don't create any windows instead! + + IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow* window); + IMGUI_API void SetHoveredID(ImGuiID id); + IMGUI_API void KeepAliveID(ImGuiID id); + + IMGUI_API void ItemSize(const ImVec2& size, float text_offset_y = 0.0f); + IMGUI_API void ItemSize(const ImRect& bb, float text_offset_y = 0.0f); + IMGUI_API bool ItemAdd(const ImRect& bb, const ImGuiID* id); + IMGUI_API bool IsClippedEx(const ImRect& bb, const ImGuiID* id, bool clip_even_when_logged); + IMGUI_API bool IsHovered(const ImRect& bb, ImGuiID id, bool flatten_childs = false); + IMGUI_API bool FocusableItemRegister(ImGuiWindow* window, bool is_active, bool tab_stop = true); // Return true if focus is requested + IMGUI_API void FocusableItemUnregister(ImGuiWindow* window); + IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_x, float default_y); + IMGUI_API float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x); + + IMGUI_API void OpenPopupEx(const char* str_id, bool reopen_existing); + + // NB: All position are in absolute pixels coordinates (not window coordinates) + // FIXME: All those functions are a mess and needs to be refactored into something decent. AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. + // We need: a sort of symbol library, preferably baked into font atlas when possible + decent text rendering helpers. + IMGUI_API void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true); + IMGUI_API void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width); + IMGUI_API void RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0,0), const ImRect* clip_rect = NULL); + IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f); + IMGUI_API void RenderCollapseTriangle(ImVec2 pos, bool is_open, float scale = 1.0f); + IMGUI_API void RenderBullet(ImVec2 pos); + IMGUI_API void RenderCheckMark(ImVec2 pos, ImU32 col); + IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text. + + IMGUI_API bool ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0); + IMGUI_API bool ButtonEx(const char* label, const ImVec2& size_arg = ImVec2(0,0), ImGuiButtonFlags flags = 0); + IMGUI_API bool CloseButton(ImGuiID id, const ImVec2& pos, float radius); + + IMGUI_API bool SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v_min, float v_max, float power, int decimal_precision, ImGuiSliderFlags flags = 0); + IMGUI_API bool SliderFloatN(const char* label, float* v, int components, float v_min, float v_max, const char* display_format, float power); + IMGUI_API bool SliderIntN(const char* label, int* v, int components, int v_min, int v_max, const char* display_format); + + IMGUI_API bool DragBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v_speed, float v_min, float v_max, int decimal_precision, float power); + IMGUI_API bool DragFloatN(const char* label, float* v, int components, float v_speed, float v_min, float v_max, const char* display_format, float power); + IMGUI_API bool DragIntN(const char* label, int* v, int components, float v_speed, int v_min, int v_max, const char* display_format); + + IMGUI_API bool InputTextEx(const char* label, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + IMGUI_API bool InputFloatN(const char* label, float* v, int components, int decimal_precision, ImGuiInputTextFlags extra_flags); + IMGUI_API bool InputIntN(const char* label, int* v, int components, ImGuiInputTextFlags extra_flags); + IMGUI_API bool InputScalarEx(const char* label, ImGuiDataType data_type, void* data_ptr, void* step_ptr, void* step_fast_ptr, const char* scalar_format, ImGuiInputTextFlags extra_flags); + IMGUI_API bool InputScalarAsWidgetReplacement(const ImRect& aabb, const char* label, ImGuiDataType data_type, void* data_ptr, ImGuiID id, int decimal_precision); + + IMGUI_API bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL); + IMGUI_API bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0); // Consume previous SetNextTreeNodeOpened() data, if any. May return true when logging + IMGUI_API void TreePushRawID(ImGuiID id); + + IMGUI_API void PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size); + + IMGUI_API int ParseFormatPrecision(const char* fmt, int default_value); + IMGUI_API float RoundScalar(float value, int decimal_precision); + +} // namespace ImGui + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#ifdef _MSC_VER +#pragma warning (pop) +#endif diff --git a/lib/imgui/stb_rect_pack.h b/lib/imgui/stb_rect_pack.h new file mode 100644 index 0000000..c75527d --- /dev/null +++ b/lib/imgui/stb_rect_pack.h @@ -0,0 +1,583 @@ +// stb_rect_pack.h - v0.10 - public domain - rectangle packing +// Sean Barrett 2014 +// +// Useful for e.g. packing rectangular textures into an atlas. +// Does not do rotation. +// +// Not necessarily the awesomest packing method, but better than +// the totally naive one in stb_truetype (which is primarily what +// this is meant to replace). +// +// Has only had a few tests run, may have issues. +// +// More docs to come. +// +// No memory allocations; uses qsort() and assert() from stdlib. +// Can override those by defining STBRP_SORT and STBRP_ASSERT. +// +// This library currently uses the Skyline Bottom-Left algorithm. +// +// Please note: better rectangle packers are welcome! Please +// implement them to the same API, but with a different init +// function. +// +// Credits +// +// Library +// Sean Barrett +// Minor features +// Martins Mozeiko +// Bugfixes / warning fixes +// Jeremy Jaussaud +// +// Version history: +// +// 0.10 (2016-10-25) remove cast-away-const to avoid warnings +// 0.09 (2016-08-27) fix compiler warnings +// 0.08 (2015-09-13) really fix bug with empty rects (w=0 or h=0) +// 0.07 (2015-09-13) fix bug with empty rects (w=0 or h=0) +// 0.06 (2015-04-15) added STBRP_SORT to allow replacing qsort +// 0.05: added STBRP_ASSERT to allow replacing assert +// 0.04: fixed minor bug in STBRP_LARGE_RECTS support +// 0.01: initial release +// +// LICENSE +// +// This software is dual-licensed to the public domain and under the following +// license: you are granted a perpetual, irrevocable license to copy, modify, +// publish, and distribute this file as you see fit. + +////////////////////////////////////////////////////////////////////////////// +// +// INCLUDE SECTION +// + +#ifndef STB_INCLUDE_STB_RECT_PACK_H +#define STB_INCLUDE_STB_RECT_PACK_H + +#define STB_RECT_PACK_VERSION 1 + +#ifdef STBRP_STATIC +#define STBRP_DEF static +#else +#define STBRP_DEF extern +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct stbrp_context stbrp_context; +typedef struct stbrp_node stbrp_node; +typedef struct stbrp_rect stbrp_rect; + +#ifdef STBRP_LARGE_RECTS +typedef int stbrp_coord; +#else +typedef unsigned short stbrp_coord; +#endif + +STBRP_DEF void stbrp_pack_rects (stbrp_context *context, stbrp_rect *rects, int num_rects); +// Assign packed locations to rectangles. The rectangles are of type +// 'stbrp_rect' defined below, stored in the array 'rects', and there +// are 'num_rects' many of them. +// +// Rectangles which are successfully packed have the 'was_packed' flag +// set to a non-zero value and 'x' and 'y' store the minimum location +// on each axis (i.e. bottom-left in cartesian coordinates, top-left +// if you imagine y increasing downwards). Rectangles which do not fit +// have the 'was_packed' flag set to 0. +// +// You should not try to access the 'rects' array from another thread +// while this function is running, as the function temporarily reorders +// the array while it executes. +// +// To pack into another rectangle, you need to call stbrp_init_target +// again. To continue packing into the same rectangle, you can call +// this function again. Calling this multiple times with multiple rect +// arrays will probably produce worse packing results than calling it +// a single time with the full rectangle array, but the option is +// available. + +struct stbrp_rect +{ + // reserved for your use: + int id; + + // input: + stbrp_coord w, h; + + // output: + stbrp_coord x, y; + int was_packed; // non-zero if valid packing + +}; // 16 bytes, nominally + + +STBRP_DEF void stbrp_init_target (stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes); +// Initialize a rectangle packer to: +// pack a rectangle that is 'width' by 'height' in dimensions +// using temporary storage provided by the array 'nodes', which is 'num_nodes' long +// +// You must call this function every time you start packing into a new target. +// +// There is no "shutdown" function. The 'nodes' memory must stay valid for +// the following stbrp_pack_rects() call (or calls), but can be freed after +// the call (or calls) finish. +// +// Note: to guarantee best results, either: +// 1. make sure 'num_nodes' >= 'width' +// or 2. call stbrp_allow_out_of_mem() defined below with 'allow_out_of_mem = 1' +// +// If you don't do either of the above things, widths will be quantized to multiples +// of small integers to guarantee the algorithm doesn't run out of temporary storage. +// +// If you do #2, then the non-quantized algorithm will be used, but the algorithm +// may run out of temporary storage and be unable to pack some rectangles. + +STBRP_DEF void stbrp_setup_allow_out_of_mem (stbrp_context *context, int allow_out_of_mem); +// Optionally call this function after init but before doing any packing to +// change the handling of the out-of-temp-memory scenario, described above. +// If you call init again, this will be reset to the default (false). + + +STBRP_DEF void stbrp_setup_heuristic (stbrp_context *context, int heuristic); +// Optionally select which packing heuristic the library should use. Different +// heuristics will produce better/worse results for different data sets. +// If you call init again, this will be reset to the default. + +enum +{ + STBRP_HEURISTIC_Skyline_default=0, + STBRP_HEURISTIC_Skyline_BL_sortHeight = STBRP_HEURISTIC_Skyline_default, + STBRP_HEURISTIC_Skyline_BF_sortHeight +}; + + +////////////////////////////////////////////////////////////////////////////// +// +// the details of the following structures don't matter to you, but they must +// be visible so you can handle the memory allocations for them + +struct stbrp_node +{ + stbrp_coord x,y; + stbrp_node *next; +}; + +struct stbrp_context +{ + int width; + int height; + int align; + int init_mode; + int heuristic; + int num_nodes; + stbrp_node *active_head; + stbrp_node *free_head; + stbrp_node extra[2]; // we allocate two extra nodes so optimal user-node-count is 'width' not 'width+2' +}; + +#ifdef __cplusplus +} +#endif + +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// IMPLEMENTATION SECTION +// + +#ifdef STB_RECT_PACK_IMPLEMENTATION +#ifndef STBRP_SORT +#include +#define STBRP_SORT qsort +#endif + +#ifndef STBRP_ASSERT +#include +#define STBRP_ASSERT assert +#endif + +#ifdef _MSC_VER +#define STBRP__NOTUSED(v) (void)(v) +#else +#define STBRP__NOTUSED(v) (void)sizeof(v) +#endif + +enum +{ + STBRP__INIT_skyline = 1 +}; + +STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic) +{ + switch (context->init_mode) { + case STBRP__INIT_skyline: + STBRP_ASSERT(heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight || heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight); + context->heuristic = heuristic; + break; + default: + STBRP_ASSERT(0); + } +} + +STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int allow_out_of_mem) +{ + if (allow_out_of_mem) + // if it's ok to run out of memory, then don't bother aligning them; + // this gives better packing, but may fail due to OOM (even though + // the rectangles easily fit). @TODO a smarter approach would be to only + // quantize once we've hit OOM, then we could get rid of this parameter. + context->align = 1; + else { + // if it's not ok to run out of memory, then quantize the widths + // so that num_nodes is always enough nodes. + // + // I.e. num_nodes * align >= width + // align >= width / num_nodes + // align = ceil(width/num_nodes) + + context->align = (context->width + context->num_nodes-1) / context->num_nodes; + } +} + +STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes) +{ + int i; +#ifndef STBRP_LARGE_RECTS + STBRP_ASSERT(width <= 0xffff && height <= 0xffff); +#endif + + for (i=0; i < num_nodes-1; ++i) + nodes[i].next = &nodes[i+1]; + nodes[i].next = NULL; + context->init_mode = STBRP__INIT_skyline; + context->heuristic = STBRP_HEURISTIC_Skyline_default; + context->free_head = &nodes[0]; + context->active_head = &context->extra[0]; + context->width = width; + context->height = height; + context->num_nodes = num_nodes; + stbrp_setup_allow_out_of_mem(context, 0); + + // node 0 is the full width, node 1 is the sentinel (lets us not store width explicitly) + context->extra[0].x = 0; + context->extra[0].y = 0; + context->extra[0].next = &context->extra[1]; + context->extra[1].x = (stbrp_coord) width; +#ifdef STBRP_LARGE_RECTS + context->extra[1].y = (1<<30); +#else + context->extra[1].y = 65535; +#endif + context->extra[1].next = NULL; +} + +// find minimum y position if it starts at x1 +static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first, int x0, int width, int *pwaste) +{ + stbrp_node *node = first; + int x1 = x0 + width; + int min_y, visited_width, waste_area; + + STBRP__NOTUSED(c); + + STBRP_ASSERT(first->x <= x0); + + #if 0 + // skip in case we're past the node + while (node->next->x <= x0) + ++node; + #else + STBRP_ASSERT(node->next->x > x0); // we ended up handling this in the caller for efficiency + #endif + + STBRP_ASSERT(node->x <= x0); + + min_y = 0; + waste_area = 0; + visited_width = 0; + while (node->x < x1) { + if (node->y > min_y) { + // raise min_y higher. + // we've accounted for all waste up to min_y, + // but we'll now add more waste for everything we've visted + waste_area += visited_width * (node->y - min_y); + min_y = node->y; + // the first time through, visited_width might be reduced + if (node->x < x0) + visited_width += node->next->x - x0; + else + visited_width += node->next->x - node->x; + } else { + // add waste area + int under_width = node->next->x - node->x; + if (under_width + visited_width > width) + under_width = width - visited_width; + waste_area += under_width * (min_y - node->y); + visited_width += under_width; + } + node = node->next; + } + + *pwaste = waste_area; + return min_y; +} + +typedef struct +{ + int x,y; + stbrp_node **prev_link; +} stbrp__findresult; + +static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int width, int height) +{ + int best_waste = (1<<30), best_x, best_y = (1 << 30); + stbrp__findresult fr; + stbrp_node **prev, *node, *tail, **best = NULL; + + // align to multiple of c->align + width = (width + c->align - 1); + width -= width % c->align; + STBRP_ASSERT(width % c->align == 0); + + node = c->active_head; + prev = &c->active_head; + while (node->x + width <= c->width) { + int y,waste; + y = stbrp__skyline_find_min_y(c, node, node->x, width, &waste); + if (c->heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight) { // actually just want to test BL + // bottom left + if (y < best_y) { + best_y = y; + best = prev; + } + } else { + // best-fit + if (y + height <= c->height) { + // can only use it if it first vertically + if (y < best_y || (y == best_y && waste < best_waste)) { + best_y = y; + best_waste = waste; + best = prev; + } + } + } + prev = &node->next; + node = node->next; + } + + best_x = (best == NULL) ? 0 : (*best)->x; + + // if doing best-fit (BF), we also have to try aligning right edge to each node position + // + // e.g, if fitting + // + // ____________________ + // |____________________| + // + // into + // + // | | + // | ____________| + // |____________| + // + // then right-aligned reduces waste, but bottom-left BL is always chooses left-aligned + // + // This makes BF take about 2x the time + + if (c->heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight) { + tail = c->active_head; + node = c->active_head; + prev = &c->active_head; + // find first node that's admissible + while (tail->x < width) + tail = tail->next; + while (tail) { + int xpos = tail->x - width; + int y,waste; + STBRP_ASSERT(xpos >= 0); + // find the left position that matches this + while (node->next->x <= xpos) { + prev = &node->next; + node = node->next; + } + STBRP_ASSERT(node->next->x > xpos && node->x <= xpos); + y = stbrp__skyline_find_min_y(c, node, xpos, width, &waste); + if (y + height < c->height) { + if (y <= best_y) { + if (y < best_y || waste < best_waste || (waste==best_waste && xpos < best_x)) { + best_x = xpos; + STBRP_ASSERT(y <= best_y); + best_y = y; + best_waste = waste; + best = prev; + } + } + } + tail = tail->next; + } + } + + fr.prev_link = best; + fr.x = best_x; + fr.y = best_y; + return fr; +} + +static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, int width, int height) +{ + // find best position according to heuristic + stbrp__findresult res = stbrp__skyline_find_best_pos(context, width, height); + stbrp_node *node, *cur; + + // bail if: + // 1. it failed + // 2. the best node doesn't fit (we don't always check this) + // 3. we're out of memory + if (res.prev_link == NULL || res.y + height > context->height || context->free_head == NULL) { + res.prev_link = NULL; + return res; + } + + // on success, create new node + node = context->free_head; + node->x = (stbrp_coord) res.x; + node->y = (stbrp_coord) (res.y + height); + + context->free_head = node->next; + + // insert the new node into the right starting point, and + // let 'cur' point to the remaining nodes needing to be + // stiched back in + + cur = *res.prev_link; + if (cur->x < res.x) { + // preserve the existing one, so start testing with the next one + stbrp_node *next = cur->next; + cur->next = node; + cur = next; + } else { + *res.prev_link = node; + } + + // from here, traverse cur and free the nodes, until we get to one + // that shouldn't be freed + while (cur->next && cur->next->x <= res.x + width) { + stbrp_node *next = cur->next; + // move the current node to the free list + cur->next = context->free_head; + context->free_head = cur; + cur = next; + } + + // stitch the list back in + node->next = cur; + + if (cur->x < res.x + width) + cur->x = (stbrp_coord) (res.x + width); + +#ifdef _DEBUG + cur = context->active_head; + while (cur->x < context->width) { + STBRP_ASSERT(cur->x < cur->next->x); + cur = cur->next; + } + STBRP_ASSERT(cur->next == NULL); + + { + stbrp_node *L1 = NULL, *L2 = NULL; + int count=0; + cur = context->active_head; + while (cur) { + L1 = cur; + cur = cur->next; + ++count; + } + cur = context->free_head; + while (cur) { + L2 = cur; + cur = cur->next; + ++count; + } + STBRP_ASSERT(count == context->num_nodes+2); + } +#endif + + return res; +} + +static int rect_height_compare(const void *a, const void *b) +{ + const stbrp_rect *p = (const stbrp_rect *) a; + const stbrp_rect *q = (const stbrp_rect *) b; + if (p->h > q->h) + return -1; + if (p->h < q->h) + return 1; + return (p->w > q->w) ? -1 : (p->w < q->w); +} + +static int rect_width_compare(const void *a, const void *b) +{ + const stbrp_rect *p = (const stbrp_rect *) a; + const stbrp_rect *q = (const stbrp_rect *) b; + if (p->w > q->w) + return -1; + if (p->w < q->w) + return 1; + return (p->h > q->h) ? -1 : (p->h < q->h); +} + +static int rect_original_order(const void *a, const void *b) +{ + const stbrp_rect *p = (const stbrp_rect *) a; + const stbrp_rect *q = (const stbrp_rect *) b; + return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed); +} + +#ifdef STBRP_LARGE_RECTS +#define STBRP__MAXVAL 0xffffffff +#else +#define STBRP__MAXVAL 0xffff +#endif + +STBRP_DEF void stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects) +{ + int i; + + // we use the 'was_packed' field internally to allow sorting/unsorting + for (i=0; i < num_rects; ++i) { + rects[i].was_packed = i; + #ifndef STBRP_LARGE_RECTS + STBRP_ASSERT(rects[i].w <= 0xffff && rects[i].h <= 0xffff); + #endif + } + + // sort according to heuristic + STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_height_compare); + + for (i=0; i < num_rects; ++i) { + if (rects[i].w == 0 || rects[i].h == 0) { + rects[i].x = rects[i].y = 0; // empty rect needs no space + } else { + stbrp__findresult fr = stbrp__skyline_pack_rectangle(context, rects[i].w, rects[i].h); + if (fr.prev_link) { + rects[i].x = (stbrp_coord) fr.x; + rects[i].y = (stbrp_coord) fr.y; + } else { + rects[i].x = rects[i].y = STBRP__MAXVAL; + } + } + } + + // unsort + STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_original_order); + + // set was_packed flags + for (i=0; i < num_rects; ++i) + rects[i].was_packed = !(rects[i].x == STBRP__MAXVAL && rects[i].y == STBRP__MAXVAL); +} +#endif diff --git a/lib/imgui/stb_textedit.h b/lib/imgui/stb_textedit.h new file mode 100644 index 0000000..4b731a0 --- /dev/null +++ b/lib/imgui/stb_textedit.h @@ -0,0 +1,1322 @@ +// [ImGui] this is a slightly modified version of stb_truetype.h 1.9. Those changes would need to be pushed into nothings/sb +// [ImGui] - fixed linestart handler when over last character of multi-line buffer + simplified existing code (#588, #815) +// [ImGui] - fixed a state corruption/crash bug in stb_text_redo and stb_textedit_discard_redo (#715) +// [ImGui] - fixed a crash bug in stb_textedit_discard_redo (#681) +// [ImGui] - fixed some minor warnings + +// stb_textedit.h - v1.9 - public domain - Sean Barrett +// Development of this library was sponsored by RAD Game Tools +// +// This C header file implements the guts of a multi-line text-editing +// widget; you implement display, word-wrapping, and low-level string +// insertion/deletion, and stb_textedit will map user inputs into +// insertions & deletions, plus updates to the cursor position, +// selection state, and undo state. +// +// It is intended for use in games and other systems that need to build +// their own custom widgets and which do not have heavy text-editing +// requirements (this library is not recommended for use for editing large +// texts, as its performance does not scale and it has limited undo). +// +// Non-trivial behaviors are modelled after Windows text controls. +// +// +// LICENSE +// +// This software is dual-licensed to the public domain and under the following +// license: you are granted a perpetual, irrevocable license to copy, modify, +// publish, and distribute this file as you see fit. +// +// +// DEPENDENCIES +// +// Uses the C runtime function 'memmove', which you can override +// by defining STB_TEXTEDIT_memmove before the implementation. +// Uses no other functions. Performs no runtime allocations. +// +// +// VERSION HISTORY +// +// 1.9 (2016-08-27) customizable move-by-word +// 1.8 (2016-04-02) better keyboard handling when mouse button is down +// 1.7 (2015-09-13) change y range handling in case baseline is non-0 +// 1.6 (2015-04-15) allow STB_TEXTEDIT_memmove +// 1.5 (2014-09-10) add support for secondary keys for OS X +// 1.4 (2014-08-17) fix signed/unsigned warnings +// 1.3 (2014-06-19) fix mouse clicking to round to nearest char boundary +// 1.2 (2014-05-27) fix some RAD types that had crept into the new code +// 1.1 (2013-12-15) move-by-word (requires STB_TEXTEDIT_IS_SPACE ) +// 1.0 (2012-07-26) improve documentation, initial public release +// 0.3 (2012-02-24) bugfixes, single-line mode; insert mode +// 0.2 (2011-11-28) fixes to undo/redo +// 0.1 (2010-07-08) initial version +// +// ADDITIONAL CONTRIBUTORS +// +// Ulf Winklemann: move-by-word in 1.1 +// Fabian Giesen: secondary key inputs in 1.5 +// Martins Mozeiko: STB_TEXTEDIT_memmove +// +// Bugfixes: +// Scott Graham +// Daniel Keller +// Omar Cornut +// +// USAGE +// +// This file behaves differently depending on what symbols you define +// before including it. +// +// +// Header-file mode: +// +// If you do not define STB_TEXTEDIT_IMPLEMENTATION before including this, +// it will operate in "header file" mode. In this mode, it declares a +// single public symbol, STB_TexteditState, which encapsulates the current +// state of a text widget (except for the string, which you will store +// separately). +// +// To compile in this mode, you must define STB_TEXTEDIT_CHARTYPE to a +// primitive type that defines a single character (e.g. char, wchar_t, etc). +// +// To save space or increase undo-ability, you can optionally define the +// following things that are used by the undo system: +// +// STB_TEXTEDIT_POSITIONTYPE small int type encoding a valid cursor position +// STB_TEXTEDIT_UNDOSTATECOUNT the number of undo states to allow +// STB_TEXTEDIT_UNDOCHARCOUNT the number of characters to store in the undo buffer +// +// If you don't define these, they are set to permissive types and +// moderate sizes. The undo system does no memory allocations, so +// it grows STB_TexteditState by the worst-case storage which is (in bytes): +// +// [4 + sizeof(STB_TEXTEDIT_POSITIONTYPE)] * STB_TEXTEDIT_UNDOSTATE_COUNT +// + sizeof(STB_TEXTEDIT_CHARTYPE) * STB_TEXTEDIT_UNDOCHAR_COUNT +// +// +// Implementation mode: +// +// If you define STB_TEXTEDIT_IMPLEMENTATION before including this, it +// will compile the implementation of the text edit widget, depending +// on a large number of symbols which must be defined before the include. +// +// The implementation is defined only as static functions. You will then +// need to provide your own APIs in the same file which will access the +// static functions. +// +// The basic concept is that you provide a "string" object which +// behaves like an array of characters. stb_textedit uses indices to +// refer to positions in the string, implicitly representing positions +// in the displayed textedit. This is true for both plain text and +// rich text; even with rich text stb_truetype interacts with your +// code as if there was an array of all the displayed characters. +// +// Symbols that must be the same in header-file and implementation mode: +// +// STB_TEXTEDIT_CHARTYPE the character type +// STB_TEXTEDIT_POSITIONTYPE small type that a valid cursor position +// STB_TEXTEDIT_UNDOSTATECOUNT the number of undo states to allow +// STB_TEXTEDIT_UNDOCHARCOUNT the number of characters to store in the undo buffer +// +// Symbols you must define for implementation mode: +// +// STB_TEXTEDIT_STRING the type of object representing a string being edited, +// typically this is a wrapper object with other data you need +// +// STB_TEXTEDIT_STRINGLEN(obj) the length of the string (ideally O(1)) +// STB_TEXTEDIT_LAYOUTROW(&r,obj,n) returns the results of laying out a line of characters +// starting from character #n (see discussion below) +// STB_TEXTEDIT_GETWIDTH(obj,n,i) returns the pixel delta from the xpos of the i'th character +// to the xpos of the i+1'th char for a line of characters +// starting at character #n (i.e. accounts for kerning +// with previous char) +// STB_TEXTEDIT_KEYTOTEXT(k) maps a keyboard input to an insertable character +// (return type is int, -1 means not valid to insert) +// STB_TEXTEDIT_GETCHAR(obj,i) returns the i'th character of obj, 0-based +// STB_TEXTEDIT_NEWLINE the character returned by _GETCHAR() we recognize +// as manually wordwrapping for end-of-line positioning +// +// STB_TEXTEDIT_DELETECHARS(obj,i,n) delete n characters starting at i +// STB_TEXTEDIT_INSERTCHARS(obj,i,c*,n) insert n characters at i (pointed to by STB_TEXTEDIT_CHARTYPE*) +// +// STB_TEXTEDIT_K_SHIFT a power of two that is or'd in to a keyboard input to represent the shift key +// +// STB_TEXTEDIT_K_LEFT keyboard input to move cursor left +// STB_TEXTEDIT_K_RIGHT keyboard input to move cursor right +// STB_TEXTEDIT_K_UP keyboard input to move cursor up +// STB_TEXTEDIT_K_DOWN keyboard input to move cursor down +// STB_TEXTEDIT_K_LINESTART keyboard input to move cursor to start of line // e.g. HOME +// STB_TEXTEDIT_K_LINEEND keyboard input to move cursor to end of line // e.g. END +// STB_TEXTEDIT_K_TEXTSTART keyboard input to move cursor to start of text // e.g. ctrl-HOME +// STB_TEXTEDIT_K_TEXTEND keyboard input to move cursor to end of text // e.g. ctrl-END +// STB_TEXTEDIT_K_DELETE keyboard input to delete selection or character under cursor +// STB_TEXTEDIT_K_BACKSPACE keyboard input to delete selection or character left of cursor +// STB_TEXTEDIT_K_UNDO keyboard input to perform undo +// STB_TEXTEDIT_K_REDO keyboard input to perform redo +// +// Optional: +// STB_TEXTEDIT_K_INSERT keyboard input to toggle insert mode +// STB_TEXTEDIT_IS_SPACE(ch) true if character is whitespace (e.g. 'isspace'), +// required for default WORDLEFT/WORDRIGHT handlers +// STB_TEXTEDIT_MOVEWORDLEFT(obj,i) custom handler for WORDLEFT, returns index to move cursor to +// STB_TEXTEDIT_MOVEWORDRIGHT(obj,i) custom handler for WORDRIGHT, returns index to move cursor to +// STB_TEXTEDIT_K_WORDLEFT keyboard input to move cursor left one word // e.g. ctrl-LEFT +// STB_TEXTEDIT_K_WORDRIGHT keyboard input to move cursor right one word // e.g. ctrl-RIGHT +// STB_TEXTEDIT_K_LINESTART2 secondary keyboard input to move cursor to start of line +// STB_TEXTEDIT_K_LINEEND2 secondary keyboard input to move cursor to end of line +// STB_TEXTEDIT_K_TEXTSTART2 secondary keyboard input to move cursor to start of text +// STB_TEXTEDIT_K_TEXTEND2 secondary keyboard input to move cursor to end of text +// +// Todo: +// STB_TEXTEDIT_K_PGUP keyboard input to move cursor up a page +// STB_TEXTEDIT_K_PGDOWN keyboard input to move cursor down a page +// +// Keyboard input must be encoded as a single integer value; e.g. a character code +// and some bitflags that represent shift states. to simplify the interface, SHIFT must +// be a bitflag, so we can test the shifted state of cursor movements to allow selection, +// i.e. (STB_TEXTED_K_RIGHT|STB_TEXTEDIT_K_SHIFT) should be shifted right-arrow. +// +// You can encode other things, such as CONTROL or ALT, in additional bits, and +// then test for their presence in e.g. STB_TEXTEDIT_K_WORDLEFT. For example, +// my Windows implementations add an additional CONTROL bit, and an additional KEYDOWN +// bit. Then all of the STB_TEXTEDIT_K_ values bitwise-or in the KEYDOWN bit, +// and I pass both WM_KEYDOWN and WM_CHAR events to the "key" function in the +// API below. The control keys will only match WM_KEYDOWN events because of the +// keydown bit I add, and STB_TEXTEDIT_KEYTOTEXT only tests for the KEYDOWN +// bit so it only decodes WM_CHAR events. +// +// STB_TEXTEDIT_LAYOUTROW returns information about the shape of one displayed +// row of characters assuming they start on the i'th character--the width and +// the height and the number of characters consumed. This allows this library +// to traverse the entire layout incrementally. You need to compute word-wrapping +// here. +// +// Each textfield keeps its own insert mode state, which is not how normal +// applications work. To keep an app-wide insert mode, update/copy the +// "insert_mode" field of STB_TexteditState before/after calling API functions. +// +// API +// +// void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line) +// +// void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) +// void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) +// int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) +// int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len) +// void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int key) +// +// Each of these functions potentially updates the string and updates the +// state. +// +// initialize_state: +// set the textedit state to a known good default state when initially +// constructing the textedit. +// +// click: +// call this with the mouse x,y on a mouse down; it will update the cursor +// and reset the selection start/end to the cursor point. the x,y must +// be relative to the text widget, with (0,0) being the top left. +// +// drag: +// call this with the mouse x,y on a mouse drag/up; it will update the +// cursor and the selection end point +// +// cut: +// call this to delete the current selection; returns true if there was +// one. you should FIRST copy the current selection to the system paste buffer. +// (To copy, just copy the current selection out of the string yourself.) +// +// paste: +// call this to paste text at the current cursor point or over the current +// selection if there is one. +// +// key: +// call this for keyboard inputs sent to the textfield. you can use it +// for "key down" events or for "translated" key events. if you need to +// do both (as in Win32), or distinguish Unicode characters from control +// inputs, set a high bit to distinguish the two; then you can define the +// various definitions like STB_TEXTEDIT_K_LEFT have the is-key-event bit +// set, and make STB_TEXTEDIT_KEYTOCHAR check that the is-key-event bit is +// clear. +// +// When rendering, you can read the cursor position and selection state from +// the STB_TexteditState. +// +// +// Notes: +// +// This is designed to be usable in IMGUI, so it allows for the possibility of +// running in an IMGUI that has NOT cached the multi-line layout. For this +// reason, it provides an interface that is compatible with computing the +// layout incrementally--we try to make sure we make as few passes through +// as possible. (For example, to locate the mouse pointer in the text, we +// could define functions that return the X and Y positions of characters +// and binary search Y and then X, but if we're doing dynamic layout this +// will run the layout algorithm many times, so instead we manually search +// forward in one pass. Similar logic applies to e.g. up-arrow and +// down-arrow movement.) +// +// If it's run in a widget that *has* cached the layout, then this is less +// efficient, but it's not horrible on modern computers. But you wouldn't +// want to edit million-line files with it. + + +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +//// +//// Header-file mode +//// +//// + +#ifndef INCLUDE_STB_TEXTEDIT_H +#define INCLUDE_STB_TEXTEDIT_H + +//////////////////////////////////////////////////////////////////////// +// +// STB_TexteditState +// +// Definition of STB_TexteditState which you should store +// per-textfield; it includes cursor position, selection state, +// and undo state. +// + +#ifndef STB_TEXTEDIT_UNDOSTATECOUNT +#define STB_TEXTEDIT_UNDOSTATECOUNT 99 +#endif +#ifndef STB_TEXTEDIT_UNDOCHARCOUNT +#define STB_TEXTEDIT_UNDOCHARCOUNT 999 +#endif +#ifndef STB_TEXTEDIT_CHARTYPE +#define STB_TEXTEDIT_CHARTYPE int +#endif +#ifndef STB_TEXTEDIT_POSITIONTYPE +#define STB_TEXTEDIT_POSITIONTYPE int +#endif + +typedef struct +{ + // private data + STB_TEXTEDIT_POSITIONTYPE where; + short insert_length; + short delete_length; + short char_storage; +} StbUndoRecord; + +typedef struct +{ + // private data + StbUndoRecord undo_rec [STB_TEXTEDIT_UNDOSTATECOUNT]; + STB_TEXTEDIT_CHARTYPE undo_char[STB_TEXTEDIT_UNDOCHARCOUNT]; + short undo_point, redo_point; + short undo_char_point, redo_char_point; +} StbUndoState; + +typedef struct +{ + ///////////////////// + // + // public data + // + + int cursor; + // position of the text cursor within the string + + int select_start; // selection start point + int select_end; + // selection start and end point in characters; if equal, no selection. + // note that start may be less than or greater than end (e.g. when + // dragging the mouse, start is where the initial click was, and you + // can drag in either direction) + + unsigned char insert_mode; + // each textfield keeps its own insert mode state. to keep an app-wide + // insert mode, copy this value in/out of the app state + + ///////////////////// + // + // private data + // + unsigned char cursor_at_end_of_line; // not implemented yet + unsigned char initialized; + unsigned char has_preferred_x; + unsigned char single_line; + unsigned char padding1, padding2, padding3; + float preferred_x; // this determines where the cursor up/down tries to seek to along x + StbUndoState undostate; +} STB_TexteditState; + + +//////////////////////////////////////////////////////////////////////// +// +// StbTexteditRow +// +// Result of layout query, used by stb_textedit to determine where +// the text in each row is. + +// result of layout query +typedef struct +{ + float x0,x1; // starting x location, end x location (allows for align=right, etc) + float baseline_y_delta; // position of baseline relative to previous row's baseline + float ymin,ymax; // height of row above and below baseline + int num_chars; +} StbTexteditRow; +#endif //INCLUDE_STB_TEXTEDIT_H + + +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +//// +//// Implementation mode +//// +//// + + +// implementation isn't include-guarded, since it might have indirectly +// included just the "header" portion +#ifdef STB_TEXTEDIT_IMPLEMENTATION + +#ifndef STB_TEXTEDIT_memmove +#include +#define STB_TEXTEDIT_memmove memmove +#endif + + +///////////////////////////////////////////////////////////////////////////// +// +// Mouse input handling +// + +// traverse the layout to locate the nearest character to a display position +static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, float y) +{ + StbTexteditRow r; + int n = STB_TEXTEDIT_STRINGLEN(str); + float base_y = 0, prev_x; + int i=0, k; + + r.x0 = r.x1 = 0; + r.ymin = r.ymax = 0; + r.num_chars = 0; + + // search rows to find one that straddles 'y' + while (i < n) { + STB_TEXTEDIT_LAYOUTROW(&r, str, i); + if (r.num_chars <= 0) + return n; + + if (i==0 && y < base_y + r.ymin) + return 0; + + if (y < base_y + r.ymax) + break; + + i += r.num_chars; + base_y += r.baseline_y_delta; + } + + // below all text, return 'after' last character + if (i >= n) + return n; + + // check if it's before the beginning of the line + if (x < r.x0) + return i; + + // check if it's before the end of the line + if (x < r.x1) { + // search characters in row for one that straddles 'x' + prev_x = r.x0; + for (k=0; k < r.num_chars; ++k) { + float w = STB_TEXTEDIT_GETWIDTH(str, i, k); + if (x < prev_x+w) { + if (x < prev_x+w/2) + return k+i; + else + return k+i+1; + } + prev_x += w; + } + // shouldn't happen, but if it does, fall through to end-of-line case + } + + // if the last character is a newline, return that. otherwise return 'after' the last character + if (STB_TEXTEDIT_GETCHAR(str, i+r.num_chars-1) == STB_TEXTEDIT_NEWLINE) + return i+r.num_chars-1; + else + return i+r.num_chars; +} + +// API click: on mouse down, move the cursor to the clicked location, and reset the selection +static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) +{ + state->cursor = stb_text_locate_coord(str, x, y); + state->select_start = state->cursor; + state->select_end = state->cursor; + state->has_preferred_x = 0; +} + +// API drag: on mouse drag, move the cursor and selection endpoint to the clicked location +static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) +{ + int p = stb_text_locate_coord(str, x, y); + if (state->select_start == state->select_end) + state->select_start = state->cursor; + state->cursor = state->select_end = p; +} + +///////////////////////////////////////////////////////////////////////////// +// +// Keyboard input handling +// + +// forward declarations +static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state); +static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state); +static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length); +static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length); +static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length); + +typedef struct +{ + float x,y; // position of n'th character + float height; // height of line + int first_char, length; // first char of row, and length + int prev_first; // first char of previous row +} StbFindState; + +// find the x/y location of a character, and remember info about the previous row in +// case we get a move-up event (for page up, we'll have to rescan) +static void stb_textedit_find_charpos(StbFindState *find, STB_TEXTEDIT_STRING *str, int n, int single_line) +{ + StbTexteditRow r; + int prev_start = 0; + int z = STB_TEXTEDIT_STRINGLEN(str); + int i=0, first; + + if (n == z) { + // if it's at the end, then find the last line -- simpler than trying to + // explicitly handle this case in the regular code + if (single_line) { + STB_TEXTEDIT_LAYOUTROW(&r, str, 0); + find->y = 0; + find->first_char = 0; + find->length = z; + find->height = r.ymax - r.ymin; + find->x = r.x1; + } else { + find->y = 0; + find->x = 0; + find->height = 1; + while (i < z) { + STB_TEXTEDIT_LAYOUTROW(&r, str, i); + prev_start = i; + i += r.num_chars; + } + find->first_char = i; + find->length = 0; + find->prev_first = prev_start; + } + return; + } + + // search rows to find the one that straddles character n + find->y = 0; + + for(;;) { + STB_TEXTEDIT_LAYOUTROW(&r, str, i); + if (n < i + r.num_chars) + break; + prev_start = i; + i += r.num_chars; + find->y += r.baseline_y_delta; + } + + find->first_char = first = i; + find->length = r.num_chars; + find->height = r.ymax - r.ymin; + find->prev_first = prev_start; + + // now scan to find xpos + find->x = r.x0; + i = 0; + for (i=0; first+i < n; ++i) + find->x += STB_TEXTEDIT_GETWIDTH(str, first, i); +} + +#define STB_TEXT_HAS_SELECTION(s) ((s)->select_start != (s)->select_end) + +// make the selection/cursor state valid if client altered the string +static void stb_textedit_clamp(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + int n = STB_TEXTEDIT_STRINGLEN(str); + if (STB_TEXT_HAS_SELECTION(state)) { + if (state->select_start > n) state->select_start = n; + if (state->select_end > n) state->select_end = n; + // if clamping forced them to be equal, move the cursor to match + if (state->select_start == state->select_end) + state->cursor = state->select_start; + } + if (state->cursor > n) state->cursor = n; +} + +// delete characters while updating undo +static void stb_textedit_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int len) +{ + stb_text_makeundo_delete(str, state, where, len); + STB_TEXTEDIT_DELETECHARS(str, where, len); + state->has_preferred_x = 0; +} + +// delete the section +static void stb_textedit_delete_selection(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + stb_textedit_clamp(str, state); + if (STB_TEXT_HAS_SELECTION(state)) { + if (state->select_start < state->select_end) { + stb_textedit_delete(str, state, state->select_start, state->select_end - state->select_start); + state->select_end = state->cursor = state->select_start; + } else { + stb_textedit_delete(str, state, state->select_end, state->select_start - state->select_end); + state->select_start = state->cursor = state->select_end; + } + state->has_preferred_x = 0; + } +} + +// canoncialize the selection so start <= end +static void stb_textedit_sortselection(STB_TexteditState *state) +{ + if (state->select_end < state->select_start) { + int temp = state->select_end; + state->select_end = state->select_start; + state->select_start = temp; + } +} + +// move cursor to first character of selection +static void stb_textedit_move_to_first(STB_TexteditState *state) +{ + if (STB_TEXT_HAS_SELECTION(state)) { + stb_textedit_sortselection(state); + state->cursor = state->select_start; + state->select_end = state->select_start; + state->has_preferred_x = 0; + } +} + +// move cursor to last character of selection +static void stb_textedit_move_to_last(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + if (STB_TEXT_HAS_SELECTION(state)) { + stb_textedit_sortselection(state); + stb_textedit_clamp(str, state); + state->cursor = state->select_end; + state->select_start = state->select_end; + state->has_preferred_x = 0; + } +} + +#ifdef STB_TEXTEDIT_IS_SPACE +static int is_word_boundary( STB_TEXTEDIT_STRING *str, int idx ) +{ + return idx > 0 ? (STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str,idx-1) ) && !STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str, idx) ) ) : 1; +} + +#ifndef STB_TEXTEDIT_MOVEWORDLEFT +static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *str, int c ) +{ + --c; // always move at least one character + while( c >= 0 && !is_word_boundary( str, c ) ) + --c; + + if( c < 0 ) + c = 0; + + return c; +} +#define STB_TEXTEDIT_MOVEWORDLEFT stb_textedit_move_to_word_previous +#endif + +#ifndef STB_TEXTEDIT_MOVEWORDRIGHT +static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *str, int c ) +{ + const int len = STB_TEXTEDIT_STRINGLEN(str); + ++c; // always move at least one character + while( c < len && !is_word_boundary( str, c ) ) + ++c; + + if( c > len ) + c = len; + + return c; +} +#define STB_TEXTEDIT_MOVEWORDRIGHT stb_textedit_move_to_word_next +#endif + +#endif + +// update selection and cursor to match each other +static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state) +{ + if (!STB_TEXT_HAS_SELECTION(state)) + state->select_start = state->select_end = state->cursor; + else + state->cursor = state->select_end; +} + +// API cut: delete selection +static int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + if (STB_TEXT_HAS_SELECTION(state)) { + stb_textedit_delete_selection(str,state); // implicity clamps + state->has_preferred_x = 0; + return 1; + } + return 0; +} + +// API paste: replace existing selection with passed-in text +static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE const *ctext, int len) +{ + STB_TEXTEDIT_CHARTYPE *text = (STB_TEXTEDIT_CHARTYPE *) ctext; + // if there's a selection, the paste should delete it + stb_textedit_clamp(str, state); + stb_textedit_delete_selection(str,state); + // try to insert the characters + if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, text, len)) { + stb_text_makeundo_insert(state, state->cursor, len); + state->cursor += len; + state->has_preferred_x = 0; + return 1; + } + // remove the undo since we didn't actually insert the characters + if (state->undostate.undo_point) + --state->undostate.undo_point; + return 0; +} + +// API key: process a keyboard input +static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int key) +{ +retry: + switch (key) { + default: { + int c = STB_TEXTEDIT_KEYTOTEXT(key); + if (c > 0) { + STB_TEXTEDIT_CHARTYPE ch = (STB_TEXTEDIT_CHARTYPE) c; + + // can't add newline in single-line mode + if (c == '\n' && state->single_line) + break; + + if (state->insert_mode && !STB_TEXT_HAS_SELECTION(state) && state->cursor < STB_TEXTEDIT_STRINGLEN(str)) { + stb_text_makeundo_replace(str, state, state->cursor, 1, 1); + STB_TEXTEDIT_DELETECHARS(str, state->cursor, 1); + if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) { + ++state->cursor; + state->has_preferred_x = 0; + } + } else { + stb_textedit_delete_selection(str,state); // implicity clamps + if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) { + stb_text_makeundo_insert(state, state->cursor, 1); + ++state->cursor; + state->has_preferred_x = 0; + } + } + } + break; + } + +#ifdef STB_TEXTEDIT_K_INSERT + case STB_TEXTEDIT_K_INSERT: + state->insert_mode = !state->insert_mode; + break; +#endif + + case STB_TEXTEDIT_K_UNDO: + stb_text_undo(str, state); + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_REDO: + stb_text_redo(str, state); + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_LEFT: + // if currently there's a selection, move cursor to start of selection + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_first(state); + else + if (state->cursor > 0) + --state->cursor; + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_RIGHT: + // if currently there's a selection, move cursor to end of selection + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_last(str, state); + else + ++state->cursor; + stb_textedit_clamp(str, state); + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_LEFT | STB_TEXTEDIT_K_SHIFT: + stb_textedit_clamp(str, state); + stb_textedit_prep_selection_at_cursor(state); + // move selection left + if (state->select_end > 0) + --state->select_end; + state->cursor = state->select_end; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_MOVEWORDLEFT + case STB_TEXTEDIT_K_WORDLEFT: + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_first(state); + else { + state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor); + stb_textedit_clamp( str, state ); + } + break; + + case STB_TEXTEDIT_K_WORDLEFT | STB_TEXTEDIT_K_SHIFT: + if( !STB_TEXT_HAS_SELECTION( state ) ) + stb_textedit_prep_selection_at_cursor(state); + + state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor); + state->select_end = state->cursor; + + stb_textedit_clamp( str, state ); + break; +#endif + +#ifdef STB_TEXTEDIT_MOVEWORDRIGHT + case STB_TEXTEDIT_K_WORDRIGHT: + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_last(str, state); + else { + state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor); + stb_textedit_clamp( str, state ); + } + break; + + case STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT: + if( !STB_TEXT_HAS_SELECTION( state ) ) + stb_textedit_prep_selection_at_cursor(state); + + state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor); + state->select_end = state->cursor; + + stb_textedit_clamp( str, state ); + break; +#endif + + case STB_TEXTEDIT_K_RIGHT | STB_TEXTEDIT_K_SHIFT: + stb_textedit_prep_selection_at_cursor(state); + // move selection right + ++state->select_end; + stb_textedit_clamp(str, state); + state->cursor = state->select_end; + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_DOWN: + case STB_TEXTEDIT_K_DOWN | STB_TEXTEDIT_K_SHIFT: { + StbFindState find; + StbTexteditRow row; + int i, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0; + + if (state->single_line) { + // on windows, up&down in single-line behave like left&right + key = STB_TEXTEDIT_K_RIGHT | (key & STB_TEXTEDIT_K_SHIFT); + goto retry; + } + + if (sel) + stb_textedit_prep_selection_at_cursor(state); + else if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_last(str,state); + + // compute current position of cursor point + stb_textedit_clamp(str, state); + stb_textedit_find_charpos(&find, str, state->cursor, state->single_line); + + // now find character position down a row + if (find.length) { + float goal_x = state->has_preferred_x ? state->preferred_x : find.x; + float x; + int start = find.first_char + find.length; + state->cursor = start; + STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor); + x = row.x0; + for (i=0; i < row.num_chars; ++i) { + float dx = STB_TEXTEDIT_GETWIDTH(str, start, i); + #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE + if (dx == STB_TEXTEDIT_GETWIDTH_NEWLINE) + break; + #endif + x += dx; + if (x > goal_x) + break; + ++state->cursor; + } + stb_textedit_clamp(str, state); + + state->has_preferred_x = 1; + state->preferred_x = goal_x; + + if (sel) + state->select_end = state->cursor; + } + break; + } + + case STB_TEXTEDIT_K_UP: + case STB_TEXTEDIT_K_UP | STB_TEXTEDIT_K_SHIFT: { + StbFindState find; + StbTexteditRow row; + int i, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0; + + if (state->single_line) { + // on windows, up&down become left&right + key = STB_TEXTEDIT_K_LEFT | (key & STB_TEXTEDIT_K_SHIFT); + goto retry; + } + + if (sel) + stb_textedit_prep_selection_at_cursor(state); + else if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_first(state); + + // compute current position of cursor point + stb_textedit_clamp(str, state); + stb_textedit_find_charpos(&find, str, state->cursor, state->single_line); + + // can only go up if there's a previous row + if (find.prev_first != find.first_char) { + // now find character position up a row + float goal_x = state->has_preferred_x ? state->preferred_x : find.x; + float x; + state->cursor = find.prev_first; + STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor); + x = row.x0; + for (i=0; i < row.num_chars; ++i) { + float dx = STB_TEXTEDIT_GETWIDTH(str, find.prev_first, i); + #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE + if (dx == STB_TEXTEDIT_GETWIDTH_NEWLINE) + break; + #endif + x += dx; + if (x > goal_x) + break; + ++state->cursor; + } + stb_textedit_clamp(str, state); + + state->has_preferred_x = 1; + state->preferred_x = goal_x; + + if (sel) + state->select_end = state->cursor; + } + break; + } + + case STB_TEXTEDIT_K_DELETE: + case STB_TEXTEDIT_K_DELETE | STB_TEXTEDIT_K_SHIFT: + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_delete_selection(str, state); + else { + int n = STB_TEXTEDIT_STRINGLEN(str); + if (state->cursor < n) + stb_textedit_delete(str, state, state->cursor, 1); + } + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_BACKSPACE: + case STB_TEXTEDIT_K_BACKSPACE | STB_TEXTEDIT_K_SHIFT: + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_delete_selection(str, state); + else { + stb_textedit_clamp(str, state); + if (state->cursor > 0) { + stb_textedit_delete(str, state, state->cursor-1, 1); + --state->cursor; + } + } + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_TEXTSTART2 + case STB_TEXTEDIT_K_TEXTSTART2: +#endif + case STB_TEXTEDIT_K_TEXTSTART: + state->cursor = state->select_start = state->select_end = 0; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_TEXTEND2 + case STB_TEXTEDIT_K_TEXTEND2: +#endif + case STB_TEXTEDIT_K_TEXTEND: + state->cursor = STB_TEXTEDIT_STRINGLEN(str); + state->select_start = state->select_end = 0; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_TEXTSTART2 + case STB_TEXTEDIT_K_TEXTSTART2 | STB_TEXTEDIT_K_SHIFT: +#endif + case STB_TEXTEDIT_K_TEXTSTART | STB_TEXTEDIT_K_SHIFT: + stb_textedit_prep_selection_at_cursor(state); + state->cursor = state->select_end = 0; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_TEXTEND2 + case STB_TEXTEDIT_K_TEXTEND2 | STB_TEXTEDIT_K_SHIFT: +#endif + case STB_TEXTEDIT_K_TEXTEND | STB_TEXTEDIT_K_SHIFT: + stb_textedit_prep_selection_at_cursor(state); + state->cursor = state->select_end = STB_TEXTEDIT_STRINGLEN(str); + state->has_preferred_x = 0; + break; + + +#ifdef STB_TEXTEDIT_K_LINESTART2 + case STB_TEXTEDIT_K_LINESTART2: +#endif + case STB_TEXTEDIT_K_LINESTART: + stb_textedit_clamp(str, state); + stb_textedit_move_to_first(state); + if (state->single_line) + state->cursor = 0; + else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE) + --state->cursor; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_LINEEND2 + case STB_TEXTEDIT_K_LINEEND2: +#endif + case STB_TEXTEDIT_K_LINEEND: { + int n = STB_TEXTEDIT_STRINGLEN(str); + stb_textedit_clamp(str, state); + stb_textedit_move_to_first(state); + if (state->single_line) + state->cursor = n; + else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE) + ++state->cursor; + state->has_preferred_x = 0; + break; + } + +#ifdef STB_TEXTEDIT_K_LINESTART2 + case STB_TEXTEDIT_K_LINESTART2 | STB_TEXTEDIT_K_SHIFT: +#endif + case STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT: + stb_textedit_clamp(str, state); + stb_textedit_prep_selection_at_cursor(state); + if (state->single_line) + state->cursor = 0; + else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE) + --state->cursor; + state->select_end = state->cursor; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_LINEEND2 + case STB_TEXTEDIT_K_LINEEND2 | STB_TEXTEDIT_K_SHIFT: +#endif + case STB_TEXTEDIT_K_LINEEND | STB_TEXTEDIT_K_SHIFT: { + int n = STB_TEXTEDIT_STRINGLEN(str); + stb_textedit_clamp(str, state); + stb_textedit_prep_selection_at_cursor(state); + if (state->single_line) + state->cursor = n; + else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE) + ++state->cursor; + state->select_end = state->cursor; + state->has_preferred_x = 0; + break; + } + +// @TODO: +// STB_TEXTEDIT_K_PGUP - move cursor up a page +// STB_TEXTEDIT_K_PGDOWN - move cursor down a page + } +} + +///////////////////////////////////////////////////////////////////////////// +// +// Undo processing +// +// @OPTIMIZE: the undo/redo buffer should be circular + +static void stb_textedit_flush_redo(StbUndoState *state) +{ + state->redo_point = STB_TEXTEDIT_UNDOSTATECOUNT; + state->redo_char_point = STB_TEXTEDIT_UNDOCHARCOUNT; +} + +// discard the oldest entry in the undo list +static void stb_textedit_discard_undo(StbUndoState *state) +{ + if (state->undo_point > 0) { + // if the 0th undo state has characters, clean those up + if (state->undo_rec[0].char_storage >= 0) { + int n = state->undo_rec[0].insert_length, i; + // delete n characters from all other records + state->undo_char_point = state->undo_char_point - (short) n; // vsnet05 + STB_TEXTEDIT_memmove(state->undo_char, state->undo_char + n, (size_t) ((size_t)state->undo_char_point*sizeof(STB_TEXTEDIT_CHARTYPE))); + for (i=0; i < state->undo_point; ++i) + if (state->undo_rec[i].char_storage >= 0) + state->undo_rec[i].char_storage = state->undo_rec[i].char_storage - (short) n; // vsnet05 // @OPTIMIZE: get rid of char_storage and infer it + } + --state->undo_point; + STB_TEXTEDIT_memmove(state->undo_rec, state->undo_rec+1, (size_t) ((size_t)state->undo_point*sizeof(state->undo_rec[0]))); + } +} + +// discard the oldest entry in the redo list--it's bad if this +// ever happens, but because undo & redo have to store the actual +// characters in different cases, the redo character buffer can +// fill up even though the undo buffer didn't +static void stb_textedit_discard_redo(StbUndoState *state) +{ + int k = STB_TEXTEDIT_UNDOSTATECOUNT-1; + + if (state->redo_point <= k) { + // if the k'th undo state has characters, clean those up + if (state->undo_rec[k].char_storage >= 0) { + int n = state->undo_rec[k].insert_length, i; + // delete n characters from all other records + state->redo_char_point = state->redo_char_point + (short) n; // vsnet05 + STB_TEXTEDIT_memmove(state->undo_char + state->redo_char_point, state->undo_char + state->redo_char_point-n, (size_t) ((size_t)(STB_TEXTEDIT_UNDOCHARCOUNT - state->redo_char_point)*sizeof(STB_TEXTEDIT_CHARTYPE))); + for (i=state->redo_point; i < k; ++i) + if (state->undo_rec[i].char_storage >= 0) + state->undo_rec[i].char_storage = state->undo_rec[i].char_storage + (short) n; // vsnet05 + } + STB_TEXTEDIT_memmove(state->undo_rec + state->redo_point, state->undo_rec + state->redo_point-1, (size_t) ((size_t)(STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point)*sizeof(state->undo_rec[0]))); + ++state->redo_point; + } +} + +static StbUndoRecord *stb_text_create_undo_record(StbUndoState *state, int numchars) +{ + // any time we create a new undo record, we discard redo + stb_textedit_flush_redo(state); + + // if we have no free records, we have to make room, by sliding the + // existing records down + if (state->undo_point == STB_TEXTEDIT_UNDOSTATECOUNT) + stb_textedit_discard_undo(state); + + // if the characters to store won't possibly fit in the buffer, we can't undo + if (numchars > STB_TEXTEDIT_UNDOCHARCOUNT) { + state->undo_point = 0; + state->undo_char_point = 0; + return NULL; + } + + // if we don't have enough free characters in the buffer, we have to make room + while (state->undo_char_point + numchars > STB_TEXTEDIT_UNDOCHARCOUNT) + stb_textedit_discard_undo(state); + + return &state->undo_rec[state->undo_point++]; +} + +static STB_TEXTEDIT_CHARTYPE *stb_text_createundo(StbUndoState *state, int pos, int insert_len, int delete_len) +{ + StbUndoRecord *r = stb_text_create_undo_record(state, insert_len); + if (r == NULL) + return NULL; + + r->where = pos; + r->insert_length = (short) insert_len; + r->delete_length = (short) delete_len; + + if (insert_len == 0) { + r->char_storage = -1; + return NULL; + } else { + r->char_storage = state->undo_char_point; + state->undo_char_point = state->undo_char_point + (short) insert_len; + return &state->undo_char[r->char_storage]; + } +} + +static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + StbUndoState *s = &state->undostate; + StbUndoRecord u, *r; + if (s->undo_point == 0) + return; + + // we need to do two things: apply the undo record, and create a redo record + u = s->undo_rec[s->undo_point-1]; + r = &s->undo_rec[s->redo_point-1]; + r->char_storage = -1; + + r->insert_length = u.delete_length; + r->delete_length = u.insert_length; + r->where = u.where; + + if (u.delete_length) { + // if the undo record says to delete characters, then the redo record will + // need to re-insert the characters that get deleted, so we need to store + // them. + + // there are three cases: + // there's enough room to store the characters + // characters stored for *redoing* don't leave room for redo + // characters stored for *undoing* don't leave room for redo + // if the last is true, we have to bail + + if (s->undo_char_point + u.delete_length >= STB_TEXTEDIT_UNDOCHARCOUNT) { + // the undo records take up too much character space; there's no space to store the redo characters + r->insert_length = 0; + } else { + int i; + + // there's definitely room to store the characters eventually + while (s->undo_char_point + u.delete_length > s->redo_char_point) { + // there's currently not enough room, so discard a redo record + stb_textedit_discard_redo(s); + // should never happen: + if (s->redo_point == STB_TEXTEDIT_UNDOSTATECOUNT) + return; + } + r = &s->undo_rec[s->redo_point-1]; + + r->char_storage = s->redo_char_point - u.delete_length; + s->redo_char_point = s->redo_char_point - (short) u.delete_length; + + // now save the characters + for (i=0; i < u.delete_length; ++i) + s->undo_char[r->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u.where + i); + } + + // now we can carry out the deletion + STB_TEXTEDIT_DELETECHARS(str, u.where, u.delete_length); + } + + // check type of recorded action: + if (u.insert_length) { + // easy case: was a deletion, so we need to insert n characters + STB_TEXTEDIT_INSERTCHARS(str, u.where, &s->undo_char[u.char_storage], u.insert_length); + s->undo_char_point -= u.insert_length; + } + + state->cursor = u.where + u.insert_length; + + s->undo_point--; + s->redo_point--; +} + +static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + StbUndoState *s = &state->undostate; + StbUndoRecord *u, r; + if (s->redo_point == STB_TEXTEDIT_UNDOSTATECOUNT) + return; + + // we need to do two things: apply the redo record, and create an undo record + u = &s->undo_rec[s->undo_point]; + r = s->undo_rec[s->redo_point]; + + // we KNOW there must be room for the undo record, because the redo record + // was derived from an undo record + + u->delete_length = r.insert_length; + u->insert_length = r.delete_length; + u->where = r.where; + u->char_storage = -1; + + if (r.delete_length) { + // the redo record requires us to delete characters, so the undo record + // needs to store the characters + + if (s->undo_char_point + u->insert_length > s->redo_char_point) { + u->insert_length = 0; + u->delete_length = 0; + } else { + int i; + u->char_storage = s->undo_char_point; + s->undo_char_point = s->undo_char_point + u->insert_length; + + // now save the characters + for (i=0; i < u->insert_length; ++i) + s->undo_char[u->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u->where + i); + } + + STB_TEXTEDIT_DELETECHARS(str, r.where, r.delete_length); + } + + if (r.insert_length) { + // easy case: need to insert n characters + STB_TEXTEDIT_INSERTCHARS(str, r.where, &s->undo_char[r.char_storage], r.insert_length); + s->redo_char_point += r.insert_length; + } + + state->cursor = r.where + r.insert_length; + + s->undo_point++; + s->redo_point++; +} + +static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length) +{ + stb_text_createundo(&state->undostate, where, 0, length); +} + +static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length) +{ + int i; + STB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, length, 0); + if (p) { + for (i=0; i < length; ++i) + p[i] = STB_TEXTEDIT_GETCHAR(str, where+i); + } +} + +static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length) +{ + int i; + STB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, old_length, new_length); + if (p) { + for (i=0; i < old_length; ++i) + p[i] = STB_TEXTEDIT_GETCHAR(str, where+i); + } +} + +// reset the state to default +static void stb_textedit_clear_state(STB_TexteditState *state, int is_single_line) +{ + state->undostate.undo_point = 0; + state->undostate.undo_char_point = 0; + state->undostate.redo_point = STB_TEXTEDIT_UNDOSTATECOUNT; + state->undostate.redo_char_point = STB_TEXTEDIT_UNDOCHARCOUNT; + state->select_end = state->select_start = 0; + state->cursor = 0; + state->has_preferred_x = 0; + state->preferred_x = 0; + state->cursor_at_end_of_line = 0; + state->initialized = 1; + state->single_line = (unsigned char) is_single_line; + state->insert_mode = 0; +} + +// API initialize +static void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line) +{ + stb_textedit_clear_state(state, is_single_line); +} +#endif//STB_TEXTEDIT_IMPLEMENTATION diff --git a/lib/imgui/stb_truetype.h b/lib/imgui/stb_truetype.h new file mode 100644 index 0000000..88a2da1 --- /dev/null +++ b/lib/imgui/stb_truetype.h @@ -0,0 +1,3287 @@ +// stb_truetype.h - v1.12 - public domain +// authored from 2009-2016 by Sean Barrett / RAD Game Tools +// +// This library processes TrueType files: +// parse files +// extract glyph metrics +// extract glyph shapes +// render glyphs to one-channel bitmaps with antialiasing (box filter) +// +// Todo: +// non-MS cmaps +// crashproof on bad data +// hinting? (no longer patented) +// cleartype-style AA? +// optimize: use simple memory allocator for intermediates +// optimize: build edge-list directly from curves +// optimize: rasterize directly from curves? +// +// ADDITIONAL CONTRIBUTORS +// +// Mikko Mononen: compound shape support, more cmap formats +// Tor Andersson: kerning, subpixel rendering +// +// Misc other: +// Ryan Gordon +// Simon Glass +// +// Bug/warning reports/fixes: +// "Zer" on mollyrocket (with fix) +// Cass Everitt +// stoiko (Haemimont Games) +// Brian Hook +// Walter van Niftrik +// David Gow +// David Given +// Ivan-Assen Ivanov +// Anthony Pesch +// Johan Duparc +// Hou Qiming +// Fabian "ryg" Giesen +// Martins Mozeiko +// Cap Petschulat +// Omar Cornut +// github:aloucks +// Peter LaValle +// Sergey Popov +// Giumo X. Clanjor +// Higor Euripedes +// Thomas Fields +// Derek Vinyard +// +// VERSION HISTORY +// +// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual +// 1.11 (2016-04-02) fix unused-variable warning +// 1.10 (2016-04-02) user-defined fabs(); rare memory leak; remove duplicate typedef +// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use allocation userdata properly +// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges +// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints; +// variant PackFontRanges to pack and render in separate phases; +// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?); +// fixed an assert() bug in the new rasterizer +// replace assert() with STBTT_assert() in new rasterizer +// +// Full history can be found at the end of this file. +// +// LICENSE +// +// This software is dual-licensed to the public domain and under the following +// license: you are granted a perpetual, irrevocable license to copy, modify, +// publish, and distribute this file as you see fit. +// +// USAGE +// +// Include this file in whatever places neeed to refer to it. In ONE C/C++ +// file, write: +// #define STB_TRUETYPE_IMPLEMENTATION +// before the #include of this file. This expands out the actual +// implementation into that C/C++ file. +// +// To make the implementation private to the file that generates the implementation, +// #define STBTT_STATIC +// +// Simple 3D API (don't ship this, but it's fine for tools and quick start) +// stbtt_BakeFontBitmap() -- bake a font to a bitmap for use as texture +// stbtt_GetBakedQuad() -- compute quad to draw for a given char +// +// Improved 3D API (more shippable): +// #include "stb_rect_pack.h" -- optional, but you really want it +// stbtt_PackBegin() +// stbtt_PackSetOversample() -- for improved quality on small fonts +// stbtt_PackFontRanges() -- pack and renders +// stbtt_PackEnd() +// stbtt_GetPackedQuad() +// +// "Load" a font file from a memory buffer (you have to keep the buffer loaded) +// stbtt_InitFont() +// stbtt_GetFontOffsetForIndex() -- use for TTC font collections +// +// Render a unicode codepoint to a bitmap +// stbtt_GetCodepointBitmap() -- allocates and returns a bitmap +// stbtt_MakeCodepointBitmap() -- renders into bitmap you provide +// stbtt_GetCodepointBitmapBox() -- how big the bitmap must be +// +// Character advance/positioning +// stbtt_GetCodepointHMetrics() +// stbtt_GetFontVMetrics() +// stbtt_GetCodepointKernAdvance() +// +// Starting with version 1.06, the rasterizer was replaced with a new, +// faster and generally-more-precise rasterizer. The new rasterizer more +// accurately measures pixel coverage for anti-aliasing, except in the case +// where multiple shapes overlap, in which case it overestimates the AA pixel +// coverage. Thus, anti-aliasing of intersecting shapes may look wrong. If +// this turns out to be a problem, you can re-enable the old rasterizer with +// #define STBTT_RASTERIZER_VERSION 1 +// which will incur about a 15% speed hit. +// +// ADDITIONAL DOCUMENTATION +// +// Immediately after this block comment are a series of sample programs. +// +// After the sample programs is the "header file" section. This section +// includes documentation for each API function. +// +// Some important concepts to understand to use this library: +// +// Codepoint +// Characters are defined by unicode codepoints, e.g. 65 is +// uppercase A, 231 is lowercase c with a cedilla, 0x7e30 is +// the hiragana for "ma". +// +// Glyph +// A visual character shape (every codepoint is rendered as +// some glyph) +// +// Glyph index +// A font-specific integer ID representing a glyph +// +// Baseline +// Glyph shapes are defined relative to a baseline, which is the +// bottom of uppercase characters. Characters extend both above +// and below the baseline. +// +// Current Point +// As you draw text to the screen, you keep track of a "current point" +// which is the origin of each character. The current point's vertical +// position is the baseline. Even "baked fonts" use this model. +// +// Vertical Font Metrics +// The vertical qualities of the font, used to vertically position +// and space the characters. See docs for stbtt_GetFontVMetrics. +// +// Font Size in Pixels or Points +// The preferred interface for specifying font sizes in stb_truetype +// is to specify how tall the font's vertical extent should be in pixels. +// If that sounds good enough, skip the next paragraph. +// +// Most font APIs instead use "points", which are a common typographic +// measurement for describing font size, defined as 72 points per inch. +// stb_truetype provides a point API for compatibility. However, true +// "per inch" conventions don't make much sense on computer displays +// since they different monitors have different number of pixels per +// inch. For example, Windows traditionally uses a convention that +// there are 96 pixels per inch, thus making 'inch' measurements have +// nothing to do with inches, and thus effectively defining a point to +// be 1.333 pixels. Additionally, the TrueType font data provides +// an explicit scale factor to scale a given font's glyphs to points, +// but the author has observed that this scale factor is often wrong +// for non-commercial fonts, thus making fonts scaled in points +// according to the TrueType spec incoherently sized in practice. +// +// ADVANCED USAGE +// +// Quality: +// +// - Use the functions with Subpixel at the end to allow your characters +// to have subpixel positioning. Since the font is anti-aliased, not +// hinted, this is very import for quality. (This is not possible with +// baked fonts.) +// +// - Kerning is now supported, and if you're supporting subpixel rendering +// then kerning is worth using to give your text a polished look. +// +// Performance: +// +// - Convert Unicode codepoints to glyph indexes and operate on the glyphs; +// if you don't do this, stb_truetype is forced to do the conversion on +// every call. +// +// - There are a lot of memory allocations. We should modify it to take +// a temp buffer and allocate from the temp buffer (without freeing), +// should help performance a lot. +// +// NOTES +// +// The system uses the raw data found in the .ttf file without changing it +// and without building auxiliary data structures. This is a bit inefficient +// on little-endian systems (the data is big-endian), but assuming you're +// caching the bitmaps or glyph shapes this shouldn't be a big deal. +// +// It appears to be very hard to programmatically determine what font a +// given file is in a general way. I provide an API for this, but I don't +// recommend it. +// +// +// SOURCE STATISTICS (based on v0.6c, 2050 LOC) +// +// Documentation & header file 520 LOC \___ 660 LOC documentation +// Sample code 140 LOC / +// Truetype parsing 620 LOC ---- 620 LOC TrueType +// Software rasterization 240 LOC \ . +// Curve tesselation 120 LOC \__ 550 LOC Bitmap creation +// Bitmap management 100 LOC / +// Baked bitmap interface 70 LOC / +// Font name matching & access 150 LOC ---- 150 +// C runtime library abstraction 60 LOC ---- 60 +// +// +// PERFORMANCE MEASUREMENTS FOR 1.06: +// +// 32-bit 64-bit +// Previous release: 8.83 s 7.68 s +// Pool allocations: 7.72 s 6.34 s +// Inline sort : 6.54 s 5.65 s +// New rasterizer : 5.63 s 5.00 s + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +//// +//// SAMPLE PROGRAMS +//// +// +// Incomplete text-in-3d-api example, which draws quads properly aligned to be lossless +// +#if 0 +#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation +#include "stb_truetype.h" + +unsigned char ttf_buffer[1<<20]; +unsigned char temp_bitmap[512*512]; + +stbtt_bakedchar cdata[96]; // ASCII 32..126 is 95 glyphs +GLuint ftex; + +void my_stbtt_initfont(void) +{ + fread(ttf_buffer, 1, 1<<20, fopen("c:/windows/fonts/times.ttf", "rb")); + stbtt_BakeFontBitmap(ttf_buffer,0, 32.0, temp_bitmap,512,512, 32,96, cdata); // no guarantee this fits! + // can free ttf_buffer at this point + glGenTextures(1, &ftex); + glBindTexture(GL_TEXTURE_2D, ftex); + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 512,512, 0, GL_ALPHA, GL_UNSIGNED_BYTE, temp_bitmap); + // can free temp_bitmap at this point + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); +} + +void my_stbtt_print(float x, float y, char *text) +{ + // assume orthographic projection with units = screen pixels, origin at top left + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, ftex); + glBegin(GL_QUADS); + while (*text) { + if (*text >= 32 && *text < 128) { + stbtt_aligned_quad q; + stbtt_GetBakedQuad(cdata, 512,512, *text-32, &x,&y,&q,1);//1=opengl & d3d10+,0=d3d9 + glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y0); + glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y0); + glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y1); + glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y1); + } + ++text; + } + glEnd(); +} +#endif +// +// +////////////////////////////////////////////////////////////////////////////// +// +// Complete program (this compiles): get a single bitmap, print as ASCII art +// +#if 0 +#include +#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation +#include "stb_truetype.h" + +char ttf_buffer[1<<25]; + +int main(int argc, char **argv) +{ + stbtt_fontinfo font; + unsigned char *bitmap; + int w,h,i,j,c = (argc > 1 ? atoi(argv[1]) : 'a'), s = (argc > 2 ? atoi(argv[2]) : 20); + + fread(ttf_buffer, 1, 1<<25, fopen(argc > 3 ? argv[3] : "c:/windows/fonts/arialbd.ttf", "rb")); + + stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0)); + bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, 0,0); + + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) + putchar(" .:ioVM@"[bitmap[j*w+i]>>5]); + putchar('\n'); + } + return 0; +} +#endif +// +// Output: +// +// .ii. +// @@@@@@. +// V@Mio@@o +// :i. V@V +// :oM@@M +// :@@@MM@M +// @@o o@M +// :@@. M@M +// @@@o@@@@ +// :M@@V:@@. +// +////////////////////////////////////////////////////////////////////////////// +// +// Complete program: print "Hello World!" banner, with bugs +// +#if 0 +char buffer[24<<20]; +unsigned char screen[20][79]; + +int main(int arg, char **argv) +{ + stbtt_fontinfo font; + int i,j,ascent,baseline,ch=0; + float scale, xpos=2; // leave a little padding in case the character extends left + char *text = "Heljo World!"; // intentionally misspelled to show 'lj' brokenness + + fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb")); + stbtt_InitFont(&font, buffer, 0); + + scale = stbtt_ScaleForPixelHeight(&font, 15); + stbtt_GetFontVMetrics(&font, &ascent,0,0); + baseline = (int) (ascent*scale); + + while (text[ch]) { + int advance,lsb,x0,y0,x1,y1; + float x_shift = xpos - (float) floor(xpos); + stbtt_GetCodepointHMetrics(&font, text[ch], &advance, &lsb); + stbtt_GetCodepointBitmapBoxSubpixel(&font, text[ch], scale,scale,x_shift,0, &x0,&y0,&x1,&y1); + stbtt_MakeCodepointBitmapSubpixel(&font, &screen[baseline + y0][(int) xpos + x0], x1-x0,y1-y0, 79, scale,scale,x_shift,0, text[ch]); + // note that this stomps the old data, so where character boxes overlap (e.g. 'lj') it's wrong + // because this API is really for baking character bitmaps into textures. if you want to render + // a sequence of characters, you really need to render each bitmap to a temp buffer, then + // "alpha blend" that into the working buffer + xpos += (advance * scale); + if (text[ch+1]) + xpos += scale*stbtt_GetCodepointKernAdvance(&font, text[ch],text[ch+1]); + ++ch; + } + + for (j=0; j < 20; ++j) { + for (i=0; i < 78; ++i) + putchar(" .:ioVM@"[screen[j][i]>>5]); + putchar('\n'); + } + + return 0; +} +#endif + + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +//// +//// INTEGRATION WITH YOUR CODEBASE +//// +//// The following sections allow you to supply alternate definitions +//// of C library functions used by stb_truetype. + +#ifdef STB_TRUETYPE_IMPLEMENTATION + // #define your own (u)stbtt_int8/16/32 before including to override this + #ifndef stbtt_uint8 + typedef unsigned char stbtt_uint8; + typedef signed char stbtt_int8; + typedef unsigned short stbtt_uint16; + typedef signed short stbtt_int16; + typedef unsigned int stbtt_uint32; + typedef signed int stbtt_int32; + #endif + + typedef char stbtt__check_size32[sizeof(stbtt_int32)==4 ? 1 : -1]; + typedef char stbtt__check_size16[sizeof(stbtt_int16)==2 ? 1 : -1]; + + // #define your own STBTT_ifloor/STBTT_iceil() to avoid math.h + #ifndef STBTT_ifloor + #include + #define STBTT_ifloor(x) ((int) floor(x)) + #define STBTT_iceil(x) ((int) ceil(x)) + #endif + + #ifndef STBTT_sqrt + #include + #define STBTT_sqrt(x) sqrt(x) + #endif + + #ifndef STBTT_fabs + #include + #define STBTT_fabs(x) fabs(x) + #endif + + // #define your own functions "STBTT_malloc" / "STBTT_free" to avoid malloc.h + #ifndef STBTT_malloc + #include + #define STBTT_malloc(x,u) ((void)(u),malloc(x)) + #define STBTT_free(x,u) ((void)(u),free(x)) + #endif + + #ifndef STBTT_assert + #include + #define STBTT_assert(x) assert(x) + #endif + + #ifndef STBTT_strlen + #include + #define STBTT_strlen(x) strlen(x) + #endif + + #ifndef STBTT_memcpy + #include + #define STBTT_memcpy memcpy + #define STBTT_memset memset + #endif +#endif + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +//// +//// INTERFACE +//// +//// + +#ifndef __STB_INCLUDE_STB_TRUETYPE_H__ +#define __STB_INCLUDE_STB_TRUETYPE_H__ + +#ifdef STBTT_STATIC +#define STBTT_DEF static +#else +#define STBTT_DEF extern +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// TEXTURE BAKING API +// +// If you use this API, you only have to call two functions ever. +// + +typedef struct +{ + unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap + float xoff,yoff,xadvance; +} stbtt_bakedchar; + +STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) + float pixel_height, // height of font in pixels + unsigned char *pixels, int pw, int ph, // bitmap to be filled in + int first_char, int num_chars, // characters to bake + stbtt_bakedchar *chardata); // you allocate this, it's num_chars long +// if return is positive, the first unused row of the bitmap +// if return is negative, returns the negative of the number of characters that fit +// if return is 0, no characters fit and no rows were used +// This uses a very crappy packing. + +typedef struct +{ + float x0,y0,s0,t0; // top-left + float x1,y1,s1,t1; // bottom-right +} stbtt_aligned_quad; + +STBTT_DEF void stbtt_GetBakedQuad(stbtt_bakedchar *chardata, int pw, int ph, // same data as above + int char_index, // character to display + float *xpos, float *ypos, // pointers to current position in screen pixel space + stbtt_aligned_quad *q, // output: quad to draw + int opengl_fillrule); // true if opengl fill rule; false if DX9 or earlier +// Call GetBakedQuad with char_index = 'character - first_char', and it +// creates the quad you need to draw and advances the current position. +// +// The coordinate system used assumes y increases downwards. +// +// Characters will extend both above and below the current position; +// see discussion of "BASELINE" above. +// +// It's inefficient; you might want to c&p it and optimize it. + + + +////////////////////////////////////////////////////////////////////////////// +// +// NEW TEXTURE BAKING API +// +// This provides options for packing multiple fonts into one atlas, not +// perfectly but better than nothing. + +typedef struct +{ + unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap + float xoff,yoff,xadvance; + float xoff2,yoff2; +} stbtt_packedchar; + +typedef struct stbtt_pack_context stbtt_pack_context; +typedef struct stbtt_fontinfo stbtt_fontinfo; +#ifndef STB_RECT_PACK_VERSION +typedef struct stbrp_rect stbrp_rect; +#endif + +STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int width, int height, int stride_in_bytes, int padding, void *alloc_context); +// Initializes a packing context stored in the passed-in stbtt_pack_context. +// Future calls using this context will pack characters into the bitmap passed +// in here: a 1-channel bitmap that is weight x height. stride_in_bytes is +// the distance from one row to the next (or 0 to mean they are packed tightly +// together). "padding" is the amount of padding to leave between each +// character (normally you want '1' for bitmaps you'll use as textures with +// bilinear filtering). +// +// Returns 0 on failure, 1 on success. + +STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc); +// Cleans up the packing context and frees all memory. + +#define STBTT_POINT_SIZE(x) (-(x)) + +STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, unsigned char *fontdata, int font_index, float font_size, + int first_unicode_char_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range); +// Creates character bitmaps from the font_index'th font found in fontdata (use +// font_index=0 if you don't know what that is). It creates num_chars_in_range +// bitmaps for characters with unicode values starting at first_unicode_char_in_range +// and increasing. Data for how to render them is stored in chardata_for_range; +// pass these to stbtt_GetPackedQuad to get back renderable quads. +// +// font_size is the full height of the character from ascender to descender, +// as computed by stbtt_ScaleForPixelHeight. To use a point size as computed +// by stbtt_ScaleForMappingEmToPixels, wrap the point size in STBTT_POINT_SIZE() +// and pass that result as 'font_size': +// ..., 20 , ... // font max minus min y is 20 pixels tall +// ..., STBTT_POINT_SIZE(20), ... // 'M' is 20 pixels tall + +typedef struct +{ + float font_size; + int first_unicode_codepoint_in_range; // if non-zero, then the chars are continuous, and this is the first codepoint + int *array_of_unicode_codepoints; // if non-zero, then this is an array of unicode codepoints + int num_chars; + stbtt_packedchar *chardata_for_range; // output + unsigned char h_oversample, v_oversample; // don't set these, they're used internally +} stbtt_pack_range; + +STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges); +// Creates character bitmaps from multiple ranges of characters stored in +// ranges. This will usually create a better-packed bitmap than multiple +// calls to stbtt_PackFontRange. Note that you can call this multiple +// times within a single PackBegin/PackEnd. + +STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample); +// Oversampling a font increases the quality by allowing higher-quality subpixel +// positioning, and is especially valuable at smaller text sizes. +// +// This function sets the amount of oversampling for all following calls to +// stbtt_PackFontRange(s) or stbtt_PackFontRangesGatherRects for a given +// pack context. The default (no oversampling) is achieved by h_oversample=1 +// and v_oversample=1. The total number of pixels required is +// h_oversample*v_oversample larger than the default; for example, 2x2 +// oversampling requires 4x the storage of 1x1. For best results, render +// oversampled textures with bilinear filtering. Look at the readme in +// stb/tests/oversample for information about oversampled fonts +// +// To use with PackFontRangesGather etc., you must set it before calls +// call to PackFontRangesGatherRects. + +STBTT_DEF void stbtt_GetPackedQuad(stbtt_packedchar *chardata, int pw, int ph, // same data as above + int char_index, // character to display + float *xpos, float *ypos, // pointers to current position in screen pixel space + stbtt_aligned_quad *q, // output: quad to draw + int align_to_integer); + +STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects); +STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects); +STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects); +// Calling these functions in sequence is roughly equivalent to calling +// stbtt_PackFontRanges(). If you more control over the packing of multiple +// fonts, or if you want to pack custom data into a font texture, take a look +// at the source to of stbtt_PackFontRanges() and create a custom version +// using these functions, e.g. call GatherRects multiple times, +// building up a single array of rects, then call PackRects once, +// then call RenderIntoRects repeatedly. This may result in a +// better packing than calling PackFontRanges multiple times +// (or it may not). + +// this is an opaque structure that you shouldn't mess with which holds +// all the context needed from PackBegin to PackEnd. +struct stbtt_pack_context { + void *user_allocator_context; + void *pack_info; + int width; + int height; + int stride_in_bytes; + int padding; + unsigned int h_oversample, v_oversample; + unsigned char *pixels; + void *nodes; +}; + +////////////////////////////////////////////////////////////////////////////// +// +// FONT LOADING +// +// + +STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index); +// Each .ttf/.ttc file may have more than one font. Each font has a sequential +// index number starting from 0. Call this function to get the font offset for +// a given index; it returns -1 if the index is out of range. A regular .ttf +// file will only define one font and it always be at offset 0, so it will +// return '0' for index 0, and -1 for all other indices. You can just skip +// this step if you know it's that kind of font. + + +// The following structure is defined publically so you can declare one on +// the stack or as a global or etc, but you should treat it as opaque. +struct stbtt_fontinfo +{ + void * userdata; + unsigned char * data; // pointer to .ttf file + int fontstart; // offset of start of font + + int numGlyphs; // number of glyphs, needed for range checking + + int loca,head,glyf,hhea,hmtx,kern; // table locations as offset from start of .ttf + int index_map; // a cmap mapping for our chosen character encoding + int indexToLocFormat; // format needed to map from glyph index to glyph +}; + +STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset); +// Given an offset into the file that defines a font, this function builds +// the necessary cached info for the rest of the system. You must allocate +// the stbtt_fontinfo yourself, and stbtt_InitFont will fill it out. You don't +// need to do anything special to free it, because the contents are pure +// value data with no additional data structures. Returns 0 on failure. + + +////////////////////////////////////////////////////////////////////////////// +// +// CHARACTER TO GLYPH-INDEX CONVERSIOn + +STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint); +// If you're going to perform multiple operations on the same character +// and you want a speed-up, call this function with the character you're +// going to process, then use glyph-based functions instead of the +// codepoint-based functions. + + +////////////////////////////////////////////////////////////////////////////// +// +// CHARACTER PROPERTIES +// + +STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float pixels); +// computes a scale factor to produce a font whose "height" is 'pixels' tall. +// Height is measured as the distance from the highest ascender to the lowest +// descender; in other words, it's equivalent to calling stbtt_GetFontVMetrics +// and computing: +// scale = pixels / (ascent - descent) +// so if you prefer to measure height by the ascent only, use a similar calculation. + +STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels); +// computes a scale factor to produce a font whose EM size is mapped to +// 'pixels' tall. This is probably what traditional APIs compute, but +// I'm not positive. + +STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap); +// ascent is the coordinate above the baseline the font extends; descent +// is the coordinate below the baseline the font extends (i.e. it is typically negative) +// lineGap is the spacing between one row's descent and the next row's ascent... +// so you should advance the vertical position by "*ascent - *descent + *lineGap" +// these are expressed in unscaled coordinates, so you must multiply by +// the scale factor for a given size + +STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1); +// the bounding box around all possible characters + +STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing); +// leftSideBearing is the offset from the current horizontal position to the left edge of the character +// advanceWidth is the offset from the current horizontal position to the next horizontal position +// these are expressed in unscaled coordinates + +STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2); +// an additional amount to add to the 'advance' value between ch1 and ch2 + +STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1); +// Gets the bounding box of the visible part of the glyph, in unscaled coordinates + +STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing); +STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2); +STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1); +// as above, but takes one or more glyph indices for greater efficiency + + +////////////////////////////////////////////////////////////////////////////// +// +// GLYPH SHAPES (you probably don't need these, but they have to go before +// the bitmaps for C declaration-order reasons) +// + +#ifndef STBTT_vmove // you can predefine these to use different values (but why?) + enum { + STBTT_vmove=1, + STBTT_vline, + STBTT_vcurve + }; +#endif + +#ifndef stbtt_vertex // you can predefine this to use different values + // (we share this with other code at RAD) + #define stbtt_vertex_type short // can't use stbtt_int16 because that's not visible in the header file + typedef struct + { + stbtt_vertex_type x,y,cx,cy; + unsigned char type,padding; + } stbtt_vertex; +#endif + +STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index); +// returns non-zero if nothing is drawn for this glyph + +STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices); +STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **vertices); +// returns # of vertices and fills *vertices with the pointer to them +// these are expressed in "unscaled" coordinates +// +// The shape is a series of countours. Each one starts with +// a STBTT_moveto, then consists of a series of mixed +// STBTT_lineto and STBTT_curveto segments. A lineto +// draws a line from previous endpoint to its x,y; a curveto +// draws a quadratic bezier from previous endpoint to +// its x,y, using cx,cy as the bezier control point. + +STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *vertices); +// frees the data allocated above + +////////////////////////////////////////////////////////////////////////////// +// +// BITMAP RENDERING +// + +STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata); +// frees the bitmap allocated below + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff); +// allocates a large-enough single-channel 8bpp bitmap and renders the +// specified character/glyph at the specified scale into it, with +// antialiasing. 0 is no coverage (transparent), 255 is fully covered (opaque). +// *width & *height are filled out with the width & height of the bitmap, +// which is stored left-to-right, top-to-bottom. +// +// xoff/yoff are the offset it pixel space from the glyph origin to the top-left of the bitmap + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff); +// the same as stbtt_GetCodepoitnBitmap, but you can specify a subpixel +// shift for the character + +STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint); +// the same as stbtt_GetCodepointBitmap, but you pass in storage for the bitmap +// in the form of 'output', with row spacing of 'out_stride' bytes. the bitmap +// is clipped to out_w/out_h bytes. Call stbtt_GetCodepointBitmapBox to get the +// width and height and positioning info for it first. + +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint); +// same as stbtt_MakeCodepointBitmap, but you can specify a subpixel +// shift for the character + +STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); +// get the bbox of the bitmap centered around the glyph origin; so the +// bitmap width is ix1-ix0, height is iy1-iy0, and location to place +// the bitmap top left is (leftSideBearing*scale,iy0). +// (Note that the bitmap uses y-increases-down, but the shape uses +// y-increases-up, so CodepointBitmapBox and CodepointBox are inverted.) + +STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); +// same as stbtt_GetCodepointBitmapBox, but you can specify a subpixel +// shift for the character + +// the following functions are equivalent to the above functions, but operate +// on glyph indices instead of Unicode codepoints (for efficiency) +STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph); +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph); +STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); +STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); + + +// @TODO: don't expose this structure +typedef struct +{ + int w,h,stride; + unsigned char *pixels; +} stbtt__bitmap; + +// rasterize a shape with quadratic beziers into a bitmap +STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, // 1-channel bitmap to draw into + float flatness_in_pixels, // allowable error of curve in pixels + stbtt_vertex *vertices, // array of vertices defining shape + int num_verts, // number of vertices in above array + float scale_x, float scale_y, // scale applied to input vertices + float shift_x, float shift_y, // translation applied to input vertices + int x_off, int y_off, // another translation applied to input + int invert, // if non-zero, vertically flip shape + void *userdata); // context for to STBTT_MALLOC + +////////////////////////////////////////////////////////////////////////////// +// +// Finding the right font... +// +// You should really just solve this offline, keep your own tables +// of what font is what, and don't try to get it out of the .ttf file. +// That's because getting it out of the .ttf file is really hard, because +// the names in the file can appear in many possible encodings, in many +// possible languages, and e.g. if you need a case-insensitive comparison, +// the details of that depend on the encoding & language in a complex way +// (actually underspecified in truetype, but also gigantic). +// +// But you can use the provided functions in two possible ways: +// stbtt_FindMatchingFont() will use *case-sensitive* comparisons on +// unicode-encoded names to try to find the font you want; +// you can run this before calling stbtt_InitFont() +// +// stbtt_GetFontNameString() lets you get any of the various strings +// from the file yourself and do your own comparisons on them. +// You have to have called stbtt_InitFont() first. + + +STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags); +// returns the offset (not index) of the font that matches, or -1 if none +// if you use STBTT_MACSTYLE_DONTCARE, use a font name like "Arial Bold". +// if you use any other flag, use a font name like "Arial"; this checks +// the 'macStyle' header field; i don't know if fonts set this consistently +#define STBTT_MACSTYLE_DONTCARE 0 +#define STBTT_MACSTYLE_BOLD 1 +#define STBTT_MACSTYLE_ITALIC 2 +#define STBTT_MACSTYLE_UNDERSCORE 4 +#define STBTT_MACSTYLE_NONE 8 // <= not same as 0, this makes us check the bitfield is 0 + +STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2); +// returns 1/0 whether the first string interpreted as utf8 is identical to +// the second string interpreted as big-endian utf16... useful for strings from next func + +STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID); +// returns the string (which may be big-endian double byte, e.g. for unicode) +// and puts the length in bytes in *length. +// +// some of the values for the IDs are below; for more see the truetype spec: +// http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6name.html +// http://www.microsoft.com/typography/otspec/name.htm + +enum { // platformID + STBTT_PLATFORM_ID_UNICODE =0, + STBTT_PLATFORM_ID_MAC =1, + STBTT_PLATFORM_ID_ISO =2, + STBTT_PLATFORM_ID_MICROSOFT =3 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_UNICODE + STBTT_UNICODE_EID_UNICODE_1_0 =0, + STBTT_UNICODE_EID_UNICODE_1_1 =1, + STBTT_UNICODE_EID_ISO_10646 =2, + STBTT_UNICODE_EID_UNICODE_2_0_BMP=3, + STBTT_UNICODE_EID_UNICODE_2_0_FULL=4 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_MICROSOFT + STBTT_MS_EID_SYMBOL =0, + STBTT_MS_EID_UNICODE_BMP =1, + STBTT_MS_EID_SHIFTJIS =2, + STBTT_MS_EID_UNICODE_FULL =10 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_MAC; same as Script Manager codes + STBTT_MAC_EID_ROMAN =0, STBTT_MAC_EID_ARABIC =4, + STBTT_MAC_EID_JAPANESE =1, STBTT_MAC_EID_HEBREW =5, + STBTT_MAC_EID_CHINESE_TRAD =2, STBTT_MAC_EID_GREEK =6, + STBTT_MAC_EID_KOREAN =3, STBTT_MAC_EID_RUSSIAN =7 +}; + +enum { // languageID for STBTT_PLATFORM_ID_MICROSOFT; same as LCID... + // problematic because there are e.g. 16 english LCIDs and 16 arabic LCIDs + STBTT_MS_LANG_ENGLISH =0x0409, STBTT_MS_LANG_ITALIAN =0x0410, + STBTT_MS_LANG_CHINESE =0x0804, STBTT_MS_LANG_JAPANESE =0x0411, + STBTT_MS_LANG_DUTCH =0x0413, STBTT_MS_LANG_KOREAN =0x0412, + STBTT_MS_LANG_FRENCH =0x040c, STBTT_MS_LANG_RUSSIAN =0x0419, + STBTT_MS_LANG_GERMAN =0x0407, STBTT_MS_LANG_SPANISH =0x0409, + STBTT_MS_LANG_HEBREW =0x040d, STBTT_MS_LANG_SWEDISH =0x041D +}; + +enum { // languageID for STBTT_PLATFORM_ID_MAC + STBTT_MAC_LANG_ENGLISH =0 , STBTT_MAC_LANG_JAPANESE =11, + STBTT_MAC_LANG_ARABIC =12, STBTT_MAC_LANG_KOREAN =23, + STBTT_MAC_LANG_DUTCH =4 , STBTT_MAC_LANG_RUSSIAN =32, + STBTT_MAC_LANG_FRENCH =1 , STBTT_MAC_LANG_SPANISH =6 , + STBTT_MAC_LANG_GERMAN =2 , STBTT_MAC_LANG_SWEDISH =5 , + STBTT_MAC_LANG_HEBREW =10, STBTT_MAC_LANG_CHINESE_SIMPLIFIED =33, + STBTT_MAC_LANG_ITALIAN =3 , STBTT_MAC_LANG_CHINESE_TRAD =19 +}; + +#ifdef __cplusplus +} +#endif + +#endif // __STB_INCLUDE_STB_TRUETYPE_H__ + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +//// +//// IMPLEMENTATION +//// +//// + +#ifdef STB_TRUETYPE_IMPLEMENTATION + +#ifndef STBTT_MAX_OVERSAMPLE +#define STBTT_MAX_OVERSAMPLE 8 +#endif + +#if STBTT_MAX_OVERSAMPLE > 255 +#error "STBTT_MAX_OVERSAMPLE cannot be > 255" +#endif + +typedef int stbtt__test_oversample_pow2[(STBTT_MAX_OVERSAMPLE & (STBTT_MAX_OVERSAMPLE-1)) == 0 ? 1 : -1]; + +#ifndef STBTT_RASTERIZER_VERSION +#define STBTT_RASTERIZER_VERSION 2 +#endif + +#ifdef _MSC_VER +#define STBTT__NOTUSED(v) (void)(v) +#else +#define STBTT__NOTUSED(v) (void)sizeof(v) +#endif + +////////////////////////////////////////////////////////////////////////// +// +// accessors to parse data from file +// + +// on platforms that don't allow misaligned reads, if we want to allow +// truetype fonts that aren't padded to alignment, define ALLOW_UNALIGNED_TRUETYPE + +#define ttBYTE(p) (* (stbtt_uint8 *) (p)) +#define ttCHAR(p) (* (stbtt_int8 *) (p)) +#define ttFixed(p) ttLONG(p) + +static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; } +static stbtt_int16 ttSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; } +static stbtt_uint32 ttULONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } +static stbtt_int32 ttLONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } + +#define stbtt_tag4(p,c0,c1,c2,c3) ((p)[0] == (c0) && (p)[1] == (c1) && (p)[2] == (c2) && (p)[3] == (c3)) +#define stbtt_tag(p,str) stbtt_tag4(p,str[0],str[1],str[2],str[3]) + +static int stbtt__isfont(stbtt_uint8 *font) +{ + // check the version number + if (stbtt_tag4(font, '1',0,0,0)) return 1; // TrueType 1 + if (stbtt_tag(font, "typ1")) return 1; // TrueType with type 1 font -- we don't support this! + if (stbtt_tag(font, "OTTO")) return 1; // OpenType with CFF + if (stbtt_tag4(font, 0,1,0,0)) return 1; // OpenType 1.0 + return 0; +} + +// @OPTIMIZE: binary search +static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fontstart, const char *tag) +{ + stbtt_int32 num_tables = ttUSHORT(data+fontstart+4); + stbtt_uint32 tabledir = fontstart + 12; + stbtt_int32 i; + for (i=0; i < num_tables; ++i) { + stbtt_uint32 loc = tabledir + 16*i; + if (stbtt_tag(data+loc+0, tag)) + return ttULONG(data+loc+8); + } + return 0; +} + +static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_collection, int index) +{ + // if it's just a font, there's only one valid index + if (stbtt__isfont(font_collection)) + return index == 0 ? 0 : -1; + + // check if it's a TTC + if (stbtt_tag(font_collection, "ttcf")) { + // version 1? + if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) { + stbtt_int32 n = ttLONG(font_collection+8); + if (index >= n) + return -1; + return ttULONG(font_collection+12+index*4); + } + } + return -1; +} + +static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart) +{ + stbtt_uint32 cmap, t; + stbtt_int32 i,numTables; + + info->data = data; + info->fontstart = fontstart; + + cmap = stbtt__find_table(data, fontstart, "cmap"); // required + info->loca = stbtt__find_table(data, fontstart, "loca"); // required + info->head = stbtt__find_table(data, fontstart, "head"); // required + info->glyf = stbtt__find_table(data, fontstart, "glyf"); // required + info->hhea = stbtt__find_table(data, fontstart, "hhea"); // required + info->hmtx = stbtt__find_table(data, fontstart, "hmtx"); // required + info->kern = stbtt__find_table(data, fontstart, "kern"); // not required + if (!cmap || !info->loca || !info->head || !info->glyf || !info->hhea || !info->hmtx) + return 0; + + t = stbtt__find_table(data, fontstart, "maxp"); + if (t) + info->numGlyphs = ttUSHORT(data+t+4); + else + info->numGlyphs = 0xffff; + + // find a cmap encoding table we understand *now* to avoid searching + // later. (todo: could make this installable) + // the same regardless of glyph. + numTables = ttUSHORT(data + cmap + 2); + info->index_map = 0; + for (i=0; i < numTables; ++i) { + stbtt_uint32 encoding_record = cmap + 4 + 8 * i; + // find an encoding we understand: + switch(ttUSHORT(data+encoding_record)) { + case STBTT_PLATFORM_ID_MICROSOFT: + switch (ttUSHORT(data+encoding_record+2)) { + case STBTT_MS_EID_UNICODE_BMP: + case STBTT_MS_EID_UNICODE_FULL: + // MS/Unicode + info->index_map = cmap + ttULONG(data+encoding_record+4); + break; + } + break; + case STBTT_PLATFORM_ID_UNICODE: + // Mac/iOS has these + // all the encodingIDs are unicode, so we don't bother to check it + info->index_map = cmap + ttULONG(data+encoding_record+4); + break; + } + } + if (info->index_map == 0) + return 0; + + info->indexToLocFormat = ttUSHORT(data+info->head + 50); + return 1; +} + +STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint) +{ + stbtt_uint8 *data = info->data; + stbtt_uint32 index_map = info->index_map; + + stbtt_uint16 format = ttUSHORT(data + index_map + 0); + if (format == 0) { // apple byte encoding + stbtt_int32 bytes = ttUSHORT(data + index_map + 2); + if (unicode_codepoint < bytes-6) + return ttBYTE(data + index_map + 6 + unicode_codepoint); + return 0; + } else if (format == 6) { + stbtt_uint32 first = ttUSHORT(data + index_map + 6); + stbtt_uint32 count = ttUSHORT(data + index_map + 8); + if ((stbtt_uint32) unicode_codepoint >= first && (stbtt_uint32) unicode_codepoint < first+count) + return ttUSHORT(data + index_map + 10 + (unicode_codepoint - first)*2); + return 0; + } else if (format == 2) { + STBTT_assert(0); // @TODO: high-byte mapping for japanese/chinese/korean + return 0; + } else if (format == 4) { // standard mapping for windows fonts: binary search collection of ranges + stbtt_uint16 segcount = ttUSHORT(data+index_map+6) >> 1; + stbtt_uint16 searchRange = ttUSHORT(data+index_map+8) >> 1; + stbtt_uint16 entrySelector = ttUSHORT(data+index_map+10); + stbtt_uint16 rangeShift = ttUSHORT(data+index_map+12) >> 1; + + // do a binary search of the segments + stbtt_uint32 endCount = index_map + 14; + stbtt_uint32 search = endCount; + + if (unicode_codepoint > 0xffff) + return 0; + + // they lie from endCount .. endCount + segCount + // but searchRange is the nearest power of two, so... + if (unicode_codepoint >= ttUSHORT(data + search + rangeShift*2)) + search += rangeShift*2; + + // now decrement to bias correctly to find smallest + search -= 2; + while (entrySelector) { + stbtt_uint16 end; + searchRange >>= 1; + end = ttUSHORT(data + search + searchRange*2); + if (unicode_codepoint > end) + search += searchRange*2; + --entrySelector; + } + search += 2; + + { + stbtt_uint16 offset, start; + stbtt_uint16 item = (stbtt_uint16) ((search - endCount) >> 1); + + STBTT_assert(unicode_codepoint <= ttUSHORT(data + endCount + 2*item)); + start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item); + if (unicode_codepoint < start) + return 0; + + offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item); + if (offset == 0) + return (stbtt_uint16) (unicode_codepoint + ttSHORT(data + index_map + 14 + segcount*4 + 2 + 2*item)); + + return ttUSHORT(data + offset + (unicode_codepoint-start)*2 + index_map + 14 + segcount*6 + 2 + 2*item); + } + } else if (format == 12 || format == 13) { + stbtt_uint32 ngroups = ttULONG(data+index_map+12); + stbtt_int32 low,high; + low = 0; high = (stbtt_int32)ngroups; + // Binary search the right group. + while (low < high) { + stbtt_int32 mid = low + ((high-low) >> 1); // rounds down, so low <= mid < high + stbtt_uint32 start_char = ttULONG(data+index_map+16+mid*12); + stbtt_uint32 end_char = ttULONG(data+index_map+16+mid*12+4); + if ((stbtt_uint32) unicode_codepoint < start_char) + high = mid; + else if ((stbtt_uint32) unicode_codepoint > end_char) + low = mid+1; + else { + stbtt_uint32 start_glyph = ttULONG(data+index_map+16+mid*12+8); + if (format == 12) + return start_glyph + unicode_codepoint-start_char; + else // format == 13 + return start_glyph; + } + } + return 0; // not found + } + // @TODO + STBTT_assert(0); + return 0; +} + +STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices) +{ + return stbtt_GetGlyphShape(info, stbtt_FindGlyphIndex(info, unicode_codepoint), vertices); +} + +static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy) +{ + v->type = type; + v->x = (stbtt_int16) x; + v->y = (stbtt_int16) y; + v->cx = (stbtt_int16) cx; + v->cy = (stbtt_int16) cy; +} + +static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_index) +{ + int g1,g2; + + if (glyph_index >= info->numGlyphs) return -1; // glyph index out of range + if (info->indexToLocFormat >= 2) return -1; // unknown index->glyph map format + + if (info->indexToLocFormat == 0) { + g1 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2) * 2; + g2 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2 + 2) * 2; + } else { + g1 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4); + g2 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4 + 4); + } + + return g1==g2 ? -1 : g1; // if length is 0, return -1 +} + +STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1) +{ + int g = stbtt__GetGlyfOffset(info, glyph_index); + if (g < 0) return 0; + + if (x0) *x0 = ttSHORT(info->data + g + 2); + if (y0) *y0 = ttSHORT(info->data + g + 4); + if (x1) *x1 = ttSHORT(info->data + g + 6); + if (y1) *y1 = ttSHORT(info->data + g + 8); + return 1; +} + +STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1) +{ + return stbtt_GetGlyphBox(info, stbtt_FindGlyphIndex(info,codepoint), x0,y0,x1,y1); +} + +STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index) +{ + stbtt_int16 numberOfContours; + int g = stbtt__GetGlyfOffset(info, glyph_index); + if (g < 0) return 1; + numberOfContours = ttSHORT(info->data + g); + return numberOfContours == 0; +} + +static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, int was_off, int start_off, + stbtt_int32 sx, stbtt_int32 sy, stbtt_int32 scx, stbtt_int32 scy, stbtt_int32 cx, stbtt_int32 cy) +{ + if (start_off) { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+scx)>>1, (cy+scy)>>1, cx,cy); + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, sx,sy,scx,scy); + } else { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve,sx,sy,cx,cy); + else + stbtt_setvertex(&vertices[num_vertices++], STBTT_vline,sx,sy,0,0); + } + return num_vertices; +} + +STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) +{ + stbtt_int16 numberOfContours; + stbtt_uint8 *endPtsOfContours; + stbtt_uint8 *data = info->data; + stbtt_vertex *vertices=0; + int num_vertices=0; + int g = stbtt__GetGlyfOffset(info, glyph_index); + + *pvertices = NULL; + + if (g < 0) return 0; + + numberOfContours = ttSHORT(data + g); + + if (numberOfContours > 0) { + stbtt_uint8 flags=0,flagcount; + stbtt_int32 ins, i,j=0,m,n, next_move, was_off=0, off, start_off=0; + stbtt_int32 x,y,cx,cy,sx,sy, scx,scy; + stbtt_uint8 *points; + endPtsOfContours = (data + g + 10); + ins = ttUSHORT(data + g + 10 + numberOfContours * 2); + points = data + g + 10 + numberOfContours * 2 + 2 + ins; + + n = 1+ttUSHORT(endPtsOfContours + numberOfContours*2-2); + + m = n + 2*numberOfContours; // a loose bound on how many vertices we might need + vertices = (stbtt_vertex *) STBTT_malloc(m * sizeof(vertices[0]), info->userdata); + if (vertices == 0) + return 0; + + next_move = 0; + flagcount=0; + + // in first pass, we load uninterpreted data into the allocated array + // above, shifted to the end of the array so we won't overwrite it when + // we create our final data starting from the front + + off = m - n; // starting offset for uninterpreted data, regardless of how m ends up being calculated + + // first load flags + + for (i=0; i < n; ++i) { + if (flagcount == 0) { + flags = *points++; + if (flags & 8) + flagcount = *points++; + } else + --flagcount; + vertices[off+i].type = flags; + } + + // now load x coordinates + x=0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + if (flags & 2) { + stbtt_int16 dx = *points++; + x += (flags & 16) ? dx : -dx; // ??? + } else { + if (!(flags & 16)) { + x = x + (stbtt_int16) (points[0]*256 + points[1]); + points += 2; + } + } + vertices[off+i].x = (stbtt_int16) x; + } + + // now load y coordinates + y=0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + if (flags & 4) { + stbtt_int16 dy = *points++; + y += (flags & 32) ? dy : -dy; // ??? + } else { + if (!(flags & 32)) { + y = y + (stbtt_int16) (points[0]*256 + points[1]); + points += 2; + } + } + vertices[off+i].y = (stbtt_int16) y; + } + + // now convert them to our format + num_vertices=0; + sx = sy = cx = cy = scx = scy = 0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + x = (stbtt_int16) vertices[off+i].x; + y = (stbtt_int16) vertices[off+i].y; + + if (next_move == i) { + if (i != 0) + num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); + + // now start the new one + start_off = !(flags & 1); + if (start_off) { + // if we start off with an off-curve point, then when we need to find a point on the curve + // where we can start, and we need to save some state for when we wraparound. + scx = x; + scy = y; + if (!(vertices[off+i+1].type & 1)) { + // next point is also a curve point, so interpolate an on-point curve + sx = (x + (stbtt_int32) vertices[off+i+1].x) >> 1; + sy = (y + (stbtt_int32) vertices[off+i+1].y) >> 1; + } else { + // otherwise just use the next point as our start point + sx = (stbtt_int32) vertices[off+i+1].x; + sy = (stbtt_int32) vertices[off+i+1].y; + ++i; // we're using point i+1 as the starting point, so skip it + } + } else { + sx = x; + sy = y; + } + stbtt_setvertex(&vertices[num_vertices++], STBTT_vmove,sx,sy,0,0); + was_off = 0; + next_move = 1 + ttUSHORT(endPtsOfContours+j*2); + ++j; + } else { + if (!(flags & 1)) { // if it's a curve + if (was_off) // two off-curve control points in a row means interpolate an on-curve midpoint + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+x)>>1, (cy+y)>>1, cx, cy); + cx = x; + cy = y; + was_off = 1; + } else { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, x,y, cx, cy); + else + stbtt_setvertex(&vertices[num_vertices++], STBTT_vline, x,y,0,0); + was_off = 0; + } + } + } + num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); + } else if (numberOfContours == -1) { + // Compound shapes. + int more = 1; + stbtt_uint8 *comp = data + g + 10; + num_vertices = 0; + vertices = 0; + while (more) { + stbtt_uint16 flags, gidx; + int comp_num_verts = 0, i; + stbtt_vertex *comp_verts = 0, *tmp = 0; + float mtx[6] = {1,0,0,1,0,0}, m, n; + + flags = ttSHORT(comp); comp+=2; + gidx = ttSHORT(comp); comp+=2; + + if (flags & 2) { // XY values + if (flags & 1) { // shorts + mtx[4] = ttSHORT(comp); comp+=2; + mtx[5] = ttSHORT(comp); comp+=2; + } else { + mtx[4] = ttCHAR(comp); comp+=1; + mtx[5] = ttCHAR(comp); comp+=1; + } + } + else { + // @TODO handle matching point + STBTT_assert(0); + } + if (flags & (1<<3)) { // WE_HAVE_A_SCALE + mtx[0] = mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = mtx[2] = 0; + } else if (flags & (1<<6)) { // WE_HAVE_AN_X_AND_YSCALE + mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = mtx[2] = 0; + mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + } else if (flags & (1<<7)) { // WE_HAVE_A_TWO_BY_TWO + mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[2] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + } + + // Find transformation scales. + m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]); + n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]); + + // Get indexed glyph. + comp_num_verts = stbtt_GetGlyphShape(info, gidx, &comp_verts); + if (comp_num_verts > 0) { + // Transform vertices. + for (i = 0; i < comp_num_verts; ++i) { + stbtt_vertex* v = &comp_verts[i]; + stbtt_vertex_type x,y; + x=v->x; y=v->y; + v->x = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); + v->y = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); + x=v->cx; y=v->cy; + v->cx = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); + v->cy = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); + } + // Append vertices. + tmp = (stbtt_vertex*)STBTT_malloc((num_vertices+comp_num_verts)*sizeof(stbtt_vertex), info->userdata); + if (!tmp) { + if (vertices) STBTT_free(vertices, info->userdata); + if (comp_verts) STBTT_free(comp_verts, info->userdata); + return 0; + } + if (num_vertices > 0) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); + STBTT_memcpy(tmp+num_vertices, comp_verts, comp_num_verts*sizeof(stbtt_vertex)); + if (vertices) STBTT_free(vertices, info->userdata); + vertices = tmp; + STBTT_free(comp_verts, info->userdata); + num_vertices += comp_num_verts; + } + // More components ? + more = flags & (1<<5); + } + } else if (numberOfContours < 0) { + // @TODO other compound variations? + STBTT_assert(0); + } else { + // numberOfCounters == 0, do nothing + } + + *pvertices = vertices; + return num_vertices; +} + +STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing) +{ + stbtt_uint16 numOfLongHorMetrics = ttUSHORT(info->data+info->hhea + 34); + if (glyph_index < numOfLongHorMetrics) { + if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*glyph_index); + if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*glyph_index + 2); + } else { + if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*(numOfLongHorMetrics-1)); + if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*numOfLongHorMetrics + 2*(glyph_index - numOfLongHorMetrics)); + } +} + +STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) +{ + stbtt_uint8 *data = info->data + info->kern; + stbtt_uint32 needle, straw; + int l, r, m; + + // we only look at the first table. it must be 'horizontal' and format 0. + if (!info->kern) + return 0; + if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 + return 0; + if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format + return 0; + + l = 0; + r = ttUSHORT(data+10) - 1; + needle = glyph1 << 16 | glyph2; + while (l <= r) { + m = (l + r) >> 1; + straw = ttULONG(data+18+(m*6)); // note: unaligned read + if (needle < straw) + r = m - 1; + else if (needle > straw) + l = m + 1; + else + return ttSHORT(data+22+(m*6)); + } + return 0; +} + +STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2) +{ + if (!info->kern) // if no kerning table, don't waste time looking up both codepoint->glyphs + return 0; + return stbtt_GetGlyphKernAdvance(info, stbtt_FindGlyphIndex(info,ch1), stbtt_FindGlyphIndex(info,ch2)); +} + +STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing) +{ + stbtt_GetGlyphHMetrics(info, stbtt_FindGlyphIndex(info,codepoint), advanceWidth, leftSideBearing); +} + +STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap) +{ + if (ascent ) *ascent = ttSHORT(info->data+info->hhea + 4); + if (descent) *descent = ttSHORT(info->data+info->hhea + 6); + if (lineGap) *lineGap = ttSHORT(info->data+info->hhea + 8); +} + +STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1) +{ + *x0 = ttSHORT(info->data + info->head + 36); + *y0 = ttSHORT(info->data + info->head + 38); + *x1 = ttSHORT(info->data + info->head + 40); + *y1 = ttSHORT(info->data + info->head + 42); +} + +STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float height) +{ + int fheight = ttSHORT(info->data + info->hhea + 4) - ttSHORT(info->data + info->hhea + 6); + return (float) height / fheight; +} + +STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels) +{ + int unitsPerEm = ttUSHORT(info->data + info->head + 18); + return pixels / unitsPerEm; +} + +STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v) +{ + STBTT_free(v, info->userdata); +} + +////////////////////////////////////////////////////////////////////////////// +// +// antialiasing software rasterizer +// + +STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + int x0=0,y0=0,x1,y1; // =0 suppresses compiler warning + if (!stbtt_GetGlyphBox(font, glyph, &x0,&y0,&x1,&y1)) { + // e.g. space character + if (ix0) *ix0 = 0; + if (iy0) *iy0 = 0; + if (ix1) *ix1 = 0; + if (iy1) *iy1 = 0; + } else { + // move to integral bboxes (treating pixels as little squares, what pixels get touched)? + if (ix0) *ix0 = STBTT_ifloor( x0 * scale_x + shift_x); + if (iy0) *iy0 = STBTT_ifloor(-y1 * scale_y + shift_y); + if (ix1) *ix1 = STBTT_iceil ( x1 * scale_x + shift_x); + if (iy1) *iy1 = STBTT_iceil (-y0 * scale_y + shift_y); + } +} + +STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetGlyphBitmapBoxSubpixel(font, glyph, scale_x, scale_y,0.0f,0.0f, ix0, iy0, ix1, iy1); +} + +STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetGlyphBitmapBoxSubpixel(font, stbtt_FindGlyphIndex(font,codepoint), scale_x, scale_y,shift_x,shift_y, ix0,iy0,ix1,iy1); +} + +STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0.0f,0.0f, ix0,iy0,ix1,iy1); +} + +////////////////////////////////////////////////////////////////////////////// +// +// Rasterizer + +typedef struct stbtt__hheap_chunk +{ + struct stbtt__hheap_chunk *next; +} stbtt__hheap_chunk; + +typedef struct stbtt__hheap +{ + struct stbtt__hheap_chunk *head; + void *first_free; + int num_remaining_in_head_chunk; +} stbtt__hheap; + +static void *stbtt__hheap_alloc(stbtt__hheap *hh, size_t size, void *userdata) +{ + if (hh->first_free) { + void *p = hh->first_free; + hh->first_free = * (void **) p; + return p; + } else { + if (hh->num_remaining_in_head_chunk == 0) { + int count = (size < 32 ? 2000 : size < 128 ? 800 : 100); + stbtt__hheap_chunk *c = (stbtt__hheap_chunk *) STBTT_malloc(sizeof(stbtt__hheap_chunk) + size * count, userdata); + if (c == NULL) + return NULL; + c->next = hh->head; + hh->head = c; + hh->num_remaining_in_head_chunk = count; + } + --hh->num_remaining_in_head_chunk; + return (char *) (hh->head) + size * hh->num_remaining_in_head_chunk; + } +} + +static void stbtt__hheap_free(stbtt__hheap *hh, void *p) +{ + *(void **) p = hh->first_free; + hh->first_free = p; +} + +static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata) +{ + stbtt__hheap_chunk *c = hh->head; + while (c) { + stbtt__hheap_chunk *n = c->next; + STBTT_free(c, userdata); + c = n; + } +} + +typedef struct stbtt__edge { + float x0,y0, x1,y1; + int invert; +} stbtt__edge; + + +typedef struct stbtt__active_edge +{ + struct stbtt__active_edge *next; + #if STBTT_RASTERIZER_VERSION==1 + int x,dx; + float ey; + int direction; + #elif STBTT_RASTERIZER_VERSION==2 + float fx,fdx,fdy; + float direction; + float sy; + float ey; + #else + #error "Unrecognized value of STBTT_RASTERIZER_VERSION" + #endif +} stbtt__active_edge; + +#if STBTT_RASTERIZER_VERSION == 1 +#define STBTT_FIXSHIFT 10 +#define STBTT_FIX (1 << STBTT_FIXSHIFT) +#define STBTT_FIXMASK (STBTT_FIX-1) + +static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) +{ + stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); + float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); + STBTT_assert(z != NULL); + if (!z) return z; + + // round dx down to avoid overshooting + if (dxdy < 0) + z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy); + else + z->dx = STBTT_ifloor(STBTT_FIX * dxdy); + + z->x = STBTT_ifloor(STBTT_FIX * e->x0 + z->dx * (start_point - e->y0)); // use z->dx so when we offset later it's by the same amount + z->x -= off_x * STBTT_FIX; + + z->ey = e->y1; + z->next = 0; + z->direction = e->invert ? 1 : -1; + return z; +} +#elif STBTT_RASTERIZER_VERSION == 2 +static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) +{ + stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); + float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); + STBTT_assert(z != NULL); + //STBTT_assert(e->y0 <= start_point); + if (!z) return z; + z->fdx = dxdy; + z->fdy = dxdy != 0.0f ? (1.0f/dxdy) : 0.0f; + z->fx = e->x0 + dxdy * (start_point - e->y0); + z->fx -= off_x; + z->direction = e->invert ? 1.0f : -1.0f; + z->sy = e->y0; + z->ey = e->y1; + z->next = 0; + return z; +} +#else +#error "Unrecognized value of STBTT_RASTERIZER_VERSION" +#endif + +#if STBTT_RASTERIZER_VERSION == 1 +// note: this routine clips fills that extend off the edges... ideally this +// wouldn't happen, but it could happen if the truetype glyph bounding boxes +// are wrong, or if the user supplies a too-small bitmap +static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__active_edge *e, int max_weight) +{ + // non-zero winding fill + int x0=0, w=0; + + while (e) { + if (w == 0) { + // if we're currently at zero, we need to record the edge start point + x0 = e->x; w += e->direction; + } else { + int x1 = e->x; w += e->direction; + // if we went to zero, we need to draw + if (w == 0) { + int i = x0 >> STBTT_FIXSHIFT; + int j = x1 >> STBTT_FIXSHIFT; + + if (i < len && j >= 0) { + if (i == j) { + // x0,x1 are the same pixel, so compute combined coverage + scanline[i] = scanline[i] + (stbtt_uint8) ((x1 - x0) * max_weight >> STBTT_FIXSHIFT); + } else { + if (i >= 0) // add antialiasing for x0 + scanline[i] = scanline[i] + (stbtt_uint8) (((STBTT_FIX - (x0 & STBTT_FIXMASK)) * max_weight) >> STBTT_FIXSHIFT); + else + i = -1; // clip + + if (j < len) // add antialiasing for x1 + scanline[j] = scanline[j] + (stbtt_uint8) (((x1 & STBTT_FIXMASK) * max_weight) >> STBTT_FIXSHIFT); + else + j = len; // clip + + for (++i; i < j; ++i) // fill pixels between x0 and x1 + scanline[i] = scanline[i] + (stbtt_uint8) max_weight; + } + } + } + } + + e = e->next; + } +} + +static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata) +{ + stbtt__hheap hh = { 0, 0, 0 }; + stbtt__active_edge *active = NULL; + int y,j=0; + int max_weight = (255 / vsubsample); // weight per vertical scanline + int s; // vertical subsample index + unsigned char scanline_data[512], *scanline; + + if (result->w > 512) + scanline = (unsigned char *) STBTT_malloc(result->w, userdata); + else + scanline = scanline_data; + + y = off_y * vsubsample; + e[n].y0 = (off_y + result->h) * (float) vsubsample + 1; + + while (j < result->h) { + STBTT_memset(scanline, 0, result->w); + for (s=0; s < vsubsample; ++s) { + // find center of pixel for this scanline + float scan_y = y + 0.5f; + stbtt__active_edge **step = &active; + + // update all active edges; + // remove all active edges that terminate before the center of this scanline + while (*step) { + stbtt__active_edge * z = *step; + if (z->ey <= scan_y) { + *step = z->next; // delete from list + STBTT_assert(z->direction); + z->direction = 0; + stbtt__hheap_free(&hh, z); + } else { + z->x += z->dx; // advance to position for current scanline + step = &((*step)->next); // advance through list + } + } + + // resort the list if needed + for(;;) { + int changed=0; + step = &active; + while (*step && (*step)->next) { + if ((*step)->x > (*step)->next->x) { + stbtt__active_edge *t = *step; + stbtt__active_edge *q = t->next; + + t->next = q->next; + q->next = t; + *step = q; + changed = 1; + } + step = &(*step)->next; + } + if (!changed) break; + } + + // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline + while (e->y0 <= scan_y) { + if (e->y1 > scan_y) { + stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y, userdata); + if (z != NULL) { + // find insertion point + if (active == NULL) + active = z; + else if (z->x < active->x) { + // insert at front + z->next = active; + active = z; + } else { + // find thing to insert AFTER + stbtt__active_edge *p = active; + while (p->next && p->next->x < z->x) + p = p->next; + // at this point, p->next->x is NOT < z->x + z->next = p->next; + p->next = z; + } + } + } + ++e; + } + + // now process all active edges in XOR fashion + if (active) + stbtt__fill_active_edges(scanline, result->w, active, max_weight); + + ++y; + } + STBTT_memcpy(result->pixels + j * result->stride, scanline, result->w); + ++j; + } + + stbtt__hheap_cleanup(&hh, userdata); + + if (scanline != scanline_data) + STBTT_free(scanline, userdata); +} + +#elif STBTT_RASTERIZER_VERSION == 2 + +// the edge passed in here does not cross the vertical line at x or the vertical line at x+1 +// (i.e. it has already been clipped to those) +static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__active_edge *e, float x0, float y0, float x1, float y1) +{ + if (y0 == y1) return; + STBTT_assert(y0 < y1); + STBTT_assert(e->sy <= e->ey); + if (y0 > e->ey) return; + if (y1 < e->sy) return; + if (y0 < e->sy) { + x0 += (x1-x0) * (e->sy - y0) / (y1-y0); + y0 = e->sy; + } + if (y1 > e->ey) { + x1 += (x1-x0) * (e->ey - y1) / (y1-y0); + y1 = e->ey; + } + + if (x0 == x) + STBTT_assert(x1 <= x+1); + else if (x0 == x+1) + STBTT_assert(x1 >= x); + else if (x0 <= x) + STBTT_assert(x1 <= x); + else if (x0 >= x+1) + STBTT_assert(x1 >= x+1); + else + STBTT_assert(x1 >= x && x1 <= x+1); + + if (x0 <= x && x1 <= x) + scanline[x] += e->direction * (y1-y0); + else if (x0 >= x+1 && x1 >= x+1) + ; + else { + STBTT_assert(x0 >= x && x0 <= x+1 && x1 >= x && x1 <= x+1); + scanline[x] += e->direction * (y1-y0) * (1-((x0-x)+(x1-x))/2); // coverage = 1 - average x position + } +} + +static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, int len, stbtt__active_edge *e, float y_top) +{ + float y_bottom = y_top+1; + + while (e) { + // brute force every pixel + + // compute intersection points with top & bottom + STBTT_assert(e->ey >= y_top); + + if (e->fdx == 0) { + float x0 = e->fx; + if (x0 < len) { + if (x0 >= 0) { + stbtt__handle_clipped_edge(scanline,(int) x0,e, x0,y_top, x0,y_bottom); + stbtt__handle_clipped_edge(scanline_fill-1,(int) x0+1,e, x0,y_top, x0,y_bottom); + } else { + stbtt__handle_clipped_edge(scanline_fill-1,0,e, x0,y_top, x0,y_bottom); + } + } + } else { + float x0 = e->fx; + float dx = e->fdx; + float xb = x0 + dx; + float x_top, x_bottom; + float sy0,sy1; + float dy = e->fdy; + STBTT_assert(e->sy <= y_bottom && e->ey >= y_top); + + // compute endpoints of line segment clipped to this scanline (if the + // line segment starts on this scanline. x0 is the intersection of the + // line with y_top, but that may be off the line segment. + if (e->sy > y_top) { + x_top = x0 + dx * (e->sy - y_top); + sy0 = e->sy; + } else { + x_top = x0; + sy0 = y_top; + } + if (e->ey < y_bottom) { + x_bottom = x0 + dx * (e->ey - y_top); + sy1 = e->ey; + } else { + x_bottom = xb; + sy1 = y_bottom; + } + + if (x_top >= 0 && x_bottom >= 0 && x_top < len && x_bottom < len) { + // from here on, we don't have to range check x values + + if ((int) x_top == (int) x_bottom) { + float height; + // simple case, only spans one pixel + int x = (int) x_top; + height = sy1 - sy0; + STBTT_assert(x >= 0 && x < len); + scanline[x] += e->direction * (1-((x_top - x) + (x_bottom-x))/2) * height; + scanline_fill[x] += e->direction * height; // everything right of this pixel is filled + } else { + int x,x1,x2; + float y_crossing, step, sign, area; + // covers 2+ pixels + if (x_top > x_bottom) { + // flip scanline vertically; signed area is the same + float t; + sy0 = y_bottom - (sy0 - y_top); + sy1 = y_bottom - (sy1 - y_top); + t = sy0, sy0 = sy1, sy1 = t; + t = x_bottom, x_bottom = x_top, x_top = t; + dx = -dx; + dy = -dy; + t = x0, x0 = xb, xb = t; + } + + x1 = (int) x_top; + x2 = (int) x_bottom; + // compute intersection with y axis at x1+1 + y_crossing = (x1+1 - x0) * dy + y_top; + + sign = e->direction; + // area of the rectangle covered from y0..y_crossing + area = sign * (y_crossing-sy0); + // area of the triangle (x_top,y0), (x+1,y0), (x+1,y_crossing) + scanline[x1] += area * (1-((x_top - x1)+(x1+1-x1))/2); + + step = sign * dy; + for (x = x1+1; x < x2; ++x) { + scanline[x] += area + step/2; + area += step; + } + y_crossing += dy * (x2 - (x1+1)); + + STBTT_assert(STBTT_fabs(area) <= 1.01f); + + scanline[x2] += area + sign * (1-((x2-x2)+(x_bottom-x2))/2) * (sy1-y_crossing); + + scanline_fill[x2] += sign * (sy1-sy0); + } + } else { + // if edge goes outside of box we're drawing, we require + // clipping logic. since this does not match the intended use + // of this library, we use a different, very slow brute + // force implementation + int x; + for (x=0; x < len; ++x) { + // cases: + // + // there can be up to two intersections with the pixel. any intersection + // with left or right edges can be handled by splitting into two (or three) + // regions. intersections with top & bottom do not necessitate case-wise logic. + // + // the old way of doing this found the intersections with the left & right edges, + // then used some simple logic to produce up to three segments in sorted order + // from top-to-bottom. however, this had a problem: if an x edge was epsilon + // across the x border, then the corresponding y position might not be distinct + // from the other y segment, and it might ignored as an empty segment. to avoid + // that, we need to explicitly produce segments based on x positions. + + // rename variables to clear pairs + float y0 = y_top; + float x1 = (float) (x); + float x2 = (float) (x+1); + float x3 = xb; + float y3 = y_bottom; + float y1,y2; + + // x = e->x + e->dx * (y-y_top) + // (y-y_top) = (x - e->x) / e->dx + // y = (x - e->x) / e->dx + y_top + y1 = (x - x0) / dx + y_top; + y2 = (x+1 - x0) / dx + y_top; + + if (x0 < x1 && x3 > x2) { // three segments descending down-right + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); + } else if (x3 < x1 && x0 > x2) { // three segments descending down-left + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); + } else if (x0 < x1 && x3 > x1) { // two segments across x, down-right + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); + } else if (x3 < x1 && x0 > x1) { // two segments across x, down-left + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); + } else if (x0 < x2 && x3 > x2) { // two segments across x+1, down-right + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); + } else if (x3 < x2 && x0 > x2) { // two segments across x+1, down-left + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); + } else { // one segment + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x3,y3); + } + } + } + } + e = e->next; + } +} + +// directly AA rasterize edges w/o supersampling +static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata) +{ + stbtt__hheap hh = { 0, 0, 0 }; + stbtt__active_edge *active = NULL; + int y,j=0, i; + float scanline_data[129], *scanline, *scanline2; + + STBTT__NOTUSED(vsubsample); + + if (result->w > 64) + scanline = (float *) STBTT_malloc((result->w*2+1) * sizeof(float), userdata); + else + scanline = scanline_data; + + scanline2 = scanline + result->w; + + y = off_y; + e[n].y0 = (float) (off_y + result->h) + 1; + + while (j < result->h) { + // find center of pixel for this scanline + float scan_y_top = y + 0.0f; + float scan_y_bottom = y + 1.0f; + stbtt__active_edge **step = &active; + + STBTT_memset(scanline , 0, result->w*sizeof(scanline[0])); + STBTT_memset(scanline2, 0, (result->w+1)*sizeof(scanline[0])); + + // update all active edges; + // remove all active edges that terminate before the top of this scanline + while (*step) { + stbtt__active_edge * z = *step; + if (z->ey <= scan_y_top) { + *step = z->next; // delete from list + STBTT_assert(z->direction); + z->direction = 0; + stbtt__hheap_free(&hh, z); + } else { + step = &((*step)->next); // advance through list + } + } + + // insert all edges that start before the bottom of this scanline + while (e->y0 <= scan_y_bottom) { + if (e->y0 != e->y1) { + stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y_top, userdata); + if (z != NULL) { + STBTT_assert(z->ey >= scan_y_top); + // insert at front + z->next = active; + active = z; + } + } + ++e; + } + + // now process all active edges + if (active) + stbtt__fill_active_edges_new(scanline, scanline2+1, result->w, active, scan_y_top); + + { + float sum = 0; + for (i=0; i < result->w; ++i) { + float k; + int m; + sum += scanline2[i]; + k = scanline[i] + sum; + k = (float) STBTT_fabs(k)*255 + 0.5f; + m = (int) k; + if (m > 255) m = 255; + result->pixels[j*result->stride + i] = (unsigned char) m; + } + } + // advance all the edges + step = &active; + while (*step) { + stbtt__active_edge *z = *step; + z->fx += z->fdx; // advance to position for current scanline + step = &((*step)->next); // advance through list + } + + ++y; + ++j; + } + + stbtt__hheap_cleanup(&hh, userdata); + + if (scanline != scanline_data) + STBTT_free(scanline, userdata); +} +#else +#error "Unrecognized value of STBTT_RASTERIZER_VERSION" +#endif + +#define STBTT__COMPARE(a,b) ((a)->y0 < (b)->y0) + +static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n) +{ + int i,j; + for (i=1; i < n; ++i) { + stbtt__edge t = p[i], *a = &t; + j = i; + while (j > 0) { + stbtt__edge *b = &p[j-1]; + int c = STBTT__COMPARE(a,b); + if (!c) break; + p[j] = p[j-1]; + --j; + } + if (i != j) + p[j] = t; + } +} + +static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n) +{ + /* threshhold for transitioning to insertion sort */ + while (n > 12) { + stbtt__edge t; + int c01,c12,c,m,i,j; + + /* compute median of three */ + m = n >> 1; + c01 = STBTT__COMPARE(&p[0],&p[m]); + c12 = STBTT__COMPARE(&p[m],&p[n-1]); + /* if 0 >= mid >= end, or 0 < mid < end, then use mid */ + if (c01 != c12) { + /* otherwise, we'll need to swap something else to middle */ + int z; + c = STBTT__COMPARE(&p[0],&p[n-1]); + /* 0>mid && midn => n; 0 0 */ + /* 0n: 0>n => 0; 0 n */ + z = (c == c12) ? 0 : n-1; + t = p[z]; + p[z] = p[m]; + p[m] = t; + } + /* now p[m] is the median-of-three */ + /* swap it to the beginning so it won't move around */ + t = p[0]; + p[0] = p[m]; + p[m] = t; + + /* partition loop */ + i=1; + j=n-1; + for(;;) { + /* handling of equality is crucial here */ + /* for sentinels & efficiency with duplicates */ + for (;;++i) { + if (!STBTT__COMPARE(&p[i], &p[0])) break; + } + for (;;--j) { + if (!STBTT__COMPARE(&p[0], &p[j])) break; + } + /* make sure we haven't crossed */ + if (i >= j) break; + t = p[i]; + p[i] = p[j]; + p[j] = t; + + ++i; + --j; + } + /* recurse on smaller side, iterate on larger */ + if (j < (n-i)) { + stbtt__sort_edges_quicksort(p,j); + p = p+i; + n = n-i; + } else { + stbtt__sort_edges_quicksort(p+i, n-i); + n = j; + } + } +} + +static void stbtt__sort_edges(stbtt__edge *p, int n) +{ + stbtt__sort_edges_quicksort(p, n); + stbtt__sort_edges_ins_sort(p, n); +} + +typedef struct +{ + float x,y; +} stbtt__point; + +static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcount, int windings, float scale_x, float scale_y, float shift_x, float shift_y, int off_x, int off_y, int invert, void *userdata) +{ + float y_scale_inv = invert ? -scale_y : scale_y; + stbtt__edge *e; + int n,i,j,k,m; +#if STBTT_RASTERIZER_VERSION == 1 + int vsubsample = result->h < 8 ? 15 : 5; +#elif STBTT_RASTERIZER_VERSION == 2 + int vsubsample = 1; +#else + #error "Unrecognized value of STBTT_RASTERIZER_VERSION" +#endif + // vsubsample should divide 255 evenly; otherwise we won't reach full opacity + + // now we have to blow out the windings into explicit edge lists + n = 0; + for (i=0; i < windings; ++i) + n += wcount[i]; + + e = (stbtt__edge *) STBTT_malloc(sizeof(*e) * (n+1), userdata); // add an extra one as a sentinel + if (e == 0) return; + n = 0; + + m=0; + for (i=0; i < windings; ++i) { + stbtt__point *p = pts + m; + m += wcount[i]; + j = wcount[i]-1; + for (k=0; k < wcount[i]; j=k++) { + int a=k,b=j; + // skip the edge if horizontal + if (p[j].y == p[k].y) + continue; + // add edge from j to k to the list + e[n].invert = 0; + if (invert ? p[j].y > p[k].y : p[j].y < p[k].y) { + e[n].invert = 1; + a=j,b=k; + } + e[n].x0 = p[a].x * scale_x + shift_x; + e[n].y0 = (p[a].y * y_scale_inv + shift_y) * vsubsample; + e[n].x1 = p[b].x * scale_x + shift_x; + e[n].y1 = (p[b].y * y_scale_inv + shift_y) * vsubsample; + ++n; + } + } + + // now sort the edges by their highest point (should snap to integer, and then by x) + //STBTT_sort(e, n, sizeof(e[0]), stbtt__edge_compare); + stbtt__sort_edges(e, n); + + // now, traverse the scanlines and find the intersections on each scanline, use xor winding rule + stbtt__rasterize_sorted_edges(result, e, n, vsubsample, off_x, off_y, userdata); + + STBTT_free(e, userdata); +} + +static void stbtt__add_point(stbtt__point *points, int n, float x, float y) +{ + if (!points) return; // during first pass, it's unallocated + points[n].x = x; + points[n].y = y; +} + +// tesselate until threshhold p is happy... @TODO warped to compensate for non-linear stretching +static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float objspace_flatness_squared, int n) +{ + // midpoint + float mx = (x0 + 2*x1 + x2)/4; + float my = (y0 + 2*y1 + y2)/4; + // versus directly drawn line + float dx = (x0+x2)/2 - mx; + float dy = (y0+y2)/2 - my; + if (n > 16) // 65536 segments on one curve better be enough! + return 1; + if (dx*dx+dy*dy > objspace_flatness_squared) { // half-pixel error allowed... need to be smaller if AA + stbtt__tesselate_curve(points, num_points, x0,y0, (x0+x1)/2.0f,(y0+y1)/2.0f, mx,my, objspace_flatness_squared,n+1); + stbtt__tesselate_curve(points, num_points, mx,my, (x1+x2)/2.0f,(y1+y2)/2.0f, x2,y2, objspace_flatness_squared,n+1); + } else { + stbtt__add_point(points, *num_points,x2,y2); + *num_points = *num_points+1; + } + return 1; +} + +// returns number of contours +static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, float objspace_flatness, int **contour_lengths, int *num_contours, void *userdata) +{ + stbtt__point *points=0; + int num_points=0; + + float objspace_flatness_squared = objspace_flatness * objspace_flatness; + int i,n=0,start=0, pass; + + // count how many "moves" there are to get the contour count + for (i=0; i < num_verts; ++i) + if (vertices[i].type == STBTT_vmove) + ++n; + + *num_contours = n; + if (n == 0) return 0; + + *contour_lengths = (int *) STBTT_malloc(sizeof(**contour_lengths) * n, userdata); + + if (*contour_lengths == 0) { + *num_contours = 0; + return 0; + } + + // make two passes through the points so we don't need to realloc + for (pass=0; pass < 2; ++pass) { + float x=0,y=0; + if (pass == 1) { + points = (stbtt__point *) STBTT_malloc(num_points * sizeof(points[0]), userdata); + if (points == NULL) goto error; + } + num_points = 0; + n= -1; + for (i=0; i < num_verts; ++i) { + switch (vertices[i].type) { + case STBTT_vmove: + // start the next contour + if (n >= 0) + (*contour_lengths)[n] = num_points - start; + ++n; + start = num_points; + + x = vertices[i].x, y = vertices[i].y; + stbtt__add_point(points, num_points++, x,y); + break; + case STBTT_vline: + x = vertices[i].x, y = vertices[i].y; + stbtt__add_point(points, num_points++, x, y); + break; + case STBTT_vcurve: + stbtt__tesselate_curve(points, &num_points, x,y, + vertices[i].cx, vertices[i].cy, + vertices[i].x, vertices[i].y, + objspace_flatness_squared, 0); + x = vertices[i].x, y = vertices[i].y; + break; + } + } + (*contour_lengths)[n] = num_points - start; + } + + return points; +error: + STBTT_free(points, userdata); + STBTT_free(*contour_lengths, userdata); + *contour_lengths = 0; + *num_contours = 0; + return NULL; +} + +STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_pixels, stbtt_vertex *vertices, int num_verts, float scale_x, float scale_y, float shift_x, float shift_y, int x_off, int y_off, int invert, void *userdata) +{ + float scale = scale_x > scale_y ? scale_y : scale_x; + int winding_count, *winding_lengths; + stbtt__point *windings = stbtt_FlattenCurves(vertices, num_verts, flatness_in_pixels / scale, &winding_lengths, &winding_count, userdata); + if (windings) { + stbtt__rasterize(result, windings, winding_lengths, winding_count, scale_x, scale_y, shift_x, shift_y, x_off, y_off, invert, userdata); + STBTT_free(winding_lengths, userdata); + STBTT_free(windings, userdata); + } +} + +STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata) +{ + STBTT_free(bitmap, userdata); +} + +STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff) +{ + int ix0,iy0,ix1,iy1; + stbtt__bitmap gbm; + stbtt_vertex *vertices; + int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); + + if (scale_x == 0) scale_x = scale_y; + if (scale_y == 0) { + if (scale_x == 0) { + STBTT_free(vertices, info->userdata); + return NULL; + } + scale_y = scale_x; + } + + stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,&ix1,&iy1); + + // now we get the size + gbm.w = (ix1 - ix0); + gbm.h = (iy1 - iy0); + gbm.pixels = NULL; // in case we error + + if (width ) *width = gbm.w; + if (height) *height = gbm.h; + if (xoff ) *xoff = ix0; + if (yoff ) *yoff = iy0; + + if (gbm.w && gbm.h) { + gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata); + if (gbm.pixels) { + gbm.stride = gbm.w; + + stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0, iy0, 1, info->userdata); + } + } + STBTT_free(vertices, info->userdata); + return gbm.pixels; +} + +STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y, 0.0f, 0.0f, glyph, width, height, xoff, yoff); +} + +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph) +{ + int ix0,iy0; + stbtt_vertex *vertices; + int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); + stbtt__bitmap gbm; + + stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0); + gbm.pixels = output; + gbm.w = out_w; + gbm.h = out_h; + gbm.stride = out_stride; + + if (gbm.w && gbm.h) + stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0,iy0, 1, info->userdata); + + STBTT_free(vertices, info->userdata); +} + +STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph) +{ + stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, glyph); +} + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff); +} + +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint) +{ + stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, stbtt_FindGlyphIndex(info,codepoint)); +} + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff); +} + +STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint) +{ + stbtt_MakeCodepointBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, codepoint); +} + +////////////////////////////////////////////////////////////////////////////// +// +// bitmap baking +// +// This is SUPER-CRAPPY packing to keep source code small + +static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) + float pixel_height, // height of font in pixels + unsigned char *pixels, int pw, int ph, // bitmap to be filled in + int first_char, int num_chars, // characters to bake + stbtt_bakedchar *chardata) +{ + float scale; + int x,y,bottom_y, i; + stbtt_fontinfo f; + f.userdata = NULL; + if (!stbtt_InitFont(&f, data, offset)) + return -1; + STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels + x=y=1; + bottom_y = 1; + + scale = stbtt_ScaleForPixelHeight(&f, pixel_height); + + for (i=0; i < num_chars; ++i) { + int advance, lsb, x0,y0,x1,y1,gw,gh; + int g = stbtt_FindGlyphIndex(&f, first_char + i); + stbtt_GetGlyphHMetrics(&f, g, &advance, &lsb); + stbtt_GetGlyphBitmapBox(&f, g, scale,scale, &x0,&y0,&x1,&y1); + gw = x1-x0; + gh = y1-y0; + if (x + gw + 1 >= pw) + y = bottom_y, x = 1; // advance to next row + if (y + gh + 1 >= ph) // check if it fits vertically AFTER potentially moving to next row + return -i; + STBTT_assert(x+gw < pw); + STBTT_assert(y+gh < ph); + stbtt_MakeGlyphBitmap(&f, pixels+x+y*pw, gw,gh,pw, scale,scale, g); + chardata[i].x0 = (stbtt_int16) x; + chardata[i].y0 = (stbtt_int16) y; + chardata[i].x1 = (stbtt_int16) (x + gw); + chardata[i].y1 = (stbtt_int16) (y + gh); + chardata[i].xadvance = scale * advance; + chardata[i].xoff = (float) x0; + chardata[i].yoff = (float) y0; + x = x + gw + 1; + if (y+gh+1 > bottom_y) + bottom_y = y+gh+1; + } + return bottom_y; +} + +STBTT_DEF void stbtt_GetBakedQuad(stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule) +{ + float d3d_bias = opengl_fillrule ? 0 : -0.5f; + float ipw = 1.0f / pw, iph = 1.0f / ph; + stbtt_bakedchar *b = chardata + char_index; + int round_x = STBTT_ifloor((*xpos + b->xoff) + 0.5f); + int round_y = STBTT_ifloor((*ypos + b->yoff) + 0.5f); + + q->x0 = round_x + d3d_bias; + q->y0 = round_y + d3d_bias; + q->x1 = round_x + b->x1 - b->x0 + d3d_bias; + q->y1 = round_y + b->y1 - b->y0 + d3d_bias; + + q->s0 = b->x0 * ipw; + q->t0 = b->y0 * iph; + q->s1 = b->x1 * ipw; + q->t1 = b->y1 * iph; + + *xpos += b->xadvance; +} + +////////////////////////////////////////////////////////////////////////////// +// +// rectangle packing replacement routines if you don't have stb_rect_pack.h +// + +#ifndef STB_RECT_PACK_VERSION + +typedef int stbrp_coord; + +//////////////////////////////////////////////////////////////////////////////////// +// // +// // +// COMPILER WARNING ?!?!? // +// // +// // +// if you get a compile warning due to these symbols being defined more than // +// once, move #include "stb_rect_pack.h" before #include "stb_truetype.h" // +// // +//////////////////////////////////////////////////////////////////////////////////// + +typedef struct +{ + int width,height; + int x,y,bottom_y; +} stbrp_context; + +typedef struct +{ + unsigned char x; +} stbrp_node; + +struct stbrp_rect +{ + stbrp_coord x,y; + int id,w,h,was_packed; +}; + +static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *nodes, int num_nodes) +{ + con->width = pw; + con->height = ph; + con->x = 0; + con->y = 0; + con->bottom_y = 0; + STBTT__NOTUSED(nodes); + STBTT__NOTUSED(num_nodes); +} + +static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects) +{ + int i; + for (i=0; i < num_rects; ++i) { + if (con->x + rects[i].w > con->width) { + con->x = 0; + con->y = con->bottom_y; + } + if (con->y + rects[i].h > con->height) + break; + rects[i].x = con->x; + rects[i].y = con->y; + rects[i].was_packed = 1; + con->x += rects[i].w; + if (con->y + rects[i].h > con->bottom_y) + con->bottom_y = con->y + rects[i].h; + } + for ( ; i < num_rects; ++i) + rects[i].was_packed = 0; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// bitmap baking +// +// This is SUPER-AWESOME (tm Ryan Gordon) packing using stb_rect_pack.h. If +// stb_rect_pack.h isn't available, it uses the BakeFontBitmap strategy. + +STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int pw, int ph, int stride_in_bytes, int padding, void *alloc_context) +{ + stbrp_context *context = (stbrp_context *) STBTT_malloc(sizeof(*context) ,alloc_context); + int num_nodes = pw - padding; + stbrp_node *nodes = (stbrp_node *) STBTT_malloc(sizeof(*nodes ) * num_nodes,alloc_context); + + if (context == NULL || nodes == NULL) { + if (context != NULL) STBTT_free(context, alloc_context); + if (nodes != NULL) STBTT_free(nodes , alloc_context); + return 0; + } + + spc->user_allocator_context = alloc_context; + spc->width = pw; + spc->height = ph; + spc->pixels = pixels; + spc->pack_info = context; + spc->nodes = nodes; + spc->padding = padding; + spc->stride_in_bytes = stride_in_bytes != 0 ? stride_in_bytes : pw; + spc->h_oversample = 1; + spc->v_oversample = 1; + + stbrp_init_target(context, pw-padding, ph-padding, nodes, num_nodes); + + if (pixels) + STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels + + return 1; +} + +STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc) +{ + STBTT_free(spc->nodes , spc->user_allocator_context); + STBTT_free(spc->pack_info, spc->user_allocator_context); +} + +STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample) +{ + STBTT_assert(h_oversample <= STBTT_MAX_OVERSAMPLE); + STBTT_assert(v_oversample <= STBTT_MAX_OVERSAMPLE); + if (h_oversample <= STBTT_MAX_OVERSAMPLE) + spc->h_oversample = h_oversample; + if (v_oversample <= STBTT_MAX_OVERSAMPLE) + spc->v_oversample = v_oversample; +} + +#define STBTT__OVER_MASK (STBTT_MAX_OVERSAMPLE-1) + +static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width) +{ + unsigned char buffer[STBTT_MAX_OVERSAMPLE]; + int safe_w = w - kernel_width; + int j; + STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze + for (j=0; j < h; ++j) { + int i; + unsigned int total; + STBTT_memset(buffer, 0, kernel_width); + + total = 0; + + // make kernel_width a constant in common cases so compiler can optimize out the divide + switch (kernel_width) { + case 2: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 2); + } + break; + case 3: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 3); + } + break; + case 4: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 4); + } + break; + case 5: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 5); + } + break; + default: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / kernel_width); + } + break; + } + + for (; i < w; ++i) { + STBTT_assert(pixels[i] == 0); + total -= buffer[i & STBTT__OVER_MASK]; + pixels[i] = (unsigned char) (total / kernel_width); + } + + pixels += stride_in_bytes; + } +} + +static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width) +{ + unsigned char buffer[STBTT_MAX_OVERSAMPLE]; + int safe_h = h - kernel_width; + int j; + STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze + for (j=0; j < w; ++j) { + int i; + unsigned int total; + STBTT_memset(buffer, 0, kernel_width); + + total = 0; + + // make kernel_width a constant in common cases so compiler can optimize out the divide + switch (kernel_width) { + case 2: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 2); + } + break; + case 3: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 3); + } + break; + case 4: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 4); + } + break; + case 5: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 5); + } + break; + default: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width); + } + break; + } + + for (; i < h; ++i) { + STBTT_assert(pixels[i*stride_in_bytes] == 0); + total -= buffer[i & STBTT__OVER_MASK]; + pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width); + } + + pixels += 1; + } +} + +static float stbtt__oversample_shift(int oversample) +{ + if (!oversample) + return 0.0f; + + // The prefilter is a box filter of width "oversample", + // which shifts phase by (oversample - 1)/2 pixels in + // oversampled space. We want to shift in the opposite + // direction to counter this. + return (float)-(oversample - 1) / (2.0f * (float)oversample); +} + +// rects array must be big enough to accommodate all characters in the given ranges +STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) +{ + int i,j,k; + + k=0; + for (i=0; i < num_ranges; ++i) { + float fh = ranges[i].font_size; + float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); + ranges[i].h_oversample = (unsigned char) spc->h_oversample; + ranges[i].v_oversample = (unsigned char) spc->v_oversample; + for (j=0; j < ranges[i].num_chars; ++j) { + int x0,y0,x1,y1; + int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j]; + int glyph = stbtt_FindGlyphIndex(info, codepoint); + stbtt_GetGlyphBitmapBoxSubpixel(info,glyph, + scale * spc->h_oversample, + scale * spc->v_oversample, + 0,0, + &x0,&y0,&x1,&y1); + rects[k].w = (stbrp_coord) (x1-x0 + spc->padding + spc->h_oversample-1); + rects[k].h = (stbrp_coord) (y1-y0 + spc->padding + spc->v_oversample-1); + ++k; + } + } + + return k; +} + +// rects array must be big enough to accommodate all characters in the given ranges +STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) +{ + int i,j,k, return_value = 1; + + // save current values + int old_h_over = spc->h_oversample; + int old_v_over = spc->v_oversample; + + k = 0; + for (i=0; i < num_ranges; ++i) { + float fh = ranges[i].font_size; + float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); + float recip_h,recip_v,sub_x,sub_y; + spc->h_oversample = ranges[i].h_oversample; + spc->v_oversample = ranges[i].v_oversample; + recip_h = 1.0f / spc->h_oversample; + recip_v = 1.0f / spc->v_oversample; + sub_x = stbtt__oversample_shift(spc->h_oversample); + sub_y = stbtt__oversample_shift(spc->v_oversample); + for (j=0; j < ranges[i].num_chars; ++j) { + stbrp_rect *r = &rects[k]; + if (r->was_packed) { + stbtt_packedchar *bc = &ranges[i].chardata_for_range[j]; + int advance, lsb, x0,y0,x1,y1; + int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j]; + int glyph = stbtt_FindGlyphIndex(info, codepoint); + stbrp_coord pad = (stbrp_coord) spc->padding; + + // pad on left and top + r->x += pad; + r->y += pad; + r->w -= pad; + r->h -= pad; + stbtt_GetGlyphHMetrics(info, glyph, &advance, &lsb); + stbtt_GetGlyphBitmapBox(info, glyph, + scale * spc->h_oversample, + scale * spc->v_oversample, + &x0,&y0,&x1,&y1); + stbtt_MakeGlyphBitmapSubpixel(info, + spc->pixels + r->x + r->y*spc->stride_in_bytes, + r->w - spc->h_oversample+1, + r->h - spc->v_oversample+1, + spc->stride_in_bytes, + scale * spc->h_oversample, + scale * spc->v_oversample, + 0,0, + glyph); + + if (spc->h_oversample > 1) + stbtt__h_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes, + r->w, r->h, spc->stride_in_bytes, + spc->h_oversample); + + if (spc->v_oversample > 1) + stbtt__v_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes, + r->w, r->h, spc->stride_in_bytes, + spc->v_oversample); + + bc->x0 = (stbtt_int16) r->x; + bc->y0 = (stbtt_int16) r->y; + bc->x1 = (stbtt_int16) (r->x + r->w); + bc->y1 = (stbtt_int16) (r->y + r->h); + bc->xadvance = scale * advance; + bc->xoff = (float) x0 * recip_h + sub_x; + bc->yoff = (float) y0 * recip_v + sub_y; + bc->xoff2 = (x0 + r->w) * recip_h + sub_x; + bc->yoff2 = (y0 + r->h) * recip_v + sub_y; + } else { + return_value = 0; // if any fail, report failure + } + + ++k; + } + } + + // restore original values + spc->h_oversample = old_h_over; + spc->v_oversample = old_v_over; + + return return_value; +} + +STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects) +{ + stbrp_pack_rects((stbrp_context *) spc->pack_info, rects, num_rects); +} + +STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges) +{ + stbtt_fontinfo info; + int i,j,n, return_value = 1; + //stbrp_context *context = (stbrp_context *) spc->pack_info; + stbrp_rect *rects; + + // flag all characters as NOT packed + for (i=0; i < num_ranges; ++i) + for (j=0; j < ranges[i].num_chars; ++j) + ranges[i].chardata_for_range[j].x0 = + ranges[i].chardata_for_range[j].y0 = + ranges[i].chardata_for_range[j].x1 = + ranges[i].chardata_for_range[j].y1 = 0; + + n = 0; + for (i=0; i < num_ranges; ++i) + n += ranges[i].num_chars; + + rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context); + if (rects == NULL) + return 0; + + info.userdata = spc->user_allocator_context; + stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata,font_index)); + + n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects); + + stbtt_PackFontRangesPackRects(spc, rects, n); + + return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects); + + STBTT_free(rects, spc->user_allocator_context); + return return_value; +} + +STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, unsigned char *fontdata, int font_index, float font_size, + int first_unicode_codepoint_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range) +{ + stbtt_pack_range range; + range.first_unicode_codepoint_in_range = first_unicode_codepoint_in_range; + range.array_of_unicode_codepoints = NULL; + range.num_chars = num_chars_in_range; + range.chardata_for_range = chardata_for_range; + range.font_size = font_size; + return stbtt_PackFontRanges(spc, fontdata, font_index, &range, 1); +} + +STBTT_DEF void stbtt_GetPackedQuad(stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer) +{ + float ipw = 1.0f / pw, iph = 1.0f / ph; + stbtt_packedchar *b = chardata + char_index; + + if (align_to_integer) { + float x = (float) STBTT_ifloor((*xpos + b->xoff) + 0.5f); + float y = (float) STBTT_ifloor((*ypos + b->yoff) + 0.5f); + q->x0 = x; + q->y0 = y; + q->x1 = x + b->xoff2 - b->xoff; + q->y1 = y + b->yoff2 - b->yoff; + } else { + q->x0 = *xpos + b->xoff; + q->y0 = *ypos + b->yoff; + q->x1 = *xpos + b->xoff2; + q->y1 = *ypos + b->yoff2; + } + + q->s0 = b->x0 * ipw; + q->t0 = b->y0 * iph; + q->s1 = b->x1 * ipw; + q->t1 = b->y1 * iph; + + *xpos += b->xadvance; +} + + +////////////////////////////////////////////////////////////////////////////// +// +// font name matching -- recommended not to use this +// + +// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string +static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2) +{ + stbtt_int32 i=0; + + // convert utf16 to utf8 and compare the results while converting + while (len2) { + stbtt_uint16 ch = s2[0]*256 + s2[1]; + if (ch < 0x80) { + if (i >= len1) return -1; + if (s1[i++] != ch) return -1; + } else if (ch < 0x800) { + if (i+1 >= len1) return -1; + if (s1[i++] != 0xc0 + (ch >> 6)) return -1; + if (s1[i++] != 0x80 + (ch & 0x3f)) return -1; + } else if (ch >= 0xd800 && ch < 0xdc00) { + stbtt_uint32 c; + stbtt_uint16 ch2 = s2[2]*256 + s2[3]; + if (i+3 >= len1) return -1; + c = ((ch - 0xd800) << 10) + (ch2 - 0xdc00) + 0x10000; + if (s1[i++] != 0xf0 + (c >> 18)) return -1; + if (s1[i++] != 0x80 + ((c >> 12) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((c >> 6) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((c ) & 0x3f)) return -1; + s2 += 2; // plus another 2 below + len2 -= 2; + } else if (ch >= 0xdc00 && ch < 0xe000) { + return -1; + } else { + if (i+2 >= len1) return -1; + if (s1[i++] != 0xe0 + (ch >> 12)) return -1; + if (s1[i++] != 0x80 + ((ch >> 6) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((ch ) & 0x3f)) return -1; + } + s2 += 2; + len2 -= 2; + } + return i; +} + +static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2) +{ + return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((stbtt_uint8*) s1, len1, (stbtt_uint8*) s2, len2); +} + +// returns results in whatever encoding you request... but note that 2-byte encodings +// will be BIG-ENDIAN... use stbtt_CompareUTF8toUTF16_bigendian() to compare +STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID) +{ + stbtt_int32 i,count,stringOffset; + stbtt_uint8 *fc = font->data; + stbtt_uint32 offset = font->fontstart; + stbtt_uint32 nm = stbtt__find_table(fc, offset, "name"); + if (!nm) return NULL; + + count = ttUSHORT(fc+nm+2); + stringOffset = nm + ttUSHORT(fc+nm+4); + for (i=0; i < count; ++i) { + stbtt_uint32 loc = nm + 6 + 12 * i; + if (platformID == ttUSHORT(fc+loc+0) && encodingID == ttUSHORT(fc+loc+2) + && languageID == ttUSHORT(fc+loc+4) && nameID == ttUSHORT(fc+loc+6)) { + *length = ttUSHORT(fc+loc+8); + return (const char *) (fc+stringOffset+ttUSHORT(fc+loc+10)); + } + } + return NULL; +} + +static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint8 *name, stbtt_int32 nlen, stbtt_int32 target_id, stbtt_int32 next_id) +{ + stbtt_int32 i; + stbtt_int32 count = ttUSHORT(fc+nm+2); + stbtt_int32 stringOffset = nm + ttUSHORT(fc+nm+4); + + for (i=0; i < count; ++i) { + stbtt_uint32 loc = nm + 6 + 12 * i; + stbtt_int32 id = ttUSHORT(fc+loc+6); + if (id == target_id) { + // find the encoding + stbtt_int32 platform = ttUSHORT(fc+loc+0), encoding = ttUSHORT(fc+loc+2), language = ttUSHORT(fc+loc+4); + + // is this a Unicode encoding? + if (platform == 0 || (platform == 3 && encoding == 1) || (platform == 3 && encoding == 10)) { + stbtt_int32 slen = ttUSHORT(fc+loc+8); + stbtt_int32 off = ttUSHORT(fc+loc+10); + + // check if there's a prefix match + stbtt_int32 matchlen = stbtt__CompareUTF8toUTF16_bigendian_prefix(name, nlen, fc+stringOffset+off,slen); + if (matchlen >= 0) { + // check for target_id+1 immediately following, with same encoding & language + if (i+1 < count && ttUSHORT(fc+loc+12+6) == next_id && ttUSHORT(fc+loc+12) == platform && ttUSHORT(fc+loc+12+2) == encoding && ttUSHORT(fc+loc+12+4) == language) { + slen = ttUSHORT(fc+loc+12+8); + off = ttUSHORT(fc+loc+12+10); + if (slen == 0) { + if (matchlen == nlen) + return 1; + } else if (matchlen < nlen && name[matchlen] == ' ') { + ++matchlen; + if (stbtt_CompareUTF8toUTF16_bigendian_internal((char*) (name+matchlen), nlen-matchlen, (char*)(fc+stringOffset+off),slen)) + return 1; + } + } else { + // if nothing immediately following + if (matchlen == nlen) + return 1; + } + } + } + + // @TODO handle other encodings + } + } + return 0; +} + +static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_uint8 *name, stbtt_int32 flags) +{ + stbtt_int32 nlen = (stbtt_int32) STBTT_strlen((char *) name); + stbtt_uint32 nm,hd; + if (!stbtt__isfont(fc+offset)) return 0; + + // check italics/bold/underline flags in macStyle... + if (flags) { + hd = stbtt__find_table(fc, offset, "head"); + if ((ttUSHORT(fc+hd+44) & 7) != (flags & 7)) return 0; + } + + nm = stbtt__find_table(fc, offset, "name"); + if (!nm) return 0; + + if (flags) { + // if we checked the macStyle flags, then just check the family and ignore the subfamily + if (stbtt__matchpair(fc, nm, name, nlen, 16, -1)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 1, -1)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; + } else { + if (stbtt__matchpair(fc, nm, name, nlen, 16, 17)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 1, 2)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; + } + + return 0; +} + +static int stbtt_FindMatchingFont_internal(unsigned char *font_collection, char *name_utf8, stbtt_int32 flags) +{ + stbtt_int32 i; + for (i=0;;++i) { + stbtt_int32 off = stbtt_GetFontOffsetForIndex(font_collection, i); + if (off < 0) return off; + if (stbtt__matches((stbtt_uint8 *) font_collection, off, (stbtt_uint8*) name_utf8, flags)) + return off; + } +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" +#endif + +STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, + float pixel_height, unsigned char *pixels, int pw, int ph, + int first_char, int num_chars, stbtt_bakedchar *chardata) +{ + return stbtt_BakeFontBitmap_internal((unsigned char *) data, offset, pixel_height, pixels, pw, ph, first_char, num_chars, chardata); +} + +STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index) +{ + return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index); +} + +STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset) +{ + return stbtt_InitFont_internal(info, (unsigned char *) data, offset); +} + +STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags) +{ + return stbtt_FindMatchingFont_internal((unsigned char *) fontdata, (char *) name, flags); +} + +STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2) +{ + return stbtt_CompareUTF8toUTF16_bigendian_internal((char *) s1, len1, (char *) s2, len2); +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif + +#endif // STB_TRUETYPE_IMPLEMENTATION + + +// FULL VERSION HISTORY +// +// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual +// 1.11 (2016-04-02) fix unused-variable warning +// 1.10 (2016-04-02) allow user-defined fabs() replacement +// fix memory leak if fontsize=0.0 +// fix warning from duplicate typedef +// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use alloc userdata for PackFontRanges +// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges +// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints; +// allow PackFontRanges to pack and render in separate phases; +// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?); +// fixed an assert() bug in the new rasterizer +// replace assert() with STBTT_assert() in new rasterizer +// 1.06 (2015-07-14) performance improvements (~35% faster on x86 and x64 on test machine) +// also more precise AA rasterizer, except if shapes overlap +// remove need for STBTT_sort +// 1.05 (2015-04-15) fix misplaced definitions for STBTT_STATIC +// 1.04 (2015-04-15) typo in example +// 1.03 (2015-04-12) STBTT_STATIC, fix memory leak in new packing, various fixes +// 1.02 (2014-12-10) fix various warnings & compile issues w/ stb_rect_pack, C++ +// 1.01 (2014-12-08) fix subpixel position when oversampling to exactly match +// non-oversampled; STBTT_POINT_SIZE for packed case only +// 1.00 (2014-12-06) add new PackBegin etc. API, w/ support for oversampling +// 0.99 (2014-09-18) fix multiple bugs with subpixel rendering (ryg) +// 0.9 (2014-08-07) support certain mac/iOS fonts without an MS platformID +// 0.8b (2014-07-07) fix a warning +// 0.8 (2014-05-25) fix a few more warnings +// 0.7 (2013-09-25) bugfix: subpixel glyph bug fixed in 0.5 had come back +// 0.6c (2012-07-24) improve documentation +// 0.6b (2012-07-20) fix a few more warnings +// 0.6 (2012-07-17) fix warnings; added stbtt_ScaleForMappingEmToPixels, +// stbtt_GetFontBoundingBox, stbtt_IsGlyphEmpty +// 0.5 (2011-12-09) bugfixes: +// subpixel glyph renderer computed wrong bounding box +// first vertex of shape can be off-curve (FreeSans) +// 0.4b (2011-12-03) fixed an error in the font baking example +// 0.4 (2011-12-01) kerning, subpixel rendering (tor) +// bugfixes for: +// codepoint-to-glyph conversion using table fmt=12 +// codepoint-to-glyph conversion using table fmt=4 +// stbtt_GetBakedQuad with non-square texture (Zer) +// updated Hello World! sample to use kerning and subpixel +// fixed some warnings +// 0.3 (2009-06-24) cmap fmt=12, compound shapes (MM) +// userdata, malloc-from-userdata, non-zero fill (stb) +// 0.2 (2009-03-11) Fix unsigned/signed char warnings +// 0.1 (2009-03-09) First public release +// diff --git a/lib/imgui_sdl/imgui_impl_sdl.cpp b/lib/imgui_sdl/imgui_impl_sdl.cpp new file mode 100644 index 0000000..b96942d --- /dev/null +++ b/lib/imgui_sdl/imgui_impl_sdl.cpp @@ -0,0 +1,399 @@ +// ImGui SDL2 binding with OpenGL +// You can copy and use unmodified imgui_impl_* files in your project. +// If you use this binding you'll need to call 4 functions: ImGui_ImplXXXX_Init(), ImGui_ImplXXXX_NewFrame(), ImGui::Render() and ImGui_ImplXXXX_Shutdown(). +// See main.cpp for an example of using this. +// https://github.com/ocornut/imgui + +#include +#ifdef __EMSCRIPTEN__ +#include "emscripten.h" +#include +#else +#include +#include +#include +#endif +#include "imgui.h" +#include "imgui_impl_sdl.h" + +// Data +static double g_Time = 0.0f; +static bool g_FingerPressed = false; +static bool g_FingerMotion = false; +static float g_FingerX = -1; +static float g_FingerY = -1; +static bool g_MousePressed[3] = { false, false, false }; +static float g_MouseWheel = 0.0f; +static GLuint g_FontTexture = 0; +static int g_ShaderHandle = 0, g_VertHandle = 0, g_FragHandle = 0; +static int g_AttribLocationTex = 0, g_AttribLocationProjMtx = 0; +static int g_AttribLocationPosition = 0, g_AttribLocationUV = 0, g_AttribLocationColor = 0; +static unsigned int g_VboHandle = 0, g_ElementsHandle = 0; + +// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) +// If text or lines are blurry when integrating ImGui in your engine: +// - in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) +void ImGui_ImplSdl_RenderDrawLists(ImDrawData* draw_data) { + // Backup GL state + GLint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, &last_program); + GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); + GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); + GLint last_element_array_buffer; glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &last_element_array_buffer); + GLboolean last_enable_blend = glIsEnabled(GL_BLEND); + GLboolean last_enable_cull_face = glIsEnabled(GL_CULL_FACE); + GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST); + GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST); + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + glEnable(GL_BLEND); + glBlendEquation(GL_FUNC_ADD); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glDisable(GL_CULL_FACE); + glDisable(GL_DEPTH_TEST); + glEnable(GL_SCISSOR_TEST); + glActiveTexture(GL_TEXTURE0); + + // Handle cases of screen coordinates != from framebuffer coordinates (e.g. retina displays) + ImGuiIO& io = ImGui::GetIO(); + float fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + draw_data->ScaleClipRects(io.DisplayFramebufferScale); + + // Setup orthographic projection matrix + const float ortho_projection[4][4] = + { + { 2.0f / io.DisplaySize.x, 0.0f, 0.0f, 0.0f }, + { 0.0f, 2.0f / -io.DisplaySize.y, 0.0f, 0.0f }, + { 0.0f, 0.0f, -1.0f, 0.0f }, + { -1.0f, 1.0f, 0.0f, 1.0f }, + }; + glUseProgram(g_ShaderHandle); + glUniform1i(g_AttribLocationTex, 0); + glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]); + + for (int n = 0; n < draw_data->CmdListsCount; n++) { + const ImDrawList* cmd_list = draw_data->CmdLists[n]; + const ImDrawIdx* idx_buffer_offset = 0; + + glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle); + glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)cmd_list->VtxBuffer.size() * sizeof(ImDrawVert), (GLvoid*)&cmd_list->VtxBuffer.front(), GL_STREAM_DRAW); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)cmd_list->IdxBuffer.size() * sizeof(ImDrawIdx), (GLvoid*)&cmd_list->IdxBuffer.front(), GL_STREAM_DRAW); + + glEnableVertexAttribArray(g_AttribLocationPosition); + glEnableVertexAttribArray(g_AttribLocationUV); + glEnableVertexAttribArray(g_AttribLocationColor); + +#define OFFSETOF(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT)) + glVertexAttribPointer(g_AttribLocationPosition, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, pos)); + glVertexAttribPointer(g_AttribLocationUV, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, uv)); + glVertexAttribPointer(g_AttribLocationColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, col)); +#undef OFFSETOF + for (const ImDrawCmd* pcmd = cmd_list->CmdBuffer.begin(); pcmd != cmd_list->CmdBuffer.end(); pcmd++) { + if (pcmd->UserCallback) { + pcmd->UserCallback(cmd_list, pcmd); + } else { + glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId); + glScissor((int)pcmd->ClipRect.x, (int)(fb_height - pcmd->ClipRect.w), (int)(pcmd->ClipRect.z - pcmd->ClipRect.x), (int)(pcmd->ClipRect.w - pcmd->ClipRect.y)); + glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, GL_UNSIGNED_SHORT, idx_buffer_offset); + } + idx_buffer_offset += pcmd->ElemCount; + } + } + + // Restore modified GL state + glUseProgram(last_program); + glBindTexture(GL_TEXTURE_2D, last_texture); + glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + if (last_enable_blend) glEnable(GL_BLEND); else glDisable(GL_BLEND); + if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE); + if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST); + if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST); +} + +static const char* ImGui_ImplSdl_GetClipboardText(void *) { + return SDL_GetClipboardText(); +} + +static void ImGui_ImplSdl_SetClipboardText(void *, const char* text) { + SDL_SetClipboardText(text); +} + +void ImGui_ImplSdl_ProcessEvents(bool* quitFlag) { + SDL_Event event; + while (SDL_PollEvent(&event)) { + ImGui_ImplSdl_ProcessEvent(&event); + if (event.type == SDL_QUIT) { + *quitFlag = false; + } + } +} + +bool ImGui_ImplSdl_ProcessEvent(SDL_Event* event) { + ImGuiIO& io = ImGui::GetIO(); + switch (event->type) { + case SDL_MOUSEWHEEL: { + if (event->wheel.y > 0) { + g_MouseWheel = 1; + } else if (event->wheel.y < 0) { + g_MouseWheel = -1; + } + return true; + } + case SDL_FINGERMOTION: { + g_FingerMotion = true; + g_FingerX = event->tfinger.x; + g_FingerY = event->tfinger.y; + return true; + } + case SDL_FINGERDOWN: { + g_FingerPressed = true; + g_FingerMotion = true; + g_FingerX = event->tfinger.x; + g_FingerY = event->tfinger.y; + return true; + } + case SDL_FINGERUP: { + g_FingerPressed = false; + return true; + } + case SDL_MOUSEBUTTONDOWN: { + if (event->button.button == SDL_BUTTON_LEFT) g_MousePressed[0] = true; + if (event->button.button == SDL_BUTTON_RIGHT) g_MousePressed[1] = true; + if (event->button.button == SDL_BUTTON_MIDDLE) g_MousePressed[2] = true; + return true; + } + case SDL_TEXTINPUT: { + ImGuiIO& io = ImGui::GetIO(); + io.AddInputCharactersUTF8(event->text.text); + return true; + } + case SDL_KEYDOWN: + case SDL_KEYUP: { + int key = event->key.keysym.sym & ~SDLK_SCANCODE_MASK; + io.KeysDown[key] = (event->type == SDL_KEYDOWN); + io.KeyShift = ((SDL_GetModState() & KMOD_SHIFT) != 0); + io.KeyCtrl = ((SDL_GetModState() & KMOD_CTRL) != 0); + io.KeyAlt = ((SDL_GetModState() & KMOD_ALT) != 0); + return true; + } + } + return false; +} + +void ImGui_ImplSdl_CreateFontsTexture() { + ImGuiIO& io = ImGui::GetIO(); + + // Build texture atlas + unsigned char* pixels; + int width, height; + io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + + // Create OpenGL texture + glGenTextures(1, &g_FontTexture); + glBindTexture(GL_TEXTURE_2D, g_FontTexture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts->TexID = (void *)(intptr_t)g_FontTexture; + + // Cleanup (don't clear the input data if you want to append new fonts later) + io.Fonts->ClearInputData(); + io.Fonts->ClearTexData(); +} + + +bool ImGui_ImplSdl_CreateDeviceObjects() +{ + // Backup GL state + GLint last_texture, last_array_buffer; + glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); + glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); + + const GLchar *vertex_shader = +#ifdef __EMSCRIPTEN__ + "precision highp float;\n" +#endif + "uniform mat4 ProjMtx;\n" + "attribute vec2 Position;\n" + "attribute vec2 UV;\n" + "attribute vec4 Color;\n" + "varying vec2 Frag_UV;\n" + "varying vec4 Frag_Color;\n" + "void main()\n" + "{\n" + " Frag_UV = UV;\n" + " Frag_Color = Color;\n" + " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" + "}\n"; + + const GLchar* fragment_shader = +#ifdef __EMSCRIPTEN__ + "precision mediump float;\n" +#endif + "uniform sampler2D Texture;\n" + "varying vec2 Frag_UV;\n" + "varying vec4 Frag_Color;\n" + "void main()\n" + "{\n" + " gl_FragColor = Frag_Color * texture2D( Texture, Frag_UV.st);\n" + "}\n"; + + g_ShaderHandle = glCreateProgram(); + g_VertHandle = glCreateShader(GL_VERTEX_SHADER); + g_FragHandle = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(g_VertHandle, 1, &vertex_shader, 0); + glShaderSource(g_FragHandle, 1, &fragment_shader, 0); + glCompileShader(g_VertHandle); + glCompileShader(g_FragHandle); + glAttachShader(g_ShaderHandle, g_VertHandle); + glAttachShader(g_ShaderHandle, g_FragHandle); + glLinkProgram(g_ShaderHandle); + + g_AttribLocationTex = glGetUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = glGetUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = glGetAttribLocation(g_ShaderHandle, "Position"); + g_AttribLocationUV = glGetAttribLocation(g_ShaderHandle, "UV"); + g_AttribLocationColor = glGetAttribLocation(g_ShaderHandle, "Color"); + + glGenBuffers(1, &g_VboHandle); + glGenBuffers(1, &g_ElementsHandle); + + glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle); + glEnableVertexAttribArray(g_AttribLocationPosition); + glEnableVertexAttribArray(g_AttribLocationUV); + glEnableVertexAttribArray(g_AttribLocationColor); + +#define OFFSETOF(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT)) + glVertexAttribPointer(g_AttribLocationPosition, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, pos)); + glVertexAttribPointer(g_AttribLocationUV, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, uv)); + glVertexAttribPointer(g_AttribLocationColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)OFFSETOF(ImDrawVert, col)); +#undef OFFSETOF + + ImGui_ImplSdl_CreateFontsTexture(); + + // Restore modified GL state + glBindTexture(GL_TEXTURE_2D, last_texture); + glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); + + return true; +} + +void ImGui_ImplSdl_InvalidateDeviceObjects() { + if (g_FontTexture) { + glDeleteTextures(1, &g_FontTexture); + ImGui::GetIO().Fonts->TexID = 0; + g_FontTexture = 0; + } +} + +bool ImGui_ImplSdl_Init(SDL_Window *window) +{ + ImGuiIO& io = ImGui::GetIO(); + io.KeyMap[ImGuiKey_Tab] = SDLK_TAB; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey_LeftArrow] = SDL_SCANCODE_LEFT; + io.KeyMap[ImGuiKey_RightArrow] = SDL_SCANCODE_RIGHT; + io.KeyMap[ImGuiKey_UpArrow] = SDL_SCANCODE_UP; + io.KeyMap[ImGuiKey_DownArrow] = SDL_SCANCODE_DOWN; + io.KeyMap[ImGuiKey_PageUp] = SDL_SCANCODE_PAGEUP; + io.KeyMap[ImGuiKey_PageDown] = SDL_SCANCODE_PAGEDOWN; + io.KeyMap[ImGuiKey_Home] = SDL_SCANCODE_HOME; + io.KeyMap[ImGuiKey_End] = SDL_SCANCODE_END; + io.KeyMap[ImGuiKey_Delete] = SDLK_DELETE; + io.KeyMap[ImGuiKey_Backspace] = SDLK_BACKSPACE; + io.KeyMap[ImGuiKey_Enter] = SDLK_RETURN; + io.KeyMap[ImGuiKey_Escape] = SDLK_ESCAPE; + io.KeyMap[ImGuiKey_A] = SDLK_a; + io.KeyMap[ImGuiKey_C] = SDLK_c; + io.KeyMap[ImGuiKey_V] = SDLK_v; + io.KeyMap[ImGuiKey_X] = SDLK_x; + io.KeyMap[ImGuiKey_Y] = SDLK_y; + io.KeyMap[ImGuiKey_Z] = SDLK_z; + + io.RenderDrawListsFn = ImGui_ImplSdl_RenderDrawLists; // Alternatively you can set this to NULL and call ImGui::GetDrawData() after ImGui::Render() to get the same ImDrawData pointer. + io.SetClipboardTextFn = ImGui_ImplSdl_SetClipboardText; + io.GetClipboardTextFn = ImGui_ImplSdl_GetClipboardText; + +#ifdef _WIN32 + SDL_SysWMinfo wmInfo; + SDL_VERSION(&wmInfo.version); + SDL_GetWindowWMInfo(window, &wmInfo); + io.ImeWindowHandle = wmInfo.info.win.window; +#endif + + return true; +} + +void ImGui_ImplSdl_Shutdown() { + ImGui_ImplSdl_InvalidateDeviceObjects(); + ImGui::Shutdown(); +} + +int cc = 0; + +void ImGui_ImplSdl_NewFrame(SDL_Window *window) +{ + if (!g_FontTexture) { + ImGui_ImplSdl_CreateDeviceObjects(); + } + + ImGuiIO& io = ImGui::GetIO(); + + // Setup display size (every frame to accommodate for window resizing) + int w, h; + SDL_GetWindowSize(window, &w, &h); + cc++; + if (cc > 500) { + printf("canvas w: %d h: %d\n",w,h); + cc = 0; + } + io.DisplaySize = ImVec2((float)w, (float)h); + + // Setup time step + Uint32 time = SDL_GetTicks(); + double current_time = time / 1000.0; + io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f); + g_Time = current_time; + + // Setup inputs + // (we already got mouse wheel, keyboard keys & characters from glfw callbacks polled in glfwPollEvents()) + int mx, my; + Uint32 mouseMask = SDL_GetMouseState(&mx, &my); + //printf("flags: 0x%.8X\n",SDL_GetWindowFlags(window)); + if (SDL_GetWindowFlags(window) & SDL_WINDOW_MOUSE_FOCUS) { + io.MousePos = ImVec2((float)mx, (float)my); // Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.) + } else { + io.MousePos = ImVec2(-1,-1); + } + if (g_FingerX != -1) { + io.MousePos = ImVec2(g_FingerX * ImGui::GetIO().DisplaySize.x, g_FingerY * ImGui::GetIO().DisplaySize.y); + } + + io.MouseDown[0] = g_MousePressed[0] || (mouseMask & SDL_BUTTON(SDL_BUTTON_LEFT)) != 0; // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame. + io.MouseDown[1] = g_MousePressed[1] || (mouseMask & SDL_BUTTON(SDL_BUTTON_RIGHT)) != 0; + io.MouseDown[2] = g_MousePressed[2] || (mouseMask & SDL_BUTTON(SDL_BUTTON_MIDDLE)) != 0; + g_MousePressed[0] = g_MousePressed[1] = g_MousePressed[2] = false; + + //printf("mousePos x: %f y: %f\n", io.MousePos.x, io.MousePos.y); + if (g_FingerPressed) { + io.MouseDown[0] = true; + } + if (g_FingerMotion || g_FingerPressed) { + //io.MousePos = ImVec2(g_FingerX * ImGui::GetIO().DisplaySize.x,g_FingerY * ImGui::GetIO().DisplaySize.y); + g_FingerMotion = false; + printf("touchPos x: %f(%f) y: %f(%f)\n", io.MousePos.x,g_FingerX, io.MousePos.y, g_FingerY); + } + + + io.MouseWheel = g_MouseWheel; + g_MouseWheel = 0.0f; + + // Hide OS mouse cursor if ImGui is drawing it + SDL_ShowCursor(io.MouseDrawCursor ? 0 : 1); + + // Start the frame + ImGui::NewFrame(); +} diff --git a/lib/imgui_sdl/imgui_impl_sdl.h b/lib/imgui_sdl/imgui_impl_sdl.h new file mode 100644 index 0000000..834321a --- /dev/null +++ b/lib/imgui_sdl/imgui_impl_sdl.h @@ -0,0 +1,18 @@ +// ImGui SDL2 binding with OpenGL +// You can copy and use unmodified imgui_impl_* files in your project. +// If you use this binding you'll need to call 4 functions: ImGui_ImplXXXX_Init(), ImGui_ImplXXXX_NewFrame(), ImGui::Render() and ImGui_ImplXXXX_Shutdown(). +// See main.cpp for an example of using this. +// https://github.com/ocornut/imgui + +struct SDL_Window; +typedef union SDL_Event SDL_Event; + +IMGUI_API bool ImGui_ImplSdl_Init(SDL_Window *window); +IMGUI_API void ImGui_ImplSdl_Shutdown(); +IMGUI_API void ImGui_ImplSdl_NewFrame(SDL_Window *window); +IMGUI_API bool ImGui_ImplSdl_ProcessEvent(SDL_Event* event); +IMGUI_API void ImGui_ImplSdl_ProcessEvents(bool* quitFlag); + +// Use if you want to reset your rendering device without losing ImGui state. +IMGUI_API void ImGui_ImplSdl_InvalidateDeviceObjects(); +IMGUI_API bool ImGui_ImplSdl_CreateDeviceObjects(); diff --git a/lib/soil2/SOIL.c b/lib/soil2/SOIL.c new file mode 100644 index 0000000..06a345a --- /dev/null +++ b/lib/soil2/SOIL.c @@ -0,0 +1,2040 @@ +/* + Jonathan Dummer + 2007-07-26-10.36 + + Simple OpenGL Image Library + + Public Domain + using Sean Barret's stb_image as a base + + Thanks to: + * Sean Barret - for the awesome stb_image + * Dan Venkitachalam - for finding some non-compliant DDS files, and patching some explicit casts + * everybody at gamedev.net +*/ + +#define SOIL_CHECK_FOR_GL_ERRORS 0 + +#ifdef _WIN64 + #define WIN64_LEAN_AND_MEAN + #include + #include + #include +#elif defined _WIN32 + #define WIN32_LEAN_AND_MEAN + #include + #include + #include +#elif defined(__APPLE__) || defined(__APPLE_CC__) + /* I can't test this Apple stuff! */ + #include + #include + #define APIENTRY +#elif defined(__ANDROID__) + #include + #define APIENTRY +#elif defined(__EMSCRIPTEN__) + #include +#else + #include + #include +#endif + +#include "SOIL.h" +#include "stb_image_aug.h" +#include "image_helper.h" +#include "image_DXT.h" + +#include +#include + +/* error reporting */ +char *result_string_pointer = "SOIL initialized"; + +/* for loading cube maps */ +enum{ + SOIL_CAPABILITY_UNKNOWN = -1, + SOIL_CAPABILITY_NONE = 0, + SOIL_CAPABILITY_PRESENT = 1 +}; +static int has_cubemap_capability = SOIL_CAPABILITY_UNKNOWN; +int query_cubemap_capability( void ); +#define SOIL_TEXTURE_WRAP_R 0x8072 +#define SOIL_CLAMP_TO_EDGE 0x812F +#define SOIL_NORMAL_MAP 0x8511 +#define SOIL_REFLECTION_MAP 0x8512 +#define SOIL_TEXTURE_CUBE_MAP 0x8513 +#define SOIL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define SOIL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define SOIL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +/* for non-power-of-two texture */ +static int has_NPOT_capability = SOIL_CAPABILITY_UNKNOWN; +int query_NPOT_capability( void ); +/* for texture rectangles */ +static int has_tex_rectangle_capability = SOIL_CAPABILITY_UNKNOWN; +int query_tex_rectangle_capability( void ); +#define SOIL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define SOIL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +/* for using DXT compression */ +static int has_DXT_capability = SOIL_CAPABILITY_UNKNOWN; +int query_DXT_capability( void ); +#define SOIL_RGB_S3TC_DXT1 0x83F0 +#define SOIL_RGBA_S3TC_DXT1 0x83F1 +#define SOIL_RGBA_S3TC_DXT3 0x83F2 +#define SOIL_RGBA_S3TC_DXT5 0x83F3 +typedef void (APIENTRY * P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); +P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC soilGlCompressedTexImage2D = NULL; +unsigned int SOIL_direct_load_DDS( + const char *filename, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ); +unsigned int SOIL_direct_load_DDS_from_memory( + const unsigned char *const buffer, + int buffer_length, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ); +/* other functions */ +unsigned int + SOIL_internal_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags, + unsigned int opengl_texture_type, + unsigned int opengl_texture_target, + unsigned int texture_check_size_enum + ); + +/* and the code magic begins here [8^) */ +unsigned int + SOIL_load_OGL_texture + ( + const char *filename, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS( filename, reuse_texture_ID, flags, 0 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* try to load the image */ + img = SOIL_load_image( filename, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* OK, make it a texture! */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_HDR_texture + ( + const char *filename, + int fake_HDR_format, + int rescale_to_max, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* no direct uploading of the image as a DDS file */ + /* error check */ + if( (fake_HDR_format != SOIL_HDR_RGBE) && + (fake_HDR_format != SOIL_HDR_RGBdivA) && + (fake_HDR_format != SOIL_HDR_RGBdivA2) ) + { + result_string_pointer = "Invalid fake HDR format specified"; + return 0; + } + /* try to load the image (only the HDR type) */ + img = stbi_hdr_load_rgbe( filename, &width, &height, &channels, 4 ); + /* channels holds the original number of channels, which may have been forced */ + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* the load worked, do I need to convert it? */ + if( fake_HDR_format == SOIL_HDR_RGBdivA ) + { + RGBE_to_RGBdivA( img, width, height, rescale_to_max ); + } else if( fake_HDR_format == SOIL_HDR_RGBdivA2 ) + { + RGBE_to_RGBdivA2( img, width, height, rescale_to_max ); + } + /* OK, make it a texture! */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_texture_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS_from_memory( + buffer, buffer_length, + reuse_texture_ID, flags, 0 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* try to load the image */ + img = SOIL_load_image_from_memory( + buffer, buffer_length, + &width, &height, &channels, + force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* OK, make it a texture! */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_cubemap + ( + const char *x_pos_file, + const char *x_neg_file, + const char *y_pos_file, + const char *y_neg_file, + const char *z_pos_file, + const char *z_neg_file, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* error checking */ + if( (x_pos_file == NULL) || + (x_neg_file == NULL) || + (y_pos_file == NULL) || + (y_neg_file == NULL) || + (z_pos_file == NULL) || + (z_neg_file == NULL) ) + { + result_string_pointer = "Invalid cube map files list"; + return 0; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st face: try to load the image */ + img = SOIL_load_image( x_pos_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, and create a texture ID if necessary */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( x_neg_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( y_pos_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( y_neg_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( z_pos_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( z_neg_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_cubemap_from_memory + ( + const unsigned char *const x_pos_buffer, + int x_pos_buffer_length, + const unsigned char *const x_neg_buffer, + int x_neg_buffer_length, + const unsigned char *const y_pos_buffer, + int y_pos_buffer_length, + const unsigned char *const y_neg_buffer, + int y_neg_buffer_length, + const unsigned char *const z_pos_buffer, + int z_pos_buffer_length, + const unsigned char *const z_neg_buffer, + int z_neg_buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* error checking */ + if( (x_pos_buffer == NULL) || + (x_neg_buffer == NULL) || + (y_pos_buffer == NULL) || + (y_neg_buffer == NULL) || + (z_pos_buffer == NULL) || + (z_neg_buffer == NULL) ) + { + result_string_pointer = "Invalid cube map buffers list"; + return 0; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + x_pos_buffer, x_pos_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, and create a texture ID if necessary */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + x_neg_buffer, x_neg_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + y_pos_buffer, y_pos_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + y_neg_buffer, y_neg_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + z_pos_buffer, z_pos_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + z_neg_buffer, z_neg_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_single_cubemap + ( + const char *filename, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels, i; + unsigned int tex_id = 0; + /* error checking */ + if( filename == NULL ) + { + result_string_pointer = "Invalid single cube map file name"; + return 0; + } + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS( filename, reuse_texture_ID, flags, 1 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* face order checking */ + for( i = 0; i < 6; ++i ) + { + if( (face_order[i] != 'N') && + (face_order[i] != 'S') && + (face_order[i] != 'W') && + (face_order[i] != 'E') && + (face_order[i] != 'U') && + (face_order[i] != 'D') ) + { + result_string_pointer = "Invalid single cube map face order"; + return 0; + }; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st off, try to load the full image */ + img = SOIL_load_image( filename, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* now, does this image have the right dimensions? */ + if( (width != 6*height) && + (6*width != height) ) + { + SOIL_free_image_data( img ); + result_string_pointer = "Single cubemap image must have a 6:1 ratio"; + return 0; + } + /* try the image split and create */ + tex_id = SOIL_create_OGL_single_cubemap( + img, width, height, channels, + face_order, reuse_texture_ID, flags + ); + /* nuke the temporary image data and return the texture handle */ + SOIL_free_image_data( img ); + return tex_id; +} + +unsigned int + SOIL_load_OGL_single_cubemap_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels, i; + unsigned int tex_id = 0; + /* error checking */ + if( buffer == NULL ) + { + result_string_pointer = "Invalid single cube map buffer"; + return 0; + } + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS_from_memory( + buffer, buffer_length, + reuse_texture_ID, flags, 1 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* face order checking */ + for( i = 0; i < 6; ++i ) + { + if( (face_order[i] != 'N') && + (face_order[i] != 'S') && + (face_order[i] != 'W') && + (face_order[i] != 'E') && + (face_order[i] != 'U') && + (face_order[i] != 'D') ) + { + result_string_pointer = "Invalid single cube map face order"; + return 0; + }; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st off, try to load the full image */ + img = SOIL_load_image_from_memory( + buffer, buffer_length, + &width, &height, &channels, + force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* now, does this image have the right dimensions? */ + if( (width != 6*height) && + (6*width != height) ) + { + SOIL_free_image_data( img ); + result_string_pointer = "Single cubemap image must have a 6:1 ratio"; + return 0; + } + /* try the image split and create */ + tex_id = SOIL_create_OGL_single_cubemap( + img, width, height, channels, + face_order, reuse_texture_ID, flags + ); + /* nuke the temporary image data and return the texture handle */ + SOIL_free_image_data( img ); + return tex_id; +} + +unsigned int + SOIL_create_OGL_single_cubemap + ( + const unsigned char *const data, + int width, int height, int channels, + const char face_order[6], + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* sub_img; + int dw, dh, sz, i; + unsigned int tex_id; + /* error checking */ + if( data == NULL ) + { + result_string_pointer = "Invalid single cube map image data"; + return 0; + } + /* face order checking */ + for( i = 0; i < 6; ++i ) + { + if( (face_order[i] != 'N') && + (face_order[i] != 'S') && + (face_order[i] != 'W') && + (face_order[i] != 'E') && + (face_order[i] != 'U') && + (face_order[i] != 'D') ) + { + result_string_pointer = "Invalid single cube map face order"; + return 0; + }; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* now, does this image have the right dimensions? */ + if( (width != 6*height) && + (6*width != height) ) + { + result_string_pointer = "Single cubemap image must have a 6:1 ratio"; + return 0; + } + /* which way am I stepping? */ + if( width > height ) + { + dw = height; + dh = 0; + } else + { + dw = 0; + dh = width; + } + sz = dw+dh; + sub_img = (unsigned char *)malloc( sz*sz*channels ); + /* do the splitting and uploading */ + tex_id = reuse_texture_ID; + for( i = 0; i < 6; ++i ) + { + int x, y, idx = 0; + unsigned int cubemap_target = 0; + /* copy in the sub-image */ + for( y = i*dh; y < i*dh+sz; ++y ) + { + for( x = i*dw*channels; x < (i*dw+sz)*channels; ++x ) + { + sub_img[idx++] = data[y*width*channels+x]; + } + } + /* what is my texture target? + remember, this coordinate system is + LHS if viewed from inside the cube! */ + switch( face_order[i] ) + { + case 'N': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z; + break; + case 'S': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z; + break; + case 'W': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X; + break; + case 'E': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_X; + break; + case 'U': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y; + break; + case 'D': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y; + break; + } + /* upload it as a texture */ + tex_id = SOIL_internal_create_OGL_texture( + sub_img, sz, sz, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, + cubemap_target, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + } + /* and nuke the image and sub-image data */ + SOIL_free_image_data( sub_img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* wrapper function for 2D textures */ + return SOIL_internal_create_OGL_texture( + data, width, height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); +} + +#if SOIL_CHECK_FOR_GL_ERRORS +void check_for_GL_errors( const char *calling_location ) +{ + /* check for errors */ + GLenum err_code = glGetError(); + while( GL_NO_ERROR != err_code ) + { + printf( "OpenGL Error @ %s: %i", calling_location, err_code ); + err_code = glGetError(); + } +} +#else +void check_for_GL_errors( const char *calling_location ) +{ + /* no check for errors */ +} +#endif + +unsigned int + SOIL_internal_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags, + unsigned int opengl_texture_type, + unsigned int opengl_texture_target, + unsigned int texture_check_size_enum + ) +{ + /* variables */ + unsigned char* img; + unsigned int tex_id; + unsigned int internal_texture_format = 0, original_texture_format = 0; + int DXT_mode = SOIL_CAPABILITY_UNKNOWN; + int max_supported_size; + /* If the user wants to use the texture rectangle I kill a few flags */ + if( flags & SOIL_FLAG_TEXTURE_RECTANGLE ) + { + /* well, the user asked for it, can we do that? */ + if( query_tex_rectangle_capability() == SOIL_CAPABILITY_PRESENT ) + { + /* only allow this if the user in _NOT_ trying to do a cubemap! */ + if( opengl_texture_type == GL_TEXTURE_2D ) + { + /* clean out the flags that cannot be used with texture rectangles */ + flags &= ~( + SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | + SOIL_FLAG_TEXTURE_REPEATS + ); + /* and change my target */ + opengl_texture_target = SOIL_TEXTURE_RECTANGLE_ARB; + opengl_texture_type = SOIL_TEXTURE_RECTANGLE_ARB; + } else + { + /* not allowed for any other uses (yes, I'm looking at you, cubemaps!) */ + flags &= ~SOIL_FLAG_TEXTURE_RECTANGLE; + } + + } else + { + /* can't do it, and that is a breakable offense (uv coords use pixels instead of [0,1]!) */ + result_string_pointer = "Texture Rectangle extension unsupported"; + return 0; + } + } + /* create a copy the image data */ + img = (unsigned char*)malloc( width*height*channels ); + memcpy( img, data, width*height*channels ); + /* does the user want me to invert the image? */ + if( flags & SOIL_FLAG_INVERT_Y ) + { + int i, j; + for( j = 0; j*2 < height; ++j ) + { + int index1 = j * width * channels; + int index2 = (height - 1 - j) * width * channels; + for( i = width * channels; i > 0; --i ) + { + unsigned char temp = img[index1]; + img[index1] = img[index2]; + img[index2] = temp; + ++index1; + ++index2; + } + } + } + /* does the user want me to scale the colors into the NTSC safe RGB range? */ + if( flags & SOIL_FLAG_NTSC_SAFE_RGB ) + { + scale_image_RGB_to_NTSC_safe( img, width, height, channels ); + } + /* does the user want me to convert from straight to pre-multiplied alpha? + (and do we even _have_ alpha?) */ + if( flags & SOIL_FLAG_MULTIPLY_ALPHA ) + { + int i; + switch( channels ) + { + case 2: + for( i = 0; i < 2*width*height; i += 2 ) + { + img[i] = (img[i] * img[i+1] + 128) >> 8; + } + break; + case 4: + for( i = 0; i < 4*width*height; i += 4 ) + { + img[i+0] = (img[i+0] * img[i+3] + 128) >> 8; + img[i+1] = (img[i+1] * img[i+3] + 128) >> 8; + img[i+2] = (img[i+2] * img[i+3] + 128) >> 8; + } + break; + default: + /* no other number of channels contains alpha data */ + break; + } + } + /* if the user can't support NPOT textures, make sure we force the POT option */ + if( (query_NPOT_capability() == SOIL_CAPABILITY_NONE) && + !(flags & SOIL_FLAG_TEXTURE_RECTANGLE) ) + { + /* add in the POT flag */ + flags |= SOIL_FLAG_POWER_OF_TWO; + } + /* how large of a texture can this OpenGL implementation handle? */ + /* texture_check_size_enum will be GL_MAX_TEXTURE_SIZE or SOIL_MAX_CUBE_MAP_TEXTURE_SIZE */ + glGetIntegerv( texture_check_size_enum, &max_supported_size ); + /* do I need to make it a power of 2? */ + if( + (flags & SOIL_FLAG_POWER_OF_TWO) || /* user asked for it */ + (flags & SOIL_FLAG_MIPMAPS) || /* need it for the MIP-maps */ + (width > max_supported_size) || /* it's too big, (make sure it's */ + (height > max_supported_size) ) /* 2^n for later down-sampling) */ + { + int new_width = 1; + int new_height = 1; + while( new_width < width ) + { + new_width *= 2; + } + while( new_height < height ) + { + new_height *= 2; + } + /* still? */ + if( (new_width != width) || (new_height != height) ) + { + /* yep, resize */ + unsigned char *resampled = (unsigned char*)malloc( channels*new_width*new_height ); + up_scale_image( + img, width, height, channels, + resampled, new_width, new_height ); + /* OJO this is for debug only! */ + /* + SOIL_save_image( "\\showme.bmp", SOIL_SAVE_TYPE_BMP, + new_width, new_height, channels, + resampled ); + */ + /* nuke the old guy, then point it at the new guy */ + SOIL_free_image_data( img ); + img = resampled; + width = new_width; + height = new_height; + } + } + /* now, if it is too large... */ + if( (width > max_supported_size) || (height > max_supported_size) ) + { + /* I've already made it a power of two, so simply use the MIPmapping + code to reduce its size to the allowable maximum. */ + unsigned char *resampled; + int reduce_block_x = 1, reduce_block_y = 1; + int new_width, new_height; + if( width > max_supported_size ) + { + reduce_block_x = width / max_supported_size; + } + if( height > max_supported_size ) + { + reduce_block_y = height / max_supported_size; + } + new_width = width / reduce_block_x; + new_height = height / reduce_block_y; + resampled = (unsigned char*)malloc( channels*new_width*new_height ); + /* perform the actual reduction */ + mipmap_image( img, width, height, channels, + resampled, reduce_block_x, reduce_block_y ); + /* nuke the old guy, then point it at the new guy */ + SOIL_free_image_data( img ); + img = resampled; + width = new_width; + height = new_height; + } + /* does the user want us to use YCoCg color space? */ + if( flags & SOIL_FLAG_CoCg_Y ) + { + /* this will only work with RGB and RGBA images */ + convert_RGB_to_YCoCg( img, width, height, channels ); + /* + save_image_as_DDS( "CoCg_Y.dds", width, height, channels, img ); + */ + } + /* create the OpenGL texture ID handle + (note: allowing a forced texture ID lets me reload a texture) */ + tex_id = reuse_texture_ID; + if( tex_id == 0 ) + { + glGenTextures( 1, &tex_id ); + } + check_for_GL_errors( "glGenTextures" ); + /* Note: sometimes glGenTextures fails (usually no OpenGL context) */ + if( tex_id ) + { + /* and what type am I using as the internal texture format? */ + switch( channels ) + { + case 1: + original_texture_format = GL_LUMINANCE; + break; + case 2: + original_texture_format = GL_LUMINANCE_ALPHA; + break; + case 3: + original_texture_format = GL_RGB; + break; + case 4: + original_texture_format = GL_RGBA; + break; + } + internal_texture_format = original_texture_format; + /* does the user want me to, and can I, save as DXT? */ + if( flags & SOIL_FLAG_COMPRESS_TO_DXT ) + { + DXT_mode = query_DXT_capability(); + if( DXT_mode == SOIL_CAPABILITY_PRESENT ) + { + /* I can use DXT, whether I compress it or OpenGL does */ + if( (channels & 1) == 1 ) + { + /* 1 or 3 channels = DXT1 */ + internal_texture_format = SOIL_RGB_S3TC_DXT1; + } else + { + /* 2 or 4 channels = DXT5 */ + internal_texture_format = SOIL_RGBA_S3TC_DXT5; + } + } + } + /* bind an OpenGL texture ID */ + glBindTexture( opengl_texture_type, tex_id ); + check_for_GL_errors( "glBindTexture" ); + /* upload the main image */ + if( DXT_mode == SOIL_CAPABILITY_PRESENT ) + { + /* user wants me to do the DXT conversion! */ + int DDS_size; + unsigned char *DDS_data = NULL; + if( (channels & 1) == 1 ) + { + /* RGB, use DXT1 */ + DDS_data = convert_image_to_DXT1( img, width, height, channels, &DDS_size ); + } else + { + /* RGBA, use DXT5 */ + DDS_data = convert_image_to_DXT5( img, width, height, channels, &DDS_size ); + } + if( DDS_data ) + { + soilGlCompressedTexImage2D( + opengl_texture_target, 0, + internal_texture_format, width, height, 0, + DDS_size, DDS_data ); + check_for_GL_errors( "glCompressedTexImage2D" ); + SOIL_free_image_data( DDS_data ); + /* printf( "Internal DXT compressor\n" ); */ + } else + { + /* my compression failed, try the OpenGL driver's version */ + glTexImage2D( + opengl_texture_target, 0, + internal_texture_format, width, height, 0, + original_texture_format, GL_UNSIGNED_BYTE, img ); + check_for_GL_errors( "glTexImage2D" ); + /* printf( "OpenGL DXT compressor\n" ); */ + } + } else + { + /* user want OpenGL to do all the work! */ + glTexImage2D( + opengl_texture_target, 0, + internal_texture_format, width, height, 0, + original_texture_format, GL_UNSIGNED_BYTE, img ); + check_for_GL_errors( "glTexImage2D" ); + /*printf( "OpenGL DXT compressor\n" ); */ + } + /* are any MIPmaps desired? */ + if( flags & SOIL_FLAG_MIPMAPS ) + { + int MIPlevel = 1; + int MIPwidth = (width+1) / 2; + int MIPheight = (height+1) / 2; + unsigned char *resampled = (unsigned char*)malloc( channels*MIPwidth*MIPheight ); + while( ((1< 0; --i ) + { + unsigned char temp = pixel_data[index1]; + pixel_data[index1] = pixel_data[index2]; + pixel_data[index2] = temp; + ++index1; + ++index2; + } + } + + /* save the image */ + save_result = SOIL_save_image( filename, image_type, width, height, 3, pixel_data); + + /* And free the memory */ + SOIL_free_image_data( pixel_data ); + return save_result; +} + +unsigned char* + SOIL_load_image + ( + const char *filename, + int *width, int *height, int *channels, + int force_channels + ) +{ + unsigned char *result = stbi_load( filename, + width, height, channels, force_channels ); + if( result == NULL ) + { + result_string_pointer = stbi_failure_reason(); + } else + { + result_string_pointer = "Image loaded"; + } + return result; +} + +unsigned char* + SOIL_load_image_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int *width, int *height, int *channels, + int force_channels + ) +{ + unsigned char *result = stbi_load_from_memory( + buffer, buffer_length, + width, height, channels, + force_channels ); + if( result == NULL ) + { + result_string_pointer = stbi_failure_reason(); + } else + { + result_string_pointer = "Image loaded from memory"; + } + return result; +} + +int + SOIL_save_image + ( + const char *filename, + int image_type, + int width, int height, int channels, + const unsigned char *const data + ) +{ + int save_result; + + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 1) || (channels > 4) || + (data == NULL) || + (filename == NULL) ) + { + return 0; + } + if( image_type == SOIL_SAVE_TYPE_BMP ) + { + save_result = stbi_write_bmp( filename, + width, height, channels, (void*)data ); + } else + if( image_type == SOIL_SAVE_TYPE_TGA ) + { + save_result = stbi_write_tga( filename, + width, height, channels, (void*)data ); + } else + if( image_type == SOIL_SAVE_TYPE_DDS ) + { + save_result = save_image_as_DDS( filename, + width, height, channels, (const unsigned char *const)data ); + } else + { + save_result = 0; + } + if( save_result == 0 ) + { + result_string_pointer = "Saving the image failed"; + } else + { + result_string_pointer = "Image saved"; + } + return save_result; +} + +void + SOIL_free_image_data + ( + unsigned char *img_data + ) +{ + free( (void*)img_data ); +} + +const char* + SOIL_last_result + ( + void + ) +{ + return result_string_pointer; +} + +unsigned int SOIL_direct_load_DDS_from_memory( + const unsigned char *const buffer, + int buffer_length, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ) +{ + /* variables */ + DDS_header header; + unsigned int buffer_index = 0; + unsigned int tex_ID = 0; + /* file reading variables */ + unsigned int S3TC_type = 0; + unsigned char *DDS_data; + unsigned int DDS_main_size; + unsigned int DDS_full_size; + unsigned int width, height; + int mipmaps, cubemap, uncompressed, block_size = 16; + unsigned int flag; + unsigned int cf_target, ogl_target_start, ogl_target_end; + unsigned int opengl_texture_type; + int i; + /* 1st off, does the filename even exist? */ + if( NULL == buffer ) + { + /* we can't do it! */ + result_string_pointer = "NULL buffer"; + return 0; + } + if( buffer_length < sizeof( DDS_header ) ) + { + /* we can't do it! */ + result_string_pointer = "DDS file was too small to contain the DDS header"; + return 0; + } + /* try reading in the header */ + memcpy ( (void*)(&header), (const void *)buffer, sizeof( DDS_header ) ); + buffer_index = sizeof( DDS_header ); + /* guilty until proven innocent */ + result_string_pointer = "Failed to read a known DDS header"; + /* validate the header (warning, "goto"'s ahead, shield your eyes!!) */ + flag = ('D'<<0)|('D'<<8)|('S'<<16)|(' '<<24); + if( header.dwMagic != flag ) {goto quick_exit;} + if( header.dwSize != 124 ) {goto quick_exit;} + /* I need all of these */ + flag = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; + if( (header.dwFlags & flag) != flag ) {goto quick_exit;} + /* According to the MSDN spec, the dwFlags should contain + DDSD_LINEARSIZE if it's compressed, or DDSD_PITCH if + uncompressed. Some DDS writers do not conform to the + spec, so I need to make my reader more tolerant */ + /* I need one of these */ + flag = DDPF_FOURCC | DDPF_RGB; + if( (header.sPixelFormat.dwFlags & flag) == 0 ) {goto quick_exit;} + if( header.sPixelFormat.dwSize != 32 ) {goto quick_exit;} + if( (header.sCaps.dwCaps1 & DDSCAPS_TEXTURE) == 0 ) {goto quick_exit;} + /* make sure it is a type we can upload */ + if( (header.sPixelFormat.dwFlags & DDPF_FOURCC) && + !( + (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('1'<<24))) || + (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('3'<<24))) || + (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('5'<<24))) + ) ) + { + goto quick_exit; + } + /* OK, validated the header, let's load the image data */ + result_string_pointer = "DDS header loaded and validated"; + width = header.dwWidth; + height = header.dwHeight; + uncompressed = 1 - (header.sPixelFormat.dwFlags & DDPF_FOURCC) / DDPF_FOURCC; + cubemap = (header.sCaps.dwCaps2 & DDSCAPS2_CUBEMAP) / DDSCAPS2_CUBEMAP; + if( uncompressed ) + { + S3TC_type = GL_RGB; + block_size = 3; + if( header.sPixelFormat.dwFlags & DDPF_ALPHAPIXELS ) + { + S3TC_type = GL_RGBA; + block_size = 4; + } + DDS_main_size = width * height * block_size; + } else + { + /* can we even handle direct uploading to OpenGL DXT compressed images? */ + if( query_DXT_capability() != SOIL_CAPABILITY_PRESENT ) + { + /* we can't do it! */ + result_string_pointer = "Direct upload of S3TC images not supported by the OpenGL driver"; + return 0; + } + /* well, we know it is DXT1/3/5, because we checked above */ + switch( (header.sPixelFormat.dwFourCC >> 24) - '0' ) + { + case 1: + S3TC_type = SOIL_RGBA_S3TC_DXT1; + block_size = 8; + break; + case 3: + S3TC_type = SOIL_RGBA_S3TC_DXT3; + block_size = 16; + break; + case 5: + S3TC_type = SOIL_RGBA_S3TC_DXT5; + block_size = 16; + break; + } + DDS_main_size = ((width+3)>>2)*((height+3)>>2)*block_size; + } + if( cubemap ) + { + /* does the user want a cubemap? */ + if( !loading_as_cubemap ) + { + /* we can't do it! */ + result_string_pointer = "DDS image was a cubemap"; + return 0; + } + /* can we even handle cubemaps with the OpenGL driver? */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + /* we can't do it! */ + result_string_pointer = "Direct upload of cubemap images not supported by the OpenGL driver"; + return 0; + } + ogl_target_start = SOIL_TEXTURE_CUBE_MAP_POSITIVE_X; + ogl_target_end = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z; + opengl_texture_type = SOIL_TEXTURE_CUBE_MAP; + } else + { + /* does the user want a non-cubemap? */ + if( loading_as_cubemap ) + { + /* we can't do it! */ + result_string_pointer = "DDS image was not a cubemap"; + return 0; + } + ogl_target_start = GL_TEXTURE_2D; + ogl_target_end = GL_TEXTURE_2D; + opengl_texture_type = GL_TEXTURE_2D; + } + if( (header.sCaps.dwCaps1 & DDSCAPS_MIPMAP) && (header.dwMipMapCount > 1) ) + { + int shift_offset; + mipmaps = header.dwMipMapCount - 1; + DDS_full_size = DDS_main_size; + if( uncompressed ) + { + /* uncompressed DDS, simple MIPmap size calculation */ + shift_offset = 0; + } else + { + /* compressed DDS, MIPmap size calculation is block based */ + shift_offset = 2; + } + for( i = 1; i <= mipmaps; ++ i ) + { + int w, h; + w = width >> (shift_offset + i); + h = height >> (shift_offset + i); + if( w < 1 ) + { + w = 1; + } + if( h < 1 ) + { + h = 1; + } + DDS_full_size += w*h*block_size; + } + } else + { + mipmaps = 0; + DDS_full_size = DDS_main_size; + } + DDS_data = (unsigned char*)malloc( DDS_full_size ); + /* got the image data RAM, create or use an existing OpenGL texture handle */ + tex_ID = reuse_texture_ID; + if( tex_ID == 0 ) + { + glGenTextures( 1, &tex_ID ); + } + /* bind an OpenGL texture ID */ + glBindTexture( opengl_texture_type, tex_ID ); + /* do this for each face of the cubemap! */ + for( cf_target = ogl_target_start; cf_target <= ogl_target_end; ++cf_target ) + { + if( buffer_index + DDS_full_size <= buffer_length ) + { + unsigned int byte_offset = DDS_main_size; + memcpy( (void*)DDS_data, (const void*)(&buffer[buffer_index]), DDS_full_size ); + buffer_index += DDS_full_size; + /* upload the main chunk */ + if( uncompressed ) + { + /* and remember, DXT uncompressed uses BGR(A), + so swap to RGB(A) for ALL MIPmap levels */ + for( i = 0; i < DDS_full_size; i += block_size ) + { + unsigned char temp = DDS_data[i]; + DDS_data[i] = DDS_data[i+2]; + DDS_data[i+2] = temp; + } + glTexImage2D( + cf_target, 0, + S3TC_type, width, height, 0, + S3TC_type, GL_UNSIGNED_BYTE, DDS_data ); + } else + { + soilGlCompressedTexImage2D( + cf_target, 0, + S3TC_type, width, height, 0, + DDS_main_size, DDS_data ); + } + /* upload the mipmaps, if we have them */ + for( i = 1; i <= mipmaps; ++i ) + { + int w, h, mip_size; + w = width >> i; + h = height >> i; + if( w < 1 ) + { + w = 1; + } + if( h < 1 ) + { + h = 1; + } + /* upload this mipmap */ + if( uncompressed ) + { + mip_size = w*h*block_size; + glTexImage2D( + cf_target, i, + S3TC_type, w, h, 0, + S3TC_type, GL_UNSIGNED_BYTE, &DDS_data[byte_offset] ); + } else + { + mip_size = ((w+3)/4)*((h+3)/4)*block_size; + soilGlCompressedTexImage2D( + cf_target, i, + S3TC_type, w, h, 0, + mip_size, &DDS_data[byte_offset] ); + } + /* and move to the next mipmap */ + byte_offset += mip_size; + } + /* it worked! */ + result_string_pointer = "DDS file loaded"; + } else + { + glDeleteTextures( 1, & tex_ID ); + tex_ID = 0; + cf_target = ogl_target_end + 1; + result_string_pointer = "DDS file was too small for expected image data"; + } + }/* end reading each face */ + SOIL_free_image_data( DDS_data ); + if( tex_ID ) + { + /* did I have MIPmaps? */ + if( mipmaps > 0 ) + { + /* instruct OpenGL to use the MIPmaps */ + glTexParameteri( opengl_texture_type, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); + } else + { + /* instruct OpenGL _NOT_ to use the MIPmaps */ + glTexParameteri( opengl_texture_type, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + } + /* does the user want clamping, or wrapping? */ + if( flags & SOIL_FLAG_TEXTURE_REPEATS ) + { + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_S, GL_REPEAT ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameteri( opengl_texture_type, SOIL_TEXTURE_WRAP_R, GL_REPEAT ); + } else + { + unsigned int clamp_mode = SOIL_CLAMP_TO_EDGE; + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_S, clamp_mode ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_T, clamp_mode ); + glTexParameteri( opengl_texture_type, SOIL_TEXTURE_WRAP_R, clamp_mode ); + } + } + +quick_exit: + /* report success or failure */ + return tex_ID; +} + +unsigned int SOIL_direct_load_DDS( + const char *filename, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ) +{ + FILE *f; + unsigned char *buffer; + size_t buffer_length, bytes_read; + unsigned int tex_ID = 0; + /* error checks */ + if( NULL == filename ) + { + result_string_pointer = "NULL filename"; + return 0; + } + f = fopen( filename, "rb" ); + if( NULL == f ) + { + /* the file doesn't seem to exist (or be open-able) */ + result_string_pointer = "Can not find DDS file"; + return 0; + } + fseek( f, 0, SEEK_END ); + buffer_length = ftell( f ); + fseek( f, 0, SEEK_SET ); + buffer = (unsigned char *) malloc( buffer_length ); + if( NULL == buffer ) + { + result_string_pointer = "malloc failed"; + fclose( f ); + return 0; + } + bytes_read = fread( (void*)buffer, 1, buffer_length, f ); + fclose( f ); + if( bytes_read < buffer_length ) + { + /* huh? */ + buffer_length = bytes_read; + } + /* now try to do the loading */ + tex_ID = SOIL_direct_load_DDS_from_memory( + (const unsigned char *const)buffer, buffer_length, + reuse_texture_ID, flags, loading_as_cubemap ); + SOIL_free_image_data( buffer ); + return tex_ID; +} + +int query_NPOT_capability( void ) +{ + /* check for the capability */ + if( has_NPOT_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_ARB_texture_non_power_of_two" ) ) + && + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_OES_texture_npot" ) ) + ) + { + /* not there, flag the failure */ + has_NPOT_capability = SOIL_CAPABILITY_NONE; + } else + { + /* it's there! */ + has_NPOT_capability = SOIL_CAPABILITY_PRESENT; + } + } + /* let the user know if we can do non-power-of-two textures or not */ + return has_NPOT_capability; +} + +int query_tex_rectangle_capability( void ) +{ + /* check for the capability */ + if( has_tex_rectangle_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_ARB_texture_rectangle" ) ) + && + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_EXT_texture_rectangle" ) ) + && + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_NV_texture_rectangle" ) ) + ) + { + /* not there, flag the failure */ + has_tex_rectangle_capability = SOIL_CAPABILITY_NONE; + } else + { + /* it's there! */ + has_tex_rectangle_capability = SOIL_CAPABILITY_PRESENT; + } + } + /* let the user know if we can do texture rectangles or not */ + return has_tex_rectangle_capability; +} + +int query_cubemap_capability( void ) +{ + /* check for the capability */ + if( has_cubemap_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_ARB_texture_cube_map" ) ) + && + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_EXT_texture_cube_map" ) ) + #ifdef GL_ES_VERSION_2_0 + && (0) /* GL ES 2.0 supports cubemaps, always enable */ + #endif + ) + { + /* not there, flag the failure */ + has_cubemap_capability = SOIL_CAPABILITY_NONE; + } else + { + /* it's there! */ + has_cubemap_capability = SOIL_CAPABILITY_PRESENT; + } + } + /* let the user know if we can do cubemaps or not */ + return has_cubemap_capability; +} + +int query_DXT_capability( void ) +{ + /* check for the capability */ + if( has_DXT_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( NULL == strstr( + (char const*)glGetString( GL_EXTENSIONS ), + "GL_EXT_texture_compression_s3tc" ) ) + { + /* not there, flag the failure */ + has_DXT_capability = SOIL_CAPABILITY_NONE; + } else + { + /* and find the address of the extension function */ + P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC ext_addr = NULL; + #ifdef WIN32 + ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) + wglGetProcAddress + ( + "glCompressedTexImage2DARB" + ); + #elif defined(__APPLE__) || defined(__APPLE_CC__) + /* I can't test this Apple stuff! */ + CFBundleRef bundle; + CFURLRef bundleURL = + CFURLCreateWithFileSystemPath( + kCFAllocatorDefault, + CFSTR("/System/Library/Frameworks/OpenGL.framework"), + kCFURLPOSIXPathStyle, + true ); + CFStringRef extensionName = + CFStringCreateWithCString( + kCFAllocatorDefault, + "glCompressedTexImage2DARB", + kCFStringEncodingASCII ); + bundle = CFBundleCreate( kCFAllocatorDefault, bundleURL ); + assert( bundle != NULL ); + ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) + CFBundleGetFunctionPointerForName + ( + bundle, extensionName + ); + CFRelease( bundleURL ); + CFRelease( extensionName ); + CFRelease( bundle ); + #elif defined(__ANDROID__) || defined(__EMSCRIPTEN__) + ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC)(glCompressedTexImage2D); + #else + ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) + glXGetProcAddressARB + ( + (const GLubyte *)"glCompressedTexImage2DARB" + ); + #endif + /* Flag it so no checks needed later */ + if( NULL == ext_addr ) + { + /* hmm, not good!! This should not happen, but does on my + laptop's VIA chipset. The GL_EXT_texture_compression_s3tc + spec requires that ARB_texture_compression be present too. + this means I can upload and have the OpenGL drive do the + conversion, but I can't use my own routines or load DDS files + from disk and upload them directly [8^( */ + has_DXT_capability = SOIL_CAPABILITY_NONE; + } else + { + /* all's well! */ + soilGlCompressedTexImage2D = ext_addr; + has_DXT_capability = SOIL_CAPABILITY_PRESENT; + } + } + } + /* let the user know if we can do DXT or not */ + return has_DXT_capability; +} diff --git a/lib/soil2/SOIL.h b/lib/soil2/SOIL.h new file mode 100644 index 0000000..57f375b --- /dev/null +++ b/lib/soil2/SOIL.h @@ -0,0 +1,433 @@ +/** + @mainpage SOIL + + Jonathan Dummer + 2007-07-26-10.36 + + Simple OpenGL Image Library + + A tiny c library for uploading images as + textures into OpenGL. Also saving and + loading of images is supported. + + I'm using Sean's Tool Box image loader as a base: + http://www.nothings.org/ + + I'm upgrading it to load TGA and DDS files, and a direct + path for loading DDS files straight into OpenGL textures, + when applicable. + + Image Formats: + - BMP load & save + - TGA load & save + - DDS load & save + - PNG load + - JPG load + + OpenGL Texture Features: + - resample to power-of-two sizes + - MIPmap generation + - compressed texture S3TC formats (if supported) + - can pre-multiply alpha for you, for better compositing + - can flip image about the y-axis (except pre-compressed DDS files) + + Thanks to: + * Sean Barret - for the awesome stb_image + * Dan Venkitachalam - for finding some non-compliant DDS files, and patching some explicit casts + * everybody at gamedev.net +**/ + +#ifndef HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY +#define HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY + +#ifdef __cplusplus +extern "C" { +#endif + +/** + The format of images that may be loaded (force_channels). + SOIL_LOAD_AUTO leaves the image in whatever format it was found. + SOIL_LOAD_L forces the image to load as Luminous (greyscale) + SOIL_LOAD_LA forces the image to load as Luminous with Alpha + SOIL_LOAD_RGB forces the image to load as Red Green Blue + SOIL_LOAD_RGBA forces the image to load as Red Green Blue Alpha +**/ +enum +{ + SOIL_LOAD_AUTO = 0, + SOIL_LOAD_L = 1, + SOIL_LOAD_LA = 2, + SOIL_LOAD_RGB = 3, + SOIL_LOAD_RGBA = 4 +}; + +/** + Passed in as reuse_texture_ID, will cause SOIL to + register a new texture ID using glGenTextures(). + If the value passed into reuse_texture_ID > 0 then + SOIL will just re-use that texture ID (great for + reloading image assets in-game!) +**/ +enum +{ + SOIL_CREATE_NEW_ID = 0 +}; + +/** + flags you can pass into SOIL_load_OGL_texture() + and SOIL_create_OGL_texture(). + (note that if SOIL_FLAG_DDS_LOAD_DIRECT is used + the rest of the flags with the exception of + SOIL_FLAG_TEXTURE_REPEATS will be ignored while + loading already-compressed DDS files.) + + SOIL_FLAG_POWER_OF_TWO: force the image to be POT + SOIL_FLAG_MIPMAPS: generate mipmaps for the texture + SOIL_FLAG_TEXTURE_REPEATS: otherwise will clamp + SOIL_FLAG_MULTIPLY_ALPHA: for using (GL_ONE,GL_ONE_MINUS_SRC_ALPHA) blending + SOIL_FLAG_INVERT_Y: flip the image vertically + SOIL_FLAG_COMPRESS_TO_DXT: if the card can display them, will convert RGB to DXT1, RGBA to DXT5 + SOIL_FLAG_DDS_LOAD_DIRECT: will load DDS files directly without _ANY_ additional processing + SOIL_FLAG_NTSC_SAFE_RGB: clamps RGB components to the range [16,235] + SOIL_FLAG_CoCg_Y: Google YCoCg; RGB=>CoYCg, RGBA=>CoCgAY + SOIL_FLAG_TEXTURE_RECTANGE: uses ARB_texture_rectangle ; pixel indexed & no repeat or MIPmaps or cubemaps +**/ +enum +{ + SOIL_FLAG_POWER_OF_TWO = 1, + SOIL_FLAG_MIPMAPS = 2, + SOIL_FLAG_TEXTURE_REPEATS = 4, + SOIL_FLAG_MULTIPLY_ALPHA = 8, + SOIL_FLAG_INVERT_Y = 16, + SOIL_FLAG_COMPRESS_TO_DXT = 32, + SOIL_FLAG_DDS_LOAD_DIRECT = 64, + SOIL_FLAG_NTSC_SAFE_RGB = 128, + SOIL_FLAG_CoCg_Y = 256, + SOIL_FLAG_TEXTURE_RECTANGLE = 512 +}; + +/** + The types of images that may be saved. + (TGA supports uncompressed RGB / RGBA) + (BMP supports uncompressed RGB) + (DDS supports DXT1 and DXT5) +**/ +enum +{ + SOIL_SAVE_TYPE_TGA = 0, + SOIL_SAVE_TYPE_BMP = 1, + SOIL_SAVE_TYPE_DDS = 2 +}; + +/** + Defines the order of faces in a DDS cubemap. + I recommend that you use the same order in single + image cubemap files, so they will be interchangeable + with DDS cubemaps when using SOIL. +**/ +#define SOIL_DDS_CUBEMAP_FACE_ORDER "EWUDNS" + +/** + The types of internal fake HDR representations + + SOIL_HDR_RGBE: RGB * pow( 2.0, A - 128.0 ) + SOIL_HDR_RGBdivA: RGB / A + SOIL_HDR_RGBdivA2: RGB / (A*A) +**/ +enum +{ + SOIL_HDR_RGBE = 0, + SOIL_HDR_RGBdivA = 1, + SOIL_HDR_RGBdivA2 = 2 +}; + +/** + Loads an image from disk into an OpenGL texture. + \param filename the name of the file to upload as a texture + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_texture + ( + const char *filename, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads 6 images from disk into an OpenGL cubemap texture. + \param x_pos_file the name of the file to upload as the +x cube face + \param x_neg_file the name of the file to upload as the -x cube face + \param y_pos_file the name of the file to upload as the +y cube face + \param y_neg_file the name of the file to upload as the -y cube face + \param z_pos_file the name of the file to upload as the +z cube face + \param z_neg_file the name of the file to upload as the -z cube face + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_cubemap + ( + const char *x_pos_file, + const char *x_neg_file, + const char *y_pos_file, + const char *y_neg_file, + const char *z_pos_file, + const char *z_neg_file, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads 1 image from disk and splits it into an OpenGL cubemap texture. + \param filename the name of the file to upload as a texture + \param face_order the order of the faces in the file, any combination of NSWEUD, for North, South, Up, etc. + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_single_cubemap + ( + const char *filename, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads an HDR image from disk into an OpenGL texture. + \param filename the name of the file to upload as a texture + \param fake_HDR_format SOIL_HDR_RGBE, SOIL_HDR_RGBdivA, SOIL_HDR_RGBdivA2 + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_HDR_texture + ( + const char *filename, + int fake_HDR_format, + int rescale_to_max, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads an image from RAM into an OpenGL texture. + \param buffer the image data in RAM just as if it were still in a file + \param buffer_length the size of the buffer in bytes + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_texture_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads 6 images from memory into an OpenGL cubemap texture. + \param x_pos_buffer the image data in RAM to upload as the +x cube face + \param x_pos_buffer_length the size of the above buffer + \param x_neg_buffer the image data in RAM to upload as the +x cube face + \param x_neg_buffer_length the size of the above buffer + \param y_pos_buffer the image data in RAM to upload as the +x cube face + \param y_pos_buffer_length the size of the above buffer + \param y_neg_buffer the image data in RAM to upload as the +x cube face + \param y_neg_buffer_length the size of the above buffer + \param z_pos_buffer the image data in RAM to upload as the +x cube face + \param z_pos_buffer_length the size of the above buffer + \param z_neg_buffer the image data in RAM to upload as the +x cube face + \param z_neg_buffer_length the size of the above buffer + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_cubemap_from_memory + ( + const unsigned char *const x_pos_buffer, + int x_pos_buffer_length, + const unsigned char *const x_neg_buffer, + int x_neg_buffer_length, + const unsigned char *const y_pos_buffer, + int y_pos_buffer_length, + const unsigned char *const y_neg_buffer, + int y_neg_buffer_length, + const unsigned char *const z_pos_buffer, + int z_pos_buffer_length, + const unsigned char *const z_neg_buffer, + int z_neg_buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads 1 image from RAM and splits it into an OpenGL cubemap texture. + \param buffer the image data in RAM just as if it were still in a file + \param buffer_length the size of the buffer in bytes + \param face_order the order of the faces in the file, any combination of NSWEUD, for North, South, Up, etc. + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_single_cubemap_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Creates a 2D OpenGL texture from raw image data. Note that the raw data is + _NOT_ freed after the upload (so the user can load various versions). + \param data the raw data to be uploaded as an OpenGL texture + \param width the width of the image in pixels + \param height the height of the image in pixels + \param channels the number of channels: 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Creates an OpenGL cubemap texture by splitting up 1 image into 6 parts. + \param data the raw data to be uploaded as an OpenGL texture + \param width the width of the image in pixels + \param height the height of the image in pixels + \param channels the number of channels: 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param face_order the order of the faces in the file, and combination of NSWEUD, for North, South, Up, etc. + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_create_OGL_single_cubemap + ( + const unsigned char *const data, + int width, int height, int channels, + const char face_order[6], + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Captures the OpenGL window (RGB) and saves it to disk + \return 0 if it failed, otherwise returns 1 +**/ +int + SOIL_save_screenshot + ( + const char *filename, + int image_type, + int x, int y, + int width, int height + ); + +/** + Loads an image from disk into an array of unsigned chars. + Note that *channels return the original channel count of the + image. If force_channels was other than SOIL_LOAD_AUTO, + the resulting image has force_channels, but *channels may be + different (if the original image had a different channel + count). + \return 0 if failed, otherwise returns 1 +**/ +unsigned char* + SOIL_load_image + ( + const char *filename, + int *width, int *height, int *channels, + int force_channels + ); + +/** + Loads an image from memory into an array of unsigned chars. + Note that *channels return the original channel count of the + image. If force_channels was other than SOIL_LOAD_AUTO, + the resulting image has force_channels, but *channels may be + different (if the original image had a different channel + count). + \return 0 if failed, otherwise returns 1 +**/ +unsigned char* + SOIL_load_image_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int *width, int *height, int *channels, + int force_channels + ); + +/** + Saves an image from an array of unsigned chars (RGBA) to disk + \return 0 if failed, otherwise returns 1 +**/ +int + SOIL_save_image + ( + const char *filename, + int image_type, + int width, int height, int channels, + const unsigned char *const data + ); + +/** + Frees the image data (note, this is just C's "free()"...this function is + present mostly so C++ programmers don't forget to use "free()" and call + "delete []" instead [8^) +**/ +void + SOIL_free_image_data + ( + unsigned char *img_data + ); + +/** + This function resturn a pointer to a string describing the last thing + that happened inside SOIL. It can be used to determine why an image + failed to load. +**/ +const char* + SOIL_last_result + ( + void + ); + + +#ifdef __cplusplus +} +#endif + +#endif /* HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY */ diff --git a/lib/soil2/image_DXT.c b/lib/soil2/image_DXT.c new file mode 100644 index 0000000..eb90be6 --- /dev/null +++ b/lib/soil2/image_DXT.c @@ -0,0 +1,632 @@ +/* + Jonathan Dummer + 2007-07-31-10.32 + + simple DXT compression / decompression code + + public domain +*/ + +#include "image_DXT.h" +#include +#include +#include +#include + +/* set this =1 if you want to use the covarince matrix method... + which is better than my method of using standard deviations + overall, except on the infintesimal chance that the power + method fails for finding the largest eigenvector */ +#define USE_COV_MAT 1 + +/********* Function Prototypes *********/ +/* + Takes a 4x4 block of pixels and compresses it into 8 bytes + in DXT1 format (color only, no alpha). Speed is valued + over prettyness, at least for now. +*/ +void compress_DDS_color_block( + int channels, + const unsigned char *const uncompressed, + unsigned char compressed[8] ); +/* + Takes a 4x4 block of pixels and compresses the alpha + component it into 8 bytes for use in DXT5 DDS files. + Speed is valued over prettyness, at least for now. +*/ +void compress_DDS_alpha_block( + const unsigned char *const uncompressed, + unsigned char compressed[8] ); + +/********* Actual Exposed Functions *********/ +int + save_image_as_DDS + ( + const char *filename, + int width, int height, int channels, + const unsigned char *const data + ) +{ + /* variables */ + FILE *fout; + unsigned char *DDS_data; + DDS_header header; + int DDS_size; + /* error check */ + if( (NULL == filename) || + (width < 1) || (height < 1) || + (channels < 1) || (channels > 4) || + (data == NULL ) ) + { + return 0; + } + /* Convert the image */ + if( (channels & 1) == 1 ) + { + /* no alpha, just use DXT1 */ + DDS_data = convert_image_to_DXT1( data, width, height, channels, &DDS_size ); + } else + { + /* has alpha, so use DXT5 */ + DDS_data = convert_image_to_DXT5( data, width, height, channels, &DDS_size ); + } + /* save it */ + memset( &header, 0, sizeof( DDS_header ) ); + header.dwMagic = ('D' << 0) | ('D' << 8) | ('S' << 16) | (' ' << 24); + header.dwSize = 124; + header.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_LINEARSIZE; + header.dwWidth = width; + header.dwHeight = height; + header.dwPitchOrLinearSize = DDS_size; + header.sPixelFormat.dwSize = 32; + header.sPixelFormat.dwFlags = DDPF_FOURCC; + if( (channels & 1) == 1 ) + { + header.sPixelFormat.dwFourCC = ('D' << 0) | ('X' << 8) | ('T' << 16) | ('1' << 24); + } else + { + header.sPixelFormat.dwFourCC = ('D' << 0) | ('X' << 8) | ('T' << 16) | ('5' << 24); + } + header.sCaps.dwCaps1 = DDSCAPS_TEXTURE; + /* write it out */ + fout = fopen( filename, "wb"); + fwrite( &header, sizeof( DDS_header ), 1, fout ); + fwrite( DDS_data, 1, DDS_size, fout ); + fclose( fout ); + /* done */ + free( DDS_data ); + return 1; +} + +unsigned char* convert_image_to_DXT1( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size ) +{ + unsigned char *compressed; + int i, j, x, y; + unsigned char ublock[16*3]; + unsigned char cblock[8]; + int index = 0, chan_step = 1; + int block_count = 0; + /* error check */ + *out_size = 0; + if( (width < 1) || (height < 1) || + (NULL == uncompressed) || + (channels < 1) || (channels > 4) ) + { + return NULL; + } + /* for channels == 1 or 2, I do not step forward for R,G,B values */ + if( channels < 3 ) + { + chan_step = 0; + } + /* get the RAM for the compressed image + (8 bytes per 4x4 pixel block) */ + *out_size = ((width+3) >> 2) * ((height+3) >> 2) * 8; + compressed = (unsigned char*)malloc( *out_size ); + /* go through each block */ + for( j = 0; j < height; j += 4 ) + { + for( i = 0; i < width; i += 4 ) + { + /* copy this block into a new one */ + int idx = 0; + int mx = 4, my = 4; + if( j+4 >= height ) + { + my = height - j; + } + if( i+4 >= width ) + { + mx = width - i; + } + for( y = 0; y < my; ++y ) + { + for( x = 0; x < mx; ++x ) + { + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step+chan_step]; + } + for( x = mx; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + } + } + for( y = my; y < 4; ++y ) + { + for( x = 0; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + } + } + /* compress the block */ + ++block_count; + compress_DDS_color_block( 3, ublock, cblock ); + /* copy the data from the block into the main block */ + for( x = 0; x < 8; ++x ) + { + compressed[index++] = cblock[x]; + } + } + } + return compressed; +} + +unsigned char* convert_image_to_DXT5( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size ) +{ + unsigned char *compressed; + int i, j, x, y; + unsigned char ublock[16*4]; + unsigned char cblock[8]; + int index = 0, chan_step = 1; + int block_count = 0, has_alpha; + /* error check */ + *out_size = 0; + if( (width < 1) || (height < 1) || + (NULL == uncompressed) || + (channels < 1) || ( channels > 4) ) + { + return NULL; + } + /* for channels == 1 or 2, I do not step forward for R,G,B vales */ + if( channels < 3 ) + { + chan_step = 0; + } + /* # channels = 1 or 3 have no alpha, 2 & 4 do have alpha */ + has_alpha = 1 - (channels & 1); + /* get the RAM for the compressed image + (16 bytes per 4x4 pixel block) */ + *out_size = ((width+3) >> 2) * ((height+3) >> 2) * 16; + compressed = (unsigned char*)malloc( *out_size ); + /* go through each block */ + for( j = 0; j < height; j += 4 ) + { + for( i = 0; i < width; i += 4 ) + { + /* local variables, and my block counter */ + int idx = 0; + int mx = 4, my = 4; + if( j+4 >= height ) + { + my = height - j; + } + if( i+4 >= width ) + { + mx = width - i; + } + for( y = 0; y < my; ++y ) + { + for( x = 0; x < mx; ++x ) + { + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step+chan_step]; + ublock[idx++] = + has_alpha * uncompressed[(j+y)*width*channels+(i+x)*channels+channels-1] + + (1-has_alpha)*255; + } + for( x = mx; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + ublock[idx++] = ublock[3]; + } + } + for( y = my; y < 4; ++y ) + { + for( x = 0; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + ublock[idx++] = ublock[3]; + } + } + /* now compress the alpha block */ + compress_DDS_alpha_block( ublock, cblock ); + /* copy the data from the compressed alpha block into the main buffer */ + for( x = 0; x < 8; ++x ) + { + compressed[index++] = cblock[x]; + } + /* then compress the color block */ + ++block_count; + compress_DDS_color_block( 4, ublock, cblock ); + /* copy the data from the compressed color block into the main buffer */ + for( x = 0; x < 8; ++x ) + { + compressed[index++] = cblock[x]; + } + } + } + return compressed; +} + +/********* Helper Functions *********/ +int convert_bit_range( int c, int from_bits, int to_bits ) +{ + int b = (1 << (from_bits - 1)) + c * ((1 << to_bits) - 1); + return (b + (b >> from_bits)) >> from_bits; +} + +int rgb_to_565( int r, int g, int b ) +{ + return + (convert_bit_range( r, 8, 5 ) << 11) | + (convert_bit_range( g, 8, 6 ) << 05) | + (convert_bit_range( b, 8, 5 ) << 00); +} + +void rgb_888_from_565( unsigned int c, int *r, int *g, int *b ) +{ + *r = convert_bit_range( (c >> 11) & 31, 5, 8 ); + *g = convert_bit_range( (c >> 05) & 63, 6, 8 ); + *b = convert_bit_range( (c >> 00) & 31, 5, 8 ); +} + +void compute_color_line_STDEV( + const unsigned char *const uncompressed, + int channels, + float point[3], float direction[3] ) +{ + const float inv_16 = 1.0f / 16.0f; + int i; + float sum_r = 0.0f, sum_g = 0.0f, sum_b = 0.0f; + float sum_rr = 0.0f, sum_gg = 0.0f, sum_bb = 0.0f; + float sum_rg = 0.0f, sum_rb = 0.0f, sum_gb = 0.0f; + /* calculate all data needed for the covariance matrix + ( to compare with _rygdxt code) */ + for( i = 0; i < 16*channels; i += channels ) + { + sum_r += uncompressed[i+0]; + sum_rr += uncompressed[i+0] * uncompressed[i+0]; + sum_g += uncompressed[i+1]; + sum_gg += uncompressed[i+1] * uncompressed[i+1]; + sum_b += uncompressed[i+2]; + sum_bb += uncompressed[i+2] * uncompressed[i+2]; + sum_rg += uncompressed[i+0] * uncompressed[i+1]; + sum_rb += uncompressed[i+0] * uncompressed[i+2]; + sum_gb += uncompressed[i+1] * uncompressed[i+2]; + } + /* convert the sums to averages */ + sum_r *= inv_16; + sum_g *= inv_16; + sum_b *= inv_16; + /* and convert the squares to the squares of the value - avg_value */ + sum_rr -= 16.0f * sum_r * sum_r; + sum_gg -= 16.0f * sum_g * sum_g; + sum_bb -= 16.0f * sum_b * sum_b; + sum_rg -= 16.0f * sum_r * sum_g; + sum_rb -= 16.0f * sum_r * sum_b; + sum_gb -= 16.0f * sum_g * sum_b; + /* the point on the color line is the average */ + point[0] = sum_r; + point[1] = sum_g; + point[2] = sum_b; + #if USE_COV_MAT + /* + The following idea was from ryg. + (https://mollyrocket.com/forums/viewtopic.php?t=392) + The method worked great (less RMSE than mine) most of + the time, but had some issues handling some simple + boundary cases, like full green next to full red, + which would generate a covariance matrix like this: + + | 1 -1 0 | + | -1 1 0 | + | 0 0 0 | + + For a given starting vector, the power method can + generate all zeros! So no starting with {1,1,1} + as I was doing! This kind of error is still a + slight posibillity, but will be very rare. + */ + /* use the covariance matrix directly + (1st iteration, don't use all 1.0 values!) */ + sum_r = 1.0f; + sum_g = 2.718281828f; + sum_b = 3.141592654f; + direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; + direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; + direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; + /* 2nd iteration, use results from the 1st guy */ + sum_r = direction[0]; + sum_g = direction[1]; + sum_b = direction[2]; + direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; + direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; + direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; + /* 3rd iteration, use results from the 2nd guy */ + sum_r = direction[0]; + sum_g = direction[1]; + sum_b = direction[2]; + direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; + direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; + direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; + #else + /* use my standard deviation method + (very robust, a tiny bit slower and less accurate) */ + direction[0] = sqrt( sum_rr ); + direction[1] = sqrt( sum_gg ); + direction[2] = sqrt( sum_bb ); + /* which has a greater component */ + if( sum_gg > sum_rr ) + { + /* green has greater component, so base the other signs off of green */ + if( sum_rg < 0.0f ) + { + direction[0] = -direction[0]; + } + if( sum_gb < 0.0f ) + { + direction[2] = -direction[2]; + } + } else + { + /* red has a greater component */ + if( sum_rg < 0.0f ) + { + direction[1] = -direction[1]; + } + if( sum_rb < 0.0f ) + { + direction[2] = -direction[2]; + } + } + #endif +} + +void LSE_master_colors_max_min( + int *cmax, int *cmin, + int channels, + const unsigned char *const uncompressed ) +{ + int i, j; + /* the master colors */ + int c0[3], c1[3]; + /* used for fitting the line */ + float sum_x[] = { 0.0f, 0.0f, 0.0f }; + float sum_x2[] = { 0.0f, 0.0f, 0.0f }; + float dot_max = 1.0f, dot_min = -1.0f; + float vec_len2 = 0.0f; + float dot; + /* error check */ + if( (channels < 3) || (channels > 4) ) + { + return; + } + compute_color_line_STDEV( uncompressed, channels, sum_x, sum_x2 ); + vec_len2 = 1.0f / ( 0.00001f + + sum_x2[0]*sum_x2[0] + sum_x2[1]*sum_x2[1] + sum_x2[2]*sum_x2[2] ); + /* finding the max and min vector values */ + dot_max = + ( + sum_x2[0] * uncompressed[0] + + sum_x2[1] * uncompressed[1] + + sum_x2[2] * uncompressed[2] + ); + dot_min = dot_max; + for( i = 1; i < 16; ++i ) + { + dot = + ( + sum_x2[0] * uncompressed[i*channels+0] + + sum_x2[1] * uncompressed[i*channels+1] + + sum_x2[2] * uncompressed[i*channels+2] + ); + if( dot < dot_min ) + { + dot_min = dot; + } else if( dot > dot_max ) + { + dot_max = dot; + } + } + /* and the offset (from the average location) */ + dot = sum_x2[0]*sum_x[0] + sum_x2[1]*sum_x[1] + sum_x2[2]*sum_x[2]; + dot_min -= dot; + dot_max -= dot; + /* post multiply by the scaling factor */ + dot_min *= vec_len2; + dot_max *= vec_len2; + /* OK, build the master colors */ + for( i = 0; i < 3; ++i ) + { + /* color 0 */ + c0[i] = (int)(0.5f + sum_x[i] + dot_max * sum_x2[i]); + if( c0[i] < 0 ) + { + c0[i] = 0; + } else if( c0[i] > 255 ) + { + c0[i] = 255; + } + /* color 1 */ + c1[i] = (int)(0.5f + sum_x[i] + dot_min * sum_x2[i]); + if( c1[i] < 0 ) + { + c1[i] = 0; + } else if( c1[i] > 255 ) + { + c1[i] = 255; + } + } + /* down_sample (with rounding?) */ + i = rgb_to_565( c0[0], c0[1], c0[2] ); + j = rgb_to_565( c1[0], c1[1], c1[2] ); + if( i > j ) + { + *cmax = i; + *cmin = j; + } else + { + *cmax = j; + *cmin = i; + } +} + +void + compress_DDS_color_block + ( + int channels, + const unsigned char *const uncompressed, + unsigned char compressed[8] + ) +{ + /* variables */ + int i; + int next_bit; + int enc_c0, enc_c1; + int c0[4], c1[4]; + float color_line[] = { 0.0f, 0.0f, 0.0f, 0.0f }; + float vec_len2 = 0.0f, dot_offset = 0.0f; + /* stupid order */ + int swizzle4[] = { 0, 2, 3, 1 }; + /* get the master colors */ + LSE_master_colors_max_min( &enc_c0, &enc_c1, channels, uncompressed ); + /* store the 565 color 0 and color 1 */ + compressed[0] = (enc_c0 >> 0) & 255; + compressed[1] = (enc_c0 >> 8) & 255; + compressed[2] = (enc_c1 >> 0) & 255; + compressed[3] = (enc_c1 >> 8) & 255; + /* zero out the compressed data */ + compressed[4] = 0; + compressed[5] = 0; + compressed[6] = 0; + compressed[7] = 0; + /* reconstitute the master color vectors */ + rgb_888_from_565( enc_c0, &c0[0], &c0[1], &c0[2] ); + rgb_888_from_565( enc_c1, &c1[0], &c1[1], &c1[2] ); + /* the new vector */ + vec_len2 = 0.0f; + for( i = 0; i < 3; ++i ) + { + color_line[i] = (float)(c1[i] - c0[i]); + vec_len2 += color_line[i] * color_line[i]; + } + if( vec_len2 > 0.0f ) + { + vec_len2 = 1.0f / vec_len2; + } + /* pre-proform the scaling */ + color_line[0] *= vec_len2; + color_line[1] *= vec_len2; + color_line[2] *= vec_len2; + /* compute the offset (constant) portion of the dot product */ + dot_offset = color_line[0]*c0[0] + color_line[1]*c0[1] + color_line[2]*c0[2]; + /* store the rest of the bits */ + next_bit = 8*4; + for( i = 0; i < 16; ++i ) + { + /* find the dot product of this color, to place it on the line + (should be [-1,1]) */ + int next_value = 0; + float dot_product = + color_line[0] * uncompressed[i*channels+0] + + color_line[1] * uncompressed[i*channels+1] + + color_line[2] * uncompressed[i*channels+2] - + dot_offset; + /* map to [0,3] */ + next_value = (int)( dot_product * 3.0f + 0.5f ); + if( next_value > 3 ) + { + next_value = 3; + } else if( next_value < 0 ) + { + next_value = 0; + } + /* OK, store this value */ + compressed[next_bit >> 3] |= swizzle4[ next_value ] << (next_bit & 7); + next_bit += 2; + } + /* done compressing to DXT1 */ +} + +void + compress_DDS_alpha_block + ( + const unsigned char *const uncompressed, + unsigned char compressed[8] + ) +{ + /* variables */ + int i; + int next_bit; + int a0, a1; + float scale_me; + /* stupid order */ + int swizzle8[] = { 1, 7, 6, 5, 4, 3, 2, 0 }; + /* get the alpha limits (a0 > a1) */ + a0 = a1 = uncompressed[3]; + for( i = 4+3; i < 16*4; i += 4 ) + { + if( uncompressed[i] > a0 ) + { + a0 = uncompressed[i]; + } else if( uncompressed[i] < a1 ) + { + a1 = uncompressed[i]; + } + } + /* store those limits, and zero the rest of the compressed dataset */ + compressed[0] = a0; + compressed[1] = a1; + /* zero out the compressed data */ + compressed[2] = 0; + compressed[3] = 0; + compressed[4] = 0; + compressed[5] = 0; + compressed[6] = 0; + compressed[7] = 0; + /* store the all of the alpha values */ + next_bit = 8*2; + scale_me = 7.9999f / (a0 - a1); + for( i = 3; i < 16*4; i += 4 ) + { + /* convert this alpha value to a 3 bit number */ + int svalue; + int value = (int)((uncompressed[i] - a1) * scale_me); + svalue = swizzle8[ value&7 ]; + /* OK, store this value, start with the 1st byte */ + compressed[next_bit >> 3] |= svalue << (next_bit & 7); + if( (next_bit & 7) > 5 ) + { + /* spans 2 bytes, fill in the start of the 2nd byte */ + compressed[1 + (next_bit >> 3)] |= svalue >> (8 - (next_bit & 7) ); + } + next_bit += 3; + } + /* done compressing to DXT1 */ +} diff --git a/lib/soil2/image_DXT.h b/lib/soil2/image_DXT.h new file mode 100644 index 0000000..ce77164 --- /dev/null +++ b/lib/soil2/image_DXT.h @@ -0,0 +1,123 @@ +/* + Jonathan Dummer + 2007-07-31-10.32 + + simple DXT compression / decompression code + + public domain +*/ + +#ifndef HEADER_IMAGE_DXT +#define HEADER_IMAGE_DXT + +/** + Converts an image from an array of unsigned chars (RGB or RGBA) to + DXT1 or DXT5, then saves the converted image to disk. + \return 0 if failed, otherwise returns 1 +**/ +int +save_image_as_DDS +( + const char *filename, + int width, int height, int channels, + const unsigned char *const data +); + +/** + take an image and convert it to DXT1 (no alpha) +**/ +unsigned char* +convert_image_to_DXT1 +( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size +); + +/** + take an image and convert it to DXT5 (with alpha) +**/ +unsigned char* +convert_image_to_DXT5 +( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size +); + +/** A bunch of DirectDraw Surface structures and flags **/ +typedef struct +{ + unsigned int dwMagic; + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwHeight; + unsigned int dwWidth; + unsigned int dwPitchOrLinearSize; + unsigned int dwDepth; + unsigned int dwMipMapCount; + unsigned int dwReserved1[ 11 ]; + + /* DDPIXELFORMAT */ + struct + { + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwFourCC; + unsigned int dwRGBBitCount; + unsigned int dwRBitMask; + unsigned int dwGBitMask; + unsigned int dwBBitMask; + unsigned int dwAlphaBitMask; + } + sPixelFormat; + + /* DDCAPS2 */ + struct + { + unsigned int dwCaps1; + unsigned int dwCaps2; + unsigned int dwDDSX; + unsigned int dwReserved; + } + sCaps; + unsigned int dwReserved2; +} +DDS_header ; + +/* the following constants were copied directly off the MSDN website */ + +/* The dwFlags member of the original DDSURFACEDESC2 structure + can be set to one or more of the following values. */ +#define DDSD_CAPS 0x00000001 +#define DDSD_HEIGHT 0x00000002 +#define DDSD_WIDTH 0x00000004 +#define DDSD_PITCH 0x00000008 +#define DDSD_PIXELFORMAT 0x00001000 +#define DDSD_MIPMAPCOUNT 0x00020000 +#define DDSD_LINEARSIZE 0x00080000 +#define DDSD_DEPTH 0x00800000 + +/* DirectDraw Pixel Format */ +#define DDPF_ALPHAPIXELS 0x00000001 +#define DDPF_FOURCC 0x00000004 +#define DDPF_RGB 0x00000040 + +/* The dwCaps1 member of the DDSCAPS2 structure can be + set to one or more of the following values. */ +#define DDSCAPS_COMPLEX 0x00000008 +#define DDSCAPS_TEXTURE 0x00001000 +#define DDSCAPS_MIPMAP 0x00400000 + +/* The dwCaps2 member of the DDSCAPS2 structure can be + set to one or more of the following values. */ +#define DDSCAPS2_CUBEMAP 0x00000200 +#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 +#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 +#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 +#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 +#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 +#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 +#define DDSCAPS2_VOLUME 0x00200000 + +#endif /* HEADER_IMAGE_DXT */ diff --git a/lib/soil2/image_helper.c b/lib/soil2/image_helper.c new file mode 100644 index 0000000..445f6bb --- /dev/null +++ b/lib/soil2/image_helper.c @@ -0,0 +1,435 @@ +/* + Jonathan Dummer + + image helper functions + + MIT license +*/ + +#include "image_helper.h" +#include +#include + +/* Upscaling the image uses simple bilinear interpolation */ +int + up_scale_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int resampled_width, int resampled_height + ) +{ + float dx, dy; + int x, y, c; + + /* error(s) check */ + if ( (width < 1) || (height < 1) || + (resampled_width < 2) || (resampled_height < 2) || + (channels < 1) || + (NULL == orig) || (NULL == resampled) ) + { + /* signify badness */ + return 0; + } + /* + for each given pixel in the new map, find the exact location + from the original map which would contribute to this guy + */ + dx = (width - 1.0f) / (resampled_width - 1.0f); + dy = (height - 1.0f) / (resampled_height - 1.0f); + for ( y = 0; y < resampled_height; ++y ) + { + /* find the base y index and fractional offset from that */ + float sampley = y * dy; + int inty = (int)sampley; + /* if( inty < 0 ) { inty = 0; } else */ + if( inty > height - 2 ) { inty = height - 2; } + sampley -= inty; + for ( x = 0; x < resampled_width; ++x ) + { + float samplex = x * dx; + int intx = (int)samplex; + int base_index; + /* find the base x index and fractional offset from that */ + /* if( intx < 0 ) { intx = 0; } else */ + if( intx > width - 2 ) { intx = width - 2; } + samplex -= intx; + /* base index into the original image */ + base_index = (inty * width + intx) * channels; + for ( c = 0; c < channels; ++c ) + { + /* do the sampling */ + float value = 0.5f; + value += orig[base_index] + *(1.0f-samplex)*(1.0f-sampley); + value += orig[base_index+channels] + *(samplex)*(1.0f-sampley); + value += orig[base_index+width*channels] + *(1.0f-samplex)*(sampley); + value += orig[base_index+width*channels+channels] + *(samplex)*(sampley); + /* move to the next channel */ + ++base_index; + /* save the new value */ + resampled[y*resampled_width*channels+x*channels+c] = + (unsigned char)(value); + } + } + } + /* done */ + return 1; +} + +int + mipmap_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int block_size_x, int block_size_y + ) +{ + int mip_width, mip_height; + int i, j, c; + + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 1) || (orig == NULL) || + (resampled == NULL) || + (block_size_x < 1) || (block_size_y < 1) ) + { + /* nothing to do */ + return 0; + } + mip_width = width / block_size_x; + mip_height = height / block_size_y; + if( mip_width < 1 ) + { + mip_width = 1; + } + if( mip_height < 1 ) + { + mip_height = 1; + } + for( j = 0; j < mip_height; ++j ) + { + for( i = 0; i < mip_width; ++i ) + { + for( c = 0; c < channels; ++c ) + { + const int index = (j*block_size_y)*width*channels + (i*block_size_x)*channels + c; + int sum_value; + int u,v; + int u_block = block_size_x; + int v_block = block_size_y; + int block_area; + /* do a bit of checking so we don't over-run the boundaries + (necessary for non-square textures!) */ + if( block_size_x * (i+1) > width ) + { + u_block = width - i*block_size_y; + } + if( block_size_y * (j+1) > height ) + { + v_block = height - j*block_size_y; + } + block_area = u_block*v_block; + /* for this pixel, see what the average + of all the values in the block are. + note: start the sum at the rounding value, not at 0 */ + sum_value = block_area >> 1; + for( v = 0; v < v_block; ++v ) + for( u = 0; u < u_block; ++u ) + { + sum_value += orig[index + v*width*channels + u*channels]; + } + resampled[j*mip_width*channels + i*channels + c] = sum_value / block_area; + } + } + } + return 1; +} + +int + scale_image_RGB_to_NTSC_safe + ( + unsigned char* orig, + int width, int height, int channels + ) +{ + const float scale_lo = 16.0f - 0.499f; + const float scale_hi = 235.0f + 0.499f; + int i, j; + int nc = channels; + unsigned char scale_LUT[256]; + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 1) || (orig == NULL) ) + { + /* nothing to do */ + return 0; + } + /* set up the scaling Look Up Table */ + for( i = 0; i < 256; ++i ) + { + scale_LUT[i] = (unsigned char)((scale_hi - scale_lo) * i / 255.0f + scale_lo); + } + /* for channels = 2 or 4, ignore the alpha component */ + nc -= 1 - (channels & 1); + /* OK, go through the image and scale any non-alpha components */ + for( i = 0; i < width*height*channels; i += channels ) + { + for( j = 0; j < nc; ++j ) + { + orig[i+j] = scale_LUT[orig[i+j]]; + } + } + return 1; +} + +unsigned char clamp_byte( int x ) { return ( (x) < 0 ? (0) : ( (x) > 255 ? 255 : (x) ) ); } + +/* + This function takes the RGB components of the image + and converts them into YCoCg. 3 components will be + re-ordered to CoYCg (for optimum DXT1 compression), + while 4 components will be ordered CoCgAY (for DXT5 + compression). +*/ +int + convert_RGB_to_YCoCg + ( + unsigned char* orig, + int width, int height, int channels + ) +{ + int i; + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 3) || (channels > 4) || + (orig == NULL) ) + { + /* nothing to do */ + return -1; + } + /* do the conversion */ + if( channels == 3 ) + { + for( i = 0; i < width*height*3; i += 3 ) + { + int r = orig[i+0]; + int g = (orig[i+1] + 1) >> 1; + int b = orig[i+2]; + int tmp = (2 + r + b) >> 2; + /* Co */ + orig[i+0] = clamp_byte( 128 + ((r - b + 1) >> 1) ); + /* Y */ + orig[i+1] = clamp_byte( g + tmp ); + /* Cg */ + orig[i+2] = clamp_byte( 128 + g - tmp ); + } + } else + { + for( i = 0; i < width*height*4; i += 4 ) + { + int r = orig[i+0]; + int g = (orig[i+1] + 1) >> 1; + int b = orig[i+2]; + unsigned char a = orig[i+3]; + int tmp = (2 + r + b) >> 2; + /* Co */ + orig[i+0] = clamp_byte( 128 + ((r - b + 1) >> 1) ); + /* Cg */ + orig[i+1] = clamp_byte( 128 + g - tmp ); + /* Alpha */ + orig[i+2] = a; + /* Y */ + orig[i+3] = clamp_byte( g + tmp ); + } + } + /* done */ + return 0; +} + +/* + This function takes the YCoCg components of the image + and converts them into RGB. See above. +*/ +int + convert_YCoCg_to_RGB + ( + unsigned char* orig, + int width, int height, int channels + ) +{ + int i; + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 3) || (channels > 4) || + (orig == NULL) ) + { + /* nothing to do */ + return -1; + } + /* do the conversion */ + if( channels == 3 ) + { + for( i = 0; i < width*height*3; i += 3 ) + { + int co = orig[i+0] - 128; + int y = orig[i+1]; + int cg = orig[i+2] - 128; + /* R */ + orig[i+0] = clamp_byte( y + co - cg ); + /* G */ + orig[i+1] = clamp_byte( y + cg ); + /* B */ + orig[i+2] = clamp_byte( y - co - cg ); + } + } else + { + for( i = 0; i < width*height*4; i += 4 ) + { + int co = orig[i+0] - 128; + int cg = orig[i+1] - 128; + unsigned char a = orig[i+2]; + int y = orig[i+3]; + /* R */ + orig[i+0] = clamp_byte( y + co - cg ); + /* G */ + orig[i+1] = clamp_byte( y + cg ); + /* B */ + orig[i+2] = clamp_byte( y - co - cg ); + /* A */ + orig[i+3] = a; + } + } + /* done */ + return 0; +} + +float +find_max_RGBE +( + unsigned char *image, + int width, int height +) +{ + float max_val = 0.0f; + unsigned char *img = image; + int i, j; + for( i = width * height; i > 0; --i ) + { + /* float scale = powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ + float scale = ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); + for( j = 0; j < 3; ++j ) + { + if( img[j] * scale > max_val ) + { + max_val = img[j] * scale; + } + } + /* next pixel */ + img += 4; + } + return max_val; +} + +int +RGBE_to_RGBdivA +( + unsigned char *image, + int width, int height, + int rescale_to_max +) +{ + /* local variables */ + int i, iv; + unsigned char *img = image; + float scale = 1.0f; + /* error check */ + if( (!image) || (width < 1) || (height < 1) ) + { + return 0; + } + /* convert (note: no negative numbers, but 0.0 is possible) */ + if( rescale_to_max ) + { + scale = 255.0f / find_max_RGBE( image, width, height ); + } + for( i = width * height; i > 0; --i ) + { + /* decode this pixel, and find the max */ + float r,g,b,e, m; + /* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ + e = scale * ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); + r = e * img[0]; + g = e * img[1]; + b = e * img[2]; + m = (r > g) ? r : g; + m = (b > m) ? b : m; + /* and encode it into RGBdivA */ + iv = (m != 0.0f) ? (int)(255.0f / m) : 1.0f; + iv = (iv < 1) ? 1 : iv; + img[3] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * r + 0.5f); + img[0] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * g + 0.5f); + img[1] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * b + 0.5f); + img[2] = (iv > 255) ? 255 : iv; + /* and on to the next pixel */ + img += 4; + } + return 1; +} + +int +RGBE_to_RGBdivA2 +( + unsigned char *image, + int width, int height, + int rescale_to_max +) +{ + /* local variables */ + int i, iv; + unsigned char *img = image; + float scale = 1.0f; + /* error check */ + if( (!image) || (width < 1) || (height < 1) ) + { + return 0; + } + /* convert (note: no negative numbers, but 0.0 is possible) */ + if( rescale_to_max ) + { + scale = 255.0f * 255.0f / find_max_RGBE( image, width, height ); + } + for( i = width * height; i > 0; --i ) + { + /* decode this pixel, and find the max */ + float r,g,b,e, m; + /* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ + e = scale * ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); + r = e * img[0]; + g = e * img[1]; + b = e * img[2]; + m = (r > g) ? r : g; + m = (b > m) ? b : m; + /* and encode it into RGBdivA */ + iv = (m != 0.0f) ? (int)sqrtf( 255.0f * 255.0f / m ) : 1.0f; + iv = (iv < 1) ? 1 : iv; + img[3] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * img[3] * r / 255.0f + 0.5f); + img[0] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * img[3] * g / 255.0f + 0.5f); + img[1] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * img[3] * b / 255.0f + 0.5f); + img[2] = (iv > 255) ? 255 : iv; + /* and on to the next pixel */ + img += 4; + } + return 1; +} diff --git a/lib/soil2/image_helper.h b/lib/soil2/image_helper.h new file mode 100644 index 0000000..abb257c --- /dev/null +++ b/lib/soil2/image_helper.h @@ -0,0 +1,115 @@ +/* + Jonathan Dummer + + Image helper functions + + MIT license +*/ + +#ifndef HEADER_IMAGE_HELPER +#define HEADER_IMAGE_HELPER + +#ifdef __cplusplus +extern "C" { +#endif + +/** + This function upscales an image. + Not to be used to create MIPmaps, + but to make it square, + or to make it a power-of-two sized. +**/ +int + up_scale_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int resampled_width, int resampled_height + ); + +/** + This function downscales an image. + Used for creating MIPmaps, + the incoming image should be a + power-of-two sized. +**/ +int + mipmap_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int block_size_x, int block_size_y + ); + +/** + This function takes the RGB components of the image + and scales each channel from [0,255] to [16,235]. + This makes the colors "Safe" for display on NTSC + displays. Note that this is _NOT_ a good idea for + loading images like normal- or height-maps! +**/ +int + scale_image_RGB_to_NTSC_safe + ( + unsigned char* orig, + int width, int height, int channels + ); + +/** + This function takes the RGB components of the image + and converts them into YCoCg. 3 components will be + re-ordered to CoYCg (for optimum DXT1 compression), + while 4 components will be ordered CoCgAY (for DXT5 + compression). +**/ +int + convert_RGB_to_YCoCg + ( + unsigned char* orig, + int width, int height, int channels + ); + +/** + This function takes the YCoCg components of the image + and converts them into RGB. See above. +**/ +int + convert_YCoCg_to_RGB + ( + unsigned char* orig, + int width, int height, int channels + ); + +/** + Converts an HDR image from an array + of unsigned chars (RGBE) to RGBdivA + \return 0 if failed, otherwise returns 1 +**/ +int + RGBE_to_RGBdivA + ( + unsigned char *image, + int width, int height, + int rescale_to_max + ); + +/** + Converts an HDR image from an array + of unsigned chars (RGBE) to RGBdivA2 + \return 0 if failed, otherwise returns 1 +**/ +int + RGBE_to_RGBdivA2 + ( + unsigned char *image, + int width, int height, + int rescale_to_max + ); + +#ifdef __cplusplus +} +#endif + +#endif /* HEADER_IMAGE_HELPER */ diff --git a/lib/soil2/stb_image_aug.c b/lib/soil2/stb_image_aug.c new file mode 100644 index 0000000..2fa7233 --- /dev/null +++ b/lib/soil2/stb_image_aug.c @@ -0,0 +1,3682 @@ +/* stbi-1.16 - public domain JPEG/PNG reader - http://nothings.org/stb_image.c + when you control the images you're loading + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline (no JPEG progressive, no oddball channel decimations) + PNG non-interlaced + BMP non-1bpp, non-RLE + TGA (not sure what subset, if a subset) + PSD (composited view only, no extra channels) + HDR (radiance rgbE format) + writes BMP,TGA (define STBI_NO_WRITE to remove code) + decoded from memory or through stdio FILE (define STBI_NO_STDIO to remove code) + supports installable dequantizing-IDCT, YCbCr-to-RGB conversion (define STBI_SIMD) + + TODO: + stbi_info_* + + history: + 1.16 major bugfix - convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug; header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi_bmp_load() and stbi_tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less + than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant +*/ + +#include "stb_image_aug.h" + +#ifndef STBI_NO_HDR +#include // ldexp +#include // strcmp +#endif + +#ifndef STBI_NO_STDIO +#include +#endif +#include +#include +#include +#include + +#ifndef _MSC_VER + #ifdef __cplusplus + #define __forceinline inline + #else + #define __forceinline + #endif +#endif + + +// implementation: +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef signed short int16; +typedef unsigned int uint32; +typedef signed int int32; +typedef unsigned int uint; + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(uint32)==4]; + +#if defined(STBI_NO_STDIO) && !defined(STBI_NO_WRITE) +#define STBI_NO_WRITE +#endif + +#ifndef STBI_NO_DDS +#include "stbi_DDS_aug.h" +#endif + +// I (JLD) want full messages for SOIL +#define STBI_FAILURE_USERMSG 1 + +////////////////////////////////////////////////////////////////////////////// +// +// Generic API that works on all image types +// + +// this is not threadsafe +static char *failure_reason; + +char *stbi_failure_reason(void) +{ + return failure_reason; +} + +static int e(char *str) +{ + failure_reason = str; + return 0; +} + +#ifdef STBI_NO_FAILURE_STRINGS + #define e(x,y) 0 +#elif defined(STBI_FAILURE_USERMSG) + #define e(x,y) e(y) +#else + #define e(x,y) e(x) +#endif + +#define epf(x,y) ((float *) (e(x,y)?NULL:NULL)) +#define epuc(x,y) ((unsigned char *) (e(x,y)?NULL:NULL)) + +void stbi_image_free(void *retval_from_stbi_load) +{ + free(retval_from_stbi_load); +} + +#define MAX_LOADERS 32 +stbi_loader *loaders[MAX_LOADERS]; +static int max_loaders = 0; + +int stbi_register_loader(stbi_loader *loader) +{ + int i; + for (i=0; i < MAX_LOADERS; ++i) { + // already present? + if (loaders[i] == loader) + return 1; + // end of the list? + if (loaders[i] == NULL) { + loaders[i] = loader; + max_loaders = i+1; + return 1; + } + } + // no room for it + return 0; +} + +#ifndef STBI_NO_HDR +static float *ldr_to_hdr(stbi_uc *data, int x, int y, int comp); +static stbi_uc *hdr_to_ldr(float *data, int x, int y, int comp); +#endif + +#ifndef STBI_NO_STDIO +unsigned char *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = fopen(filename, "rb"); + unsigned char *result; + if (!f) return epuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +unsigned char *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + int i; + if (stbi_jpeg_test_file(f)) + return stbi_jpeg_load_from_file(f,x,y,comp,req_comp); + if (stbi_png_test_file(f)) + return stbi_png_load_from_file(f,x,y,comp,req_comp); + if (stbi_bmp_test_file(f)) + return stbi_bmp_load_from_file(f,x,y,comp,req_comp); + if (stbi_psd_test_file(f)) + return stbi_psd_load_from_file(f,x,y,comp,req_comp); + #ifndef STBI_NO_DDS + if (stbi_dds_test_file(f)) + return stbi_dds_load_from_file(f,x,y,comp,req_comp); + #endif + #ifndef STBI_NO_HDR + if (stbi_hdr_test_file(f)) { + float *hdr = stbi_hdr_load_from_file(f, x,y,comp,req_comp); + return hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } + #endif + for (i=0; i < max_loaders; ++i) + if (loaders[i]->test_file(f)) + return loaders[i]->load_from_file(f,x,y,comp,req_comp); + // test tga last because it's a crappy test! + if (stbi_tga_test_file(f)) + return stbi_tga_load_from_file(f,x,y,comp,req_comp); + return epuc("unknown image type", "Image not of any known type, or corrupt"); +} +#endif + +unsigned char *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + int i; + if (stbi_jpeg_test_memory(buffer,len)) + return stbi_jpeg_load_from_memory(buffer,len,x,y,comp,req_comp); + if (stbi_png_test_memory(buffer,len)) + return stbi_png_load_from_memory(buffer,len,x,y,comp,req_comp); + if (stbi_bmp_test_memory(buffer,len)) + return stbi_bmp_load_from_memory(buffer,len,x,y,comp,req_comp); + if (stbi_psd_test_memory(buffer,len)) + return stbi_psd_load_from_memory(buffer,len,x,y,comp,req_comp); + #ifndef STBI_NO_DDS + if (stbi_dds_test_memory(buffer,len)) + return stbi_dds_load_from_memory(buffer,len,x,y,comp,req_comp); + #endif + #ifndef STBI_NO_HDR + if (stbi_hdr_test_memory(buffer, len)) { + float *hdr = stbi_hdr_load_from_memory(buffer, len,x,y,comp,req_comp); + return hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } + #endif + for (i=0; i < max_loaders; ++i) + if (loaders[i]->test_memory(buffer,len)) + return loaders[i]->load_from_memory(buffer,len,x,y,comp,req_comp); + // test tga last because it's a crappy test! + if (stbi_tga_test_memory(buffer,len)) + return stbi_tga_load_from_memory(buffer,len,x,y,comp,req_comp); + return epuc("unknown image type", "Image not of any known type, or corrupt"); +} + +#ifndef STBI_NO_HDR + +#ifndef STBI_NO_STDIO +float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = fopen(filename, "rb"); + float *result; + if (!f) return epf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + #ifndef STBI_NO_HDR + if (stbi_hdr_test_file(f)) + return stbi_hdr_load_from_file(f,x,y,comp,req_comp); + #endif + data = stbi_load_from_file(f, x, y, comp, req_comp); + if (data) + return ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return epf("unknown image type", "Image not of any known type, or corrupt"); +} +#endif + +float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *data; + #ifndef STBI_NO_HDR + if (stbi_hdr_test_memory(buffer, len)) + return stbi_hdr_load_from_memory(buffer, len,x,y,comp,req_comp); + #endif + data = stbi_load_from_memory(buffer, len, x, y, comp, req_comp); + if (data) + return ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return epf("unknown image type", "Image not of any known type, or corrupt"); +} +#endif + +// these is-hdr-or-not is defined independent of whether STBI_NO_HDR is +// defined, for API simplicity; if STBI_NO_HDR is defined, it always +// reports false! + +int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) +{ + #ifndef STBI_NO_HDR + return stbi_hdr_test_memory(buffer, len); + #else + return 0; + #endif +} + +#ifndef STBI_NO_STDIO +extern int stbi_is_hdr (char const *filename) +{ + FILE *f = fopen(filename, "rb"); + int result=0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +extern int stbi_is_hdr_from_file(FILE *f) +{ + #ifndef STBI_NO_HDR + return stbi_hdr_test_file(f); + #else + return 0; + #endif +} + +#endif + +// @TODO: get image dimensions & components without fully decoding +#ifndef STBI_NO_STDIO +extern int stbi_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif +extern int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +#ifndef STBI_NO_HDR +static float h2l_gamma_i=1.0f/2.2f, h2l_scale_i=1.0f; +static float l2h_gamma=2.2f, l2h_scale=1.0f; + +void stbi_hdr_to_ldr_gamma(float gamma) { h2l_gamma_i = 1/gamma; } +void stbi_hdr_to_ldr_scale(float scale) { h2l_scale_i = 1/scale; } + +void stbi_ldr_to_hdr_gamma(float gamma) { l2h_gamma = gamma; } +void stbi_ldr_to_hdr_scale(float scale) { l2h_scale = scale; } +#endif + + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum +{ + SCAN_load=0, + SCAN_type, + SCAN_header, +}; + +typedef struct +{ + uint32 img_x, img_y; + int img_n, img_out_n; + + #ifndef STBI_NO_STDIO + FILE *img_file; + #endif + uint8 *img_buffer, *img_buffer_end; +} stbi; + +#ifndef STBI_NO_STDIO +static void start_file(stbi *s, FILE *f) +{ + s->img_file = f; +} +#endif + +static void start_mem(stbi *s, uint8 const *buffer, int len) +{ +#ifndef STBI_NO_STDIO + s->img_file = NULL; +#endif + s->img_buffer = (uint8 *) buffer; + s->img_buffer_end = (uint8 *) buffer+len; +} + +__forceinline static int get8(stbi *s) +{ +#ifndef STBI_NO_STDIO + if (s->img_file) { + int c = fgetc(s->img_file); + return c == EOF ? 0 : c; + } +#endif + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + return 0; +} + +__forceinline static int at_eof(stbi *s) +{ +#ifndef STBI_NO_STDIO + if (s->img_file) + return feof(s->img_file); +#endif + return s->img_buffer >= s->img_buffer_end; +} + +__forceinline static uint8 get8u(stbi *s) +{ + return (uint8) get8(s); +} + +static void skip(stbi *s, int n) +{ +#ifndef STBI_NO_STDIO + if (s->img_file) + fseek(s->img_file, n, SEEK_CUR); + else +#endif + s->img_buffer += n; +} + +static int get16(stbi *s) +{ + int z = get8(s); + return (z << 8) + get8(s); +} + +static uint32 get32(stbi *s) +{ + uint32 z = get16(s); + return (z << 16) + get16(s); +} + +static int get16le(stbi *s) +{ + int z = get8(s); + return z + (get8(s) << 8); +} + +static uint32 get32le(stbi *s) +{ + uint32 z = get16le(s); + return z + (get16le(s) << 16); +} + +static void getn(stbi *s, stbi_uc *buffer, int n) +{ +#ifndef STBI_NO_STDIO + if (s->img_file) { + fread(buffer, 1, n, s->img_file); + return; + } +#endif + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; +} + +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static uint8 compute_y(int r, int g, int b) +{ + return (uint8) (((r*77) + (g*150) + (29*b)) >> 8); +} + +static unsigned char *convert_format(unsigned char *data, int img_n, int req_comp, uint x, uint y) +{ + int i,j; + unsigned char *good; + + if (req_comp == img_n) return data; + assert(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char *) malloc(req_comp * x * y); + if (good == NULL) { + free(data); + return epuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + unsigned char *src = data + j * x * img_n ; + unsigned char *dest = good + j * x * req_comp; + + #define COMBO(a,b) ((a)*8+(b)) + #define CASE(a,b) case COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch(COMBO(img_n, req_comp)) { + CASE(1,2) dest[0]=src[0], dest[1]=255; break; + CASE(1,3) dest[0]=dest[1]=dest[2]=src[0]; break; + CASE(1,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; break; + CASE(2,1) dest[0]=src[0]; break; + CASE(2,3) dest[0]=dest[1]=dest[2]=src[0]; break; + CASE(2,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; break; + CASE(3,4) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; break; + CASE(3,1) dest[0]=compute_y(src[0],src[1],src[2]); break; + CASE(3,2) dest[0]=compute_y(src[0],src[1],src[2]), dest[1] = 255; break; + CASE(4,1) dest[0]=compute_y(src[0],src[1],src[2]); break; + CASE(4,2) dest[0]=compute_y(src[0],src[1],src[2]), dest[1] = src[3]; break; + CASE(4,3) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; break; + default: assert(0); + } + #undef CASE + } + + free(data); + return good; +} + +#ifndef STBI_NO_HDR +static float *ldr_to_hdr(stbi_uc *data, int x, int y, int comp) +{ + int i,k,n; + float *output = (float *) malloc(x * y * comp * sizeof(float)); + if (output == NULL) { free(data); return epf("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + output[i*comp + k] = (float) pow(data[i*comp+k]/255.0f, l2h_gamma) * l2h_scale; + } + if (k < comp) output[i*comp + k] = data[i*comp+k]/255.0f; + } + free(data); + return output; +} + +#define float2int(x) ((int) (x)) +static stbi_uc *hdr_to_ldr(float *data, int x, int y, int comp) +{ + int i,k,n; + stbi_uc *output = (stbi_uc *) malloc(x * y * comp); + if (output == NULL) { free(data); return epuc("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + float z = (float) pow(data[i*comp+k]*h2l_scale_i, h2l_gamma_i) * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = float2int(z); + } + if (k < comp) { + float z = data[i*comp+k] * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = float2int(z); + } + } + free(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder (not actually fully baseline implementation) +// +// simple implementation +// - channel subsampling of at most 2 in each dimension +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - uses a lot of intermediate memory, could cache poorly +// - load http://nothings.org/remote/anemones.jpg 3 times on 2.8Ghz P4 +// stb_jpeg: 1.34 seconds (MSVC6, default release build) +// stb_jpeg: 1.06 seconds (MSVC6, processor = Pentium Pro) +// IJL11.dll: 1.08 seconds (compiled by intel) +// IJG 1998: 0.98 seconds (MSVC6, makefile provided by IJG) +// IJG 1998: 0.95 seconds (MSVC6, makefile + proc=PPro) + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct +{ + uint8 fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + uint16 code[256]; + uint8 values[256]; + uint8 size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} huffman; + +typedef struct +{ + #if STBI_SIMD + unsigned short dequant2[4][64]; + #endif + stbi s; + huffman huff_dc[4]; + huffman huff_ac[4]; + uint8 dequant[4][64]; + +// sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + +// definition of jpeg image component + struct + { + int id; + int h,v; + int tq; + int hd,ha; + int dc_pred; + + int x,y,w2,h2; + uint8 *data; + void *raw_data; + uint8 *linebuf; + } img_comp[4]; + + uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int scan_n, order[4]; + int restart_interval, todo; +} jpeg; + +static int build_huffman(huffman *h, int *count) +{ + int i,j,k=0,code; + // build size list for each symbol (from JPEG spec) + for (i=0; i < 16; ++i) + for (j=0; j < count[i]; ++j) + h->size[k++] = (uint8) (i+1); + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for(j=1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (uint16) (code++); + if (code-1 >= (1 << j)) return e("bad code lengths","Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16-j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i=0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS-s); + int m = 1 << (FAST_BITS-s); + for (j=0; j < m; ++j) { + h->fast[c+j] = (uint8) i; + } + } + } + return 1; +} + +static void grow_buffer_unsafe(jpeg *j) +{ + do { + int b = j->nomore ? 0 : get8(&j->s); + if (b == 0xff) { + int c = get8(&j->s); + if (c != 0) { + j->marker = (unsigned char) c; + j->nomore = 1; + return; + } + } + j->code_buffer = (j->code_buffer << 8) | b; + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static uint32 bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; + +// decode a jpeg huffman value from the bitstream +__forceinline static int decode(jpeg *j, huffman *h) +{ + unsigned int temp; + int c,k; + + if (j->code_bits < 16) grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (j->code_bits - FAST_BITS)) & ((1 << FAST_BITS)-1); + k = h->fast[c]; + if (k < 255) { + if (h->size[k] > j->code_bits) + return -1; + j->code_bits -= h->size[k]; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + if (j->code_bits < 16) + temp = (j->code_buffer << (16 - j->code_bits)) & 0xffff; + else + temp = (j->code_buffer >> (j->code_bits - 16)) & 0xffff; + for (k=FAST_BITS+1 ; ; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (j->code_bits - k)) & bmask[k]) + h->delta[k]; + assert((((j->code_buffer) >> (j->code_bits - h->size[c])) & bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + return h->values[c]; +} + +// combined JPEG 'receive' and JPEG 'extend', since baseline +// always extends everything it receives. +__forceinline static int extend_receive(jpeg *j, int n) +{ + unsigned int m = 1 << (n-1); + unsigned int k; + if (j->code_bits < n) grow_buffer_unsafe(j); + k = (j->code_buffer >> (j->code_bits - n)) & bmask[n]; + j->code_bits -= n; + // the following test is probably a random branch that won't + // predict well. I tried to table accelerate it but failed. + // maybe it's compiling as a conditional move? + if (k < m) + return (-1 << n) + k + 1; + else + return k; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static uint8 dezigzag[64+15] = +{ + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63 +}; + +// decode one 64-entry block-- +static int decode_block(jpeg *j, short data[64], huffman *hdc, huffman *hac, int b) +{ + int diff,dc,k; + int t = decode(j, hdc); + if (t < 0) return e("bad huffman code","Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data,0,64*sizeof(data[0])); + + diff = t ? extend_receive(j, t) : 0; + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short) dc; + + // decode AC components, see JPEG spec + k = 1; + do { + int r,s; + int rs = decode(j, hac); + if (rs < 0) return e("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + data[dezigzag[k++]] = (short) extend_receive(j,s); + } + } while (k < 64); + return 1; +} + +// take a -128..127 value and clamp it and convert to 0..255 +__forceinline static uint8 clamp(int x) +{ + x += 128; + // trick to use a single test to catch both cases + if ((unsigned int) x > 255) { + if (x < 0) return 0; + if (x > 255) return 255; + } + return (uint8) x; +} + +#define f2f(x) (int) (((x) * 4096 + 0.5)) +#define fsh(x) ((x) << 12) + +// derived from jidctint -- DCT_ISLOW +#define IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ + int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2+p3) * f2f(0.5411961f); \ + t2 = p1 + p3*f2f(-1.847759065f); \ + t3 = p1 + p2*f2f( 0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = fsh(p2+p3); \ + t1 = fsh(p2-p3); \ + x0 = t0+t3; \ + x3 = t0-t3; \ + x1 = t1+t2; \ + x2 = t1-t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0+t2; \ + p4 = t1+t3; \ + p1 = t0+t3; \ + p2 = t1+t2; \ + p5 = (p3+p4)*f2f( 1.175875602f); \ + t0 = t0*f2f( 0.298631336f); \ + t1 = t1*f2f( 2.053119869f); \ + t2 = t2*f2f( 3.072711026f); \ + t3 = t3*f2f( 1.501321110f); \ + p1 = p5 + p1*f2f(-0.899976223f); \ + p2 = p5 + p2*f2f(-2.562915447f); \ + p3 = p3*f2f(-1.961570560f); \ + p4 = p4*f2f(-0.390180644f); \ + t3 += p1+p4; \ + t2 += p2+p3; \ + t1 += p2+p4; \ + t0 += p1+p3; + +#if !STBI_SIMD +// .344 seconds on 3*anemones.jpg +static void idct_block(uint8 *out, int out_stride, short data[64], uint8 *dequantize) +{ + int i,val[64],*v=val; + uint8 *o,*dq = dequantize; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d,++dq, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0] * dq[0] << 2; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + IDCT_1D(d[ 0]*dq[ 0],d[ 8]*dq[ 8],d[16]*dq[16],d[24]*dq[24], + d[32]*dq[32],d[40]*dq[40],d[48]*dq[48],d[56]*dq[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + x0 += 65536; x1 += 65536; x2 += 65536; x3 += 65536; + o[0] = clamp((x0+t3) >> 17); + o[7] = clamp((x0-t3) >> 17); + o[1] = clamp((x1+t2) >> 17); + o[6] = clamp((x1-t2) >> 17); + o[2] = clamp((x2+t1) >> 17); + o[5] = clamp((x2-t1) >> 17); + o[3] = clamp((x3+t0) >> 17); + o[4] = clamp((x3-t0) >> 17); + } +} +#else +static void idct_block(uint8 *out, int out_stride, short data[64], unsigned short *dequantize) +{ + int i,val[64],*v=val; + uint8 *o; + unsigned short *dq = dequantize; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d,++dq, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0] * dq[0] << 2; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + IDCT_1D(d[ 0]*dq[ 0],d[ 8]*dq[ 8],d[16]*dq[16],d[24]*dq[24], + d[32]*dq[32],d[40]*dq[40],d[48]*dq[48],d[56]*dq[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + x0 += 65536; x1 += 65536; x2 += 65536; x3 += 65536; + o[0] = clamp((x0+t3) >> 17); + o[7] = clamp((x0-t3) >> 17); + o[1] = clamp((x1+t2) >> 17); + o[6] = clamp((x1-t2) >> 17); + o[2] = clamp((x2+t1) >> 17); + o[5] = clamp((x2-t1) >> 17); + o[3] = clamp((x3+t0) >> 17); + o[4] = clamp((x3-t0) >> 17); + } +} +static stbi_idct_8x8 stbi_idct_installed = idct_block; + +extern void stbi_install_idct(stbi_idct_8x8 func) +{ + stbi_idct_installed = func; +} +#endif + +#define MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static uint8 get_marker(jpeg *j) +{ + uint8 x; + if (j->marker != MARKER_none) { x = j->marker; j->marker = MARKER_none; return x; } + x = get8u(&j->s); + if (x != 0xff) return MARKER_none; + while (x == 0xff) + x = get8u(&j->s); + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, reset the entropy decoder and +// the dc prediction +static void reset(jpeg *j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = 0; + j->marker = MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int parse_entropy_coded_data(jpeg *z) +{ + reset(z); + if (z->scan_n == 1) { + int i,j; + #if STBI_SIMD + __declspec(align(16)) + #endif + short data[64]; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + if (!decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+z->img_comp[n].ha, n)) return 0; + #if STBI_SIMD + stbi_idct_installed(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data, z->dequant2[z->img_comp[n].tq]); + #else + idct_block(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data, z->dequant[z->img_comp[n].tq]); + #endif + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!RESTART(z->marker)) return 1; + reset(z); + } + } + } + } else { // interleaved! + int i,j,k,x,y; + short data[64]; + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x)*8; + int y2 = (j*z->img_comp[n].v + y)*8; + if (!decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+z->img_comp[n].ha, n)) return 0; + #if STBI_SIMD + stbi_idct_installed(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data, z->dequant2[z->img_comp[n].tq]); + #else + idct_block(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data, z->dequant[z->img_comp[n].tq]); + #endif + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!RESTART(z->marker)) return 1; + reset(z); + } + } + } + } + return 1; +} + +static int process_marker(jpeg *z, int m) +{ + int L; + switch (m) { + case MARKER_none: // no marker found + return e("expected marker","Corrupt JPEG"); + + case 0xC2: // SOF - progressive + return e("progressive jpeg","JPEG format not supported (progressive)"); + + case 0xDD: // DRI - specify restart interval + if (get16(&z->s) != 4) return e("bad DRI len","Corrupt JPEG"); + z->restart_interval = get16(&z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = get16(&z->s)-2; + while (L > 0) { + int q = get8(&z->s); + int p = q >> 4; + int t = q & 15,i; + if (p != 0) return e("bad DQT type","Corrupt JPEG"); + if (t > 3) return e("bad DQT table","Corrupt JPEG"); + for (i=0; i < 64; ++i) + z->dequant[t][dezigzag[i]] = get8u(&z->s); + #if STBI_SIMD + for (i=0; i < 64; ++i) + z->dequant2[t][i] = dequant[t][i]; + #endif + L -= 65; + } + return L==0; + + case 0xC4: // DHT - define huffman table + L = get16(&z->s)-2; + while (L > 0) { + uint8 *v; + int sizes[16],i,m=0; + int q = get8(&z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) return e("bad DHT header","Corrupt JPEG"); + for (i=0; i < 16; ++i) { + sizes[i] = get8(&z->s); + m += sizes[i]; + } + L -= 17; + if (tc == 0) { + if (!build_huffman(z->huff_dc+th, sizes)) return 0; + v = z->huff_dc[th].values; + } else { + if (!build_huffman(z->huff_ac+th, sizes)) return 0; + v = z->huff_ac[th].values; + } + for (i=0; i < m; ++i) + v[i] = get8u(&z->s); + L -= m; + } + return L==0; + } + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + skip(&z->s, get16(&z->s)-2); + return 1; + } + return 0; +} + +// after we see SOS +static int process_scan_header(jpeg *z) +{ + int i; + int Ls = get16(&z->s); + z->scan_n = get8(&z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s.img_n) return e("bad SOS component count","Corrupt JPEG"); + if (Ls != 6+2*z->scan_n) return e("bad SOS len","Corrupt JPEG"); + for (i=0; i < z->scan_n; ++i) { + int id = get8(&z->s), which; + int q = get8(&z->s); + for (which = 0; which < z->s.img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s.img_n) return 0; + z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return e("bad DC huff","Corrupt JPEG"); + z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return e("bad AC huff","Corrupt JPEG"); + z->order[i] = which; + } + if (get8(&z->s) != 0) return e("bad SOS","Corrupt JPEG"); + get8(&z->s); // should be 63, but might be 0 + if (get8(&z->s) != 0) return e("bad SOS","Corrupt JPEG"); + + return 1; +} + +static int process_frame_header(jpeg *z, int scan) +{ + stbi *s = &z->s; + int Lf,p,i,q, h_max=1,v_max=1,c; + Lf = get16(s); if (Lf < 11) return e("bad SOF len","Corrupt JPEG"); // JPEG + p = get8(s); if (p != 8) return e("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = get16(s); if (s->img_y == 0) return e("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = get16(s); if (s->img_x == 0) return e("0 width","Corrupt JPEG"); // JPEG requires + c = get8(s); + if (c != 3 && c != 1) return e("bad component count","Corrupt JPEG"); // JFIF requires + s->img_n = c; + for (i=0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8+3*s->img_n) return e("bad SOF len","Corrupt JPEG"); + + for (i=0; i < s->img_n; ++i) { + z->img_comp[i].id = get8(s); + if (z->img_comp[i].id != i+1) // JFIF requires + if (z->img_comp[i].id != i) // some version of jpegtran outputs non-JFIF-compliant files! + return e("bad component ID","Corrupt JPEG"); + q = get8(s); + z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return e("bad H","Corrupt JPEG"); + z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return e("bad V","Corrupt JPEG"); + z->img_comp[i].tq = get8(s); if (z->img_comp[i].tq > 3) return e("bad TQ","Corrupt JPEG"); + } + + if (scan != SCAN_load) return 1; + + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return e("too large", "Image too large to decode"); + + for (i=0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; + + for (i=0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].raw_data = malloc(z->img_comp[i].w2 * z->img_comp[i].h2+15); + if (z->img_comp[i].raw_data == NULL) { + for(--i; i >= 0; --i) { + free(z->img_comp[i].raw_data); + z->img_comp[i].data = NULL; + } + return e("outofmem", "Out of memory"); + } + // align blocks for installable-idct using mmx/sse + z->img_comp[i].data = (uint8*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); + z->img_comp[i].linebuf = NULL; + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +#define DNL(x) ((x) == 0xdc) +#define SOI(x) ((x) == 0xd8) +#define EOI(x) ((x) == 0xd9) +#define SOF(x) ((x) == 0xc0 || (x) == 0xc1) +#define SOS(x) ((x) == 0xda) + +static int decode_jpeg_header(jpeg *z, int scan) +{ + int m; + z->marker = MARKER_none; // initialize cached marker to empty + m = get_marker(z); + if (!SOI(m)) return e("no SOI","Corrupt JPEG"); + if (scan == SCAN_type) return 1; + m = get_marker(z); + while (!SOF(m)) { + if (!process_marker(z,m)) return 0; + m = get_marker(z); + while (m == MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (at_eof(&z->s)) return e("no SOF", "Corrupt JPEG"); + m = get_marker(z); + } + } + if (!process_frame_header(z, scan)) return 0; + return 1; +} + +static int decode_jpeg_image(jpeg *j) +{ + int m; + j->restart_interval = 0; + if (!decode_jpeg_header(j, SCAN_load)) return 0; + m = get_marker(j); + while (!EOI(m)) { + if (SOS(m)) { + if (!process_scan_header(j)) return 0; + if (!parse_entropy_coded_data(j)) return 0; + } else { + if (!process_marker(j, m)) return 0; + } + m = get_marker(j); + } + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef uint8 *(*resample_row_func)(uint8 *out, uint8 *in0, uint8 *in1, + int w, int hs); + +#define div4(x) ((uint8) ((x) >> 2)) + +static uint8 *resample_row_1(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) +{ + return in_near; +} + +static uint8* resample_row_v_2(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + for (i=0; i < w; ++i) + out[i] = div4(3*in_near[i] + in_far[i] + 2); + return out; +} + +static uint8* resample_row_h_2(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + uint8 *input = in_near; + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = div4(input[0]*3 + input[1] + 2); + for (i=1; i < w-1; ++i) { + int n = 3*input[i]+2; + out[i*2+0] = div4(n+input[i-1]); + out[i*2+1] = div4(n+input[i+1]); + } + out[i*2+0] = div4(input[w-2]*3 + input[w-1] + 2); + out[i*2+1] = input[w-1]; + return out; +} + +#define div16(x) ((uint8) ((x) >> 4)) + +static uint8 *resample_row_hv_2(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i,t0,t1; + if (w == 1) { + out[0] = out[1] = div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + out[0] = div4(t1+2); + for (i=1; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = div16(3*t0 + t1 + 8); + out[i*2 ] = div16(3*t1 + t0 + 8); + } + out[w*2-1] = div4(t1+2); + return out; +} + +static uint8 *resample_row_generic(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i,j; + for (i=0; i < w; ++i) + for (j=0; j < hs; ++j) + out[i*hs+j] = in_near[i]; + return out; +} + +#define float2fixed(x) ((int) ((x) * 65536 + 0.5)) + +// 0.38 seconds on 3*anemones.jpg (0.25 with processor = Pro) +// VC6 without processor=Pro is generating multiple LEAs per multiply! +static void YCbCr_to_RGB_row(uint8 *out, uint8 *y, uint8 *pcb, uint8 *pcr, int count, int step) +{ + int i; + for (i=0; i < count; ++i) { + int y_fixed = (y[i] << 16) + 32768; // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr*float2fixed(1.40200f); + g = y_fixed - cr*float2fixed(0.71414f) - cb*float2fixed(0.34414f); + b = y_fixed + cb*float2fixed(1.77200f); + r >>= 16; + g >>= 16; + b >>= 16; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (uint8)r; + out[1] = (uint8)g; + out[2] = (uint8)b; + out[3] = 255; + out += step; + } +} + +#if STBI_SIMD +static stbi_YCbCr_to_RGB_run stbi_YCbCr_installed = YCbCr_to_RGB_row; + +void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func) +{ + stbi_YCbCr_installed = func; +} +#endif + + +// clean up the temporary component buffers +static void cleanup_jpeg(jpeg *j) +{ + int i; + for (i=0; i < j->s.img_n; ++i) { + if (j->img_comp[i].data) { + free(j->img_comp[i].raw_data); + j->img_comp[i].data = NULL; + } + if (j->img_comp[i].linebuf) { + free(j->img_comp[i].linebuf); + j->img_comp[i].linebuf = NULL; + } + } +} + +typedef struct +{ + resample_row_func resample; + uint8 *line0,*line1; + int hs,vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi_resample; + +static uint8 *load_jpeg_image(jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) +{ + int n, decode_n; + // validate req_comp + if (req_comp < 0 || req_comp > 4) return epuc("bad req_comp", "Internal error"); + z->s.img_n = 0; + + // load a jpeg image from whichever source + if (!decode_jpeg_image(z)) { cleanup_jpeg(z); return NULL; } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s.img_n; + + if (z->s.img_n == 3 && n < 3) + decode_n = 1; + else + decode_n = z->s.img_n; + + // resample and color-convert + { + int k; + uint i,j; + uint8 *output; + uint8 *coutput[4]; + + stbi_resample res_comp[4]; + + for (k=0; k < decode_n; ++k) { + stbi_resample *r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (uint8 *) malloc(z->s.img_x + 3); + if (!z->img_comp[k].linebuf) { cleanup_jpeg(z); return epuc("outofmem", "Out of memory"); } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s.img_x + r->hs-1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) r->resample = resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) r->resample = resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) r->resample = resample_row_hv_2; + else r->resample = resample_row_generic; + } + + // can't error after this so, this is safe + output = (uint8 *) malloc(n * z->s.img_x * z->s.img_y + 1); + if (!output) { cleanup_jpeg(z); return epuc("outofmem", "Out of memory"); } + + // now go ahead and resample + for (j=0; j < z->s.img_y; ++j) { + uint8 *out = output + n * z->s.img_x * j; + for (k=0; k < decode_n; ++k) { + stbi_resample *r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = r->resample(z->img_comp[k].linebuf, + y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, + r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + uint8 *y = coutput[0]; + if (z->s.img_n == 3) { + #if STBI_SIMD + stbi_YCbCr_installed(out, y, coutput[1], coutput[2], z->s.img_x, n); + #else + YCbCr_to_RGB_row(out, y, coutput[1], coutput[2], z->s.img_x, n); + #endif + } else + for (i=0; i < z->s.img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } else { + uint8 *y = coutput[0]; + if (n == 1) + for (i=0; i < z->s.img_x; ++i) out[i] = y[i]; + else + for (i=0; i < z->s.img_x; ++i) *out++ = y[i], *out++ = 255; + } + } + cleanup_jpeg(z); + *out_x = z->s.img_x; + *out_y = z->s.img_y; + if (comp) *comp = z->s.img_n; // report original components, not output + return output; + } +} + +#ifndef STBI_NO_STDIO +unsigned char *stbi_jpeg_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + jpeg j; + start_file(&j.s, f); + return load_jpeg_image(&j, x,y,comp,req_comp); +} + +unsigned char *stbi_jpeg_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_jpeg_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return data; +} +#endif + +unsigned char *stbi_jpeg_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + jpeg j; + start_mem(&j.s, buffer,len); + return load_jpeg_image(&j, x,y,comp,req_comp); +} + +#ifndef STBI_NO_STDIO +int stbi_jpeg_test_file(FILE *f) +{ + int n,r; + jpeg j; + n = ftell(f); + start_file(&j.s, f); + r = decode_jpeg_header(&j, SCAN_type); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_jpeg_test_memory(stbi_uc const *buffer, int len) +{ + jpeg j; + start_mem(&j.s, buffer,len); + return decode_jpeg_header(&j, SCAN_type); +} + +// @TODO: +#ifndef STBI_NO_STDIO +extern int stbi_jpeg_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_jpeg_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif +extern int stbi_jpeg_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +// public domain zlib decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +// fast-way is faster to check than jpeg huffman, but slow way is slower +#define ZFAST_BITS 9 // accelerate all cases in default tables +#define ZFAST_MASK ((1 << ZFAST_BITS) - 1) + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct +{ + uint16 fast[1 << ZFAST_BITS]; + uint16 firstcode[16]; + int maxcode[17]; + uint16 firstsymbol[16]; + uint8 size[288]; + uint16 value[288]; +} zhuffman; + +__forceinline static int bitreverse16(int n) +{ + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +__forceinline static int bit_reverse(int v, int bits) +{ + assert(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return bitreverse16(v) >> (16-bits); +} + +static int zbuild_huffman(zhuffman *z, uint8 *sizelist, int num) +{ + int i,k=0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 255, sizeof(z->fast)); + for (i=0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i=1; i < 16; ++i) + assert(sizes[i] <= (1 << i)); + code = 0; + for (i=1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (uint16) code; + z->firstsymbol[i] = (uint16) k; + code = (code + sizes[i]); + if (sizes[i]) + if (code-1 >= (1 << i)) return e("bad codelengths","Corrupt JPEG"); + z->maxcode[i] = code << (16-i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i=0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + z->size[c] = (uint8)s; + z->value[c] = (uint16)i; + if (s <= ZFAST_BITS) { + int k = bit_reverse(next_code[s],s); + while (k < (1 << ZFAST_BITS)) { + z->fast[k] = (uint16) c; + k += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct +{ + uint8 *zbuffer, *zbuffer_end; + int num_bits; + uint32 code_buffer; + + char *zout; + char *zout_start; + char *zout_end; + int z_expandable; + + zhuffman z_length, z_distance; +} zbuf; + +__forceinline static int zget8(zbuf *z) +{ + if (z->zbuffer >= z->zbuffer_end) return 0; + return *z->zbuffer++; +} + +static void fill_bits(zbuf *z) +{ + do { + assert(z->code_buffer < (1U << z->num_bits)); + z->code_buffer |= zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +__forceinline static unsigned int zreceive(zbuf *z, int n) +{ + unsigned int k; + if (z->num_bits < n) fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +__forceinline static int zhuffman_decode(zbuf *a, zhuffman *z) +{ + int b,s,k; + if (a->num_bits < 16) fill_bits(a); + b = z->fast[a->code_buffer & ZFAST_MASK]; + if (b < 0xffff) { + s = z->size[b]; + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; + } + + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = bit_reverse(a->code_buffer, 16); + for (s=ZFAST_BITS+1; ; ++s) + if (k < z->maxcode[s]) + break; + if (s == 16) return -1; // invalid code! + // code size is s, so: + b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; + assert(z->size[b] == s); + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +static int expand(zbuf *z, int n) // need to make room for n bytes +{ + char *q; + int cur, limit; + if (!z->z_expandable) return e("output buffer limit","Corrupt PNG"); + cur = (int) (z->zout - z->zout_start); + limit = (int) (z->zout_end - z->zout_start); + while (cur + n > limit) + limit *= 2; + q = (char *) realloc(z->zout_start, limit); + if (q == NULL) return e("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static int length_base[31] = { + 3,4,5,6,7,8,9,10,11,13, + 15,17,19,23,27,31,35,43,51,59, + 67,83,99,115,131,163,195,227,258,0,0 }; + +static int length_extra[31]= +{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + +static int dist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, +257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + +static int dist_extra[32] = +{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +static int parse_huffman_block(zbuf *a) +{ + for(;;) { + int z = zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) return e("bad huffman code","Corrupt PNG"); // error in huffman codes + if (a->zout >= a->zout_end) if (!expand(a, 1)) return 0; + *a->zout++ = (char) z; + } else { + uint8 *p; + int len,dist; + if (z == 256) return 1; + z -= 257; + len = length_base[z]; + if (length_extra[z]) len += zreceive(a, length_extra[z]); + z = zhuffman_decode(a, &a->z_distance); + if (z < 0) return e("bad huffman code","Corrupt PNG"); + dist = dist_base[z]; + if (dist_extra[z]) dist += zreceive(a, dist_extra[z]); + if (a->zout - a->zout_start < dist) return e("bad dist","Corrupt PNG"); + if (a->zout + len > a->zout_end) if (!expand(a, len)) return 0; + p = (uint8 *) (a->zout - dist); + while (len--) + *a->zout++ = *p++; + } + } +} + +static int compute_huffman_codes(zbuf *a) +{ + static uint8 length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + static zhuffman z_codelength; // static just to save stack space + uint8 lencodes[286+32+137];//padding for maximum single op + uint8 codelength_sizes[19]; + int i,n; + + int hlit = zreceive(a,5) + 257; + int hdist = zreceive(a,5) + 1; + int hclen = zreceive(a,4) + 4; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i=0; i < hclen; ++i) { + int s = zreceive(a,3); + codelength_sizes[length_dezigzag[i]] = (uint8) s; + } + if (!zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + + n = 0; + while (n < hlit + hdist) { + int c = zhuffman_decode(a, &z_codelength); + assert(c >= 0 && c < 19); + if (c < 16) + lencodes[n++] = (uint8) c; + else if (c == 16) { + c = zreceive(a,2)+3; + memset(lencodes+n, lencodes[n-1], c); + n += c; + } else if (c == 17) { + c = zreceive(a,3)+3; + memset(lencodes+n, 0, c); + n += c; + } else { + assert(c == 18); + c = zreceive(a,7)+11; + memset(lencodes+n, 0, c); + n += c; + } + } + if (n != hlit+hdist) return e("bad codelengths","Corrupt PNG"); + if (!zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; + if (!zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; + return 1; +} + +static int parse_uncompressed_block(zbuf *a) +{ + uint8 header[4]; + int len,nlen,k; + if (a->num_bits & 7) + zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (uint8) (a->code_buffer & 255); // wtf this warns? + a->code_buffer >>= 8; + a->num_bits -= 8; + } + assert(a->num_bits == 0); + // now fill header the normal way + while (k < 4) + header[k++] = (uint8) zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) return e("zlib corrupt","Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) return e("read past buffer","Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!expand(a, len)) return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int parse_zlib_header(zbuf *a) +{ + int cmf = zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = zget8(a); + if ((cmf*256+flg) % 31 != 0) return e("bad zlib header","Corrupt PNG"); // zlib spec + if (flg & 32) return e("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) return e("bad compression","Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +// @TODO: should statically initialize these for optimal thread safety +static uint8 default_length[288], default_distance[32]; +static void init_defaults(void) +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) default_length[i] = 8; + for ( ; i <= 255; ++i) default_length[i] = 9; + for ( ; i <= 279; ++i) default_length[i] = 7; + for ( ; i <= 287; ++i) default_length[i] = 8; + + for (i=0; i <= 31; ++i) default_distance[i] = 5; +} + +static int parse_zlib(zbuf *a, int parse_header) +{ + int final, type; + if (parse_header) + if (!parse_zlib_header(a)) return 0; + a->num_bits = 0; + a->code_buffer = 0; + do { + final = zreceive(a,1); + type = zreceive(a,2); + if (type == 0) { + if (!parse_uncompressed_block(a)) return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!default_distance[31]) init_defaults(); + if (!zbuild_huffman(&a->z_length , default_length , 288)) return 0; + if (!zbuild_huffman(&a->z_distance, default_distance, 32)) return 0; + } else { + if (!compute_huffman_codes(a)) return 0; + } + if (!parse_huffman_block(a)) return 0; + } + } while (!final); + return 1; +} + +static int do_zlib(zbuf *a, char *obuf, int olen, int exp, int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return parse_zlib(a, parse_header); +} + +char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) +{ + zbuf a; + char *p = (char *) malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (uint8 *) buffer; + a.zbuffer_end = (uint8 *) buffer + len; + if (do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + free(a.zout_start); + return NULL; + } +} + +char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) +{ + zbuf a; + a.zbuffer = (uint8 *) ibuffer; + a.zbuffer_end = (uint8 *) ibuffer + ilen; + if (do_zlib(&a, obuffer, olen, 0, 1)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) +{ + zbuf a; + char *p = (char *) malloc(16384); + if (p == NULL) return NULL; + a.zbuffer = (uint8 *) buffer; + a.zbuffer_end = (uint8 *) buffer+len; + if (do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + free(a.zout_start); + return NULL; + } +} + +int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) +{ + zbuf a; + a.zbuffer = (uint8 *) ibuffer; + a.zbuffer_end = (uint8 *) ibuffer + ilen; + if (do_zlib(&a, obuffer, olen, 0, 0)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + + +typedef struct +{ + uint32 length; + uint32 type; +} chunk; + +#define PNG_TYPE(a,b,c,d) (((a) << 24) + ((b) << 16) + ((c) << 8) + (d)) + +static chunk get_chunk_header(stbi *s) +{ + chunk c; + c.length = get32(s); + c.type = get32(s); + return c; +} + +static int check_png_header(stbi *s) +{ + static uint8 png_sig[8] = { 137,80,78,71,13,10,26,10 }; + int i; + for (i=0; i < 8; ++i) + if (get8(s) != png_sig[i]) return e("bad png sig","Not a PNG"); + return 1; +} + +typedef struct +{ + stbi s; + uint8 *idata, *expanded, *out; +} png; + + +enum { + F_none=0, F_sub=1, F_up=2, F_avg=3, F_paeth=4, + F_avg_first, F_paeth_first, +}; + +static uint8 first_row_filter[5] = +{ + F_none, F_sub, F_none, F_avg_first, F_paeth_first +}; + +static int paeth(int a, int b, int c) +{ + int p = a + b - c; + int pa = abs(p-a); + int pb = abs(p-b); + int pc = abs(p-c); + if (pa <= pb && pa <= pc) return a; + if (pb <= pc) return b; + return c; +} + +// create the png data from post-deflated data +static int create_png_image(png *a, uint8 *raw, uint32 raw_len, int out_n) +{ + stbi *s = &a->s; + uint32 i,j,stride = s->img_x*out_n; + int k; + int img_n = s->img_n; // copy it into a local for later + assert(out_n == s->img_n || out_n == s->img_n+1); + a->out = (uint8 *) malloc(s->img_x * s->img_y * out_n); + if (!a->out) return e("outofmem", "Out of memory"); + if (raw_len != (img_n * s->img_x + 1) * s->img_y) return e("not enough pixels","Corrupt PNG"); + for (j=0; j < s->img_y; ++j) { + uint8 *cur = a->out + stride*j; + uint8 *prior = cur - stride; + int filter = *raw++; + if (filter > 4) return e("invalid filter","Corrupt PNG"); + // if first row, use special filter that doesn't sample previous row + if (j == 0) filter = first_row_filter[filter]; + // handle first pixel explicitly + for (k=0; k < img_n; ++k) { + switch(filter) { + case F_none : cur[k] = raw[k]; break; + case F_sub : cur[k] = raw[k]; break; + case F_up : cur[k] = raw[k] + prior[k]; break; + case F_avg : cur[k] = raw[k] + (prior[k]>>1); break; + case F_paeth : cur[k] = (uint8) (raw[k] + paeth(0,prior[k],0)); break; + case F_avg_first : cur[k] = raw[k]; break; + case F_paeth_first: cur[k] = raw[k]; break; + } + } + if (img_n != out_n) cur[img_n] = 255; + raw += img_n; + cur += out_n; + prior += out_n; + // this is a little gross, so that we don't switch per-pixel or per-component + if (img_n == out_n) { + #define CASE(f) \ + case f: \ + for (i=s->img_x-1; i >= 1; --i, raw+=img_n,cur+=img_n,prior+=img_n) \ + for (k=0; k < img_n; ++k) + switch(filter) { + CASE(F_none) cur[k] = raw[k]; break; + CASE(F_sub) cur[k] = raw[k] + cur[k-img_n]; break; + CASE(F_up) cur[k] = raw[k] + prior[k]; break; + CASE(F_avg) cur[k] = raw[k] + ((prior[k] + cur[k-img_n])>>1); break; + CASE(F_paeth) cur[k] = (uint8) (raw[k] + paeth(cur[k-img_n],prior[k],prior[k-img_n])); break; + CASE(F_avg_first) cur[k] = raw[k] + (cur[k-img_n] >> 1); break; + CASE(F_paeth_first) cur[k] = (uint8) (raw[k] + paeth(cur[k-img_n],0,0)); break; + } + #undef CASE + } else { + assert(img_n+1 == out_n); + #define CASE(f) \ + case f: \ + for (i=s->img_x-1; i >= 1; --i, cur[img_n]=255,raw+=img_n,cur+=out_n,prior+=out_n) \ + for (k=0; k < img_n; ++k) + switch(filter) { + CASE(F_none) cur[k] = raw[k]; break; + CASE(F_sub) cur[k] = raw[k] + cur[k-out_n]; break; + CASE(F_up) cur[k] = raw[k] + prior[k]; break; + CASE(F_avg) cur[k] = raw[k] + ((prior[k] + cur[k-out_n])>>1); break; + CASE(F_paeth) cur[k] = (uint8) (raw[k] + paeth(cur[k-out_n],prior[k],prior[k-out_n])); break; + CASE(F_avg_first) cur[k] = raw[k] + (cur[k-out_n] >> 1); break; + CASE(F_paeth_first) cur[k] = (uint8) (raw[k] + paeth(cur[k-out_n],0,0)); break; + } + #undef CASE + } + } + return 1; +} + +static int compute_transparency(png *z, uint8 tc[3], int out_n) +{ + stbi *s = &z->s; + uint32 i, pixel_count = s->img_x * s->img_y; + uint8 *p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + assert(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i=0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i=0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int expand_palette(png *a, uint8 *palette, int len, int pal_img_n) +{ + uint32 i, pixel_count = a->s.img_x * a->s.img_y; + uint8 *p, *temp_out, *orig = a->out; + + p = (uint8 *) malloc(pixel_count * pal_img_n); + if (p == NULL) return e("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p += 3; + } + } else { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p[3] = palette[n+3]; + p += 4; + } + } + free(a->out); + a->out = temp_out; + return 1; +} + +static int parse_png_file(png *z, int scan, int req_comp) +{ + uint8 palette[1024], pal_img_n=0; + uint8 has_trans=0, tc[3]; + uint32 ioff=0, idata_limit=0, i, pal_len=0; + int first=1,k; + stbi *s = &z->s; + + if (!check_png_header(s)) return 0; + + if (scan == SCAN_type) return 1; + + for(;;first=0) { + chunk c = get_chunk_header(s); + if (first && c.type != PNG_TYPE('I','H','D','R')) + return e("first not IHDR","Corrupt PNG"); + switch (c.type) { + case PNG_TYPE('I','H','D','R'): { + int depth,color,interlace,comp,filter; + if (!first) return e("multiple IHDR","Corrupt PNG"); + if (c.length != 13) return e("bad IHDR len","Corrupt PNG"); + s->img_x = get32(s); if (s->img_x > (1 << 24)) return e("too large","Very large image (corrupt?)"); + s->img_y = get32(s); if (s->img_y > (1 << 24)) return e("too large","Very large image (corrupt?)"); + depth = get8(s); if (depth != 8) return e("8bit only","PNG not supported: 8-bit only"); + color = get8(s); if (color > 6) return e("bad ctype","Corrupt PNG"); + if (color == 3) pal_img_n = 3; else if (color & 1) return e("bad ctype","Corrupt PNG"); + comp = get8(s); if (comp) return e("bad comp method","Corrupt PNG"); + filter= get8(s); if (filter) return e("bad filter method","Corrupt PNG"); + interlace = get8(s); if (interlace) return e("interlaced","PNG not supported: interlaced mode"); + if (!s->img_x || !s->img_y) return e("0-pixel image","Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return e("too large", "Image too large to decode"); + if (scan == SCAN_header) return 1; + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) return e("too large","Corrupt PNG"); + // if SCAN_header, have to scan to see if we have a tRNS + } + break; + } + + case PNG_TYPE('P','L','T','E'): { + if (c.length > 256*3) return e("invalid PLTE","Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) return e("invalid PLTE","Corrupt PNG"); + for (i=0; i < pal_len; ++i) { + palette[i*4+0] = get8u(s); + palette[i*4+1] = get8u(s); + palette[i*4+2] = get8u(s); + palette[i*4+3] = 255; + } + break; + } + + case PNG_TYPE('t','R','N','S'): { + if (z->idata) return e("tRNS after IDAT","Corrupt PNG"); + if (pal_img_n) { + if (scan == SCAN_header) { s->img_n = 4; return 1; } + if (pal_len == 0) return e("tRNS before PLTE","Corrupt PNG"); + if (c.length > pal_len) return e("bad tRNS len","Corrupt PNG"); + pal_img_n = 4; + for (i=0; i < c.length; ++i) + palette[i*4+3] = get8u(s); + } else { + if (!(s->img_n & 1)) return e("tRNS with alpha","Corrupt PNG"); + if (c.length != (uint32) s->img_n*2) return e("bad tRNS len","Corrupt PNG"); + has_trans = 1; + for (k=0; k < s->img_n; ++k) + tc[k] = (uint8) get16(s); // non 8-bit images will be larger + } + break; + } + + case PNG_TYPE('I','D','A','T'): { + if (pal_img_n && !pal_len) return e("no PLTE","Corrupt PNG"); + if (scan == SCAN_header) { s->img_n = pal_img_n; return 1; } + if (ioff + c.length > idata_limit) { + uint8 *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + p = (uint8 *) realloc(z->idata, idata_limit); if (p == NULL) return e("outofmem", "Out of memory"); + z->idata = p; + } + #ifndef STBI_NO_STDIO + if (s->img_file) + { + if (fread(z->idata+ioff,1,c.length,s->img_file) != c.length) return e("outofdata","Corrupt PNG"); + } + else + #endif + { + memcpy(z->idata+ioff, s->img_buffer, c.length); + s->img_buffer += c.length; + } + ioff += c.length; + break; + } + + case PNG_TYPE('I','E','N','D'): { + uint32 raw_len; + if (scan != SCAN_load) return 1; + if (z->idata == NULL) return e("no IDAT","Corrupt PNG"); + z->expanded = (uint8 *) stbi_zlib_decode_malloc((char *) z->idata, ioff, (int *) &raw_len); + if (z->expanded == NULL) return 0; // zlib should set error + free(z->idata); z->idata = NULL; + if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n+1; + else + s->img_out_n = s->img_n; + if (!create_png_image(z, z->expanded, raw_len, s->img_out_n)) return 0; + if (has_trans) + if (!compute_transparency(z, tc, s->img_out_n)) return 0; + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!expand_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } + free(z->expanded); z->expanded = NULL; + return 1; + } + + default: + // if critical, fail + if ((c.type & (1 << 29)) == 0) { + #ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX chunk not known"; + invalid_chunk[0] = (uint8) (c.type >> 24); + invalid_chunk[1] = (uint8) (c.type >> 16); + invalid_chunk[2] = (uint8) (c.type >> 8); + invalid_chunk[3] = (uint8) (c.type >> 0); + #endif + return e(invalid_chunk, "PNG not supported: unknown chunk type"); + } + skip(s, c.length); + break; + } + // end of chunk, read and skip CRC + get32(s); + } +} + +static unsigned char *do_png(png *p, int *x, int *y, int *n, int req_comp) +{ + unsigned char *result=NULL; + p->expanded = NULL; + p->idata = NULL; + p->out = NULL; + if (req_comp < 0 || req_comp > 4) return epuc("bad req_comp", "Internal error"); + if (parse_png_file(p, SCAN_load, req_comp)) { + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s.img_out_n) { + result = convert_format(result, p->s.img_out_n, req_comp, p->s.img_x, p->s.img_y); + p->s.img_out_n = req_comp; + if (result == NULL) return result; + } + *x = p->s.img_x; + *y = p->s.img_y; + if (n) *n = p->s.img_n; + } + free(p->out); p->out = NULL; + free(p->expanded); p->expanded = NULL; + free(p->idata); p->idata = NULL; + + return result; +} + +#ifndef STBI_NO_STDIO +unsigned char *stbi_png_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + png p; + start_file(&p.s, f); + return do_png(&p, x,y,comp,req_comp); +} + +unsigned char *stbi_png_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_png_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return data; +} +#endif + +unsigned char *stbi_png_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + png p; + start_mem(&p.s, buffer,len); + return do_png(&p, x,y,comp,req_comp); +} + +#ifndef STBI_NO_STDIO +int stbi_png_test_file(FILE *f) +{ + png p; + int n,r; + n = ftell(f); + start_file(&p.s, f); + r = parse_png_file(&p, SCAN_type,STBI_default); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_png_test_memory(stbi_uc const *buffer, int len) +{ + png p; + start_mem(&p.s, buffer, len); + return parse_png_file(&p, SCAN_type,STBI_default); +} + +// TODO: load header from png +#ifndef STBI_NO_STDIO +extern int stbi_png_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_png_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif +extern int stbi_png_info_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +// Microsoft/Windows BMP image + +static int bmp_test(stbi *s) +{ + int sz; + if (get8(s) != 'B') return 0; + if (get8(s) != 'M') return 0; + get32le(s); // discard filesize + get16le(s); // discard reserved + get16le(s); // discard reserved + get32le(s); // discard data offset + sz = get32le(s); + if (sz == 12 || sz == 40 || sz == 56 || sz == 108) return 1; + return 0; +} + +#ifndef STBI_NO_STDIO +int stbi_bmp_test_file (FILE *f) +{ + stbi s; + int r,n = ftell(f); + start_file(&s,f); + r = bmp_test(&s); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_bmp_test_memory (stbi_uc const *buffer, int len) +{ + stbi s; + start_mem(&s, buffer, len); + return bmp_test(&s); +} + +// returns 0..31 for the highest set bit +static int high_bit(unsigned int z) +{ + int n=0; + if (z == 0) return -1; + if (z >= 0x10000) n += 16, z >>= 16; + if (z >= 0x00100) n += 8, z >>= 8; + if (z >= 0x00010) n += 4, z >>= 4; + if (z >= 0x00004) n += 2, z >>= 2; + if (z >= 0x00002) n += 1, z >>= 1; + return n; +} + +static int bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +static int shiftsigned(int v, int shift, int bits) +{ + int result; + int z=0; + + if (shift < 0) v <<= -shift; + else v >>= shift; + result = v; + + z = bits; + while (z < 8) { + result += v >> z; + z += bits; + } + return result; +} + +static stbi_uc *bmp_load(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + uint8 *out; + unsigned int mr=0,mg=0,mb=0,ma=0; + stbi_uc pal[256][4]; + int psize=0,i,j,compress=0,width; + int bpp, flip_vertically, pad, target, offset, hsz; + if (get8(s) != 'B' || get8(s) != 'M') return epuc("not BMP", "Corrupt BMP"); + get32le(s); // discard filesize + get16le(s); // discard reserved + get16le(s); // discard reserved + offset = get32le(s); + hsz = get32le(s); + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108) return epuc("unknown BMP", "BMP type not supported: unknown"); + failure_reason = "bad BMP"; + if (hsz == 12) { + s->img_x = get16le(s); + s->img_y = get16le(s); + } else { + s->img_x = get32le(s); + s->img_y = get32le(s); + } + if (get16le(s) != 1) return 0; + bpp = get16le(s); + if (bpp == 1) return epuc("monochrome", "BMP type not supported: 1-bit"); + flip_vertically = ((int) s->img_y) > 0; + s->img_y = abs((int) s->img_y); + if (hsz == 12) { + if (bpp < 24) + psize = (offset - 14 - 24) / 3; + } else { + compress = get32le(s); + if (compress == 1 || compress == 2) return epuc("BMP RLE", "BMP type not supported: RLE"); + get32le(s); // discard sizeof + get32le(s); // discard hres + get32le(s); // discard vres + get32le(s); // discard colorsused + get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + get32le(s); + get32le(s); + get32le(s); + get32le(s); + } + if (bpp == 16 || bpp == 32) { + mr = mg = mb = 0; + if (compress == 0) { + if (bpp == 32) { + mr = 0xff << 16; + mg = 0xff << 8; + mb = 0xff << 0; + } else { + mr = 31 << 10; + mg = 31 << 5; + mb = 31 << 0; + } + } else if (compress == 3) { + mr = get32le(s); + mg = get32le(s); + mb = get32le(s); + // not documented, but generated by photoshop and handled by mspaint + if (mr == mg && mg == mb) { + // ?!?!? + return NULL; + } + } else + return NULL; + } + } else { + assert(hsz == 108); + mr = get32le(s); + mg = get32le(s); + mb = get32le(s); + ma = get32le(s); + get32le(s); // discard color space + for (i=0; i < 12; ++i) + get32le(s); // discard color space parameters + } + if (bpp < 16) + psize = (offset - 14 - hsz) >> 2; + } + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + out = (stbi_uc *) malloc(target * s->img_x * s->img_y); + if (!out) return epuc("outofmem", "Out of memory"); + if (bpp < 16) { + int z=0; + if (psize == 0 || psize > 256) { free(out); return epuc("invalid", "Corrupt BMP"); } + for (i=0; i < psize; ++i) { + pal[i][2] = get8(s); + pal[i][1] = get8(s); + pal[i][0] = get8(s); + if (hsz != 12) get8(s); + pal[i][3] = 255; + } + skip(s, offset - 14 - hsz - psize * (hsz == 12 ? 3 : 4)); + if (bpp == 4) width = (s->img_x + 1) >> 1; + else if (bpp == 8) width = s->img_x; + else { free(out); return epuc("bad bpp", "Corrupt BMP"); } + pad = (-width)&3; + for (j=0; j < (int) s->img_y; ++j) { + for (i=0; i < (int) s->img_x; i += 2) { + int v=get8(s),v2=0; + if (bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + v = (bpp == 8) ? get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + } + skip(s, pad); + } + } else { + int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; + int z = 0; + int easy=0; + skip(s, offset - 14 - hsz); + if (bpp == 24) width = 3 * s->img_x; + else if (bpp == 16) width = 2*s->img_x; + else /* bpp = 32 and pad = 0 */ width=0; + pad = (-width) & 3; + if (bpp == 24) { + easy = 1; + } else if (bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0xff000000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) return epuc("bad masks", "Corrupt BMP"); + // right shift amt to put high bit in position #7 + rshift = high_bit(mr)-7; rcount = bitcount(mr); + gshift = high_bit(mg)-7; gcount = bitcount(mr); + bshift = high_bit(mb)-7; bcount = bitcount(mr); + ashift = high_bit(ma)-7; acount = bitcount(mr); + } + for (j=0; j < (int) s->img_y; ++j) { + if (easy) { + for (i=0; i < (int) s->img_x; ++i) { + int a; + out[z+2] = get8(s); + out[z+1] = get8(s); + out[z+0] = get8(s); + z += 3; + a = (easy == 2 ? get8(s) : 255); + if (target == 4) out[z++] = a; + } + } else { + for (i=0; i < (int) s->img_x; ++i) { + uint32 v = (bpp == 16 ? get16le(s) : get32le(s)); + int a; + out[z++] = shiftsigned(v & mr, rshift, rcount); + out[z++] = shiftsigned(v & mg, gshift, gcount); + out[z++] = shiftsigned(v & mb, bshift, bcount); + a = (ma ? shiftsigned(v & ma, ashift, acount) : 255); + if (target == 4) out[z++] = a; + } + } + skip(s, pad); + } + } + if (flip_vertically) { + stbi_uc t; + for (j=0; j < (int) s->img_y>>1; ++j) { + stbi_uc *p1 = out + j *s->img_x*target; + stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; + for (i=0; i < (int) s->img_x*target; ++i) { + t = p1[i], p1[i] = p2[i], p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = target; + return out; +} + +#ifndef STBI_NO_STDIO +stbi_uc *stbi_bmp_load (char const *filename, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_bmp_load_from_file(f, x,y,comp,req_comp); + fclose(f); + return data; +} + +stbi_uc *stbi_bmp_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s, f); + return bmp_load(&s, x,y,comp,req_comp); +} +#endif + +stbi_uc *stbi_bmp_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s, buffer, len); + return bmp_load(&s, x,y,comp,req_comp); +} + +// Targa Truevision - TGA +// by Jonathan Dummer + +static int tga_test(stbi *s) +{ + int sz; + get8u(s); // discard Offset + sz = get8u(s); // color type + if( sz > 1 ) return 0; // only RGB or indexed allowed + sz = get8u(s); // image type + if( (sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11) ) return 0; // only RGB or grey allowed, +/- RLE + get16(s); // discard palette start + get16(s); // discard palette length + get8(s); // discard bits per palette color entry + get16(s); // discard x origin + get16(s); // discard y origin + if( get16(s) < 1 ) return 0; // test width + if( get16(s) < 1 ) return 0; // test height + sz = get8(s); // bits per pixel + if( (sz != 8) && (sz != 16) && (sz != 24) && (sz != 32) ) return 0; // only RGB or RGBA or grey allowed + return 1; // seems to have passed everything +} + +#ifndef STBI_NO_STDIO +int stbi_tga_test_file (FILE *f) +{ + stbi s; + int r,n = ftell(f); + start_file(&s, f); + r = tga_test(&s); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_tga_test_memory (stbi_uc const *buffer, int len) +{ + stbi s; + start_mem(&s, buffer, len); + return tga_test(&s); +} + +static stbi_uc *tga_load(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + // read in the TGA header stuff + int tga_offset = get8u(s); + int tga_indexed = get8u(s); + int tga_image_type = get8u(s); + int tga_is_RLE = 0; + int tga_palette_start = get16le(s); + int tga_palette_len = get16le(s); + int tga_palette_bits = get8u(s); + int tga_x_origin = get16le(s); + int tga_y_origin = get16le(s); + int tga_width = get16le(s); + int tga_height = get16le(s); + int tga_bits_per_pixel = get8u(s); + int tga_inverted = get8u(s); + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4]; + unsigned char trans_data[] = { 0,0,0,0 }; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + // do a tiny bit of precessing + if( tga_image_type >= 8 ) + { + tga_image_type -= 8; + tga_is_RLE = 1; + } + /* int tga_alpha_bits = tga_inverted & 15; */ + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // error check + if( //(tga_indexed) || + (tga_width < 1) || (tga_height < 1) || + (tga_image_type < 1) || (tga_image_type > 3) || + ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16) && + (tga_bits_per_pixel != 24) && (tga_bits_per_pixel != 32)) + ) + { + return NULL; + } + + // If I'm paletted, then I'll use the number of bits from the palette + if( tga_indexed ) + { + tga_bits_per_pixel = tga_palette_bits; + } + + // tga info + *x = tga_width; + *y = tga_height; + if( (req_comp < 1) || (req_comp > 4) ) + { + // just use whatever the file was + req_comp = tga_bits_per_pixel / 8; + *comp = req_comp; + } else + { + // force a new number of components + *comp = tga_bits_per_pixel/8; + } + tga_data = (unsigned char*)malloc( tga_width * tga_height * req_comp ); + + // skip to the data's starting position (offset usually = 0) + skip(s, tga_offset ); + // do I need to load a palette? + if( tga_indexed ) + { + // any data to skip? (offset usually = 0) + skip(s, tga_palette_start ); + // load the palette + tga_palette = (unsigned char*)malloc( tga_palette_len * tga_palette_bits / 8 ); + getn(s, tga_palette, tga_palette_len * tga_palette_bits / 8 ); + } + // load the data + for( i = 0; i < tga_width * tga_height; ++i ) + { + // if I'm in RLE mode, do I need to get a RLE chunk? + if( tga_is_RLE ) + { + if( RLE_count == 0 ) + { + // yep, get the next byte as a RLE command + int RLE_cmd = get8u(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if( !RLE_repeating ) + { + read_next_pixel = 1; + } + } else + { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if( read_next_pixel ) + { + // load however much data we did have + if( tga_indexed ) + { + // read in 1 byte, then perform the lookup + int pal_idx = get8u(s); + if( pal_idx >= tga_palette_len ) + { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_bits_per_pixel / 8; + for( j = 0; j*8 < tga_bits_per_pixel; ++j ) + { + raw_data[j] = tga_palette[pal_idx+j]; + } + } else + { + // read in the data raw + for( j = 0; j*8 < tga_bits_per_pixel; ++j ) + { + raw_data[j] = get8u(s); + } + } + // convert raw to the intermediate format + switch( tga_bits_per_pixel ) + { + case 8: + // Luminous => RGBA + trans_data[0] = raw_data[0]; + trans_data[1] = raw_data[0]; + trans_data[2] = raw_data[0]; + trans_data[3] = 255; + break; + case 16: + // Luminous,Alpha => RGBA + trans_data[0] = raw_data[0]; + trans_data[1] = raw_data[0]; + trans_data[2] = raw_data[0]; + trans_data[3] = raw_data[1]; + break; + case 24: + // BGR => RGBA + trans_data[0] = raw_data[2]; + trans_data[1] = raw_data[1]; + trans_data[2] = raw_data[0]; + trans_data[3] = 255; + break; + case 32: + // BGRA => RGBA + trans_data[0] = raw_data[2]; + trans_data[1] = raw_data[1]; + trans_data[2] = raw_data[0]; + trans_data[3] = raw_data[3]; + break; + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + // convert to final format + switch( req_comp ) + { + case 1: + // RGBA => Luminance + tga_data[i*req_comp+0] = compute_y(trans_data[0],trans_data[1],trans_data[2]); + break; + case 2: + // RGBA => Luminance,Alpha + tga_data[i*req_comp+0] = compute_y(trans_data[0],trans_data[1],trans_data[2]); + tga_data[i*req_comp+1] = trans_data[3]; + break; + case 3: + // RGBA => RGB + tga_data[i*req_comp+0] = trans_data[0]; + tga_data[i*req_comp+1] = trans_data[1]; + tga_data[i*req_comp+2] = trans_data[2]; + break; + case 4: + // RGBA => RGBA + tga_data[i*req_comp+0] = trans_data[0]; + tga_data[i*req_comp+1] = trans_data[1]; + tga_data[i*req_comp+2] = trans_data[2]; + tga_data[i*req_comp+3] = trans_data[3]; + break; + } + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if( tga_inverted ) + { + for( j = 0; j*2 < tga_height; ++j ) + { + int index1 = j * tga_width * req_comp; + int index2 = (tga_height - 1 - j) * tga_width * req_comp; + for( i = tga_width * req_comp; i > 0; --i ) + { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if( tga_palette != NULL ) + { + free( tga_palette ); + } + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = + tga_x_origin = tga_y_origin = 0; + // OK, done + return tga_data; +} + +#ifndef STBI_NO_STDIO +stbi_uc *stbi_tga_load (char const *filename, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_tga_load_from_file(f, x,y,comp,req_comp); + fclose(f); + return data; +} + +stbi_uc *stbi_tga_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s, f); + return tga_load(&s, x,y,comp,req_comp); +} +#endif + +stbi_uc *stbi_tga_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s, buffer, len); + return tga_load(&s, x,y,comp,req_comp); +} + + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicholas Schulz, tweaked by STB + +static int psd_test(stbi *s) +{ + if (get32(s) != 0x38425053) return 0; // "8BPS" + else return 1; +} + +#ifndef STBI_NO_STDIO +int stbi_psd_test_file(FILE *f) +{ + stbi s; + int r,n = ftell(f); + start_file(&s, f); + r = psd_test(&s); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_psd_test_memory(stbi_uc const *buffer, int len) +{ + stbi s; + start_mem(&s, buffer, len); + return psd_test(&s); +} + +static stbi_uc *psd_load(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + int pixelCount; + int channelCount, compression; + int channel, i, count, len; + int w,h; + uint8 *out; + + // Check identifier + if (get32(s) != 0x38425053) // "8BPS" + return epuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (get16(s) != 1) + return epuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + skip(s, 6 ); + + // Read the number of channels (R, G, B, A, etc). + channelCount = get16(s); + if (channelCount < 0 || channelCount > 16) + return epuc("wrong channel count", "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = get32(s); + w = get32(s); + + // Make sure the depth is 8 bits. + if (get16(s) != 8) + return epuc("unsupported bit depth", "PSD bit depth is not 8 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (get16(s) != 3) + return epuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + skip(s,get32(s) ); + + // Skip the image resources. (resolution, pen tool paths, etc) + skip(s, get32(s) ); + + // Skip the reserved data. + skip(s, get32(s) ); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = get16(s); + if (compression > 1) + return epuc("bad compression", "PSD has an unknown compression format"); + + // Create the destination image. + out = (stbi_uc *) malloc(4 * w*h); + if (!out) return epuc("outofmem", "Out of memory"); + pixelCount = w*h; + + // Initialize the data to zero. + //memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceeded by a 2-byte data count for each row in the data, + // which we're going to just skip. + skip(s, h * channelCount * 2 ); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + uint8 *p; + + p = out+channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++) *p = (channel == 3 ? 255 : 0), p += 4; + } else { + // Read the RLE data. + count = 0; + while (count < pixelCount) { + len = get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + count += len; + while (len) { + *p = get8(s); + p += 4; + len--; + } + } else if (len > 128) { + uint32 val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len ^= 0x0FF; + len += 2; + val = get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + uint8 *p; + + p = out + channel; + if (channel > channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++) *p = channel == 3 ? 255 : 0, p += 4; + } else { + // Read the data. + count = 0; + for (i = 0; i < pixelCount; i++) + *p = get8(s), p += 4; + } + } + } + + if (req_comp && req_comp != 4) { + out = convert_format(out, 4, req_comp, w, h); + if (out == NULL) return out; // convert_format frees input on failure + } + + if (comp) *comp = channelCount; + *y = h; + *x = w; + + return out; +} + +#ifndef STBI_NO_STDIO +stbi_uc *stbi_psd_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_psd_load_from_file(f, x,y,comp,req_comp); + fclose(f); + return data; +} + +stbi_uc *stbi_psd_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s, f); + return psd_load(&s, x,y,comp,req_comp); +} +#endif + +stbi_uc *stbi_psd_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s, buffer, len); + return psd_load(&s, x,y,comp,req_comp); +} + + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int hdr_test(stbi *s) +{ + char *signature = "#?RADIANCE\n"; + int i; + for (i=0; signature[i]; ++i) + if (get8(s) != signature[i]) + return 0; + return 1; +} + +int stbi_hdr_test_memory(stbi_uc const *buffer, int len) +{ + stbi s; + start_mem(&s, buffer, len); + return hdr_test(&s); +} + +#ifndef STBI_NO_STDIO +int stbi_hdr_test_file(FILE *f) +{ + stbi s; + int r,n = ftell(f); + start_file(&s, f); + r = hdr_test(&s); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +#define HDR_BUFLEN 1024 +static char *hdr_gettoken(stbi *z, char *buffer) +{ + int len=0; + //char *s = buffer, + char c = '\0'; + + c = get8(z); + + while (!at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == HDR_BUFLEN-1) { + // flush to end of line + while (!at_eof(z) && get8(z) != '\n') + ; + break; + } + c = get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void hdr_convert(float *output, stbi_uc *input, int req_comp) +{ + if( input[3] != 0 ) { + float f1; + // Exponent + f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) output[1] = 1; + if (req_comp == 4) output[3] = 1; + } else { + switch (req_comp) { + case 4: output[3] = 1; /* fallthrough */ + case 3: output[0] = output[1] = output[2] = 0; + break; + case 2: output[1] = 1; /* fallthrough */ + case 1: output[0] = 0; + break; + } + } +} + + +static float *hdr_load(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + char buffer[HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + + + // Check identifier + if (strcmp(hdr_gettoken(s,buffer), "#?RADIANCE") != 0) + return epf("not HDR", "Corrupt HDR image"); + + // Parse header + while(1) { + token = hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return epf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return epf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return epf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = strtol(token, NULL, 10); + + *x = width; + *y = height; + + *comp = 3; + if (req_comp == 0) req_comp = 3; + + // Read data + hdr_data = (float *) malloc(height * width * req_comp * sizeof(float)); + + // Load image data + // image data is stored as some number of sca + if( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + getn(s, rgbe, 4); + hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = get8(s); + c2 = get8(s); + len = get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4] = { c1,c2,len, get8(s) }; + hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + free(scanline); + goto main_decode_loop; // yes, this is fucking insane; blame the fucking insane format + } + len <<= 8; + len |= get8(s); + if (len != width) { free(hdr_data); free(scanline); return epf("invalid decoded scanline length", "corrupt HDR"); } + if (scanline == NULL) scanline = (stbi_uc *) malloc(width * 4); + + for (k = 0; k < 4; ++k) { + i = 0; + while (i < width) { + count = get8(s); + if (count > 128) { + // Run + value = get8(s); + count -= 128; + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = get8(s); + } + } + } + for (i=0; i < width; ++i) + hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); + } + free(scanline); + } + + return hdr_data; +} + +static stbi_uc *hdr_load_rgbe(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + char buffer[HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + stbi_uc *rgbe_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + + + // Check identifier + if (strcmp(hdr_gettoken(s,buffer), "#?RADIANCE") != 0) + return epuc("not HDR", "Corrupt HDR image"); + + // Parse header + while(1) { + token = hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return epuc("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return epuc("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return epuc("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = strtol(token, NULL, 10); + + *x = width; + *y = height; + + // RGBE _MUST_ come out as 4 components + *comp = 4; + req_comp = 4; + + // Read data + rgbe_data = (stbi_uc *) malloc(height * width * req_comp * sizeof(stbi_uc)); + // point to the beginning + scanline = rgbe_data; + + // Load image data + // image data is stored as some number of scan lines + if( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + main_decode_loop: + //getn(rgbe, 4); + getn(s,scanline, 4); + scanline += 4; + } + } + } else { + // Read RLE-encoded data + for (j = 0; j < height; ++j) { + c1 = get8(s); + c2 = get8(s); + len = get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + scanline[0] = c1; + scanline[1] = c2; + scanline[2] = len; + scanline[3] = get8(s); + scanline += 4; + i = 1; + j = 0; + goto main_decode_loop; // yes, this is insane; blame the insane format + } + len <<= 8; + len |= get8(s); + if (len != width) { free(rgbe_data); return epuc("invalid decoded scanline length", "corrupt HDR"); } + for (k = 0; k < 4; ++k) { + i = 0; + while (i < width) { + count = get8(s); + if (count > 128) { + // Run + value = get8(s); + count -= 128; + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = get8(s); + } + } + } + // move the scanline on + scanline += 4 * width; + } + } + + return rgbe_data; +} + +#ifndef STBI_NO_STDIO +float *stbi_hdr_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s,f); + return hdr_load(&s,x,y,comp,req_comp); +} + +stbi_uc *stbi_hdr_load_rgbe_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s,f); + return hdr_load_rgbe(&s,x,y,comp,req_comp); +} + +stbi_uc *stbi_hdr_load_rgbe (char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = fopen(filename, "rb"); + unsigned char *result; + if (!f) return epuc("can't fopen", "Unable to open file"); + result = stbi_hdr_load_rgbe_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} +#endif + +float *stbi_hdr_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s,buffer, len); + return hdr_load(&s,x,y,comp,req_comp); +} + +stbi_uc *stbi_hdr_load_rgbe_memory(stbi_uc *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s,buffer, len); + return hdr_load_rgbe(&s,x,y,comp,req_comp); +} + +#endif // STBI_NO_HDR + +/////////////////////// write image /////////////////////// + +#ifndef STBI_NO_WRITE + +static void write8(FILE *f, int x) { uint8 z = (uint8) x; fwrite(&z,1,1,f); } + +static void writefv(FILE *f, char *fmt, va_list v) +{ + while (*fmt) { + switch (*fmt++) { + case ' ': break; + case '1': { uint8 x = va_arg(v, int); write8(f,x); break; } + case '2': { int16 x = va_arg(v, int); write8(f,x); write8(f,x>>8); break; } + case '4': { int32 x = va_arg(v, int); write8(f,x); write8(f,x>>8); write8(f,x>>16); write8(f,x>>24); break; } + default: + assert(0); + va_end(v); + return; + } + } +} + +static void writef(FILE *f, char *fmt, ...) +{ + va_list v; + va_start(v, fmt); + writefv(f,fmt,v); + va_end(v); +} + +static void write_pixels(FILE *f, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad) +{ + uint8 bg[3] = { 255, 0, 255}, px[3]; + uint32 zero = 0; + int i,j,k, j_end; + + if (vdir < 0) + j_end = -1, j = y-1; + else + j_end = y, j = 0; + + for (; j != j_end; j += vdir) { + for (i=0; i < x; ++i) { + uint8 *d = (uint8 *) data + (j*x+i)*comp; + if (write_alpha < 0) + fwrite(&d[comp-1], 1, 1, f); + switch (comp) { + case 1: + case 2: writef(f, "111", d[0],d[0],d[0]); + break; + case 4: + if (!write_alpha) { + for (k=0; k < 3; ++k) + px[k] = bg[k] + ((d[k] - bg[k]) * d[3])/255; + writef(f, "111", px[1-rgb_dir],px[1],px[1+rgb_dir]); + break; + } + /* FALLTHROUGH */ + case 3: + writef(f, "111", d[1-rgb_dir],d[1],d[1+rgb_dir]); + break; + } + if (write_alpha > 0) + fwrite(&d[comp-1], 1, 1, f); + } + fwrite(&zero,scanline_pad,1,f); + } +} + +static int outfile(char const *filename, int rgb_dir, int vdir, int x, int y, int comp, void *data, int alpha, int pad, char *fmt, ...) +{ + FILE *f = fopen(filename, "wb"); + if (f) { + va_list v; + va_start(v, fmt); + writefv(f, fmt, v); + va_end(v); + write_pixels(f,rgb_dir,vdir,x,y,comp,data,alpha,pad); + fclose(f); + } + return f != NULL; +} + +int stbi_write_bmp(char const *filename, int x, int y, int comp, void *data) +{ + int pad = (-x*3) & 3; + return outfile(filename,-1,-1,x,y,comp,data,0,pad, + "11 4 22 4" "4 44 22 444444", + 'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header + 40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header +} + +int stbi_write_tga(char const *filename, int x, int y, int comp, void *data) +{ + int has_alpha = !(comp & 1); + return outfile(filename, -1,-1, x, y, comp, data, has_alpha, 0, + "111 221 2222 11", 0,0,2, 0,0,0, 0,0,x,y, 24+8*has_alpha, 8*has_alpha); +} + +// any other image formats that do interleaved rgb data? +// PNG: requires adler32,crc32 -- significant amount of code +// PSD: no, channels output separately +// TIFF: no, stripwise-interleaved... i think + +#endif // STBI_NO_WRITE + +// add in my DDS loading support +#ifndef STBI_NO_DDS +#include "stbi_DDS_aug_c.h" +#endif diff --git a/lib/soil2/stb_image_aug.h b/lib/soil2/stb_image_aug.h new file mode 100644 index 0000000..52ea75c --- /dev/null +++ b/lib/soil2/stb_image_aug.h @@ -0,0 +1,354 @@ +/* stbi-1.16 - public domain JPEG/PNG reader - http://nothings.org/stb_image.c + when you control the images you're loading + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline (no JPEG progressive, no oddball channel decimations) + PNG non-interlaced + BMP non-1bpp, non-RLE + TGA (not sure what subset, if a subset) + PSD (composited view only, no extra channels) + HDR (radiance rgbE format) + writes BMP,TGA (define STBI_NO_WRITE to remove code) + decoded from memory or through stdio FILE (define STBI_NO_STDIO to remove code) + supports installable dequantizing-IDCT, YCbCr-to-RGB conversion (define STBI_SIMD) + + TODO: + stbi_info_* + + history: + 1.16 major bugfix - convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug; header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi_bmp_load() and stbi_tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less + than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant +*/ + +#ifndef HEADER_STB_IMAGE_AUGMENTED +#define HEADER_STB_IMAGE_AUGMENTED + +//// begin header file //////////////////////////////////////////////////// +// +// Limitations: +// - no progressive/interlaced support (jpeg, png) +// - 8-bit samples only (jpeg, png) +// - not threadsafe +// - channel subsampling of at most 2 in each dimension (jpeg) +// - no delayed line count (jpeg) -- IJG doesn't support either +// +// Basic usage (see HDR discussion below): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// stbi_image_free(data) +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *comp -- outputs # of image components in image file +// int req_comp -- if non-zero, # of image components requested in result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'req_comp' if req_comp is non-zero, or *comp otherwise. +// If req_comp is non-zero, *comp has the number of components that _would_ +// have been output otherwise. E.g. if you set req_comp to 4, you will always +// get RGBA output, but you can check *comp to easily see if it's opaque. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *comp will be unchanged. The function stbi_failure_reason() +// can be queried for an extremely brief, end-user unfriendly explanation +// of why the load failed. Define STBI_NO_FAILURE_STRINGS to avoid +// compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly +// more user-friendly ones. +// +// Paletted PNG and BMP images are automatically depalettized. +// +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image now supports loading HDR images in general, and currently +// the Radiance .HDR file format, although the support is provided +// generically. You can still load any file through the existing interface; +// if you attempt to load an HDR file, it will be automatically remapped to +// LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; +// both of these constants can be reconfigured through this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); + +#ifndef STBI_NO_STDIO +#include +#endif + +#define STBI_VERSION 1 + +enum +{ + STBI_default = 0, // only used for req_comp + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4, +}; + +typedef unsigned char stbi_uc; + +#ifdef __cplusplus +extern "C" { +#endif + +// WRITING API + +#if !defined(STBI_NO_WRITE) && !defined(STBI_NO_STDIO) +// write a BMP/TGA file given tightly packed 'comp' channels (no padding, nor bmp-stride-padding) +// (you must include the appropriate extension in the filename). +// returns TRUE on success, FALSE if couldn't open file, error writing file +extern int stbi_write_bmp (char const *filename, int x, int y, int comp, void *data); +extern int stbi_write_tga (char const *filename, int x, int y, int comp, void *data); +#endif + +// PRIMARY API - works on images of any type + +// load image by filename, open file, or memory buffer +#ifndef STBI_NO_STDIO +extern stbi_uc *stbi_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +extern int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif +extern stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +// for stbi_load_from_file, file pointer is left pointing immediately after image + +#ifndef STBI_NO_HDR +#ifndef STBI_NO_STDIO +extern float *stbi_loadf (char const *filename, int *x, int *y, int *comp, int req_comp); +extern float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif +extern float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); + +extern void stbi_hdr_to_ldr_gamma(float gamma); +extern void stbi_hdr_to_ldr_scale(float scale); + +extern void stbi_ldr_to_hdr_gamma(float gamma); +extern void stbi_ldr_to_hdr_scale(float scale); + +#endif // STBI_NO_HDR + +// get a VERY brief reason for failure +// NOT THREADSAFE +extern char *stbi_failure_reason (void); + +// free the loaded image -- this is just free() +extern void stbi_image_free (void *retval_from_stbi_load); + +// get image dimensions & components without fully decoding +extern int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); +extern int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); +#ifndef STBI_NO_STDIO +extern int stbi_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_is_hdr (char const *filename); +extern int stbi_is_hdr_from_file(FILE *f); +#endif + +// ZLIB client - used by PNG, available for other purposes + +extern char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); +extern char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +extern int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +extern char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); +extern int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +// TYPE-SPECIFIC ACCESS + +// is it a jpeg? +extern int stbi_jpeg_test_memory (stbi_uc const *buffer, int len); +extern stbi_uc *stbi_jpeg_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +extern int stbi_jpeg_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +#ifndef STBI_NO_STDIO +extern stbi_uc *stbi_jpeg_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern int stbi_jpeg_test_file (FILE *f); +extern stbi_uc *stbi_jpeg_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); + +extern int stbi_jpeg_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_jpeg_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif + +// is it a png? +extern int stbi_png_test_memory (stbi_uc const *buffer, int len); +extern stbi_uc *stbi_png_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +extern int stbi_png_info_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +#ifndef STBI_NO_STDIO +extern stbi_uc *stbi_png_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern int stbi_png_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_png_test_file (FILE *f); +extern stbi_uc *stbi_png_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +extern int stbi_png_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif + +// is it a bmp? +extern int stbi_bmp_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_bmp_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_bmp_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_bmp_test_file (FILE *f); +extern stbi_uc *stbi_bmp_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// is it a tga? +extern int stbi_tga_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_tga_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_tga_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_tga_test_file (FILE *f); +extern stbi_uc *stbi_tga_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// is it a psd? +extern int stbi_psd_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_psd_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_psd_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_psd_test_file (FILE *f); +extern stbi_uc *stbi_psd_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// is it an hdr? +extern int stbi_hdr_test_memory (stbi_uc const *buffer, int len); + +extern float * stbi_hdr_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern float * stbi_hdr_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_hdr_load_rgbe (char const *filename, int *x, int *y, int *comp, int req_comp); +extern float * stbi_hdr_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_hdr_test_file (FILE *f); +extern float * stbi_hdr_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_hdr_load_rgbe_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// define new loaders +typedef struct +{ + int (*test_memory)(stbi_uc const *buffer, int len); + stbi_uc * (*load_from_memory)(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); + #ifndef STBI_NO_STDIO + int (*test_file)(FILE *f); + stbi_uc * (*load_from_file)(FILE *f, int *x, int *y, int *comp, int req_comp); + #endif +} stbi_loader; + +// register a loader by filling out the above structure (you must defined ALL functions) +// returns 1 if added or already added, 0 if not added (too many loaders) +// NOT THREADSAFE +extern int stbi_register_loader(stbi_loader *loader); + +// define faster low-level operations (typically SIMD support) +#if STBI_SIMD +typedef void (*stbi_idct_8x8)(uint8 *out, int out_stride, short data[64], unsigned short *dequantize); +// compute an integer IDCT on "input" +// input[x] = data[x] * dequantize[x] +// write results to 'out': 64 samples, each run of 8 spaced by 'out_stride' +// CLAMP results to 0..255 +typedef void (*stbi_YCbCr_to_RGB_run)(uint8 *output, uint8 const *y, uint8 const *cb, uint8 const *cr, int count, int step); +// compute a conversion from YCbCr to RGB +// 'count' pixels +// write pixels to 'output'; each pixel is 'step' bytes (either 3 or 4; if 4, write '255' as 4th), order R,G,B +// y: Y input channel +// cb: Cb input channel; scale/biased to be 0..255 +// cr: Cr input channel; scale/biased to be 0..255 + +extern void stbi_install_idct(stbi_idct_8x8 func); +extern void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func); +#endif // STBI_SIMD + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H diff --git a/lib/soil2/stbi_DDS_aug.h b/lib/soil2/stbi_DDS_aug.h new file mode 100644 index 0000000..7317d63 --- /dev/null +++ b/lib/soil2/stbi_DDS_aug.h @@ -0,0 +1,21 @@ +/* + adding DDS loading support to stbi +*/ + +#ifndef HEADER_STB_IMAGE_DDS_AUGMENTATION +#define HEADER_STB_IMAGE_DDS_AUGMENTATION + +// is it a DDS file? +extern int stbi_dds_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_dds_load (char *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_dds_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_dds_test_file (FILE *f); +extern stbi_uc *stbi_dds_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // HEADER_STB_IMAGE_DDS_AUGMENTATION diff --git a/lib/soil2/stbi_DDS_aug_c.h b/lib/soil2/stbi_DDS_aug_c.h new file mode 100644 index 0000000..683d1cf --- /dev/null +++ b/lib/soil2/stbi_DDS_aug_c.h @@ -0,0 +1,511 @@ + +/// DDS file support, does decoding, _not_ direct uploading +/// (use SOIL for that ;-) + +/// A bunch of DirectDraw Surface structures and flags +typedef struct { + unsigned int dwMagic; + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwHeight; + unsigned int dwWidth; + unsigned int dwPitchOrLinearSize; + unsigned int dwDepth; + unsigned int dwMipMapCount; + unsigned int dwReserved1[ 11 ]; + + // DDPIXELFORMAT + struct { + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwFourCC; + unsigned int dwRGBBitCount; + unsigned int dwRBitMask; + unsigned int dwGBitMask; + unsigned int dwBBitMask; + unsigned int dwAlphaBitMask; + } sPixelFormat; + + // DDCAPS2 + struct { + unsigned int dwCaps1; + unsigned int dwCaps2; + unsigned int dwDDSX; + unsigned int dwReserved; + } sCaps; + unsigned int dwReserved2; +} DDS_header ; + +// the following constants were copied directly off the MSDN website + +// The dwFlags member of the original DDSURFACEDESC2 structure +// can be set to one or more of the following values. +#define DDSD_CAPS 0x00000001 +#define DDSD_HEIGHT 0x00000002 +#define DDSD_WIDTH 0x00000004 +#define DDSD_PITCH 0x00000008 +#define DDSD_PIXELFORMAT 0x00001000 +#define DDSD_MIPMAPCOUNT 0x00020000 +#define DDSD_LINEARSIZE 0x00080000 +#define DDSD_DEPTH 0x00800000 + +// DirectDraw Pixel Format +#define DDPF_ALPHAPIXELS 0x00000001 +#define DDPF_FOURCC 0x00000004 +#define DDPF_RGB 0x00000040 + +// The dwCaps1 member of the DDSCAPS2 structure can be +// set to one or more of the following values. +#define DDSCAPS_COMPLEX 0x00000008 +#define DDSCAPS_TEXTURE 0x00001000 +#define DDSCAPS_MIPMAP 0x00400000 + +// The dwCaps2 member of the DDSCAPS2 structure can be +// set to one or more of the following values. +#define DDSCAPS2_CUBEMAP 0x00000200 +#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 +#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 +#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 +#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 +#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 +#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 +#define DDSCAPS2_VOLUME 0x00200000 + +static int dds_test(stbi *s) +{ + // check the magic number + if (get8(s) != 'D') return 0; + if (get8(s) != 'D') return 0; + if (get8(s) != 'S') return 0; + if (get8(s) != ' ') return 0; + // check header size + if (get32le(s) != 124) return 0; + return 1; +} +#ifndef STBI_NO_STDIO +int stbi_dds_test_file (FILE *f) +{ + stbi s; + int r,n = ftell(f); + start_file(&s,f); + r = dds_test(&s); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_dds_test_memory (stbi_uc const *buffer, int len) +{ + stbi s; + start_mem(&s,buffer, len); + return dds_test(&s); +} + +// helper functions +int stbi_convert_bit_range( int c, int from_bits, int to_bits ) +{ + int b = (1 << (from_bits - 1)) + c * ((1 << to_bits) - 1); + return (b + (b >> from_bits)) >> from_bits; +} +void stbi_rgb_888_from_565( unsigned int c, int *r, int *g, int *b ) +{ + *r = stbi_convert_bit_range( (c >> 11) & 31, 5, 8 ); + *g = stbi_convert_bit_range( (c >> 05) & 63, 6, 8 ); + *b = stbi_convert_bit_range( (c >> 00) & 31, 5, 8 ); +} +void stbi_decode_DXT1_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int next_bit = 4*8; + int i, r, g, b; + int c0, c1; + unsigned char decode_colors[4*4]; + // find the 2 primary colors + c0 = compressed[0] + (compressed[1] << 8); + c1 = compressed[2] + (compressed[3] << 8); + stbi_rgb_888_from_565( c0, &r, &g, &b ); + decode_colors[0] = r; + decode_colors[1] = g; + decode_colors[2] = b; + decode_colors[3] = 255; + stbi_rgb_888_from_565( c1, &r, &g, &b ); + decode_colors[4] = r; + decode_colors[5] = g; + decode_colors[6] = b; + decode_colors[7] = 255; + if( c0 > c1 ) + { + // no alpha, 2 interpolated colors + decode_colors[8] = (2*decode_colors[0] + decode_colors[4]) / 3; + decode_colors[9] = (2*decode_colors[1] + decode_colors[5]) / 3; + decode_colors[10] = (2*decode_colors[2] + decode_colors[6]) / 3; + decode_colors[11] = 255; + decode_colors[12] = (decode_colors[0] + 2*decode_colors[4]) / 3; + decode_colors[13] = (decode_colors[1] + 2*decode_colors[5]) / 3; + decode_colors[14] = (decode_colors[2] + 2*decode_colors[6]) / 3; + decode_colors[15] = 255; + } else + { + // 1 interpolated color, alpha + decode_colors[8] = (decode_colors[0] + decode_colors[4]) / 2; + decode_colors[9] = (decode_colors[1] + decode_colors[5]) / 2; + decode_colors[10] = (decode_colors[2] + decode_colors[6]) / 2; + decode_colors[11] = 255; + decode_colors[12] = 0; + decode_colors[13] = 0; + decode_colors[14] = 0; + decode_colors[15] = 0; + } + // decode the block + for( i = 0; i < 16*4; i += 4 ) + { + int idx = ((compressed[next_bit>>3] >> (next_bit & 7)) & 3) * 4; + next_bit += 2; + uncompressed[i+0] = decode_colors[idx+0]; + uncompressed[i+1] = decode_colors[idx+1]; + uncompressed[i+2] = decode_colors[idx+2]; + uncompressed[i+3] = decode_colors[idx+3]; + } + // done +} +void stbi_decode_DXT23_alpha_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int i, next_bit = 0; + // each alpha value gets 4 bits + for( i = 3; i < 16*4; i += 4 ) + { + uncompressed[i] = stbi_convert_bit_range( + (compressed[next_bit>>3] >> (next_bit&7)) & 15, + 4, 8 ); + next_bit += 4; + } +} +void stbi_decode_DXT45_alpha_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int i, next_bit = 8*2; + unsigned char decode_alpha[8]; + // each alpha value gets 3 bits, and the 1st 2 bytes are the range + decode_alpha[0] = compressed[0]; + decode_alpha[1] = compressed[1]; + if( decode_alpha[0] > decode_alpha[1] ) + { + // 6 step intermediate + decode_alpha[2] = (6*decode_alpha[0] + 1*decode_alpha[1]) / 7; + decode_alpha[3] = (5*decode_alpha[0] + 2*decode_alpha[1]) / 7; + decode_alpha[4] = (4*decode_alpha[0] + 3*decode_alpha[1]) / 7; + decode_alpha[5] = (3*decode_alpha[0] + 4*decode_alpha[1]) / 7; + decode_alpha[6] = (2*decode_alpha[0] + 5*decode_alpha[1]) / 7; + decode_alpha[7] = (1*decode_alpha[0] + 6*decode_alpha[1]) / 7; + } else + { + // 4 step intermediate, pluss full and none + decode_alpha[2] = (4*decode_alpha[0] + 1*decode_alpha[1]) / 5; + decode_alpha[3] = (3*decode_alpha[0] + 2*decode_alpha[1]) / 5; + decode_alpha[4] = (2*decode_alpha[0] + 3*decode_alpha[1]) / 5; + decode_alpha[5] = (1*decode_alpha[0] + 4*decode_alpha[1]) / 5; + decode_alpha[6] = 0; + decode_alpha[7] = 255; + } + for( i = 3; i < 16*4; i += 4 ) + { + int idx = 0, bit; + bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; + idx += bit << 0; + ++next_bit; + bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; + idx += bit << 1; + ++next_bit; + bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; + idx += bit << 2; + ++next_bit; + uncompressed[i] = decode_alpha[idx & 7]; + } + // done +} +void stbi_decode_DXT_color_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int next_bit = 4*8; + int i, r, g, b; + int c0, c1; + unsigned char decode_colors[4*3]; + // find the 2 primary colors + c0 = compressed[0] + (compressed[1] << 8); + c1 = compressed[2] + (compressed[3] << 8); + stbi_rgb_888_from_565( c0, &r, &g, &b ); + decode_colors[0] = r; + decode_colors[1] = g; + decode_colors[2] = b; + stbi_rgb_888_from_565( c1, &r, &g, &b ); + decode_colors[3] = r; + decode_colors[4] = g; + decode_colors[5] = b; + // Like DXT1, but no choicees: + // no alpha, 2 interpolated colors + decode_colors[6] = (2*decode_colors[0] + decode_colors[3]) / 3; + decode_colors[7] = (2*decode_colors[1] + decode_colors[4]) / 3; + decode_colors[8] = (2*decode_colors[2] + decode_colors[5]) / 3; + decode_colors[9] = (decode_colors[0] + 2*decode_colors[3]) / 3; + decode_colors[10] = (decode_colors[1] + 2*decode_colors[4]) / 3; + decode_colors[11] = (decode_colors[2] + 2*decode_colors[5]) / 3; + // decode the block + for( i = 0; i < 16*4; i += 4 ) + { + int idx = ((compressed[next_bit>>3] >> (next_bit & 7)) & 3) * 3; + next_bit += 2; + uncompressed[i+0] = decode_colors[idx+0]; + uncompressed[i+1] = decode_colors[idx+1]; + uncompressed[i+2] = decode_colors[idx+2]; + } + // done +} +static stbi_uc *dds_load(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + // all variables go up front + stbi_uc *dds_data = NULL; + stbi_uc block[16*4]; + stbi_uc compressed[8]; + int flags, DXT_family; + int has_alpha, has_mipmap; + int is_compressed, cubemap_faces; + int block_pitch, num_blocks; + DDS_header header; + int i, sz, cf; + // load the header + if( sizeof( DDS_header ) != 128 ) + { + return NULL; + } + getn( s, (stbi_uc*)(&header), 128 ); + // and do some checking + if( header.dwMagic != (('D' << 0) | ('D' << 8) | ('S' << 16) | (' ' << 24)) ) return NULL; + if( header.dwSize != 124 ) return NULL; + flags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; + if( (header.dwFlags & flags) != flags ) return NULL; + /* According to the MSDN spec, the dwFlags should contain + DDSD_LINEARSIZE if it's compressed, or DDSD_PITCH if + uncompressed. Some DDS writers do not conform to the + spec, so I need to make my reader more tolerant */ + if( header.sPixelFormat.dwSize != 32 ) return NULL; + flags = DDPF_FOURCC | DDPF_RGB; + if( (header.sPixelFormat.dwFlags & flags) == 0 ) return NULL; + if( (header.sCaps.dwCaps1 & DDSCAPS_TEXTURE) == 0 ) return NULL; + // get the image data + s->img_x = header.dwWidth; + s->img_y = header.dwHeight; + s->img_n = 4; + is_compressed = (header.sPixelFormat.dwFlags & DDPF_FOURCC) / DDPF_FOURCC; + has_alpha = (header.sPixelFormat.dwFlags & DDPF_ALPHAPIXELS) / DDPF_ALPHAPIXELS; + has_mipmap = (header.sCaps.dwCaps1 & DDSCAPS_MIPMAP) && (header.dwMipMapCount > 1); + cubemap_faces = (header.sCaps.dwCaps2 & DDSCAPS2_CUBEMAP) / DDSCAPS2_CUBEMAP; + /* I need cubemaps to have square faces */ + cubemap_faces &= (s->img_x == s->img_y); + cubemap_faces *= 5; + cubemap_faces += 1; + block_pitch = (s->img_x+3) >> 2; + num_blocks = block_pitch * ((s->img_y+3) >> 2); + /* let the user know what's going on */ + *x = s->img_x; + *y = s->img_y; + *comp = s->img_n; + /* is this uncompressed? */ + if( is_compressed ) + { + /* compressed */ + // note: header.sPixelFormat.dwFourCC is something like (('D'<<0)|('X'<<8)|('T'<<16)|('1'<<24)) + DXT_family = 1 + (header.sPixelFormat.dwFourCC >> 24) - '1'; + if( (DXT_family < 1) || (DXT_family > 5) ) return NULL; + /* check the expected size...oops, nevermind... + those non-compliant writers leave + dwPitchOrLinearSize == 0 */ + // passed all the tests, get the RAM for decoding + sz = (s->img_x)*(s->img_y)*4*cubemap_faces; + dds_data = (unsigned char*)malloc( sz ); + /* do this once for each face */ + for( cf = 0; cf < cubemap_faces; ++ cf ) + { + // now read and decode all the blocks + for( i = 0; i < num_blocks; ++i ) + { + // where are we? + int bx, by, bw=4, bh=4; + int ref_x = 4 * (i % block_pitch); + int ref_y = 4 * (i / block_pitch); + // get the next block's worth of compressed data, and decompress it + if( DXT_family == 1 ) + { + // DXT1 + getn( s, compressed, 8 ); + stbi_decode_DXT1_block( block, compressed ); + } else if( DXT_family < 4 ) + { + // DXT2/3 + getn( s, compressed, 8 ); + stbi_decode_DXT23_alpha_block ( block, compressed ); + getn( s, compressed, 8 ); + stbi_decode_DXT_color_block ( block, compressed ); + } else + { + // DXT4/5 + getn( s, compressed, 8 ); + stbi_decode_DXT45_alpha_block ( block, compressed ); + getn( s, compressed, 8 ); + stbi_decode_DXT_color_block ( block, compressed ); + } + // is this a partial block? + if( ref_x + 4 > s->img_x ) + { + bw = s->img_x - ref_x; + } + if( ref_y + 4 > s->img_y ) + { + bh = s->img_y - ref_y; + } + // now drop our decompressed data into the buffer + for( by = 0; by < bh; ++by ) + { + int idx = 4*((ref_y+by+cf*s->img_x)*s->img_x + ref_x); + for( bx = 0; bx < bw*4; ++bx ) + { + + dds_data[idx+bx] = block[by*16+bx]; + } + } + } + /* done reading and decoding the main image... + skip MIPmaps if present */ + if( has_mipmap ) + { + int block_size = 16; + if( DXT_family == 1 ) + { + block_size = 8; + } + for( i = 1; i < header.dwMipMapCount; ++i ) + { + int mx = s->img_x >> (i + 2); + int my = s->img_y >> (i + 2); + if( mx < 1 ) + { + mx = 1; + } + if( my < 1 ) + { + my = 1; + } + skip( s, mx*my*block_size ); + } + } + }/* per cubemap face */ + } else + { + /* uncompressed */ + DXT_family = 0; + s->img_n = 3; + if( has_alpha ) + { + s->img_n = 4; + } + *comp = s->img_n; + sz = s->img_x*s->img_y*s->img_n*cubemap_faces; + dds_data = (unsigned char*)malloc( sz ); + /* do this once for each face */ + for( cf = 0; cf < cubemap_faces; ++ cf ) + { + /* read the main image for this face */ + getn( s, &dds_data[cf*s->img_x*s->img_y*s->img_n], s->img_x*s->img_y*s->img_n ); + /* done reading and decoding the main image... + skip MIPmaps if present */ + if( has_mipmap ) + { + for( i = 1; i < header.dwMipMapCount; ++i ) + { + int mx = s->img_x >> i; + int my = s->img_y >> i; + if( mx < 1 ) + { + mx = 1; + } + if( my < 1 ) + { + my = 1; + } + skip( s, mx*my*s->img_n ); + } + } + } + /* data was BGR, I need it RGB */ + for( i = 0; i < sz; i += s->img_n ) + { + unsigned char temp = dds_data[i]; + dds_data[i] = dds_data[i+2]; + dds_data[i+2] = temp; + } + } + /* finished decompressing into RGBA, + adjust the y size if we have a cubemap + note: sz is already up to date */ + s->img_y *= cubemap_faces; + *y = s->img_y; + // did the user want something else, or + // see if all the alpha values are 255 (i.e. no transparency) + has_alpha = 0; + if( s->img_n == 4) + { + for( i = 3; (i < sz) && (has_alpha == 0); i += 4 ) + { + has_alpha |= (dds_data[i] < 255); + } + } + if( (req_comp <= 4) && (req_comp >= 1) ) + { + // user has some requirements, meet them + if( req_comp != s->img_n ) + { + dds_data = convert_format( dds_data, s->img_n, req_comp, s->img_x, s->img_y ); + *comp = s->img_n; + } + } else + { + // user had no requirements, only drop to RGB is no alpha + if( (has_alpha == 0) && (s->img_n == 4) ) + { + dds_data = convert_format( dds_data, 4, 3, s->img_x, s->img_y ); + *comp = 3; + } + } + // OK, done + return dds_data; +} + +#ifndef STBI_NO_STDIO +stbi_uc *stbi_dds_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s,f); + return dds_load(&s,x,y,comp,req_comp); +} + +stbi_uc *stbi_dds_load (char *filename, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_dds_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return data; +} +#endif + +stbi_uc *stbi_dds_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s,buffer, len); + return dds_load(&s,x,y,comp,req_comp); +} diff --git a/preboot.js b/preboot.js new file mode 100644 index 0000000..c3be1ac --- /dev/null +++ b/preboot.js @@ -0,0 +1,40 @@ + +mergeInto(LibraryManager.library, { + ff_browser_add_resize_handler : function(resizeHandler) { + var handlerFuncResize = function(event) { + var pageCanvas = document.getElementById('canvas'); + if (pageCanvas === null) { + return; + } + Runtime.dynCall('vii', resizeHandler, [ pageCanvas.clientWidth, pageCanvas.clientHeight ]); + } + window.addEventListener('resize', handlerFuncResize, true); + }, + ff_browser_add_popstate_handler : function(popstateHandler) { + var handlerFuncPopState = function(event) { + if (event.state == null || event.state.hash === null) { + return; + } + var hashPtr = allocate(intArrayFromString(event.state.hash), 'i8', ALLOC_NORMAL); // free in c code + + console.log('js popstate: '+event.state.hash+' ptr: '+hashPtr); + Runtime.dynCall('vi', popstateHandler, [ hashPtr ]); + } + window.addEventListener('popstate', handlerFuncPopState); + + if (window.location.hash && window.location.hash !== '') { + console.log('calling init page: '+window.location.hash.substring(1)); + handlerFuncPopState({state:{page:window.location.hash.substring(1)}}); + } + }, + ff_browser_pushstate : function(hrefHash) { + var hrefHashStr = Pointer_stringify(hrefHash); // only display then in pop we don't need to reverse again. + console.log('js pushstate: '+hrefHashStr); + history.pushState({hash:hrefHashStr}, document.title, window.location.protocol+window.location.hostname+window.location.pathname+'#'+hrefHashStr); + }, + ff_browser_openlink : function(urlPtr) { + var url = Pointer_stringify(urlPtr); + console.log('js openurl: '+url); + window.open(url,'_self'); + } +}); diff --git a/src/page/PageComponent.h b/src/page/PageComponent.h new file mode 100644 index 0000000..84f2302 --- /dev/null +++ b/src/page/PageComponent.h @@ -0,0 +1,106 @@ +#ifndef _PAGE_COMPONENT_H +#define _PAGE_COMPONENT_H + +#include "imgui.h" +#include "PageFont.h" +#include "PageDraw.h" +#include "PageWindow.h" + +class PageText: public PageDrawComponent { +private: + const char* text; + PageFontType font = NORMAL; + bool bullet = false; + ImVec4 color; + bool colorFlag = false; + bool multiLine = false; + bool multiLineReadOnly = true; +public: + PageText(const char* text) { + this->text = text; + } + void drawComponent(void) { + PAGE_FONT.pushFont(font); + if (colorFlag) { + ImGui::PushStyleColor(ImGuiCol_Text, color); + } + if (bullet) { + ImGui::Bullet(); + } + if (multiLine) { + char* textLine = (char*)text; + ImGui::InputTextMultiline("##source", textLine, strlen(textLine), ImVec2(-1.0f, ImGui::GetTextLineHeight() * 16), ImGuiInputTextFlags_AllowTabInput | (multiLineReadOnly ? ImGuiInputTextFlags_ReadOnly : 0)); + } else { + ImGui::Text(text); + } + if (colorFlag) { + ImGui::PopStyleColor(); + } + PAGE_FONT.popFont(font); + } + PageText* setFont(PageFontType font) { + this->font = font; + return this; + } + PageText* setBullet() { + bullet = true; + return this; + } + PageText* setColor(ImVec4 color) { + this->color = color; + colorFlag = true; + return this; + } + PageText* setMultiLine() { + multiLine = true; + return this; + } +}; + +class PageImage: public PageDrawComponent { +private: + void* image; + ImVec2 size = ImVec2(100,100); + ImColor tintColor = ImColor(255,255,255,255); + ImColor borderColor = ImColor(255,255,255,128); +public: + PageImage(void* image) { + this->image = image; + } + void drawComponent(void) { + ImGui::Image((void *)this->image, this->size, ImVec2(0,0), ImVec2(1,1), this->tintColor , this->borderColor); + } + PageImage* setSize(ImVec2 size) { + this->size = size; + return this; + } + PageImage* setSize(float x, float y) { + return this->setSize(ImVec2(x,y)); + } +}; +class PageLink: public PageDrawComponent { +private: + const char* text; + PageFontType font = NORMAL; + bool clicked = false; +public: + PageLink(const char* text) { + this->text = text; + } + void drawComponent(void) { + PAGE_FONT.pushFont(font); + if (ImGui::Selectable(text, &clicked)) { + if (PAGE_WINDOW.platformOpenUrl != NULL) { + PAGE_WINDOW.platformOpenUrl(text); + } + } + //ImGui::SameLine(); + PAGE_FONT.popFont(font); + } + PageLink* setFont(PageFontType font) { + this->font = font; + return this; + } +}; + +#endif diff --git a/src/page/PageController.cpp b/src/page/PageController.cpp new file mode 100644 index 0000000..87afb77 --- /dev/null +++ b/src/page/PageController.cpp @@ -0,0 +1,76 @@ +#include "PageController.h" + +PageController::PageController(const char* id, const char* title) { + this->id = id; + this->title = title; + this->buildText(this->getTitle())->setFont(HEADER_MAIN); +} + +const char* PageController::getId() { + return id; +} + +const char* PageController::getTitle() { + return title; +} + +void PageController::loadImage(const char* filename) { + printf("loadImage: %s\n",filename); + void* imageId = (void*)SOIL_load_OGL_texture(filename, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS); + if(imageId == NULL) { + printf("Failed to load texture\n"); + return; + } + this->images.insert(std::pair(filename,imageId)); +} + +int PageController::getImageCount() { + return this->images.size(); +} + +int PageController::getDrawCount() { + return this->components.size(); +} + +void PageController::drawLayer() { + for (auto comp : this->components) { + comp->drawComponent(); + } +} + +void PageController::addComponent(PageDrawComponent* component) { + this->components.push_back(component); +} + +void PageController::setMenu(bool menu) { + this->menu = menu; +} + +bool PageController::getMenu() { + return this->menu; +} + +PageText* PageController::buildText(const char* text) { + PageText* result = new PageText(text); + addComponent(result); + return result; +} + +PageLink* PageController::buildLink(const char* url) { + PageLink* result = new PageLink(url); + addComponent(result); + return result; +} + +PageImage* PageController::buildImage(void* imageRef) { + PageImage* result = new PageImage(imageRef); + addComponent(result); + return result; +} + +PageImage* PageController::buildImage(const char* filename) { + if (images.find(filename) == images.end()) { + loadImage(filename); + } + return buildImage(images.at(filename)); +} diff --git a/src/page/PageController.h b/src/page/PageController.h new file mode 100644 index 0000000..defdcda --- /dev/null +++ b/src/page/PageController.h @@ -0,0 +1,45 @@ +#ifndef _PAGE_CONTROLLER_H +#define _PAGE_CONTROLLER_H + +#include +#include +#include +#include + +#include "PageComponent.h" +#include "PageDraw.h" +// TODO: goto SDL_Image ? +#include "SOIL.h" + + +class PageController: public PageDrawLayer { +private: + const char* id; + const char* title; + bool menu = true; + std::map images; + std::vector components; + + void loadImage(const char* filename); + PageImage* buildImage(void* imageRef); +public: + PageController(const char* id, const char* title); + + const char* getId(); + const char* getTitle(); + + int getImageCount(); + + int getDrawCount(); + void drawLayer(); // from super + + void addComponent(PageDrawComponent* component); + void setMenu(bool menu); + bool getMenu(); + + PageText* buildText(const char* text); + PageLink* buildLink(const char* url); + PageImage* buildImage(const char* filename); +}; + +#endif diff --git a/src/page/PageDraw.h b/src/page/PageDraw.h new file mode 100644 index 0000000..0096714 --- /dev/null +++ b/src/page/PageDraw.h @@ -0,0 +1,15 @@ +#ifndef _PAGE_DRAW_H +#define _PAGE_DRAW_H + +class PageDrawLayer { +public: + virtual void drawLayer(void) = 0; +}; + +class PageDrawComponent { +public: + virtual void drawComponent(void) = 0; +}; + + +#endif diff --git a/src/page/PageFont.cpp b/src/page/PageFont.cpp new file mode 100644 index 0000000..9c3de7d --- /dev/null +++ b/src/page/PageFont.cpp @@ -0,0 +1,69 @@ +#include "PageFont.h" + +PageFont::PageFont() { +} + +void PageFont::loadFonts() { + printf("fonts loadings\n"); + ImGuiIO& io = ImGui::GetIO(); + // NOTE: Load fonts from large to small else scaling doesn't work + + ImFontConfig fontConfigHeaderMain; + fontConfigHeaderMain.MergeMode = false; + fontConfigHeaderMain.PixelSnapH = true; + ImFont* fontHeaderMain = io.Fonts->AddFontFromFileTTF("data/font/roboto-bold.ttf", 24.0f, &fontConfigHeaderMain); + + ImFontConfig fontConfigHeaderSub; + fontConfigHeaderSub.MergeMode = false; + fontConfigHeaderSub.PixelSnapH = true; + ImFont* fontHeaderSub = io.Fonts->AddFontFromFileTTF("data/font/roboto-bold.ttf", 20.0f, &fontConfigHeaderSub); + + ImFontConfig fontConfigNormal; + fontConfigNormal.MergeMode = false; + fontConfigNormal.PixelSnapH = true; + io.Fonts->AddFontFromFileTTF("data/font/lato-blackitalic-webfont.ttf", 16.0f, &fontConfigNormal); + static ImWchar iconRange[] = { 0xf000, 0xf3ff, 0 }; + ImFontConfig fontConfigNormalIcon; + fontConfigNormalIcon.MergeMode = true; + fontConfigNormalIcon.PixelSnapH = true; + io.Fonts->AddFontFromFileTTF("data/font/fontawesome-webfont.ttf", 16.0f, &fontConfigNormalIcon, iconRange); + + ImFontConfig fontConfigSmall; + fontConfigSmall.MergeMode = false; + fontConfigSmall.PixelSnapH = true; + ImFont* fontSmall = io.Fonts->AddFontFromFileTTF("data/font/lato-blackitalic-webfont.ttf", 12.0f, &fontConfigSmall); + + this->fonts.insert(std::pair(HEADER_MAIN, fontHeaderMain)); + this->fonts.insert(std::pair(HEADER_SUB, fontHeaderSub)); + this->fonts.insert(std::pair(SMALL, fontSmall)); + + // swap ImGui main font to normal + ImFont* font0 = io.Fonts->Fonts.Data[0]; + ImFont* font2 = io.Fonts->Fonts.Data[2]; + io.Fonts->Fonts.Data[0] = font2; + io.Fonts->Fonts.Data[2] = font0; + + printf("fonts initialized\n"); +} + +void PageFont::pushFont(PageFontType type) { + if (NORMAL == type) { + return; + } + if (this->fonts.find(type) == this->fonts.end()) { + printf("ERR: unknown font: %i\n",type); + ImGui::PushFont(this->fonts.at(SMALL)); // else pop will error + } else { + ImGui::PushFont(this->fonts.at(type)); + } +} + +void PageFont::popFont(PageFontType type) { + if (NORMAL == type) { + return; + } + ImGui::PopFont(); +} + +PageFont PAGE_FONT; + diff --git a/src/page/PageFont.h b/src/page/PageFont.h new file mode 100644 index 0000000..8805c79 --- /dev/null +++ b/src/page/PageFont.h @@ -0,0 +1,27 @@ +#ifndef _PAGE_FONT_H +#define _PAGE_FONT_H + +#include "imgui.h" +#include +#include + +enum PageFontType { + HEADER_MAIN, + HEADER_SUB, + NORMAL, + SMALL, +}; + +class PageFont { +private: + std::map fonts; +public: + PageFont(); + void loadFonts(); + void pushFont(PageFontType font); + void popFont(PageFontType font); +}; + +extern PageFont PAGE_FONT; + +#endif diff --git a/src/page/PageWindow.cpp b/src/page/PageWindow.cpp new file mode 100644 index 0000000..cdbd718 --- /dev/null +++ b/src/page/PageWindow.cpp @@ -0,0 +1,130 @@ +#include "PageWindow.h" + +ImGuiWindowFlags WINDOW_PANE_FLAGS = ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_NoFocusOnAppearing|ImGuiWindowFlags_NoBringToFrontOnFocus; +ImGuiWindowFlags WINDOW_BACKGROUND_FLAGS = WINDOW_PANE_FLAGS|ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoInputs; + +PageWindow::PageWindow() { +} + +void PageWindow::renderMenu() { + ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x * layoutMarginX, ImGui::GetIO().DisplaySize.y * layoutMarginY), ImGuiSetCond_Always); + ImGui::SetNextWindowSize(ImVec2((ImGui::GetIO().DisplaySize.x * (1.0f - layoutMarginX)) - (ImGui::GetIO().DisplaySize.x * layoutMarginX), menuHeight), ImGuiSetCond_Always); + ImGui::Begin("Menu###menu", &menuRender , ImVec2(300, 200), 0.5f, WINDOW_PANE_FLAGS); + PAGE_FONT.pushFont(HEADER_MAIN); + bool first = true; + for (auto page : pages) { + if (!page.second->getMenu()) { + continue; + } + if (!first) { + ImGui::SameLine(); + } + first = false; + if (ImGui::Button(page.second->getTitle())) { + this->setPageCurrent(page.second); + } + } + PAGE_FONT.popFont(HEADER_MAIN); + ImGui::End(); +} + +void PageWindow::renderPage(void) { + int preHeight = this->menuHeight; + if (!menuRender) { + preHeight = 0; + } + int postHeight = this->footerHeight; + if (!footerRender) { + postHeight = 0; + } + ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x * layoutMarginX, (ImGui::GetIO().DisplaySize.y * layoutMarginY)*2 + preHeight), ImGuiSetCond_Always); + ImGui::SetNextWindowSize(ImVec2((ImGui::GetIO().DisplaySize.x * (1.0f - layoutMarginX)) - (ImGui::GetIO().DisplaySize.x * layoutMarginX), ImGui::GetIO().DisplaySize.y - preHeight - postHeight - (ImGui::GetIO().DisplaySize.y * layoutMarginY)*4 ), ImGuiSetCond_Always); + ImGui::Begin("Home###content", &pageRender , ImVec2(300, 200), 0.5f, WINDOW_PANE_FLAGS); + + if (pageCurrent == NULL) { + ImGui::Text("NULL"); + } else { + pageCurrent->drawLayer(); + } + ImGui::End(); +} + +void PageWindow::renderFooter(void) { + ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x * layoutMarginX, ImGui::GetIO().DisplaySize.y - footerHeight - (ImGui::GetIO().DisplaySize.y * layoutMarginY)), ImGuiSetCond_Always); + ImGui::SetNextWindowSize(ImVec2((ImGui::GetIO().DisplaySize.x * (1.0f - layoutMarginX)) - (ImGui::GetIO().DisplaySize.x * layoutMarginX), footerHeight), ImGuiSetCond_Always); + ImGui::Begin("Footer###footer", &footerRender , ImVec2(300, 200), 0.5f, WINDOW_PANE_FLAGS); + ImGui::Text("(c)2016 ff"); + ImGui::SameLine(); + ImGui::Text(" -<-- -->- "); + ImGui::SameLine(); + ImGui::Text("Compiled:"); + ImGui::SameLine(); + ImGui::Text(__DATE__); + ImGui::SameLine(); + ImGui::Text(__TIME__); + if (footerRenderFPS) { + ImGui::SameLine(); + ImGui::Text(" - "); + ImGui::SameLine(); + ImGui::Text("(%.1f FPS)",ImGui::GetIO().Framerate); + } + ImGui::End(); +} + + +void PageWindow::draw() { + if (footerRender) { + this->renderFooter(); + } + if (pageRender) { + this->renderPage(); + } + if (menuRender) { + this->renderMenu(); + } + for (auto comp : layers) { + comp->drawLayer(); + } +} + +PageDrawLayer* PageWindow::addLayer(PageDrawLayer* layer) { + layers.push_back(layer); + return layer; +} + +PageController* PageWindow::addPage(PageController* page) { + pages.insert(std::pair(page->getId(),page)); + return page; +} + +PageController* PageWindow::addPage(const char* id, const char* title) { + return addPage(new PageController(id,title)); +} + +PageController* PageWindow::findPage(char* id) { + for (auto page : pages) { + if (strcmp (page.first, id) != 0) { + continue; + } + return page.second; + } + return NULL; +} + +void PageWindow::setPageCurrent(PageController* page) { + if (page != NULL) { + this->pageCurrent = page; + } else { + this->pageCurrent = this->pageNotFound; + } + if (platformPageCb != NULL) { + platformPageCb(this->pageCurrent->getId()); + } +} + +void PageWindow::setPageNotFound(PageController* page) { + this->pageNotFound = page; +} + +PageWindow PAGE_WINDOW; + diff --git a/src/page/PageWindow.h b/src/page/PageWindow.h new file mode 100644 index 0000000..b9b96b1 --- /dev/null +++ b/src/page/PageWindow.h @@ -0,0 +1,65 @@ +#ifndef _PAGE_WINDOW_H +#define _PAGE_WINDOW_H + +#include "PageController.h" +#include "PageDraw.h" +#include "PageFont.h" +#include "imgui.h" +#include +#include +#include +#include + + +class PageWindow { +private: + std::map pages; + std::vector layers; + void renderMenu(); + void renderPage(); + void renderFooter(); + + +public: + SDL_Window *window; + SDL_GLContext glcontext; + bool windowRun = true; + bool windowFullScreen = false; + bool footerRender = true; + bool footerRenderFPS = true; + int footerHeight = 30; + //bool backgroundRender = true; + ImVec4 backgroundClearColor = ImColor(8, 54, 127); + bool menuRender = true; + int menuHeight = 50; + bool pageRender = true; + PageController* pageCurrent; + PageController* pageNotFound; + float layoutMarginX = 0.07f; + float layoutMarginY = 0.01f; + void (*platformOpenUrl)(char* url) = NULL; + void (*platformPageCb)(char* pageId) = NULL; + + + PageWindow(); + void draw(); + PageDrawLayer* addLayer(PageDrawLayer* layer); + PageController* addPage(PageController* page); + PageController* addPage(const char* id, const char* title); + PageController* findPage(char* id); + void setPageCurrent(PageController* page); + void setPageNotFound(PageController* page); + + void printDebug() { + for (auto page : pages) { + printf("page: %s comp: %i img: %i\n",page.second->getId(),page.second->getDrawCount(),page.second->getImageCount()); + } + } +}; + +extern ImGuiWindowFlags WINDOW_PANE_FLAGS; +extern ImGuiWindowFlags WINDOW_BACKGROUND_FLAGS; + +extern PageWindow PAGE_WINDOW; + +#endif diff --git a/src/site/FFSiteBackground.cpp b/src/site/FFSiteBackground.cpp new file mode 100644 index 0000000..364557d --- /dev/null +++ b/src/site/FFSiteBackground.cpp @@ -0,0 +1,72 @@ +#include "FFSiteBackground.h" + +struct A { + const char* text = "ForwardFire"; + ImVec4 color = ImVec4(0.0f,0.5f,0.3f,1.0f);; + int bgSpeed = 1; + float x = 10.0f; + float xOff = 2.0f; + float y = 20.0f; + float yOff = 3.0f; +}; + +static const int LETTERS_MAX = 25; +static A letters[LETTERS_MAX]; + +static bool rr = true; + +FFSiteBackground::FFSiteBackground() { + for (int i=0;ibgSpeed = rand() % 100; + a->x = rand() % (int)ImGui::GetIO().DisplaySize.x; + a->y = rand() % (int)ImGui::GetIO().DisplaySize.y; + a->color = ImVec4(0.0f,(i+1)*0.1f,(i+2)*0.01f,(i+3)*0.01f); + + a->xOff = rand() % 3 + 0.1f; + a->yOff = rand() % 4 + 0.1f; + + int r = rand() % 5; + if (r == 2) { + a->xOff = 0 - a->xOff; + } + if (r == 3) { + a->yOff = 0 - a->yOff; + } + } +} + + +void FFSiteBackground::drawLayer(void) { + ImGui::SetNextWindowSize(ImGui::GetIO().DisplaySize, ImGuiSetCond_Always); + ImGui::Begin("Background###background", &rr , ImGui::GetIO().DisplaySize, 0.0f, WINDOW_BACKGROUND_FLAGS); + for (int i=0;ibgSpeed--; + if (a->bgSpeed < 0) { + a->bgSpeed = 2; //rand() % 10; + + if (a->x > ImGui::GetIO().DisplaySize.x) { + a->xOff = 0 - a->xOff; + a->x = ImGui::GetIO().DisplaySize.x; + } + if (a->x < 0) { + a->xOff = 0 - a->xOff; + a->x = 0; + } + if (a->y > ImGui::GetIO().DisplaySize.y) { + a->yOff = 0 - a->yOff; + a->y = ImGui::GetIO().DisplaySize.y; + } + if (a->y < 0) { + a->yOff = 0 - a->yOff; + a->y = 0; + } + a->x = a->x+a->xOff; + a->y = a->y+a->yOff; + } + ImGui::SetCursorPos(ImVec2(a->x, a->y)); + ImGui::TextColored(a->color, a->text); + } + ImGui::End(); +} diff --git a/src/site/FFSiteBackground.h b/src/site/FFSiteBackground.h new file mode 100644 index 0000000..54e1591 --- /dev/null +++ b/src/site/FFSiteBackground.h @@ -0,0 +1,16 @@ +#ifndef _FF_SITE_BACKGROUND_H +#define _FF_SITE_BACKGROUND_H + +#include "../page/PageDraw.h" +#include "../page/PageWindow.h" +#include "imgui.h" +#include + +class FFSiteBackground: public PageDrawLayer { +private: +public: + FFSiteBackground(); + void drawLayer(void); +}; + +#endif diff --git a/src/site/FFSiteDebug.cpp b/src/site/FFSiteDebug.cpp new file mode 100644 index 0000000..d8c8033 --- /dev/null +++ b/src/site/FFSiteDebug.cpp @@ -0,0 +1,105 @@ +#include "FFSiteDebug.h" + +void FFSiteDebug::showSettingsWindow(bool* p_open) { + ImGui::SetNextWindowSize(ImVec2(300, 200), ImGuiSetCond_FirstUseEver); + ImGui::Begin("Test Settings", p_open); + ImGui::ColorEdit3("Background", (float*) &PAGE_WINDOW.backgroundClearColor); + ImGui::SliderFloat("Margin X", &PAGE_WINDOW.layoutMarginX, 0.0, 0.4); + ImGui::SliderFloat("Margin Y", &PAGE_WINDOW.layoutMarginY, 0.0, 0.2); + ImGui::Checkbox("Render menu", &PAGE_WINDOW.menuRender); + ImGui::Checkbox("Render footer", &PAGE_WINDOW.footerRender); + ImGui::Checkbox("Render FPS", &PAGE_WINDOW.footerRenderFPS); + ImGui::End(); +} + +void FFSiteDebug::showLayoutWindow(bool* p_open) { + ImGui::SetNextWindowSize(ImVec2(300, 200), ImGuiSetCond_FirstUseEver); + ImGui::Begin("Test Layout", p_open); + + ImGui::BeginChild("Sub1", ImVec2(ImGui::GetWindowContentRegionWidth() * 0.33f,100), true, 0); + ImGui::SmallButton("Hello 11");ImGui::SameLine(); + ImGui::SmallButton("Hello 12");ImGui::SameLine(); + ImGui::SmallButton("Hello 13");ImGui::SameLine(); + ImGui::SmallButton("Hello 14"); + ImGui::SmallButton("Hello 15");ImGui::SameLine(); + ImGui::SmallButton("Hello 16"); + ImGui::SmallButton("Hello 17");ImGui::SameLine(); + ImGui::SmallButton("Hello 18");ImGui::SameLine(); + ImGui::EndChild(); + ImGui::SameLine(); + + static bool bb = true; + + //ImGui::PushStyleVar(ImGuiStyleVar_ChildWindowRounding, 5.0f); + ImGui::BeginChild("Sub2", ImVec2(ImGui::GetWindowContentRegionWidth() * 0.66f,100), true, 0); + if (bb) { + ImGui::Text("Hello 22"); + } else { + ImGui::Text("Hello 22222222222222....."); + } + bb = !ImGui::IsItemHovered(); + ImGui::EndChild(); + + //ImGui::PopStyleVar(); + + static bool bc = true; + float f = 15.0f; + if (bc) { + f+=10; + } + + ImGui::BeginGroup(); + ImGui::PushStyleVar(ImGuiStyleVar_ChildWindowRounding, f); + ImGui::BeginChild("Main", ImVec2(ImGui::GetWindowContentRegionWidth(),-1), false, ImGuiWindowFlags_ShowBorders); + ImGui::Text("Hello Main"); + ImGui::EndChild(); + ImGui::PopStyleVar(); + ImGui::EndGroup(); + bc = !ImGui::IsItemHovered(); + bc = !bc; + + ImGui::End(); +} + +void FFSiteDebug::drawComponent(void) { + if (ImGui::Button("\uf241 Fullscreen")) { + if (PAGE_WINDOW.windowFullScreen) { + SDL_SetWindowFullscreen(PAGE_WINDOW.window, 0); + } else { + SDL_SetWindowFullscreen(PAGE_WINDOW.window, SDL_WINDOW_FULLSCREEN); + } + PAGE_WINDOW.windowFullScreen = !PAGE_WINDOW.windowFullScreen; + } + if (ImGui::Button("\uf1fa Test Demo")) { + renderDemo ^= 1; + } + if (ImGui::Button("\uf1fe Test Metrics")) { + renderMetrics ^= 1; + } + if (ImGui::Button("\uf1fb Test Layout")) { + renderLayout ^= 1; + } + if (ImGui::Button("\uf1ff Page Options")) { + renderSettings ^= 1; + } +} + +void FFSiteDebug::drawLayer(void) { + if (renderDemo) { + ImGui::SetNextWindowPos(ImVec2(50, 50), ImGuiSetCond_FirstUseEver); + ImGui::ShowTestWindow(&renderDemo); + } + if (renderMetrics) { + ImGui::SetNextWindowPos(ImVec2(60, 60), ImGuiSetCond_FirstUseEver); + ImGui::ShowMetricsWindow(&renderMetrics); + } + if (renderLayout) { + ImGui::SetNextWindowPos(ImVec2(70, 70), ImGuiSetCond_FirstUseEver); + showLayoutWindow(&renderLayout); + } + if (renderSettings) { + ImGui::SetNextWindowPos(ImVec2(80, 80), ImGuiSetCond_FirstUseEver); + showSettingsWindow(&renderSettings); + } +} + diff --git a/src/site/FFSiteDebug.h b/src/site/FFSiteDebug.h new file mode 100644 index 0000000..21343bf --- /dev/null +++ b/src/site/FFSiteDebug.h @@ -0,0 +1,23 @@ +#ifndef _FF_SITE_DEBUG_H +#define _FF_SITE_DEBUG_H + +#include "../page/PageDraw.h" +#include "../page/PageWindow.h" +#include "imgui.h" + +class FFSiteDebug: public PageDrawComponent,public PageDrawLayer { +private: + bool renderDemo = false; + bool renderMetrics = false; + bool renderLayout = false; + bool renderSettings = false; + void showLayoutWindow(bool* p_open); + void showSettingsWindow(bool* p_open); +public: + FFSiteDebug() { + } + void drawComponent(void); + void drawLayer(void); +}; + +#endif

  • gqXOZ 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%0ACGg&P_l(@%~uH8OA<*$h#&_X47N(w5PBOSKLQgu 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ΠpJiBA|!^svWWR-nH{<*Z`_cF=v#E9}NoTAkvK$ zn<{n`8A6CqYGHFol&X3d z{hW5er4|q&V7-GhB^rm`no}t-D%#%r@Tm|ALYc@JaN)xw05UP6EARBvEX?3LhdA_! zs9TO3=ZTaxd4yVzhBA}FvMNgB8{708GbSMpi%~s}%^nO821**wTHWJiID2F-CIC-% zy)o{%nohvS$P`Yp`gu(1vZtYdXJNG!sB|5>4=ljO$XZbPp^r`nFj}BK;I$UydUdF; zZ=Zer<_i@1`QxXy^@0RMIy11GzSefHlBs_c;R%5Y7VsC^zG1elZbbQlW!V=U>gwAr z79377zL_o$fA)d9fD|f`|Di^_TB}*knbW2N-At$Z3o2M-7=OgUcv`y@PGuFR43MD% zWfiAO=$91lqhKT_=mf+DnY9dx6@=A(`p~fNZL%iHBre4s3S+6GqJPl>xo2rMnhDRS z9_U){3-zmOP)0%(rTaZlGLg?{l_)c#s%PxIK!*8Bm^T{ZwZ|#OJH};r@fVSm*NnYDKbWcKEAR zSf!RyD?$Si29CqydAWse-iWi+MrDyFk*e7&a-kgtlTR$)t6OC&QGqs5VA@ z=-8VYf5*iDI^yI<<@16N^Q8L1o&hf+|}$b}iC>p;YO?IQ**64Ua6U&6VQIj|^LYE@No zPCwAUDWxdUb7zZC>4T)S3$VN(j!3VNl9&lqJ#I#Hw8=0PiePzfxLulph?=DqdLUH| zaX6(R&BhvNN@%76W=eG3@0<^Wwhd3r>Eu}#3VnhKY6cL+~51G>s zYl-ge)g@5kdzuzt!fpvWBuZ$UNG6GMM0HN8V-a8`qKbrmhB9-l)t^!tEE_junTSR7 zCy>kdk=?F_<3RHNV;CurCO;{a$m&=bx+=>cRGHBbTlg_z(iYdcnF^0CS!ChQhXBXFEL6eQU(*i*O7ZW9`3Dhv#@Dg8lxsq zP+IzMmQpCVZZHL?AX&t-z{qLI-u27B(# zua3tTx6gn0_S;|o`0L;O-QWD`H$U7yyJP0_cGewI7e24+>GaUNpr58QsQ1;VoSk$y z)$7V|%;L*DY|Oq8Uvd?FY@d+y`F%M~2GL1B#m$#wZZh+`=h51pQ^oEApSQi{V+k;> zb0NtQhX4T5d-o%;?bmaE@e+%w#zSEWsnpHB8hM0KqVV8MCH5Ua91nCJ%W%p2u|dH1`GJZVtk20xK^h5wiSn%{0S!TW>TjlzTh1ZX z0f(umY(l|}t=1>kD0yq5iaHk(Kqy9CjZP_PKH3X{A!&yM0~W_NjZC2_!^3s%DuAxF zw$|F#`nsMTSGAXX_;~;R!^f?ixozk3T9;BgH)(B^Gr1qms8tdJ%HrZL`&idnw#@`a zwN`2RC$cd1*3ciVZQB5#^?us6^}O1)SfHqym>HO%b*f8IULkYQ#*KiqvfwFr?MKWp`n;(^&&xt4~@A9m--wx&lj4 z4}03R>AqudPO-4Q48xY(B>)D)1^oyg<6)2I$yx_YcYqVaJ;y8XHD0X8i9gU?$wQvV zP9_mjKd-*dIg{>UZ8QU~omJ)v!zrvCygAOJVj|)W`H$H7LP{wPKVx-D#UE;#EpJ`) z6GB9~uss}VB|0w0&)>fJ&98s`n;(Dt;m7a4`o-7Bo8x&sZ)-=C*89Wh@!{cNUDtEl zI?KGvvmd|5RnAuVk^w?-S{p%^>0j<$_t{hNB=FB)pMc09Kz-`>GAcyb*R7C9*#Xo9 zKOub&IDBy8$hv9yyr-=zL|R-fU`yYkQeGR8{#C|U>gDa4(3V&V0?gbarBvPck;$m7 zAtnn;MAqdd5VBzl2R=(*E<(-HHBOiz#Rw7bsciMYJ7zJ({D8P}qPimn001BWNklre11||=9l6k=Yk3jr@n2Iughs)F zdTs)Ri=Lf_=K+abKC}dMaEtxr~AWPl1kSzM&%tv4(Za&nw>GzwQ)#_WgKT}i0GZu zFcpP)7a)miA~K^TqkyzrEiB}k%UJ5}G#^iF(9{9#Hd=(l(Qwj>2}*k3uCK1%zIt_g zb^H9;-S^*r_jiByw?F*&!|S)Nkm!6q_ufk>+qS*`@c#bs(f2hJ(kRJ_X=@B{Y@*dP zOZev|roPyrJxkebS1=wQNaD9CFgq%Zy%2sVTv(r5j2Kv;7nwi6v zHj63X3LNE(SPJc%y}$H|P+w)69M}&ph|1|51D*U>X)T^t8}W~m4LH5r5eJjBK^!r& zu`;1q7_+B$`A#p82$+Vl&ej>!6^B_5WYNeL6dCE%p{GkF8qT~caHmv3&=nF7+z{^Z zsxk=J#^YdVty^k~pN!~?BdvS5h}{_yer z`}dFc59?`bYdf9Rb=}VA^Lgtc{d795=d+HY3K1}3Z*6O;`#vp8rQ=bnfl`ablp>U3 zX(dF3O10z%qyo?yYmZ)+Mc<1!GPE<>woPqro%(rgIGi;sy9(>>DlSZipSDQGuum5d1mN_M+Be@s{HEEs{;5Tv;#a zg0gW~6eF=iP_ewkd6&4qe(?y1N2UQt2PmM|ycdY^U8UAVikB$qo&d;U$YDcs&9@?P zQ84k=Jvv*|AoT1l(oJVUinl^vbcn+8s*5Kt#u@BTMhSzj^z* z7lLK^k3anJ;nSzJuR$M0oQ4o~DBHEmQ{op(hpq!Qi#Q|#?V`|h$CAmyWjIe~pZTnq z9iwU9nZNYk^xn_wR!S+Qu!&C4)TIbsS5FogL?TOa02Q9YK-8uha#m``jJ6a9|6@Vm z$TU~oQqU+wM4++kQkg@wAce5&hs3f2XlRCp_fbG(poCIvFGUcqW*93dIF=zkoS>9x zVsw5Gq-o}~Lsg+@jb+&ZQSVYIL3~z&I*s1Lrx&xSe%hobQ9NdLzMuFMIp2sv>I_3f z>?|2d62^AG3k%+EzQr9vH=ksk`Y-QpZol~a^DjU9{LQO3Uw!rNxBuq zrJp+~LV}DB{dMnsgewP*kOie9`Z7JCxY?DOPiPD*mWmWlkK12qYCu*Ge?%Eu1RR|}c#aOu(HmY`gh}i2K9190Q1Rai# zRCM>H%%EITQc%#3v_xYu@E>ZwIChW;g&xsz157#axdH;+hd^V>>rbE7U}kT?=_1>0 z{6}3_NRwKaxfE1YM&JX7R2nH%nh0r>fs<-}Qqi!gu8~SvmI@;4dHeX`(|TS{>-OQ} zr~8M8b=|gY<<|PSeY$^aom=nQ+L(LqO?4o()}o0E1&|PX>%#KzaN4%*YFQ4)g{Z7s zXNIy65?NeJ?_Gpy@x>==5!QQWEpa?OtyWr=MdYxaR}Jjlwhfp&2?*ArSVT9v2yffw zt6yksJDncab!BEERF-QYDg~BhskIQ93RLFQbZ?IL{C=0_K!CL_*4EsmtO49IXODzuO|b`pGkDQs;F-I}Zw0l`(bC)* z>;!RIsd@!$Qe6ZDOQGxQYZ2I(-@JW|W$B%{*ZT*rAHuF9(gC z&r{uRU75SPIh=+VP!G$Tuyb4nGD|Slz7TYNnZ0i#zeS|?-n!_P@aE?F)r;qEU%mSL z?b~e1Z-4dUuipLQ%fsQI2w&YWo!9MjI^91$Y};mSVeeqZ(gI+rPVNl~fk3fn zDW1q($#|s`zcf^i7%`u#6DEPs(6i0ZT0cqM)wBDvx+|c044F96sAg)~C1EC3^Sc$l zrpxI_bFyJ(#2W7N&G>@A{}-BFdG*FDdMC;VrcPrL7a@qnj8T}xZL>@iaIaX^#Xu`( z=OF%gn|^Gp%9^JY{q_K<&vxXd6NsBF#z;F3y58^X}^BBy#_xo+swQ}FkXO$6}8q* zkEiqF`ToPhPd|VB^ziWU;o<(_{(N4!>lMiB`Mk9zBGQ|tEC?cZ0q7MGYF$LA10p~{ zV&=AOeO=dbE~j!h9908O0G*xkY+eE7dNZE}~;431kDCL8KMRh@dc9n`KK7mrBH4jjS zHR=Se>W{uP8j=uX!&q-ysghxv9Q3|P13M`lCj%)8Iv^3!y*tHpdTXq&sR0^EpFGgH z6T&3&)Ur5M<1QPX={S02B>#v%Hp>@EkhAseZj_KIwnt(~ClkJ|ypk)dO8w>Vqn%>uva|L?Nh&+HR*VR=HYLF)f!Bo!>=-flN*)TkjO>jqKe^$gVL;6gwjAv*h4K^X4a; zm_@fcdL=@I9d4i|UbEQ68{`8j5|o`Z8wPF{pCoE#^Dka_3X`EN<)FB#w|CZ9>wPeb zWMKLz2cNWh>F>Qd)Z4qeySuyBub#ho@#4kv7hit)<*$GJtM7jK{mVD6i0HJgy>}Mb zw(arp{BU|aozI;aSnM`4%}s2KStTzjqUULUt#4WfNDJ9Z71J!!1Q`csWZ8B>!TNr#X4fP6RHOzPW#^7 z(bOFnnOQt00Tn-q*7}wB3zHlay%Z_)9KuLtte8MEA_T*+xfh;hx6gMU0)xm6lMTuI@MtV zX@Ta23^PqKotQq2xodEWsJ<0NsCt=+SP{mOTo9TFQPG*$!+C9;saArqZ=zC5t%%%h znhLv?C2IU=ce7`3FN{!}d~cCo5gYwTyuq-|YRzp35fWfRz=8-xq*(9m2W!NG`(fZq z76M}SM0eMb_(~#u+HyF&$wk@mx2o4GmBdJ%s`*%(~R;q0()MoTD?_(&z*_|!P2 zbOKCz=X7BdiBd$pQNsh`#Ce@^W*OYxIWjH0F?o?d0GUJ>u+%HM5x`RF>sPPdeg5UM zo9F-dPyhJG_kY~DE9Rq=qLg*r93f2L-68;porR^N4_r{fk`n+|(({+OkMW9G4^7HY z!X}1DVvGcRSSuBv3(lUcQxSuVSHu$ll#|XsHY~mKX6SZ>k08h<%uEH8R-xUu_B?LMnRGPHtqsctXGpvx z=ebBXqHo+Tfu{o`L^fX}S@@xG#H6$7KPb}NlUo~-Fa=YBAOh}oOgUA0clQh-6il%O zzO_UI-g+ZD9&CK2V||P$_=F>(QlP8qk8Q$*2CgIR%}Tv{{qnQVUfes= ztCwGX@$Q%3|MJ~eU)|i^F!%F$Ws%PO>C^q=>9lU!`F!Sx*A*})YH}*^y5c*u08rjQxQ1e(Z z3C^5X8HWj$ zytT%s^GTJL8W*8~xvdL;l!6Fl>s#;Z&F!KF9m?5)>?~UL45zqy@Mo(nJz?VYy_COwT6hbR=@0rbSW3nL&fPefSdLa z3z?(bpn=YCaz#^q3}$6aR#yPC1j5=fC&YtmVVc40jwc@5KmaP%Qoh{!z{}6}!&b^-uruzkdJIe?FW}%@p@GABIHJ&bP=&atm#yOul-=uzEp? z#_Q}?KBc*l$y}(Y+J=#{&dyHW??on`E>^5;YVw7(FTqvk`}8P(NJsU3kB z?gI_YDkj>HANn(6mWXPtjN=S45Wn=~ECV%e+Gp5j77_i%c5sgs+pu4R3?Bd;%#$s# z`sV2RJ$tJ2#q0mI;1o6&4usUr*cm?UiK6x*#2NjJmmu|QGoVZ$)E%63cAZNWpxDVx zS|A!GPOTXF+f6Kjc&KGL9&fL&Z*Q)zt`9F>zIguP`QdPUc60an=b!)Ln{U4P_S@$# zpM$`9UPYkwembuo@9!TTA2WK^dOCbU1$_C_<(Ng&-gr}&Z?l1?x1kuAqCYekM3w?+ z+jwB^7l8FYLuicXmt@2qcYSyiQZRRlkBST)?ZCF;yb#FeKOAdiyk?guIe z!^g>P=o_$wg2)2hJwUcCn2;Kh?TG#hB>9BhyaXI-MocQ=;9BJ~FhwQ^1i;Vt$DS`I zkr$t1xnl0Gf3LDI5jmgbbUJ_d@bUe}50B@^`}>CvKYuzsZ0pL~CJ4wbi;0DspLJ#1 zR=irC-My5~+jc%)T_2V!Dy44c6Nrekf)ZwS5mCLEHr9{p+FBFD!{Goc0;%~Qde;C# zDOiY#uKl;x016?NQkGiL60oJ#Qeu9Bq}RL;wm@5bB5IAd-aEI)^LgF+A_!QPQUPVD z^>{ewWRIx$(_}ylA|fD2VcSWMWv{+Qxb)sz8#yfuoZhY&OClox3X{1aC}$L#RgeKl zbS9}Y0}nj9)OpBsz@<5roj1dS6LojgB_mZPb{Hl#?5^^Xkvw52aMHzO2a7Br*Q4y( zyV;^{1y(6#)i>QKy1UsK%T`QQHaAOH2A|Km@8Xr0yF%&h~BGU(FQm!iTv-Y0FUlzf|k^$19; zh+^GhlUG+nCD`firWPikIRJZ4rgX`V4&_W+I<=k)*v9QHyr#{7VcL!H*a3Nc=7D+)ywD4p4~0Sr538o@zv`$-+ueu zSHJkho40S&>vKA<`eArHpC2B4C+N+CfBdYfR;gJIzRn!>%ds&AXg4d^r|52U81No~ zFG;?+8x-x&Jz-%fL^35$#Mo-e&`ncw5Ruk9Ubu8GwzsnaET$_dl1BUUVKMVNeU~uv z7niyNK_Qib%6xmw)JkSj&56vQIPtq=hs0xz;fCCR?G8Q9B+=mz`iRO)7{tp7uHS|N zyCs8}cB3Mivy~wI2T6ly*loq(GJ+=m?a=nX=(i=wG@k_F!t7@|T$ z=Z+|dt+n-xrC49QEJUTO+qP{zUc`u8=WXjC=iWiT1PdY^jtB0oZM_iHx-835Y84%l znV*3@8!riK;>lHXiU0vFbrBHeo}&ZfKt*!u_U@5$5;8HR#i<3Ps1HjWF+C+D&PuWqj>B%g z*huwoYTP9vmJ#=2LP<`(9bdH&A_}n?AbNl|^O$Np8^SE&tsZ0%vDSPyH@C}jcsx9A z=k4y<6;_~%$E)MN|HpscKR$p6)pA*LvrPA>cr}yxGCPyC&g(3b@q&Wuku6qq z?t`LLa3sLe-Lhv}jp$-=2AzZvB5U;HFEI>Quoq-R|cP0C#Pfgep2qwl{S zX;iCz(H&gg+&K+}?Y}up7p7oA|AcD^fx)H}=pv=$0Wj^D<1rTwm4`4y>>Z|Q<>*2Q zhAt(IWkaH6#C4F7h8~ZZ1YX*T2uKUg^tqbpeKexDXMlf9Vu78x?oWDt*!vWp6+b(r zP=VeRbrcJI-`OGn>Q3-{K7ac7@afazpZ@Uv{_%0;cK`73{-=+p)44S!q(X~=ZF}#f zR1K}yyspFHSnCl9mwI(`^Na{nzfm$9W5OBd_Z4AB(^udgFklQ>KJ4HE6FXol78+3m{|#3XBJ4N!=?EgLle`Y8irF zwzz2Z!jBNGu!t&=Qdt)w859#YL{A{DC-kuK(ea*MEZZLJ^W^*dv27fgag2%U7?=Gn zCSAulepm@}-?nYr+Oklg!^Jn$ft5`pRCK=u0B~3qX6}ur_H=iM56a|7ma@vvA=~;< zVP+NZU0olKhq|8ESM3E6zI^fQ+1>3w{qKMMcz>@>e^oMhI1i<+5s8WpST6RqUVsp3 zKcgE5|BPWS+?@yAvKE9OPYt}dz|ah!S4%dOa$2VTxm~2AA7)*~SPN|^Gs4N36%k-r zuL}UC$Bp{;LD6-BIwk=)Yg*7G;1g#Q>SqR=gvo)r8MSzvmFQ(@K(%2k z@pD?(+;+!z8aE08LfhJoCm!o6ry60tcKstg#M8nS=VUq$^hiKg!p7b;Emgud(2AI9}acfBx=^ z@4o;3-B({dd-hC3TI;QI?|s|WPY(~L)2a0+u4a^?nQ${5G4FdEwwGoge&WIoh5Gbh zAsjWBXA#EEMTFgcKvEvKmD_`K$|A$UiWcbz*>;efG)}jrF~&$KGjlXkyp5O&uc^`E z;Keu!+0N>}ZhZv+QVLnrY^rvh)1pbvcHb*vP@|}HZ!mhm=;rJ;v1oh$Z{YDVp(so7 zP;kL?wk~0+zFq5qHiM!O0~sn@v8k=?%GFzogfON-Y5bK#OXe7Wy&D8!@|fdr2V2so zvD-(|TOnd^6#y@U7D$00vGG8z!&rZlw%o97?fp-m{_y*s?(ZKy-9Ox)Pp9>CKA*R> zaTo5)8sSGsR6LXk5zDgF!{K;)^L$yZ3N4l*PFO4UF6(;Mo2ZJJxsjr^9uQtYEUc;1 zh*yWDQqcxie`R;l3?lZ<5058Ay1Tu;!h?WxkTPe>+X|mS&!0`hqFL6hiNNu2&-O#%amrWu{78FXYs*=p| zALJt*EQLA%9hSQn*EhF^w{Ks*eDUn=>iVDl^?gK2n@=Q_dAR=RV%MOr@4*L%c1o$@;WOLJln^2UJ zQq@`(%z;i5t>5~;6lWeRf=D}Lme%bGH=w5F902;-bWBzCQiM>qX-d7dxwijLFHrof z!_6>%7X9NaJDGDN)Mjzdps%HUpX=6Ww^RaDtQ-O&6_2PRg2)p}?wm2rOdL2if;&iL z2+lPLdZHXCs0BoXYoY7o)w|E%e*5m-%e&iSMcuq3;&NE-Uc7kw#g|`x{qE~ueD(ar zi&9GOecc*&R)OvP{r$t^BX^BOmz-6Xl#5e=B)}sF$KGTbqB4(G2&I9zyd@G5a7?o8 z*$I9dB*RA{cRpoOi}n?%q&=O4kjV6b{9o;l0!iX|8<_r$|98S2NsD7$zY|~|DNiG5Belu%EJu~iNGVhS#{uqLdvf2V-|MGv-a^LkP^L32zF5FJ z)cgXu3MU*<&uR7MyBfv}Qr^?5B!UkxJ?o+2P1Hymd8XZ^=UBOKX9Q)4B8eH(3^xUU zc4l{^#vCC+MS-LsZfkpdJe?l4hYyc``qTUOKmUB*wzaoU_xBH{M>hw6=`@^9Qc5K( zh^5x0l;yA-kH_od;T93sZC%$@qyrGM*!3q|^>n9HTTy~xB0?>tbuI;u%b^t^IIFNy z01nHd6J+kax6aJ>=XLG<j*=bqVX`As`JJ_5>{^hpZ&1YKje(H+OKkoq zM8Z)|>5h;YheF&RBob9RL7^m>)VVNg?1m3uCFOeV;?nYxF@>^vtLIg{uv7mdMj&`> z42*yU2P|aF8hCzK~yjeLU3v>tFu)_ka2$_omr{%p%OF z!aN?;7UOV2F$*Ggou2!t;Ak1r@f`$}BiO{?rmaX+001BWNkl9$~RC=-VOn6K_3Gr#=R)@M)NgB|Ktwx67a}=_?lA6yf2F(;;PNCNhei zgHFStZ0}Lr!IsS&8PQ1M_72@44z#1{*l;W@JnkKK8K$Q1p`r^xwP#;n9iQLcy?*iX z)r;qEU%omnhu+Sut-Wu|^6dHDyRX0c>f3L>`0DGIuU^zcZJpcJr1R-?et5WlIG;}E zwQXDPT|kHlh6{2hZ4vzp$J8o*5l%Q<4rA;%TFlm-)To+dVh3Z6$;Mr0=VYV_)R$?d$~kiUB!VFLDMZFOwE%?RGib@*p%1$x4xM18oyCO`;|#OV zb~!zs9`DZ&A5I@XJpT0l{hxk*|KZ`j_tuzCrxPp3VE8e}kLyyXF3Yi$rPf-?0iiHU zYa0Nz-g@ury8817O}Xna*^5)I8hE|wO|PSiT9;)h)VuWJWeXq`jY!$Hb|XSmuD1pv zwG;r+{blF2ZoSY+09$7)1c>L;d2Jhe6B9>xt#zSNYt>#FSb(`hf7tr6ROYo15J0tk z(lq;Fb-~8&fY4JoV#zFq>kh)K5m}-@9>OU7)S10AWf}&(c#l2tZ3~X1ITeSohRQms zeM+V-slD`Nsc&Du zes*(nbts2ge*dSRKHfhxZX<W^KWrB%#sIAT533GKJs4mtVBJc6$+5x+nAcz8}>LIY4C<@iL6~8<-ozA97 z7nx-!F)MzBnHil_E;5U^5LtY~AP7iMENhKHhFJqWlnH!sm@dmnqzv(#@<>%<(6?Kd zODR>0`)&r=Iha9#Zu;{ekqYw%)6gt6p&%ar<7cz#&Em)yPLUzx_Kz)e?#e>+wU-v? zu+(Kix?1Y-aD4OXbm!S|M0-QEtOurc=7hLH($K_;@vmDc>DS1 zSJzjq_w#98x2^YnUe}NJ_m7W{;Wf(ulq6v>e0c<+?A{<3L5(e5VyW9ag4IwWJym1w zbM-1Y!@n+_zdp#ca-D|ta;Cb>HPn36PyOY#0ysBBD z#K`?ikFEp=sZgzj(#y--!zLcPoS0$rOqvsl9 z?nrT;0wo0m1ARQA+w9BA-~gtjq#(eQsGjqCAb+V;uVHEnFa>Iaf|i1z7DJ1%j&xnY zPD|s82I#(*5(g*st>1roczl2Q_~HJi_aFZA{hxlm|8!p0P1Q@FL;W%LC#t0^rPNYt zp~LZbRqKJff?2q=^BFdzLWO$g$V<>WYFU=*Eyd32WGEx61C)HtU0a;2paALI1(6Sj zdVO_pEEsB9*5Po4h}*Wc)>$n6*A`C#tu+B9v)AiVpFMkaeRWi@RBO^&>stfn$A^1F zIv$U0sfVQ=7Xm>nR6=2ZkhPPRAeWz>VS(AfiYRBI#s|fmgdW7L1rZ@Gr4UhTEk@or zO@c8J*(hdS;q=yjGL_f--HjL)BCJDw3;~dYG`Dx=x;q!c@v23OBK7r!9nyPN`J}^0 za5xI*&7H#|owm|@XH9}ky7;M`ovJ5E>mMH%>wp6!iI81@ukDLbMt9O?5e1MXm9siA zY`ImaI1qMOmg}pl?*W#&ytw+NVGTgQzfI+5*J z07Ph88)!7l1sH3)MePB0~25aPUxKjJ3m0j706!BjxPs zaE_-hvd0Ba^oIcu&BKo|_!NXou<&I;vUkc2D{6A}z&z`mtf~`Wk24W%w~vl3Vb~@9 z@{=o!>qDQ}-n-dgFps3*;$`tAT^2Ux*yABG#$h(tB|;|F5A0d%lN`(DBuZK$z{Hj# zERX>gK7MEG35(&NX(Ufed=}?KKV9|Bdpe9OizS}cFf`N7ew0F)EKFr0Q>2n~I2 zWGfzO%x!Dyx^7#0ynp=D`}aS+|M>pH$Di*%J)TZR>~KP~ni+d%G8V#8%TnvHlv=2w ziO!|>#vKresw}kBx)iE_x;;Zcq*|(%YBW?n7VTcay@ANU+!fvfh{a+y?cFb=*}<^X z3MzpT1UZPn;dsBXOve5`kWdg|ZAAcd z;M7~!5s{&QW~_ePB!O_lg!YCD`p&Tb$Vm8QTd{S)Vvrfn#H0zy7&S&Q?f{ljva1wL zBpZ^38N-t}Up`BM&>6)CZyLqbT9}baF>QTPp9Y0w)HsujZYc`|vrRbNv-o6a(rjUt%MIOtlYx+! z!6=}?0bYZg=X^206feLNe+G6D0{Vx9PF=(eJ>!HD*}M3k_-==|lPtuexBgdK5$gCS zX7O^t%!Es2$o$k>(IDM2YSqzzO1ogO)FX*L+&U~~#uV@=Ap5Fs+MEt0!~ad&n>9(2 z9NBuhn0rKKR#jK^4m1Xs!JRuI{Qp0Oq>vO+WOy+Hpu20$jK$4V`JjubM2P13#x^h2ni>&bJoKvy7wXC_e0hE?QNiC2ro^o@Bc z*PiH>LWSx`)yiy$IqA@`^?trwE~oSPbp80@(_i2J@|T}~eLP=G#1rd4@`1H@oDWfJ zyf7_94FF|mmqCmf+Aboz;Ib@@mnu$R=ELEDhz;_Zj5BTw0T{_NhunFLfr!M-C`FP| zG*7m)^kp1fL1bAt=Ek_L2WmR57dc-+peceP5g!(0Zp+fFgI5tFd^SSl<u{99^K_wBjlosE|8Ff}8{4)7tb1RU`&4N+MYbxWxbLkVhJ1>JQh7aec zY*%H+faj&OiNsZvjL9tL!vnZuMpwN>?eLJ0h|`G~KYLBKu8R*;g)waO$!Uv=S+C-R z!uai%a2?74pKWj=*PQmxarG+lBujZ1izXeuh^ox6q9s!=Hy<%g1oH8lmh4o_?7|#s zDJdc~#v|UXhXc1|J>DJf@7A^b-~awUMi+!`iT2yJ^)Xx)<*Xt=Fgi*65)@_FW9aRi z`4qz97odxq6QkgKo+VL8ww?+l#m&CG#C8}tz?4v{In5)9b;UCD1H2pWlV`ldZRS z{e_fFt&*D_4Tl67>&8@3L~b<8-1>oJ>Z8+4Vgo3V3yG+zecME2U6$i|P?j!ZX>D28 z!?H5->2&Vbet&m&I2`UCj^BLq?Qeefo8SKU<8Oca+u!{35OR+asO~%{6`}ICrdc`_<@xqtQA)892lrcTxGel-zJeCb_6-dQC5Kk+rc08wK?q4ZXMhVs-CH`{dfjN3+875|2{L7 zR-)jZ^OvD;0MDk36J2@(!VMoKA%Osh%Ft>e!h&N%yxjuFWMnt_t4{0OAjL#OM%QhO zOW)4t%j4te%jYleKYaM~`1$dCKA*2anMiX$s>66;W?l%Hr~$B%{yHeBF#8|U7}xc% zwgb0DvGYk#Ga@!$7Q|gr%Uwc}8f1_GsKF&*VsOyDEf*9Ch+QTk0DW`-RHXBDJDtvb zv%1a5zutf@%%Xyzj0$5YA@gbxxxQiwqQ!Q~?8F?* zL2I@Ag4wj@yc7{Zrs`ZGdaS-t`|>%0I*KkY2O;rr<5b8563l~99kx~>R?|S^R1(!p zOU*R5dR7wg7&t9I#2|n~NUS1#2m?E*RjOs)7-XZ5fe5%Xs@L009>W`YC+13O-+Wil zAKs=Os1K9KPDT*Xsd)|+w7V$-MfA*ZnV*?oy~l^U-%M=w9Q8F(ZP#G>7h0jm5EN%!a`_f%kNR~8^bjM1axxJa}nIRB`F@~|H!kg{y zQhBlQW`QCyFlLIBK*%wKs4OMpN}E)g9r8ny7UcP!PT zxRoKjKcWY?wQ z`Ckv?(^!(I#dQ<4;~f*--`}sxdfhhlJu`~P<#JiM-5-x{UcdS7`|p1Dhu{72U;p^i z?|=91?N`U+p%Dql<#ah;uGj13bUr_wPuq4)u)BJ!`-HbVFAi$xHQbc)kqjTu?&*}c zDf(|gms*{sS_|2-g_(JUFHGnsI)CEb^4BeUVY-2d(`~eSSYc;{+n31G9=AigM6gQ! zFFxcT^J z-a)bHI<$C>mL?Ds<8w>{qwWrol8h)aQTo=p)oAip1ZDvDgl6*_xCL%r_7a~JpEx8M}F^WaIib#u-7qY~P z!PRcNP_Gj!US{jA>46e(%nt&R^f9`0(XGqrx?QeUOBP{8LR=bkqf&veeLx}t8!}~h z3#c$+4_Lbyt3^668~?+`59k>(rV-JhBj%SXssvQPXZ19hKe-mqiW;?=!oOWYcF_}v zN(Q*@Fz7Mvq~!5fT9h4lm3QT942Rn z7|at*6LKok!uJWpplS)2^S7#@%Eu`=@nq3?XeQ&{#*kq9bkL}qVfXQw>)z#Zs8kRF z=`_l{tz&gd&{$E2-NtBC(F4rlnV|R(F_NMOjOnE)Yo+?s7(yIi3fbL@XG`rJeZ$uc zH)GzLbeH{JV~0$mGK{gjA=k%ad6Kif00gx6FKvrb6teEv&4vh)*yT8QY(#5Yn5c1M zLMFaD9z{gQ*t!_52?5`{dh`9a-~Rrm-~aO;|K$(=^84TZ(@(G8zUGxdb=&&W`P{ed za=AP`JsCT6+pZL(wL*n{VWjk|fAjMvqpr#=FQAkKu<2%J`?!aN+8dMUDf_wL^MT?E zQ;_)zlSzf9>U<8LfJzM)Rvb!yj~l;XCxFUi4O~YnjkMSgu z!OV$?UJfg@8cG)wT#Rh}=HmgLQSWzKCe7yyN10}%CgIUrnVr(ynNC7Qh%*z296Xc= zEYV$or7~nhmSu|ei-#&zfhNQ4UAFD%%jxr{FHfh_r_Y~1e||ijPBP3CEdq+l0gaC_ z2r&^8HA030E+%3#p)SjMI39=_Av^4*98ER?>056^&6XsLJRL@Yb-H-VE{fJjq?^0R zDKjBnASM*-I25G!e(j@=k>dS5_n#ok&Hsp#u&*WnJRfH5etp$x2(R+?*p7MHUwPV+?Q7;A)uy8nbTTShvjTA^5funzXw5wp}0d zjI{MC1g2y`lH=zG_{;-F6+78K zZ$;K)3`JmSI5QX~`^QR_9L1F}o~Y?7(OH}@?>Na?G}&c7TqkPGhxK4TO(R~IMD*$D zWWfd?vhecNo7cbj;m7~}$N%<+Km6gR-~H~pAHTbQ_0ZOJj;t=%Yrk&S>-loIUd}g# zV_LeNXC3RUSQtD>9rWfOPWRdV&R3mMf8Fz7v)+WgJ@A=JA9kTPb04M8boaMD3M+H8 z5>P_sT87Vi+-2^$cQbOWA(gQADpn?g`APSAN;{KKYUDLs-}sM%xg%0zW*)t(3L+>W ziVdSj`S#*m)Zo;WZ`W079*&d$VZ4tzcdU@K$IynBVH)DTXf6^rfgN4TpawOLK>?5n zZN>{TK>@>MBGFjR1XOFgIYPekBp^g4R!R_>7u>pI9_FR$p6aT}P?bK0^Z^XJU7`5x zH1nY>#|1z{uIFuRy>I<;xt^XbeTdC3oZp}c12P5%5;ba#c_D0wguc@v`$!uvglz4yKi8Ae=3#75S#&t%-tgHF)VR8C-+)s)b~fE(`l1_(&`{0|wKmS8{{ zJJ}j@YmE^*c2xgqK?Z`^69hwX*V;m$+jbdXmLIgL$v#=M0=BF=a81uVprot`3-QvCeI_g*a2_=ilO-G* z2MQU-NQ0fLi%r-LlYbshq23@6{niABQf8@Vg9O`k-b}Wl{WDYyN6$&OQ*j`-OU&IO zMvdpd5FMGNn4n3@BKKw=6k?Z<+uv$wwS+1-$Tf6QnPzOmo0OmdAijS6a6GKr<@KwF z_5S|u*I$4AkHhlwhmReQX#s%KxepO$6OTnJ6=>s|F`-GF^ZdsOO~$E4C}O)3Aw)B9 ztz4xyA#uK&q#VK^PCIH=rhqCL7d{8`YI8NDX!Ure9nU!xM)bF2%U~!P%_+4?gfFEN zXL=OKy+T+8vjL``yQBo5*3nDY~9;GWH zBE9?`s>D0Tk};3;UJt^qfg(akpxSloo8`I-H~#9?>$k7peE03U-~aT}zx~_4{_YRI zfAjWjTNdIr`gYl_m&^5ZIiD|=%k?Vi(A{86%*I`BggATCeu~XQ+^r?fwxs+f-IM0H z=LTyOR+|`e%nv1pi+F=;c~E5IR)-o!LcDM!rf7;yY*T$aZ(C-AHo1W({R8G zwH@rzU+TDY7nhy_K18y=w_zau;|eThZj4tnKoH<9fUuT7*@UNqJG0A!^_n_M#3Y*m zY2*R!p<7t@xuwzimr<8rz%ZHj2F19PFN3{+)XQ!L!veF=psKC?dQIjE!7zxk_H7boom zxsK=}YK&sRIDN<%=62QrD#IdHtQ}rjW5(8yU6n9Yv~SnT<YP<9!@6$IKLWuFn9bR%3{w$knLTJbP{byhQ|t zHN?RA3k<9!L`dM=0r|5Q$!C5si+f|EjZ;TxsB^ra*e2?bU;RZjA!;}ASSs5f7?4`x z_NL2{FzmkgJXOQ0{DcEkS%95jV>p+{w(J0P>T&BQN+7uUS_bR+a#L(+5tlf(+V6cD zqbmThJ+}w|tE&z{)`DwM#y7YypR=&w2_(&Ds8Q=BMLTJfU4EOR|CIB2d2$>fUueLDC@ z_pu~Vc0_tN5#K0vV(z6AcL_z1>vJicHjR|b@7BS)n{w}E+jXcWf7;2jAh^tg>>T|0 zb!bK^l@PPIaS^0MiO-Nh-SMmyL7A8=YFkv)vT26Mu&ihm1(DnyLVAkVWW!A;0QVswt}8e3*xeEn)~P~hSSn2?g_~Xr8wTjJlOm@#k)Q< zD0-dJ^*i0&k-(Ts-l~#ihmVg-4@)9f5%tni*Ff_w;8{0UY zE}y?V4YN9F_86Ee5zRRknmJ5~1PzXC;+2>>_1=vs+FG;EmRs|w7RDSN5dd0t)m1r* zuJ)SeXjmovMU70S7$P8`Qov35c*kR#&)&HPz3_h zvq5S)CW$=7H;e$pjYEBSZg9L?c)@SK{pRQQAOHH{{eS-T=ONeL z2XpJAs{$bmo!J!jQbA4Dj;73}Kp~R#d4gj}r(ZzD$K`sHa#}yE`MYwn<<4&fsSUG7 z6YNtUmq=k9FhlMEJ@QBtz+)u|QAy2Q3UcN+z?Y{-d3qXs zsL8`?_E7k0V>Om1xo2=^Nl}QASSJC#7DS5?oL5rlU%m2jo3CoR(R>~U3PLvv$MP%n zH^^E8EZHjxF9_sIQAI_9XRSWHXj6dt*(Si>HVTw7YRGRO)TS~u^}Cql+qp7khUwJW zmjv@N)rmw@%-IJ0qY5l6ID(z+&Ljpp)U~Xp)4;+&0Z+8F_cs?N?)Nh+vC>|kHW^X^ zxj)o>?j7ikhQ6C$-ne>iKX(IVm7#g&9Zf=BCZ8se)GC~j+9;fH?Ea9N%vNx}yAAE8 zzbfQv-YJ|!v-P7dr7&Pkne_%S_PbuM=hOLexo($!y>6$c)8%p%5G!O2Juwy34n~$P zssmdie-nLEA{Ok|wQpOuL&g}|W8oG7AOHX$07*naR18E|mPU-C+FA?Nu_9tC6GDgq zUAgLtuyH=Nj+G`zaTD0BM#aluo+4~Sz(!>eTu29q=(b&DjAdy~XRvb3&|Q5aM3FH> zwtl@{E}+_)$&yrch$w)uX#CG20svO&8U84`m%Y_}w5FYk>Vm-D($P2Tx^NG2ptuOK z%<_^&VO`hE2C;cYOjvE3$u%m$o)jw$=Xz+K2%3}8Ds)iYTNX=|60lH2R3=8iF@}Q4 z{7H3q2{$)Qw@b^U1!8$2bG=fs*0GFdBstdx3-#)%j5f49zzz-7sdLZ9b$^#Y5%@t! z5VVdWxhqmKbZaCf&dBhouS{`$MO-+%t*>#yJZ=}-Uh{==uI)8+Bp zx9&Smr!3kNDVmJf6i(SIKSmE3pF(io#b;O1m67dJr(nzg+T>d~wLo#gg6~xzCg+A| z4rW{tXmb=GR2(motP?jVGGdx52%uK1NIIDjRXIB2Uj(|} zEXP&H7+r)S2YP9|G`>F`fB5#hAAk7q%~xN&efQ>@Z{NN7>dkRIDCqfmxolTUoAeIH z&RJ^HVP0577@B6h$-B8#Q(>{S?+uj`-H3@?f9AQ13btg;)c`?=l+~IPpmo%bFX-oP zERD4(hzC_vO14Cyn1mt*&=J#~RuC)~tS+;Nc?A$hykn8QzW_tINoC0FRy`qrf-AsJ$Esv4uwwAORCOabkyDGWEHr-zO1o z1O!-j5Lh$Fla3E=q(*@c5jgzAE*5e5$}fdrK3!JB5+o!c1lb5XUrDvV~P zp^oS)Ense)kX3u}JkKPn#41dHTa(NlxSC<2yU1bmQQ^!;wRgqC_jHWZX0>H;1jc%N zb$54oeRur!-P@o4^4CBA^6SsaO1CtSuWK@y~6ii%a-D0C@87u=NlOCb_kGz`Qg|OzqDPyRPsnPL9dRG_O z3Ccx;pg6_f=#k^eG1Vju;$%JUD3Mu-c{)&j5CBXto%4}=pc881Ej%KqU9B--)*ITcXDGQN<knvaA?IGGu;s(Z=~0z>XN)D7fhOkVetY)L;r?$XHQf|K{ZZcDa&0+S(!>G^A<4VO?{de03>dRG^%_0=N4F=Ew zQnupJx=aV8X~Sd=;Yy-2s8;kw`Gu&9I1w{TBH&;%0C&nMpMm}hUcu?kVQo%vte{fy zJo?G@Y=MjEe{=_=X-XAu*2-F(DEpD;+-y~}m4=zD2v{i>gA!9bf7xvOfrx;ki}rE7 zT>EviePwa#yRS&%I3pMBIB}GST4NOKATTwf-UlqpvaYL$EUh8)kg*i;pG79Lj1)?k zeM(}Uy^S8+8=W!iM&BX*F!*tf4aqL3MMv*leEbEfz+g~n03{#>O9&nS4o+8*#!R^S zTY=D8<3; zKIK7v9r@A#vvNajyx?KmHU&K%4~N70?whZ_|MuJ8e*E;;Uw-+|Uw--Z!-p@APmibT z)9HM^Y+K*#4ki!&%R#gtR!H*H2RMhK4C!`*bgyGI!E+?R-98u9wsGvL2Vi zVO^GmnVFcFmvvd!1;f}#f$H(|(-%InLub!oXfDvRVc2KROkdH>Rg|8hTaXfhK40`; zzz%D2GfY0n^Q6(K%)*LP|o$93N_izL5{P(LF1bVVQ$ zV6tp%WCA+@+S0&MKoGaSKxLY8*ih?68!Vfq2XkgP+bxi$1NJ<2OK$(!3!!V^z?~r-iS8-Lz zDZlYfXMXex#mB7tMwf1jea)XUd^nb-r12qP{+}ky8dKW%iL`X_$91*WG@1uBhgFD@9d3NeVN< zoVb~5y4~O3-5u|MKtxC15TFsE$kw}v^xgqs43RO6@|K|sOtdboF*WA9b$#{l@ap~* zF*jabJv=mSARsWd?P><&!`-?p>+yJ8T5HSFT00yLh$L~VNDNeq0S@axC{}=}V06Rg z-$Dl5#vkRbaLQ1?UA3+w!}MQyTzA1TVd2v4pa8de_FcGOxk2$JC%$GJ?R~YO&NWon zo^)!bUqp!}`BuwPOpAxTGDtCgbcL5gGs_^ z=YH^|4mk}9bzN-icd8IdylsGM0Of7I^*j>EoA$jZtG>(`G3vZL(Hsq$*{`mv($5Yh z7=2$d;!FbE4X$Q7H8I6DPjcdAqIL@&RnW0twM-L#{q};AD*KSr-g_V2{)2_v!i|tb zMtbWV!E9hrA^>7@3nEBYQ0&`~ekEcewrD;gIvfs%!_j63m+OYXfDIdmh{)D^A03fe zAgt!q6~zgWTI+OndB8V(tKP;tLgG}bfuC@E0L8Y%;# zPK1EEER8uwrolmoiW>;a(y&e}De*5;_g?iYq2#srE|@-VRBPL9D1Zb6suHD0rrF=V z>E`A3ow!B;WC|EkEW0oYeXfR7FR^%`vOr(H&+z$~AVH4Ea_vjT0PjYxxC<)>U=g_~ zovQt37h0kEJbl7PcU0Ju{;-DQ7D;3{63pK{QV{zfY;zZBKX#>i*ED-z`+H5`s=7aa zPERE%Vjkf9$vkE{nhI?@4x%;^XJcBK0W^B z=U@K(^UvGZ&ezMQFP}w(5M+#PyNZZ!tRq{Q90tc$NXJJ&q2>ljpC&2tJm_Wy8Gtc5 zT1;-NvLWJNEU1iOb2J}K=6M)8Q_9g{+%t6%V%_Lp)qZ`K>s3^w%aFm1#}JXx8Y3~Thjm@nb!DP;p~Kql*Y(x?tK;#=Z4m`zQbZ&? z-W^^&+yeu)_WJd!!`)$B52j;vueb%v8$YO!7_nGL3V2gBX*~-2pdNkR%Fik2jV~kw z1eCn|L`;<7j_o@HZn?yP!qVG>wO6`Jp$&5wEMq@_e=?9-ZS8CvK6wZ9cVv- z1vMgrwVGHf+6rI}?O)iF#*Lfx9ZoVJ`J01Ko+bPnyU_pYRLcfsj3{p;H2mlxA{ z4x#6a4NOSjAu_F#U5?rO26jK}B#=*t&Zt;>FvXo9lA5HsLUpxLs81B<*9Gz&x__xE zR$~J&Fo6mh(Znws0#6OG?w=Yl5Drj>K-({kh}*)vEX%SU4&2%h*{&|MvS}szji89Y z3!BQnK?Vr;v_U|T=KZ0T|LO;Wms}p6g-DSDoT1(>03Us9TNj1irH^sBZhh+|3yTT4 zwFU|T0v_lKndKgKHhTpaNtv0Og`J2}9wj-XV)p=jD^s|FWmShBwouBT7Yis zGDGZKtx`#&%$>i~xIh(i`GKgw5HPNSx(QXtxKMlrN;)R_tc{i!}|x18#{t6!!(8 zRaBc(+7kz0;0`ctsWs5LdPjFbIWOs*>rA2o`g4Jd&uYJ9l>wsUg)vS2ns%F8b0Y4z zpf|r63~+ljvb+%e84oID_5aLr=%PE7nd1pBjq?6Je^E$efw=4i7nYM+0gP_%1V5Iaup*(zX$=sXj`Cs@wKCqX7xC!yj^j+2MOO@sW7 z#I_^RhapDC4yT-6cWzijCK{?k6n2V!&AC8pO#%9tw`gtg37)0pH(vq7mjVgCA(IK}D4xnVKg7U~>HuyK zsNqGHIzLRJzV$K2<#g%S-U(r8tuN2%AU6sLP2f z-__Mh2E;K@SHu)xk=J?VZRW<57A>DGnQ%MjN@|qgbem->W7PQ4*rLP*rbCb;RYaj8 zO$mva;KqTW0dvUEw;*HzS;jW0n!C#TzjRD5t&KiZw+V&;c|M4KZpXdhFVufnml}df zpapqdZw0Rj(_om)wvr?t(Zq@wVqn>PiCLK9yoe+ihNulfpHZF6z!-9D^x$Thf%ECk z$)n4AM}JH0X7mUuKl{l&fC#uWZm;g|kLx#Izy0Z_?@v#szyA8`_g}yL`03O8kMG}q z`1twDm&@gH?ZaN;u8wDqKni36vG}S;Ix~9!0*TBcRXnvyP|!q$AgVAzS(8!<@#l~n zv_?gCU`}X4T9&2)WB=>U8%0%(FlX40ZQHW9OHBh3Veev27XT%cF0~Lxr@cd^S$Q?B zqIotHBPy1g9ZTlL&8jz76cJ*W<0`-;V+K9VCvycgZ zM${VH2ykuO8XwoCErgbSb6D<4t2=?1Ca6T7aZ@ zP@--RrwAIL)W01vPnSt<;t#`g=MuLe3WH{I3mkQbKxqv^y>KhE+EGs?nKxREA=@n{ z6PVc)BoU$zn^+`}l<;QEFy?GVibzP5l z$7NaGym@&0)vJfQyLD|$2ngHO`{+nKL@(DXAsv?GZe0#bTN)YU4v|`8=2j{R57nrK zd91YSJ#i{YD3PQDHw@$|#t1vzjS32H)WlU3mvL^{cm+b#?kz#M0l4FHvv9Q0dj%w7 z8G7N3*JKLbeJ8z((|88oQrKz7=9*8-9`pGKE%pPbg-KANT%ILE>{oR+s2A_a!?*Ge z!njAHLx9Z0f@9op5~55ku^bp`d>rCD%tFt(1y0$q*6wJ(R zL0jLoHpV!guM);pi;oM3vc$?5Ww+Hq%T<&vr*Tq+F{G;wmBtNeVIsE0;j-AfVB!JQ zF~(3C&8a_8@q2_@RMx@5X)Y`Hj60?&NmSrL2J_awm zEKK{(sn}@A_Ls~JEb-9fa4sb-8M2D|C%WvCMFD`3Z4BTt9ao~-Tof}Wwk1?zKlK$6%rU$uJEJyPVD` zGT@Y~Rj*ARMA)?WB3~9>(s(lPl zWMYet5)m1LFpRneu29i|BT(JZeBc5~!Q_)YNu*E{uUlWXcdpUvxs@hG?y^3dWF#$tXmkg2kipJa3=|W(Sqi zE~bHe|b7f9~QIF07wQ3EZmrw866@(lmCPz zO0S-ZhM(1#(ByBXHuRBOjemnweglcTvCzIS`kDhFfM;tqt>~3!!|X(M-s2?JOuKtuezOv`);XVQv*fAD|=%w2rTeHuNS+B>q2kn#hE}CkFeLHNV@> zdcu;zKlU%2(k}ugP}{8&k~BuNlL`<}0xX7A8-Soi zw7K-y;5Iof7IE8km!S&C1VnvoeF!lFAhRMNDG7RyCu4+?8$Vpd-k%+;RT^up{*Q%Qp)8r!(b6Z;LeIrtf zn{JGYYD4bJuz6f-DOe`d@93f zs8YX)bG-tgUG*O`rFH>vx2ccjI0*I}xd^Vo^v{nmG9>X z5LsGl4hDA3@>G@NRVc%!YlObp_KXSjK>N5hEyE>!uqNe#5rRdJFeE741UA))z_cRy z#2)7*oKnU({L*31t?4A&z)XX6_HU?BHC!}3&(!=?lg^C1xg|^;n26gmT;3!yMBLw? z#UW>F6aYkQ+^E6b;kYzrBxX1sj<4_U-@bYMaCbZ&)`z>hS9kZX?q0ol{nfj-Z(o1) z`pwsGU%!2GygRhJJGwh6;dVZK{`Hr4-+cYQ{jdM~)Bp4DW9v&>R^pW#fg%V|{HAbL zz&lSI=nXmqYBbIB)n3sA+~|;Y8?g)$P5gX3+ck9~V*)04od|XgvN_C!a85FiLtRF>PBH(Dkt1-#wf!moYPftn?-O4fiovk-3EtO*}Ga zfPxYOn=jP#;KT+OjiHZRw+%K05n=$94L3h)KoJCSKGDsX{S{-azCB*DvSGeX)+U$eN# z^9x;7rMk&bl}HzcWnB-4!*X{x+#kP_?|bj(%jJB%eEjhFFMs~)$4_4_=YD!RfBbTK ze7an&+vmrV0RqrCYmKRr}`I+e3(J_Xoq|20$MDz8G?UgtR z)$Z{|>}XPAi!{mA!w^A4CJ?c7aSUz8WbZSOV`gT8m)lk`>=h8Vsr0TDREc?pf~^rP z@5cDZG0lo{Fp|rFQ#B~IDQ9NKodFWz-SNOg2zop$4~OHM`}?OMXKuco zgZ{;YwCT>D&O(%}#ny%|Mgj!vpqU5Z^Q@o!Oys%(Y{R%Ae zC@fT`{R}U5zEFsBRsN~Biz*jAV`-Oa^h2dNVg$MWomYhTQn{7Eks1!Z-LD01Al?v1 z{Y=M8-ze=eD{<~!{EjGv*NyKe=EBdC$BIi7rW9+>@vo}f>1ztghd)SFW|+Ls+j4UT z>m@NTx>>nV>D;6x*0F6ZzHz7gg4+;P03tf9t8{bWC@-yv$aXCtIsiuVN~wr|Sh=O3 zDgyus85<)|YfIy{99DB-+jZ4@SE9b*`Eq)E{M7qJ#$_9uf`0t+>*@5^?1as+O-vw% zl{LAj&fkKc&Sll=9!*m-5phY^Mx@4!*-a7IK-t}7s?4NF*j>bzUsgoM=$G@^x(!T% z)XkGbL}qKBOgt?!PIB3LiAPAtTOBn|`atMi_NNaS7=)6aMp@vCnt49fg}a+Oit04? zB)%OZGzw!Uhv69t?|`KOsVKVl3U~@dttg?{H;`Y%RbZjF8$bjmdfrJ->GDlJS82yh zytYTJ=itNN7W);dCVsYH?=lM_4^^BKuM!+FF;2Kk!bxr;ii%FAnWj*0=Dy5C2H>dOYdg+(*<->>1 zU%s3kznuU4=U;#Q`1$d2K3^|gIw3;y^QXd;joofB(QtPnYeq^|fvEbcO(=4AItFTi36?{`!BpdwBScoW_pa^w={;UXq+)Y0xE8dvsi^_N^RqBg+ zQ@z!4svOR-%cTiPumG`)qp{aapCKy$zF$2^HpobOYy?21t z8Yc|ErV%6bVbAz=nO7RNUIGNjiK`||*%I^=!xM{{2e(gpN^-QPOsX$jX0`0ppY*S# zt}8MP15iFK$dLl9=CqFYDd^^eA@x?M(gsunm2%PX$+g{t|-MKeF)~%&i22y%c`jlFn>CAn$>;{>U-1N$L~^tv_wZ> zUI$t<)Vi~RPoRc*A4=GQ7cVxo%^v-QExuE}Gz;>iFE zSSRNwO0j5|4WB2GVeZ011!s|FI{G$5Cg2ebeSfcz8@+ygb^fos)ofHAIbe3CA0-mkFFoy23J6&hB;>+SG zq>6W}V8Q`aCbc}rKRc+5zs2tIMW|yrsZofzevE81EI(MLe}RH|&(%JWoL0olO5hex zU%}=$S@yKsw4s|WUgXH!agDd2Gl7=T4YABQ0L&yjOQN$bGOFShS6h}QJ#>R z`ritqk|n29Qdtb8VZJeY^0bQXtG%4lWPqLJ-l)zsTGZEAwKiIqSTI2gn5h-Fi_uah z!j9f$R5Lr2cLA66`mW2|UE5H6$dkgIlXM_^tNh;U=Ry0vbME;1qw zHQVr%F&NW;8yk_DiJZvq+7SQ*xL&U3%Tphh%k})_^yz#(4GT&sK#bOVXC_0c(B41n zdWg}t>lLihDfCfq;DXgu@N+@2KtvR5K8huH)jI#aZ7Rd7{;8^E_KZP!zR|Op+gkce|xnV*`XKCxzlZJs4ppq=TqS6^PYLymdJ(i!i zy;qRefbU5C_1+7p?OU0fLBm&OC0HEg`qF70pN3Pe$WHDCi-?$QWDJoZ4!$91#E5YJ zaR2t*+rG*9a{cwg$G`si>-l{8@cH9kfBwto^V8+JT`xSwupp+?Vc4J6yABl?8rrS7 zAec5!&}|Hl!U*D*y|#O503gtSF{7-@M#csBs$l*SkuKuZzyN`P2xANxZnRliqed!X z(WR8$^4OkFjOysywsjda0m5$JUt8m)LC8W?W@s-XEp1sBW+Ji4p31^>cRakhJF3VS zeTZDQ4geyf5BYq){PN||l63`Oh^WGK>s>q*V_nv@Er;ds&4Ax`0lRAvfC*azB5Hj1 zaR2o;?;g=V-C<9mx<-Kt6i9-c=z1`@r7brm#r05AI2_m{*i)ALT?j3|hA>(I2PnA{BlNeovpTEo^5k@pl^5t$%#e@h zUb6)y(_K|pI3I=f_YKS9xUPleYblKJ4 z8UEsk9lf}2F6LJ}h!sk$F__JSh41)m#g=6`44Xi9^`(Apx|Z~}mdiY@=@#f5d& zvUT;jTauJY3`=HYU9aDKU97t%0o|>GE%gqoEbJNl#TH*^10v=IaA~dC(Pa>;;#+mh zA7PvDg@pnt?Dp{RG7lMYx;#FfzdT(YFW1XuyY$}4SL+_gC_@_|%5a}O2Pb-dqdL+& zXva}<0!_WY3kja6S-ZZ#?0eDq&6h&WUW9})Vi8H~UGZPubkpHj+d#q`!On zW<4zLKYRe}Pv^T$O{;{Xi&%D5oOzy{$TDerPE@;v1BowbBX3Nkm;@_&O?Fh?(9C5k zZ+TO8#*HzC$U-bKEE9e)g}&2n5kwhKtR;(;YacS)>g?(;Rq5AD?|oU-%5-ay|9)#qu5oqG{8n*4z#PySym` zna0$dW^9a%)+urZDvgcK0wqBeh!yOvbKjN1^JjJcfQTK35?mA};3=A^!qZGY+=&`P zQOHW`zJd60o) z*?8;(XoUpk22TDv&aeLGJS-Q^FtVc9CutMSn7cqIo`XbLd`QnX%Vl%xcSizTr^RbR zd=i!ttSp#*g;Mcji7?8NHpAQ|gvdN?4u>gST)L+I7Pq#be{K?xcAvifjY4&2gnfn( zsK2FJY}sWvh9J=&ES^UmzkjQZTpvB|HfHswS z3HlI+61no#-b`~6il7P%vn5FY?#arL09Y6>RaHP42?&NrkYuAN!w}lZ-rEMXV^hUK zSc{z)>>`r_nrSUBz)&^$7)UDae07j-izUQEQDNV3@Fx=Lx*yh7zL0}X=dg6 zD8)!xV7E)ug<@a^4bwcqj$bSyB3Dz@+@OtXotW%+E!vNm&ekJihx(n%@EEGOFTqt= zvq+7?Sc|@D4$@*+iFx|$crls4mITG}RcZ)&0z`{5{(_LA-+z1_?|OEruDEOK<{0oZym4O*0*6O+R>%UxajzD zz4jqPRYk5{>`ye=MG!iCVll)xfrA+v(&$}!N5s?l^ySm%_kaE6>vwO~`*pcHaD*!y zU*CWI{ntzP|t{_H$T3_^HKO1Brn^En>^f}M|SDxap()HBRs#!MD&7N&AE@f5tZZk4=%5~cp?BM78C_*G3OA= za%N&0=`7|w$sM0-kEWYGPG2t74dy&wtDT@^Zr~JCO3~V80b0jPQM;jKqH3XY-QdQs zD5!1}V{oI8pW&RkkEzZj#x6Z`*CasEPoq}Hz>cGa*j2VMuDvVKx*QfdArgof8H==V zNFv4xJ?_sMMNk-`-8fIzA$|1I)8qN_bluJ$zr24uJ=u5A`#_||s0vJcSnq7W^XBeV z%R33}3s3v#MAs2BM>40KiSfDAI4dn5w?>=cLMKNLAc#h=tg6DW!pHpFqU5L`YZA9X z+=*}jm5~Ea4@F6MivnD(n<}i0lPrUt%vDNo!;qw0m}*)MPQgQ&tWMXych?j-+@Ud# z|9+?hnjEKhDxOPK7@#;@@R*UATB3D8P+`ObUquD6xxtsvW+U;d8B9#Pj6UrC%^7$? zB_vU+FcG7vZGsnaN~S`?)LaA1B%e_OJL$t*nX9XtQ`nSGKSdN;A>R28+8VXw*rscS zaON@MPR2kXzE#-Sm2b`GH^aI8dpFA{>(P@mGkwz8HfYs{PN+orZBd}2lgTrWub4^T z(oB<02-h)0`e?*=>*2T_P+*L18lIGaE2z=l#kb^1Y}c4vV!|o`bM}_i+~nB%Bk94p zIl7I2TLnO3W^R03565+}^|z5}TWiOq5fc-Os*Elo*XuT9AmYMHYYTw(-mhCX25Ik} zsIy6T6g{>(y0Z&%i^x@EHZ%#SGUL`|>%-F*`nGNTbiRlHF^Os)19L1d!mY*l9Bo7_ z!)nOn@E{^IZip~MVQc^jgO!kp4{R@#oF1S4$G`u-53lZi`-k5w_XiyUW1y<`Z6P=w z)@|Xf+k(UwFt%ub0=NVs05bZ{O%~0RTj~yMd$ZqpMi9`6PS}N@RNu5#`A&W{+c5E7 z2Msu_AUEX;CUZ#V=*%+W6YgEQ=n5r953`0!Z^t0*`-l%pf?_sQ=>WC|p!_~2+erX! zX4JO`tecRftVD3epA~Bh&Yi58lue3-m}z6N2pFTf*9-|YHg@O^`;c#4dS(n3cyjbLzdJw_#xMYSw>-yf6NSqVByJ|> zVfI)zW+tRQ#t`U3F56%twcyoZaA!1EOODQi3^du=foX_laprYsP_rpuvJ|g@gj~H+ zOM^=^C4MvPK33q~$F>6gpCZ0U&B~{fn1O6%C``=&MkyW<3Lh{zZ=kx*3`vsJPlARB}Fj^+5yG86?h zyOp4uU=jDb1j(M$y+@~jui}_ieF>#_Yl)~eQ>Y1*6eOe(XeC6imay>L<2W?PCu z)gVOf!@MjMlo;1_J)h2qz=(vjw)O6CXC=!v#%4WxoM;x5J_0O@CEsb99|1)~d-sD6 z=2F&PsDfYfV~dFh+!btN8p5r2#5~kF-X` z9s(WbI6Jt{VXC4!M(;A5m+x^;V^h6cVT^ITc2yx}Vm5NvHo8Q4xU8!ODXYS^0n*wU zAdTMb2{kQc?>&bV=E5<{7W>2{>`D2K%kzfy6Ckm3c#5Pj$~r+^<@9=2(YHftWwC?h%X6$zeO>{j)Ew zd7ZqZSSrX*@{jcIE4I?VrEw<&5{00gcpZu}`gvFQMhhx>^JJuo|8}*ib7^{8wrCw0 zvB)DF6Q4c$TcyeA=Fie3>i8^7IJ7fDFB-fNi#%F zM9G5K)N$Vy8D%<25gn>RN}`HGh89!|c^DC(A`Ou~Wb0kV7z0$KwFXGrHbgFfxGn?$ z*j>uQ-SIzSfr|n|<+|BQRU5Glu-L*dungAJ@-2$EIw2ktR;3YT9c)2&nGUttMg*2< zh|H_Gbhj0*n@L1iM)DLgyBbDB2B=N5dhal8dtU2M9*cxF1DV4h zRFAO%bkti0P}bmjOn~TiQ2-`z7onh?qG`k-G9oKT#}Lucy9`mFZsr^!93s6BL?CY0>qb62Rzi{?9fmVF)mQa0 z^0TpwRFeyUeLszPZSC%`9+&0Kdi>qjZ~ys+Z~ygQfB(b3{I)&Z<;WNS;N0wSvIlnz zRaPbh^2{kS)!MVJ2(qW;-8jNDa!o_~5~|7Ew>+b_N7BIyz^mQg=Sb*9$xD<%QV^Wk zQG~3^rt)=RIBFI+PQo1-tN#U)m%+3GHaG(ocd#tHiJNpM^2{?1>rAaT_jS^Xxs5OU zk`e+@ph~{-4(4L{YBXQie*|R|c4%~r0lmGcrs5-{A!be2XCYM6i|rEE=<5>)S`;(z z^5_U?YO5lPQ2g5z*p29|+K6NYoR03g+i`#zgjt?%GsA=C+QI)h>LnMvY_PDF5CM^vkUK|_G zb^uuxJZc-l0JtTW$O2ZUu^mSsHvE&$Sy7*&PTNYWxGBE9R@hl(m|^J{K! zYmLbiQNdS1B}8IX9o?dl12P~w#O7VVNTUm)S(65HQT6Qdmo+4ct6IfF1CeGZv|7~Qv{Y#x z_#RU`mH4njxcJS08r{jXydx@rpcF#m&Wcj??;?0J*`f(zsK#^HC3{p(zlZKTGi2K; zB*Pif(W5?In!E=Yo1lyVI+nJ)d3b$(IzRE#aXIwSRrRnQhFmPoFmxMUN!j0s437n| z;kW=6Pf4nSlTEAx5D7DHcZflcbO-^q)^ylnm-@C{h(04O3)`Q$ENuD&E03>Rcd3(D zfTF~-kyPP&xpWx=KxA0HTO!(r*wWBm0G}UQ=!|`yUBs+G)+TM+=GI_DZq1WKRktxX z5`MBSNh*rE^va1SL`a}00x_Ulm|h(Z_pQA?9RB6|Z~yt9e*4GY|L~jNeYd{8n^S9h zBo?NH!zitDO#1)P_O{KEB)OFy4&V`)x2n2&nlnSrYF8#()Bpcj`XJdZwG^kjZe}yW9ds@^hTp>8$R??Z8Re=rsxfqY@*YdnP)k_C@6}< z9Ceiu^+VMyqj;SJL;)mRZ6)P~TAU-bJ(&OiS0~?g1~wzQZQD=x)`Wy*+rkV)TjP)W zw(Z~4dLw2tcQSQ{k(#R(WQWWMJ)C*!u)Z~E0%78`c?G4wqJ<@btMyE-v&d2-X6_LH z?GZ)|W?{(!2x8`Hrrmn)fBox^=OeQbzkapbz611l_-_v{f0DPxs!HTrV}dgXBcyRex|L^ zWrmZKk;nrcw9h5?I+C3|N4k{xHaJ7}syJA;=BUWp>!{z|SO0Hy$%}3MbX@Xfb~UNe z=i&TC(*UfzLdKbEd||XyV5_UTmy(Gqwl5Yu+QW^DO&T>9VRB-#=&JU%*=C=VTR~LK z0M5Oi>1Jh_nJhrMEMZ?!QZI_Y@^13$YfUS z>$x9=GfudFEQQ+nuwHcQd}eyp`#yqeX)H$uN{b8pJmgqw*w^WG2*tMuvoT1dH6gO6 zx)YeOiFnYC^F%?0^hPmbRc-|U4(u~E9RxOMB(mRj0@1z6N6TXsWQZX;=~ExnH)d`< zX8Kw1!Bo3J%^pXrq&yf70s?4n{Be($er!g)_*=H!MM{<&4OD+;seBj6~J%Rtna(V@qFARcIiVSRa9P~*lFsZ2USZU=bsLtm)ktsqc z7xHlp+7{Mk`K}1T_^@2)SF=qOpkfKt;pv=+F?s!gdE^#oii@3I+s*L$osHIGSu!-g zfgPi{d?5NAiKr(7#xA)fX9GFYG%Wclowrlel2=WddQfEUEoS;8fpeoyO{7VuCii{c zHxZTwK8OUgw@uB}*o;w?gyyK$URP0^K&jzVTfnzk;-A5xjIF9!RMpYzba!E~PWB|z!4Iy9H|0@}k>PCXc``&tO7+|I`WzPV!0IeNkNL?? zyHZvbkrm<`1)bMG%ipENKysBQhgffAE7UlghB13aLHJle%?VBDWh+jA7d0Ic3p|XP z|JficA}VqX3L;YKw{Zk<#s!*|ASHKsWlXYHo5CyBA8U>oPR!Otva-l9&N$_u1&1@! zF*8VF-#spXiBzyLQUjmIgqMG~Of=KhlS;3Vc3n*GDUV~~=sZp?2Xd~L4i{O@IF{YK zAIEVVsz#1&YalYUNS3i~00}!u3T@#=aA9{<3YC(Rc{kN0#q!VvJF_=75#E?~p+?3a zP41exo2fn?pQ_YaYd;=OfJxfcWS|Q_Kac10scMhI{`tpqZ}R=?jnN-ZQ+0;dt)r13 z9qM&YO@7>x5xZssdB?zQYm{-V3=qVadEak=0%PWHU;MAPAH6Hb4F`Z|-`Y<iczKCPgcL5~pOCe7Sb)w2foe)QuwM5IY$xS6^waN~&fSpb0XI}k`9SyW}z zYtDWcJQaWDfu729e%e?j6J#anWe5pfXR7OZs}SlwecNM(Uj(qwCeynGCC>8gWy0cN z0UHqT6q7Fm_nIkA%*;Al8jnfb(H!ATlhb2EW>_n^>T^n6G@Yjbv>d2`c(S;l2*g24 z1?bJ`zdT4K^B*jZg(;8eoChR?&qgI|^Mx)-gPTGpHe}MsDHK0LFOIABHj{d|Q2Jic z28AUdf$%Qmezb%68Cs~ukVewcV)VffKnN5Q6z#*pvmRFQX=0Xo1>8WcI*#u|vXV*4 zE6?|4qzKsjL1U9vPAfo~gDphgHn%7#t0I5)0x4}s_8Mh z=%q>s)kY8S!jkgPy9UK=VCD!yo{g*H8`^U$B z`QzXHAOG;n_xtwK*Y@Q``(BWEuejOx)Wo^9?-ih0-#L!7s?0%wp+TXqhjhvpASk^` zyaT1iIlsk>s3FOqNzbL*avS+&?R3tEp*5!P>QeMoS-!^8^GS?yOXl`FR}Z;V^H4$K%+9 zZ(HbOhnTM?2Ynlq7fWQ+G)HFT|+*%Ygwp$fg;%3phxDAHU>|xA|ctR;dP+|*> z&B?sG>y-KUdH9^~%E&OUCEBH^=d*}vT9nPg3^hqkSde)GAmTK{E|H!Ry~=griE~d zz04$qtm05U> z>rb5YOUJQX4f z>ug{589Nc01SHvoqV$3jf8fL|gkEMLFCMSZbrls0JOM^D60VdZKNOAGO6$*Sji-Z6uc{Y5=Cz<5J& zMgqovevy@{3JecvR4SvO!CC6SPL@l6C3hKPL6zC?F&Cdgu6pTC;&@CnuG35v864Y@ z`EjbzW4b&Dk#S#pA!5iWCkajrXyrhkKT#uR5^L8nt)j7GS;3IB2pJv2znal!$T9i} zCwqyk9+@0jdkcVms4&A-RbxY^{V=rv%^EqAMZ|Cn0Rnu(Xd@w5s@5bT*DwzmS>KrV zoqzh+iRjS}cLl?ZdVe0Bq(Mlc;%rAZVv;7kAOHO0q2`-F)!qDfYCn`&Vk&gs<-SQ1 z>|6V|?YCPC>OwNyil2Y<5Wc7oruK8m1k9A&%+~etUCb*rZhFS_Bn|G@K;JBC zkCjS)T0)Gd8W2K$?aKzPKv}t56!FZ`^kJp0`A&x7p`uz?WGLrx?#@r`@;QER{^ToQ zc%*3nLNku~^eAT0cD^SrP3^*ko?#m^-MtXm7tsSVC%$ztWf2pMM_#qMgACvj3Lz5E z$*che7?HpQvmM)-VcXBe&Ce1n5El%FG zhrS`soz!v<(IF!-wlD`t6Iedv%&;IYI6%f&Ze>ffV@RylkJwBi&q4!aqm3c(Xc9cO z>CdAR*}iSUHSUabGwTkpv~A-r_mA)Q+xOe{MdbT^|I1Hbzkj)X{b)abw6FK}v2XX= zcH1TM0!(Yqeey{_WV_w={q{W6sl&}3JZ`R3oNBU17(O%HCRE(a%EafOH?ZlEqL#4; zrQm#FcCS~+$%GN`&yb+4rNg9XIV{}J^(IDR^SWlD(vJBhsh%7&9|$WTd!(l?JDL=Z zFSp%{b68~8@vpFacc0StO0$~M`Blj7G}IL9;6J@E%OvB3%y^@WDy+zV@_ukon`_E9 z!g}YtzqCZQRG+8R7pm8DDR${Kfj8eo3@}SLfSkwcU!l`}6+caDUdq030&|aGoVn*Q zig2zHJb}(bx*A4bx6i9LbitO5`>@h-a=QTJlV<>djcjgI;zh80bt^u>Qvf}3>OB&pK9!BbY!O9^*A2g1TETT zGq-j;yAeTD&0j7MFr&eG zTZ(i`CBayhCpPtRLanIZh3SQn8$`f0E|l=!}4cT;4{v5q#%c{Q)wLz;x) z<#9!ofXwOk=Zv<(P(fbO$}VdQtdqY>!|i@iv0l#3(dD1x$Cgyxvw^_rn%wSWkrBZm z3pmfEhu1IcwE2;i*^y`@^@7pYC@O5`jp4i27m2!Q0LGsz2JcO{7&d9|fHV zXETvCw+5l0a7te6j7nB@clJqVztkw%sKs94UH0weY~xYY!YE+sDn0<9K`?`_^vz?Y7IdMRk=I zUITF(!A_pVc=(3M%@yPf3Zr#}$!jFf4A%c3uIzgg!Eqchap5uet9W(qhncHewL@NR zo}6F;xvLHWWGv=$l{Ol@a*tjpls*-AAa%oqdq?r6aKtMs3+$!C9E4eJ!KmY*^vc;h)gZ6{~0<-j=-I9bo9hyQZUo*rgjEHN*W#TV4x z5-vOMznoiRUIL&~0wZ2w+`RZhb1`%=WTgrk?xd=PCd${RaWkj`0%*ChnUtLj)EL;L z=xH4CF*S|23Y55m2P=PglP9n=1ISNFt7Js1W|4qu1xss4;BagwgqcNZ{Fu0qF$gs? zn1$2RhG%|4@k1=K1Vd%?0TrBZUWyzWXH-Hb5y|Q1Vdj0?_D%M-g_G#M$tHi<@8|2^^-{~OCdF)NCveeF1bqPwi$EuB3fUnE1W=}%NBT!SC@g~JNYw!1QS?y zFs?Po2{MTVob*PXJP$lt){%Mg*||v@QpPxjxEi-H_9#IG`6U2!A=t064k1Uv9EcIt zP_MUj)#X=6{B?!i$~(3Ag%I&K6j{jW?Ovl)*k#f|UdY1b1y4*UAk0vr-qqANWNbve7ZxjH(IG4j?!CKrH#bkNVUY%6 zI74dPR0T2gF>)mjEtWG0F+UG`JcGm_+B@)Q?GC2)<^JLB1QuznwI+P1{rG&qNLA6A zxAx%H_V#h#g?SUc-I_23_<+cb^X&|NU^suRf_?L-2V6s#6H1-9y@<%dceO0J;O5$U zGPg2cZ@_}#ZlUU>CPQN|xKz;!ynSo)<2%i4bR9U4;FPn97G>W=;%^)apL1|IF(9Ar zu)%am^nW}X10fvqLoS1N=m3$=(b7l& zoSwP5?tr9N)dZ?|D5EZ}q=jsc3^bQ??qq6%qN1dL%qiNKDb-J&+O~5F>{Y!uZ8EdK z8dIF*z+K+i5+siral+4H4j6c&OGL-&aH+$iwKn!ROK>WzT%u#@S5t2S0AW=lwsza( zIC5meOim3@ut6K6JGmb0v~kXa5Gzj+5E%XFs%9lbv7);V4LC+n(y~g9Hq=l;xsv6u zyC1=-teX<;u)Vz2HFSq!xxx5kz z@-4QCuCG6NR`8rgWz*Q7?UK9Fnu78g-!|(%e`624R2vDxcBe2ojg)C}x(1VYOQU7e^q zxZU=h2u*}pHfh56_3?Osw#F%_5!o7pxe2$H9-JZsSPniBt(sL{Lf&CZh!BBETpDw0 zVwSMbupdfmHHc9+BQhe*5c(`GV%@4yAqWuTJ20!G%nQ@i6{@D$S&c&>H;FbV`xA|r z^MxdW{+VDSedba$<{un%vKhfe==v1alvL{s$=Nm`JLTtL6M$vanHEmmqhcEz#Pjk z=vqUp#nv>A(i=wn%N#3oE`)`ky)w0Z$U%Tt2=HKWjYIqGFH)vRI%WP~aP?}JKoh1i zR_E7gO>z43mB~dA`8yo{Yb?jVQe)wT!8a-w9zRbt@G;abB0A{OPo7~1PQ*(}<9R9% zB8PDK71#MfqODG9t(0S#+2FFRg7lyRoa#}Wv(A?H@#IM-JMV&WO5ihjx>}ZzP>1lq z<+6vtj5dRQD`CZJ`~b)6JoUUT$S)PH(in*aZiRZ-Qyfk#OeA65BtX@k$8!p;;wV7m za%;Ufkq#j6zKQ(&Wd|wwlZ=?zA>Gl9)veddpccYXY65Q3?%Ph7Q^f{!FqOeJR5$Uw za8m1Sq^#74F*hR1hJ4w1*Ty{3fZUx(3%i;l8KiKPTN9!^$j(@zMtR{TXNxb)POjQ# zIz3dq3SnR4O=_D6G7z~IbfmiWaU>;jZRi4h;0*~*=_AC;LufOm4qWD+84FWjgS^HW zp%ol2Le^NmL?c$wmSsw9Oho*w1jm^&7ik8*cBSJAumB57VRC$&R+tPMO#I3`F^v|4 z&zL~uXIezk)gI&O+UfDYPA?`qAIgu~b)8F9qb0EY+zQWAt9YzT^hWY|(xFGJgyYQm z@#)-ITt@jEpHMDyQ&R35sv!4kn|s$nV|-c;eBi`^NH{^6vX>ZWF9PXG1X!nuqx#``@k7Pv z6lf(k>s?nEN3l7GMBpyfpZKWJ8F0?RH;w``7ara-duv~Ax1Hfc zU-$i&O*Y0ylP~w}9_rk;d@G+?boNB*`U$r!l}bG%OxD%!oK@ z4sID&gS}9OV?%{dWO-5RkO43<#LMfaBAv_mNiZS^u?`bsNgYZ_pXm$d*ycsqux#`$ z>&UsuEv14F4NykhFU*FQa$#YzT>s10OrH01iTWd4X34J_H7uIY zHM^b8rX_k;*kLJQEUCVew((XI_HU}O{sk0#M1w?ML&h8;ThFN6Rcuv=iuJ?`t*Vi) zIt<$-NzS}zhh;2Z(U&y?>ZqhosAHI zWtr_x&cp<%?L>%8-Q2AEzTGy)^EsmPwr>90kI!e1;M&~AXOIlygmPsF`3NLIy%bS2 z#kH#hhDhi>n?O~=2$rFjOJd(;WzJ$KOQoQ?ZQ-Pz2kU;%5#nZ8oIh~#W~t&=mV zo(SNn7nU5onuRPq(i%d0kh=5)|lDcx~l0^Pv^QT zj!L*KJEO*s)`Ik5s&$K6_K&+T@h-A4H?ZH`op#}``}QGFwU4d+`TMt9livF#tqD8@VIc))qZN=ec`@VXisDY=9h(Q!Rz&aM399tRPvl1!*jg{x-Y-CtGVi@kA0#N(~k zZp{qDS=6|=!|1}Ddach^gw1GRumoe&sI=x8weCOVH&42nzx9K^E$>9yyF?>;yB~a` z5Bt{=axNmmiuv>f6FqFuF#-1#cf9OI;Y*0nTWaf=2`&C4jIUH>C}{DKcm~huV(7`g zmt^JYwsO1_fO990p*?eEB%7Oda+8n(4E4xT3Dih|W+;*tK6o95cvPROLB#}sd=8bL* zd&7O($h3FuhR4&M2dU9Xo2-byYLxBhg{oG*!C>zO+~i&nWAIjk2c zHhN4wCn0de>?DotEU?HtlyI=5r5rTmg)^2u!(cK$YV64?A(j{SlP>`ov&ZraxMWbH z$g1PK)FRo`SMx~e*yjNri~)X3I#UVbv(-zm?NEEcsLIjGok%Wr;2Yzws*bZMYAlWm z>5_MpFw2}``rJ5>gCv})R?Z1OM}7O^sCu`q)TlmX7}5VSf8%#4A? z5((lA?E7wJ&*w9i{UQ=#0Cytet+AOspNBg{8VR{WDm_;{nN=+e!3+U0^L7`;-D+pC zH@+)|x;7zTSn- zr}g*sT66%?xb0l9Zzgz({fEq_ge2v(^C{w7k@_oo8%u1UG!l-93ErEY{OCPW7}oZ@i#x=QA$SB(ie0EUC4iL zSX}cEoH76(XxypwMkRh029L~949IgP>8eK@4purReJw;9{0lzBcdPS%vla_A5h_<- zOeJc}?P+frpsykCjQ=%zoyxy%Z@E&Baw=EX$N83_l?LX-`bz`-Ea2!>`ekbXX|=oq;S_@x~A3`cFTG2OJ|*4CL(2joASOaXgSt-uqGUo!tWZLhf$Q-kZ`+VkG5{G7iJy7SGP|EQCr!0o*!eseve0CO8w?D1EvFyu(E8<&o3XxQ?xUCos| z$OW-Kp1yrvgR4|E)KPJ@hh?^4JA-|Ka^CqIQd`nZ)4A@WU{|HvS+R|)B zDZ7^7<0y`5l)X$(ZmU?BqnJ;9{Dfo0H1C@FTc3oZchlqfc&PR5*6#cEzc%I(DUaH> z_tde+E=m9})beKtbrF*>z{C=}{8-u(?JR9)0;y{6-7LF;7}T+dlXqTX3|)y>z_RUs z`2Ky9cBnF7st^Iu*V}#Hn!2m16_yYinh3y0SJfWDBW`M@ZfZ`_gxdXf+k{z|8c3LK zO}_2h-eeQmWfKW}3^CwEtB;qV0m9f?+nNXlTbMSHn?!2rm}^iN6}Z9|8`Iv}ZQJhq ze!uTgl1Jz?h><46sMR&)Db-j7NQe-&LE+p#uAH_SArFoVV%5(J5^{NYmoQyVoDWV6 z@wixHT1s|FFAgnx8LaSDJ4K5hZFv?_pBr5N)$`%*xgCCS{x4qy z_>xw0h1+7VZ+$+tuT_hkONXStlVedsUtO8g%rr82e38oIZMVZbj1#j;#=!3U8;Yej z9)f>sjfGl6mUCu6;Ld{731L5jCzA5GXx>)?#EJehC8Dn>I$8H4)8S)~8ABjieVCV+ zij|U6Ek%-cM^#;xl%<|?f@74qF=LCLDlR6cTI#sF5hDwcvF<`7aON)F&o!>ErpPtP z$7xY76P&?KHX=3OAN}aqp7z^shpGn!&xyKeWa-+t?0qCx<%dp9kK^-W=i7e!xCzj$ zcQ=Uiw$!mo8SY*>2q~|cT#N$pBs}|(;>!mw2 zpU8s&kR0~#+=h&VqEmVXy>9VGg%Ourmh%Y$2+-|1ho@jOzA76f%1cy zgN#YMS}Ph-#42;=^LUO&!P(fj{+!y6{(Pnt+4S>y9LLkFt9K^@$12*!Lv3oRTBGj) zE>9ZuOa2>9#$<1c^u<4@ndefhXE z%jf6k=i~FY&mZ^u{g`-8z4oSpuYUJF6 zV+jcoCgG_xn#l90G(2)?$a8jN?_%QsVc9k(?)@;p+}X*~98FkDiuj1c8s$1n!jL3Q z#Pmt!Gc#>!>3RXN(lVg+wQZYKx7oY?K9ALnEo?&7d|bq zr+MK#J>2OYb?KhsAl2?XW6lmsD5t@S$t6x&Dd<}jNkl~a}}GL>r+5v4g)L!Qa-2R zPHV)@`l<0nNycVY!>^@}toh4Dd;OX*FvddJ+Ov}k5eS6ybUxL2L;X@&sddg;47yg? zZ9MpV&hs&LBRAK!v50abZs@-~10qi488$Mjc~#v(QzAvA4Br~>8{c=?1=^FDaF`uW zH)o=j0t#bemh|dyGwT4W^+*uB?VD_(s!m1^BiBV88_n^Pc`q9^)V%lZWUWbRchsgi z6(L+xf|$8>U2|Q=6XA4{@m;`@YjPIHs&QFSXWT8-RN05&I%0{_p+G#^nvtG#&bAw= z$ZjBN_1));0dJf&<73JrC28{x>54&7zGgHh)z6VW>9i0uEZlNnHKA9ES0U|t=$gz7}So|Rc za2Nw-GYWX^#zs2b>Th4`?-HHkL2jM#M^J+xG3-Pk;Q=pZ@aa zKmO&RAyW)9XxgE-P8GTP$GV6q1J!IkXlz4$Oe6s&yeMn=Z|u_xb=40oxf zL!>ZOMqb*fn33rUC&<9q6I@GyTt&OIGjfx*g9q-t!&=8I2ffnk0JA;##0>lYWG4&jr|bk%q_Pd32N3 zLQ9)@>J;=9F>|#_86ua~K5qQ=CapmPZQCNf!wJu)t1EkkeNdgyq`Z+4NElF8&a3&HOFt7x zvnfe;+n6>pQ?*JAzL3@vflOCb_{%$$lDiO5^*(P1W#?dMV2tr?u`C#jgcuMk z#%>S>Y<^u0WUH4H^XmQyE5$elt5F4UE@EhnY_o}pL7_7|{_RDVixd@n9*t>cI zc4299-}Z0!yPHAn`wH5Bp+2Zl=E5^M)tzc$$+_khIKhWc$Znc~>TGbQm)uLLC4G387WQZ^0=ijk5$t z@edF;0XS_q%u7%uK*WOPWLBKY$VKS1wHOf!SePK8Ou%%#t7Y1gzifuE*!1QNJ!&ss zW=^@J^a*jtYSgXq4UG&Fte@+d(FA06!?e3P!EjM>zC|qgt2|}AmN}32VnJaEV;Q+S z@;?tR5xf~bst(sRS&3uU1XPf&Hr#K`MV>w2byMGn4g4j8)4l0TMN&Alle0=5) z*6JLIXQnFwtNu9(FPN$1uN>BhH~O}JPmSekjKXP@hZ@mk|9D(1p# z$#RW`%!6qe(M=Q8bP%3KhDw8X$^{kk=mSAY!RWSO!5P-Zf^&Ot5*ME%7UtGG)f1T# zEn?WS0B1Mrs08$Q3us8Bi`R96lSC>D2G7_}0NxQg7h$P&6{h==0fKC;ZL;mH-R!3F zO^YJjJ<6=wcV~^*p|kGv`^905{0}WjL)GPpO`gAOd?|07lApZRwaVL zJe-NeVG1<18RApLJhuZCpEH(6(W%*@8>p{6i}%Xx88b|WN1hT@oS(1q ze`WzBqZ!hsCcZ={A(`A{?(xD!u=FWpDsPvp=f~1#?+x)gb!-$JN@sDCrq-$mPn|oaxLFNecqj&_bf& zA(-8nFGluN2Y`{5Lhi2N@?9hpMnuv!kt43YjGaiv$V9+XMW*MwqbER4*3(YRXe>2q zs7Y>}G>s9{BayZVHzpC;L^h^P$Xz#)t;zQ<+aJH&fBCrm;mh90s6SXB;?{rY^Rc7< z{ITt}J)0R+KYx|u@rN6JbKXhRNzHpi#+MGGo0{cy!s*Y5x3VC!uH+sWV=-7C(_JQG z0|Npy)P$8G1(1!Q2`J_PO^+i|2OJblA2X@@!8kTigK6u%i;%QEQVq>2_`+&)f5kGriyyl^6NT;bHjq5k%kDSonRGJ5P2#7_gL8pMy|oMvTqJw z4rTJ&$pj(`F(X*4mbX=a+M3YFG$8qI?Y#Z($q~@vyax(exqxGW$ z&LEL$n&$U+fP^!O$L%1aTjP)0=BDZqEW7nik0%~aH6L?Rq{P$wu&$p+t5Ra+VTMn; zxjXgKN>v~LTHBZ-MGh5-B;>GIClU~@w$lH$)-L?F;x`)k3F(myVGfHk)euxz#Go0k zv#*gSyy^m@%r)!YLsFfThvD~uuXFt%=i4|qy>`^*rQUNZh{*b|6v%*cq85I2!KHLq z6pK#cxy`k<&lV;;z(8N z#!`F{zh-&(QeY(&tc-Z0=$SJlW`r^?rIh}PkY4n;%$z>2OnM1E2e3L{M}bw8|FMfX z3EjOouY{3Yj2vwFq_WYp1zZk0dWBrC?)1sXnlFqF{9*k77UbBF3uF)(k!zGA+2N`3?Uh`F$o9e*9#%!xxS6--H40MlD0%}=+e#9ErKGT)>X+Ba4KAH z)fVd3O^irZ^J{2|Tif>5gqcW#=&VH2NW#aH3Lrw7{6=t7Evrr$rZgzU^jbaC!h6{h zp3>yr|3!0`ap554>;qp^Kgbw8o%BVEMBUcBpG(m;KiyV(`8AgE_luItT+LmXWk^~t zNz4Eu`(fSCy#=VA63c1;T0v;bhG_DU{r9l!AyFt#@(DxzA27%Ioj(kbVoy^#RTd#f ztm@)W9+5Xye7pjs<~eM>03B+-f%%I~{BcYTM(c}3-!=$-T;p&f%Gd@qtsgrs5gj*kjQcP$PwDhY7-_pBzspHxJZrRUZ24m} za`)rdLD(7#(c{${Ki0bSLK4q|FPk@MyyvX>iBSO$$ydt8Yic0F7CD5sKEC+4XjgrMh%n0~DnV8n(u_2oamCmAfL)KENBT~>u%vtI8mMpA#7$Q=5?)=jpTsniZcH|tS zedQVJwK7oX@_;PULoaMEE*;K=xsW$VU>{%T38y(twR3O9=jO3gUY_9p@EXe}&?9}3 z0q4UTuogUO_v9D9l)|U*xAAvv$xIJT)k(gx{0!^-F3e1RqV-!4OqPS6X!%CrU6?{a z(3F`j74x9OdyO6Foc6Q4L{rwB>2Co`IY8P=M&r-6uZ z|8n2==1z8_pTGCd&;CFEzuyuFpixi7*hjT@wRlIAyffLyzJ1&n2(~-3NH;tV>kf#7 z&txQejHM6+jin7s|Hx1)AHD+!U_z|e8BFFHWu96XnrF85*_4Y??vBPTaxalX!uUqg zS~D~4N<>m8lv($B{^v3=;UlPcz|Oa=jfmh*@EWLmMjC)jPkQ5`H`c8UZQr?kSGpSDG-QzuWxZQDk~ zY<|kk$wuiPTcl8o*$bbL%$zbcEm%ME*uj8hEII6hyXH$IDe7gUv3v%tFl81YKKWm~ zfI2+1`V0AD1}Be0otLg9+~-Kc2@!@BGbG-nzc1Z_RZOQ}Exvg?h0b?j6ixR%T>+<) z7sa^BOW|vx-`N5~Rjwi$gcM{V=6X#;a$CU6uwybKH0Gf}n=Nu}=EGOHp1y8j2~SwK zbQmEE?80sAu>xRKy-c+4nRokmJo|B&b&H13{s!lf-%FK&eF0jIY@$?c zEg;RaV0pA~>wh=}gwtRfH}MJ|tuJDgeYw6M6UayBQ21dCJblMYp-_J-!$TO?w4R}Z zd3nlCY^_&7L&-l&wQ5eU*Yuy?D3LS;xgMV%Q>xQ_~d8IWfGrXhrg-DdV?Wd zlIKGWWa?%o^WX*gpPJV+1o(+l|2yVEjL+oATAgV~K89g$F&T4|xO_5}A>;t-`?6_S z1HfoSG_OYf7_6@jL@W#6ig%j=5~hh)ESW`}Bo?4BA6L{evlzyR)KX)P`mS4VW~SEM z)reYaw;T97n-T&4{M)m;H79q|5V?o!Jq}>+W)BFyYyx{6&mas6d3!wVw}*A*AU0V6 zc1FP$ZGY1|XxKuyQ!1P6B%DE}W=D6x$-pphN=7^-k^{kM;ifD}A?L`@EMgG@Jt!iz zn2$w@b2$4~IB(Z67^qr?-JCdwKtq)>Rn-|dooyv%Lm59@rwr22{26@ocr)xX1DZT< zGOKLbI7UN{&Jc}B<|1HPdW-7`;ip(PW)`ch6)`f{(sjMLJ!P0lnM&gA*h~*pedJ^V zhN9SB+fW%hdLBCkOa)VkZR2fnq^-)&A!V5tJoKaS-p3@sW(`D2iNg>uNhGUG%FzT2 zM&B}(pST*-E#>KsCGusgU`nkP^NuOu4}{NzQ>8lS*TcoSA|Cl!W~ zs~fpR$(1PeaRz3@403?PnZN@gE?{nMx|1TS;cSLaYJ7c(2(+|FG#l)d*x)k@&80%r zml+cfV=cHjX?ULlz}o_PhZPhYuc5`RF-C+DnNd(k14(`$*L+~p+v4}{sAq{M#4=YTL4;B`E0;_WANf!mksiLhB{m8(XOTfhuh2KY!k=sS+;N}aJ z#sS!Xd4?DgOW>etY*fxHn-o^1jvfPjx~d>BV^C_*O>-6%fmoU%t~UgXka>GOMDYcs z(yuW{hYS2%+=*|DkW^1K=kafOm#IJ-Fojpza4h#+JuE0;06;8 z3tcQ?ohOEY&jXCwBrZv3ZV9!W1C09UWysP9R`MA8@fvppSbP_!0cyX3WQK2S44*Ho z?Lcvc@W`E9)pJX98cxIlkH=?lsjg<}ut>^IVv5s;Wa4i;)i13mT3m`5?0CpLxj!x6rU8!vnEDJ<&`gmorC?FaYl(_!J^kCUsmi(i4odeW22Zz zhnjw@##43>CCAWEFpQ>$wDQ@V2$uGRar6!*P9ak2EGvLTC4&#-_Dhc2V7t_t=u7^i zts>yEDB&ytUVNEjL}7Z8wT`)$54Qq=g=G_N)*2%S0#ZdjBRdkCN7yt`kx0lbOW!sK zJMLG3aJ7tTM$Qg4REA7i%UB~j#uT9(RD)}H`O<* z5RApUwvv8bQtH8f*Ss!`?m;WVO4#@qvau z2a{k>dcj4+;}uFM?uT!}ttm5Yj3zFiILnIkMP?R+q#42x z%P2Q6GJV1#_;U6fmjWxcCpE)&bLGkV_GKXy9ipvs$TxrzBt4vlh;LmFJ2Qkpy_;E1 zxnBJ{1xmBiqh2`}z95fjCSRrxHnu%x-Oa&V?%Aj>r)(OFKe~9iMkFIkN8Lk9G6?A- zgM57AxlC=zoR6_HIk{pISAEiJ6KRJvZFDe8QGFP_#Ej7xrL5jMA}1GSwUdx`Kt!jv zYBXo_S)Dh+xcDl~ph6|QD*EKEa!oCVI3}i|MeqQ7atvRSp;P@do5c_T`XJ`w9oCOd zlQ7E7TsS2&%deoJMfM{RX{{01)mm%9%?(LiAG8vpv9+x>G_$*6Z8p>@%vkJ8qrvbc zei&nK1$WuPoadmB9KhVnwD+g!jV$5?AuOhykdcdqcv?fE$g15nU9k*ib_pOfX&_lu zRn?e@OJ%5PYiQjRpvAJ-OBF-JaC3FQNr+|1YSS?oa#K3N$sLQpJSKKkD_BLe$E)K; z7NM09qV|#unw;OZZCevz)Jno8E^ETg=4IqBTfZypVCYCH5Qk_WZfV`QtWDN{Kl=C- zuk-|*Ojg5pHma-BzVe)yL+)?o?S6hRxPS*aKq8+v@>#=8Bj1JRbv_e>g5pi()tw~w zC1cDd){6Z1&{BC^l~svG0YNX=VZVkq$2q5sHqM+e`}eu#f4U?903ZNKL_t&t|AiWh zDqVYy42$~21P5FA2XPV=q{_D1iSx2}7GeG_B4V{eoqy%&-Mi2|RxRm^Q|EWn8%I&= zenMF!{zy5kuf1#Y9U4`2wO`z75TvZiC6gj%9n!1v+S~oWaSww)$ z_fH#u?r!G2>!E5y-MlNQ<2bsTxmxOcAjEVisoN%WGjBpJa5G~9w$?&J8$NR}(;N;( znH3Ov@)+g08G|Z<*jJC|Xq6(na11}35-&DBj;f|+#X8EJA5PEX%p1>!*RyHA6!qpl zNA^oV^~Kn-7%}EYmbs#)(wKarJkiDNZ|)BHYJgZX39=&>-&6z*oq93$C~ zFlpH;{KP-WWoPa^vrk^Ib>nZ1c#9mGFNm+D59YUCp$eKvtq(Ihk@X(hjPNkBWO{gj z14aP0NEB^;LZW;1&0KEN#3y=P*mIshjxt&(7Cn4Ex<2M@MQrzpayY+HxEnWt_o~!uH9(aMu7$90MuaWEG*LasEJ)@ zbWRa(C%joatP+y0ECPJtwtHRA8J(5mKTcT|)54U?>)ggJerg_SE0j{Plq$KZnJP>@ zEXh%DnS1)#28;FwNuwP z5Kdh+DDRN&L(?R)}h~MiHvwm?8f*sOsKP36U z1(kG4%NQL_ZEfqiofDdJZHLYstGMUF;e03C_n^_n%vXct{Wpl*-?ZTxcF#iPkAckOQ?0nOj23DW*m?6 z7okkvotyW$Ek;>PoKENsoRVA3+$=UNWAUHe8I~iq9FA@tcid}=S||u3B_QQ+ZX!&# z=BDHwc5|~IKRzFyd)Ka}){V(;jXSYh-(VnmJ`aXQz)aU)fBc|l--vQSWaQv9sG4bb z-9oU`Vw0yvPwQ%?&OZ+N>_p^DFvI8Jjj>6D=Xf~bo+9+oBFjXGTAFh>-Pw`i42zwh zh+t6}##XMpwu6a3s#bG%Gzc*Ue`j`0cU| z2GZ5%vSzB)UBo|0T>~^3US88wr?YD01uZxr2eXHe5R$(zc*Yx;_bRjYZf+~mGt*q^ zH6Q70W@s&*TU$m5a~Xs|-DFKmA&%z?2rUR!l*tSz}I}xS<_#!^hQeL`|Wgau8)9)t% zKGjR*J2gL7Cs>*uFX>x)Y3;Op8Pcw|B&x-^LhEGZVwWD>Bd|XH<|oS$vKfnX4oxdA z;Wf_+YtGfW+wOUW<dF@r*8GfJEQII5 zzt^C^7O$O;`OoX9W)vzI%Y>QV=da7bp(UtP@0y~{53-*>w-i8}kWu6OGS=U)akJRG z5^~QlzNRO8eFj!e%#x`tsnT(tNR!#S*yxAD>lT@YIvD`I>iqKmW>TtVwDQ5X|M1IKar>uVfBg3O2^A*ohda}@weMfIn{<$JY&Ogfd;a#r9}hozQ)4sN z5Q2yl&?nwRCig~UPOKrcHhP-=_4D{Vur(HDRev02;_irXQG5*cjcz?mXw(oC4BRPBhG6|jX*rMPKz%0J)ak|;V%rD?x1OA>IG&iZ?Di2VI>ZmdOI^kYq*OiU zlJmokj8gHqGGhd1Jc2&P2w#|r&X%9@C{soDVZ@C$X*GZ>0a6p_GuupCPW)?%g0ChY zJ_%9P-1v+eHcMizh%6r60^F5mJ>(s;q9hFcO1+Y`>{)_$MtMC4*QHG26z#&7ny(xQ zG*JjNM=xvi%ot))rzoRKsm7Aq5o zaJS{&@1~Do59_D^)&>>G!a+koVF6l)Ag@-2J9z9e6)fC`*VtjIrQ`_Wt|}TDB9oIE zC?@3?k=AC3Rq)DB7d!*7;j?2m=eS^vK56R$mn6_?m+cQFn(n2+J_4uBUG>i4-`*_T zCG%w46w?*lP)q1n5m^5p+Ku-5Q^BkF`DLPpmDsauIhKDdJ&rQV6H=mkmT~uz_r-wpFou-uwrTh z=oiq0{$;l0pdgNgGs()e-+jKKkr#U>6vxS0eaXBfDtoUUVhDm=Jau99>-x*$B@7MxPuCl z43sa>2h49V0{HykzkiO8oBBS|2z2T^=krNlUyrZn3BYrDV`+N7GxGpu9A*Tn2sXUo z7M(sql_}rP^PDurPgs4P^GSF=2FCu?B|iE%CjgCGg{WaejmHP*&?`zxP#p!>y&NVXCNsA|9fGEk$un#i@Kp)u)zfO4kfFJbT^)x_mgqmrifEvg9!x9JqZOo%cHFrtY#H)U~0Zu#*{C_$4pBE49Fa0>(e-~6p(x;a)0*k-rl>ygVWyt3Q_Gz^ znpY#24E-1rs$Szt+Q~>+$eQb!?Dg_cWoBX=OhC?SG8HK!7b6>~yewp0BZ+F!Az1k1 zOmjcz;RmIiRt-B15i{rFOjVTt1|L3GXLg=u4M*eMWB^4o(*BxFM3r6XS>6Wr;|+2gyP(Gf6) z;6Rd48l$Hj8Rg(t8&F~0IQh~bkaoQHhHhHFP`R$UNMQYJD}DqilU`nzT-h>V z*1(v!ALv)_McngBldm>OL6`He8J{bt=%NsMyB~bn(gq$g0ygkZs;;{1s%G6u4@*)vd*>C01s7^i-Rxjv~L`Xtsr*+?Zd)FEQ*gFoR z*Mb;Uhf~@_Y&eB0W}*ssRfRorttx&WfxEaW1$qX#6!rqrc?9uCI3~7~CJ#*UyV@f7 z;vz)HXL~z_AF4=ffU1*BP$$C}G|=RB*ui!T7lI-fh|2RR-_P-QoR3HG^AQn5P5?0* z@u(9c&>%!GanlVTJx^rB6Le0UbE>3m-Z9GgyG_;a=LFyzqZx_fIfa?VF~GpWEMYPg z!Em@{s1`<4$yeI3lMzc2)062@7y!rZ7C16QAm>>J)jyJLvT4YFmF5Ip7d?Xz8O^{% zP0VoR^OOg$(*z2mYG$iNj);SHF0gMa&Dgvkfl2^e=cda|&_Fe@PZ0;3NMF_E{XwMS z=a$DPlsCKQ*=M9gm_ea(nGcCft9XzokgHv`O9O;WRvxKl4intPA`bkBKcYZfC!_8h z1Srp7WNVO@rUVEk@~U#X>I^P)23tnCI@Vt=7g%R>ogJYKcQ}N2ruNQ;*!9S;q*s7I zhE33B*AaR@K|FOhy-|V0TxGQvE5dx5nJN<6e!j!QbcBR+j%0yhlAvNbSqfI!3?*SP_Z zn=p`&$r)*CbILsBI1WTMATt8s{3*Cw^xIC}hkgvi7%7PUI>)nYjqjNumutXK!Z9bf zM8Ho8DwD-u7#1Y`1^P?ITyB z00HQtmoa>iree3-{qvU}bDkn|u-=|y;CT%FyyJ0@32U;a zpHKPqx98)bV2o{jVJcGvaH4a$2@qfulhggn$KZqM>v`7rfYH_QfM#M*NKQ~hyBQfe z5jiwCWfVw3LgSBW>;jlcL>GZ``2i`4a6+5DbV&S~^Omx$QZrs+(iZ1wmzRr{AueJc zz#Wsde`s&7UscWgQd{+;KB9CsVUQ9C@YMnPf*AG@oz58|6(ovNLKEY*buy8+MXeXs z%!Op;Ha=02Jq0Wtw@S)vD+71~MCtZ#0yIK$+C4_8sBJrzao05f_kSi)TeM})_)K0@ zi(F#}YOY>%xYPDWveBjl>u2NNbeui7#>-YU@ld1m@%i(Rt9s8`^^gGt%fvKHTCyR;9Q!#4Spz9NX@8HY86H6*t6rtA(fvq^2sDMu~ zM1(7`cLU_^2Xp)$c8@s7kqp5~>%lrC}1odlL>Fosw8p>sCYeQsmz2HFNWwhV)a zS2d*nI8mZ)JNL8(G&*A+8h9&3+`^i#EO=O|Xly&~OyiEV6uBW_p-hr2v7+p31?XK9 zf7>+cdf9K?R3a)Z%FkuNCdA5yUqkmsw|jjJ->wcD7XwqJ1n(l6|D-uq$*$s~Rqwy4 zR1Ma+GuBVPyu*AsN_25n1-!-QwbcqQvEvSPSPWZ#_HyV@9}0z3Xn}qr9tM%9Ktl24 zR0&m$t99nO8xZ2y>{$jctPNOm1l-WOtzd{fIJl2HJ5?7mcoMND8m(ecx`YE)u}_is zZU8Zxv9$wXoFuNyxZUm_A3x?4)zd_81V4V^&rc$t2?$2WgHAo=`8+*;Fp1*^!Bs-f zAUQ;)cPT@hRE`L$=ky^Him8im8J$59uMq^B2}EQN^BBZj@0J=&@yL!C8@n6_k<@gm z02nC&p*E&kPC}FUBqJrGeW7Yv1JUPb!L zn3+lqZ;1c^Od~{B2vbBuWhRG-gmH4OI5Z9Uj zxtH2WZe9B|?8(rXZ^g_^0r~ij=U8*3o-@)h*yGvFL_zDWFXg}I!){;My1%1S^naF_ znFyM?p;K^0ec>h=^*LQA+VQ242N~J@%iT5J$v8A(?s1 zypXESNusbViu1n_GarZyFjdVsBCcX$*b_rt%VG#kT;+>vRqZ-%Oou|04N%WjUMgyU zu|~IMkDxXnsIL6wkpx)G@Gw=B*5?xHd>I)dplO>MHLGm0Ij|pzWf67692s@l7QBgb zHrN?Oov)oEt2D%=Nk42rSpU^}$U~P7UBo?2qSt?3<(3>FGdgkjoExjipY>Gzo(1)y>wVkNg>+N^Ui#IA{#8jbIu~x>Ita>RomRZ-u zzmX87)PSu{${Vo9O;!yV2e~ixYeT)PuK);)fVS?#a6C0mefU<}GoW2LtKm^?6zTS8 zy5naYhYIKoZl8LWr|K6dGUDgw?c;;woHBjAM$b9FAFAfPy`L!MgcCIYq;o#iw@HWt zOc9*Mj)X?0HwFgyo+l9>!@cMp;x%;mb!IZdg9~6Haw0w_5y5Q?!1nycR9UCUoYN}^ zhL?1O=Ksu_Zp~MxNTBwJc#QM{>r!0SoJlRhUQ)R2xyT3@yh5%29W+};UoJtDWLkTB ziD-z3YPjUkR+3Be>etzNO(gK6A}cY;50ef)slLFWy6DFVbz9Mpnz7Sb~F z)iWTnaII8sAiE;MU}5jKBa-@SSwOh#TNU(`XW^%&XoluN6YalqRu`MwMg8Cr7m5Tx zOjYg@LaO59r_|)6io;e->&?~}g)vn})i#56;jkxFxfV3pPH9d?q0XWV^oXN}))io7 z>RgD8VtM&*rOr*DF$OUmgYNg+W1gs{qJ%UCk7JzYX|YiPTju}nLvwNrTC14-DN+&4 zks-xIi&T{dAIEJ(SRW;K)EHqLe7_&JF&v&kCCT#3Q4~Q34W^rlShSAfcfG32(B4_8 zc`#~a;2IQ$2LlN+F2~AsyH;dSaWp`P9wG0h%n)XkT9LpYw)wgYq#5CtzE_OUi+T{# z(rGG{lDknkkmxv$n`7Ud>d-@+j9hzL2@tqVD$1$Tg}{s0>A@h@yRdg~wKdX(KKVkn5I^I4&uglxV%2tR@B==m7E)5FeC;VVj{+7hu)6! z_IMBx3`cuf=tPfWsE#?m#fX@QRi<_Qn%~G~q^e`M5(@_tIlmeSY!Db4^8Yzy%E@HM zKr@dXch~;a;7RJRM#_meg^Sx%+Zle1F1a!rRh!cS6M^ksIxrtQF}uS=-627U@mfMm z4H3y3rfP@xoDWPYmsX%slcD*ke2g12#lVjdQ@NumGEYzwou+`ye~eQ-$VijZqoQbN0V06zLRBLn)^{;R@NgD#ei~9gBa)tVP zR~Aj1Mr`9-NI+4{zp#fEEk_cF^wBv%Q6+9GxYyR?_M1Lcjn4J ze~yJgA?}nj$PB2|Hg6R`g)@dTm#ONi<}%0h^k3yx85!4|7WMh}Wt^^FIx3%SWZH`` z3Iq63j3NC&rjrwHa+%w7_pc93$V=ReMX~lv5dgkIN)2cO0VHDjO^x+lVH)CK9PH?^P8JFWeh9j) zxc32(Xy5zb^+M_t=w!y=W5(pdWz>~bY=vC&wLVa{X7solcb1j(z60o*WWfTdfLLHB zx8Rn>qQ#M~U13Wv_i6zn(>W1Oh&sk#W*{^`?M2L@WdRYZCy~euZ+@uiasN^Aa%XI3 zjK1u-EH@l$vw11O01f(mULP8j)To7U`Bf%aXGUC17=g-4^?H3#{e}sh_SzQh4C`zE)Xq46 z<2W3w$8ngQ{!q<1J$aIlfYItiA~!MmkdKzu8sKuT$Fl)z78;RMifW>Us;G#@WI=MD zkMGC#_fJt7$BhsTRKyv!ZW$&KoBBM@nXz}#-Kb3i_2*E;Lja5G5rEuvD1f0>K~!1Faxt zTp8a$D{W^bb0WG&bh*(GDy=6oYauolD^)Y$=cTaTS$fzECtK)k!zy&OV*XTXoo5UA zmH{(ZQ?%=U2(L!M6%KK&s<1CvaXZ@VFRZTW7>+}Qq@ropPqB)Oi{xO(vR^z9TWswg zFDE-hqmdJ_|5049(mi%3;%O_-$6@r1DZl;gR^VzYsR1V6XqC#BpBcO4-!$6%GUS#` z5!Vdd3h-kdg>gJPvIGQ#w= z`Up;X8f&NtbM6KRXyhXiR3oOv>s!vTZcf-L{3)N+2K4Kv%-ZnhmPb_qxrKzl z#{C0mO=hj72$MeN{z7CX;4nJ`Pjbs}d*Sd3E5X@xAp>9wh10x@MbV6WXAvbMrQ*H&lv*<(1j2%3B3oZH>&a0ue zno(5|EkPRrYla*Jt{=$D-HPWcxUHx%QJYy>=BOH23w2aAR0R<=M`k!zWuE64!%Rfx zVo+<&OjQkF&Z#P6@cn*&%o9>71q7xlDkAD3i%t@?lqur+J|LC#j?rr2e%>RcT_zOr zn;E6T`=W@_1Pl9-$3z$$EZ*kFUPw+NVbf`ntKgrmDXtj@qx`!2-GRytszA`prXVHDJ2=)z^%9RqD}7n*O} z8Aw@vS+hx5PRuS*b)Xe%Zt3t_f_>XKQ(L|nlJz!cx!bNg$t|=v(jeYLMBx%#6G0BN z?%-OS{MG-l<(;4&Yn4rDjG*?Ynu}@z(8cb$&;k8g3jiQ$kobOV>O4vpr(riUbB? z>Sue93#J}Sw}GPJ1oIV(FGxP`;~3+4qNoytOQ%QyK@TEm+m;Kz4!ubnV>m^9sj`AW zV2(`mU~PvP*7Fg_%(y<003%a2F>h8b&m5ir03ZNKL_t*UnGjjh%DKv-E2J?7W;RtS z<^Wo-XjK4vY*X4B)uzp?i}nenI~Fq-5%(y{7^pRTk&kPgAx(&)8iAQP{zr|h0a6yz zByS=m1i_*9DXIvVm_NrUIm0$BHUz|4H7@9&4t;|-0NeAAi8DpO}*Zt;$L(r<+VVJ5pZ zHL3dFn|HJa2m-jZqIfki-cyms^Wo`%a|$7JFwZ#Zd=O$P#j=Jth&_%b4=gkt;AZNBr{f@^;}kXDiFjhLn#vS} zgJCcspoyA@PZCT-Ev5cD;SIo448UByY}S*NAc99SGfs`rancfIQE$*=fdtLtNyG^| zR<(WL6b8NCp;^mnb*Yd86iRJhL(_Fm`zq5gdFbeV?5Sd=fljD1RU?YdBF2s?;IBs9 z7PRO^_JCk`QmHW_SiGeMdg59zI!ig2uWLMraYE&GFD!QTMTukc%p zz^SG;NW?LrS>(F7R=WFKC})Yf4k;|jzaJkt+XId0b$rF{t)a+;Af4J#KsZ9Vd#(eYxl!ofu*;{f&{pFX}H&&T8Ocs{=$ zgGoe8#dL1y%Q{;zR4@iOo$?-Kz5~;-Y{g)Of?2V(d8QI#bf_3qyt*FqO|YKtWZCA{ zz}cU0TC?a*$p+9Y@HO&J12&p3p;`z=wQT>F>(CXEOmr{{rMuS~Q33_BTHdBIsOFhH zRBH8vkx8A%l08AZu(Y9ThYhancvxuKy6sTy7i}X17+liXY|TYhbo92axn@6akp)%f zLsL`5+16c4sq)I62chc*_t#`S$wcH-9a!2D%x8ew!BrfT_rseD8UKxMF5ssCY(SI0 zQP}+NR9K0$_mvWDtA%L&Yel95 zwQfQNEr+8mZD8C6TiNPU*h+DRwQ@`&^-}AmI3Na}g~zM?e)4%hQ;=?9ug1MvMR%Rx z#tg$tH`qcjEjca_SYxx&6_|x?LQ$BM0B?g2mXnBi5FRq^`(Z!7RE+_buCT?A;u>RH ztVl;u1pL-yVnR}d%uxYmVn#0$BhM~GR;qGBl0ywdVl7qmhwN_yGAFcCHx)$HSum*kb)+! zux*}PtdR;tvtoGwsKd9GIzeH@PUT5KP?+HT`iwn==0S-Smx1}ysvt9@BygRE8o_&O zMiVN4)TGdgzs<2(DkD{!=OEhYWqYX`3}_5$9?vy2UULtrb0}84djbsZ&vS~XDTug=+joNIyE4td4e@t1S=tcP8_T8>6*~dn0F+kDMcx63 z7XHDEV1MHnfJ`={uv`UWv_)|AHBi%~sDJj}PztK+%w(!gtg+T&L&4HJ*WM|<2^d5& z(9@4QiJQBJ%*y?{EF} z=bSqF!QWgLzAo6>m;tIH;uBp4#x$Iex1jDd($txS*48Kid9I;wFoq}U;c^s5Aak16 zkcr3;IT8?51Glh-;RbH?th!kDbVCgZErFI-ItQC;9#hO;e z8dDN&0@D~MEy+&8MQTF0CNKsDF%iGGMztsCRpH#$#|w*+3j>1^1?Q)jf1d&v5u`vT z|bTCJNRkadnkaiuAPNfJh8hD6RY^M#xUn5~o*j}R%hl=UPGgBp`=s2iVd)&k!m zJ1>$DpkUBwZ43K80r!%dZBfrfAY@ltu8c&go45WkTa|VC+ZFnj)7P%u?i9_XLZRrc6Y_-+J4 zYtk__Rii-&gaL$N_RqqC_++X&C`P^(eXxe`*(b*`=Xr`wAVen2`1iEswSk*O;AtMt z!B_C_+Gm(eV1-4-ZC4>A!Ch#hWFuCD3$6s>!0;01_BpLvrl!+We46FXn?0Fy`y!DU zxC$d92c&v@ype0lT^ox=jSh+)OKNa^Xg4#L2D!ktaY5UZlr5}cUmfB)w zRh=ByeFbTFAxmW&iDe-)_ydLbzo59X_c|#A!L|L%$#a@gCaG{KUU0TRv3p>NsM;hp5g4(rQ^)qdNC`hSnJi?yC zm856HEix?xT)zCtogJ>z&F_JvOE?{NnYt2F;t-9z57K>>i~syh)Ufu4P$ygIs%xv0 z0h}ql@?X}&2UWzAs`5jnYwK8gx@fDgo%P-Ru{E~~cb6$TE0df03MPiy>KnQcIfZw! z3{WLf?A8|7O+%_{_v40Zx?E%V3c3vMB-G-Iys77L0KhZ1#ykcehuP^8bw7V0Kv@S7 zSC*6qHRRx;$)u|p z5_U?q8Mb!FYV#Js74@%tZv<}P7nki`B?7#X~#$i2|mD^Jys zfbbH*`-(I*Rfw%1l^@f-^IjlBFv?k)s?GB>KoNO7pHoy-{2>|RHjeTAJfG(|#`y8$#~61aCL%;8 zMg&xesTjQ@FKliGM90L4bI!S>AqZV4Mi?2Rni5?vcw8swvo@J>K0r@m@9Y!}2M+)` zr=8*mA3{)q3dW6-7PB`pWM-RFrdo*HC7}a3!?cJ%QAIy-;`7y}MQyyV)?G9;fFu4a z=RB+X@sJN7heVc2DaZbcRBK(zaMdLc#i~B6;Fx|k^Y+x;n03HP{i`y&Im`bwudgzk z?IL$rTCOg3FM9lzWU@DZ)*ws?99b1av%-~*bF1RLWTGSh?(-TQBwo5bTggjJg0;{ zfZ2ny9H#I81yu;s3+%8lL?T16WUS=h(kSFL!;c8c<*y-3g}@3d+#jkk-?_ertRYOX zt@AoM$O5Qyo~MfN=iSVFGpIU6dCEEEyuk-8B|U9Zhq@5?0Ee+s_JFYhrL8TCxt3wE zPl;5OQd)pJQ#U+e%N$j1J8XJN!_s5gb(pl-#8N_830M&knEUlU7~6g7Ktve@1wBI9 z@-Myy6}&@a^o({ZdMoJ+$iVzfZjmcG~dPuiD&-457M8wB=em|dcil`zJ7^wY@08?bD+-|qW zId8}P^W*dL^A{em_n=BPg8Nm=IL`z5kRwgUzC;Yd0iPZp^`>;XVot4-lB-r5mv{Rt|%^C zrw~y6OMR9TWkF>TH1XN8Aprmob6MXrngv_fP-YX++Hx+nZ0E4HE5yB_Bsm$r9MHJM zt=DgNk)&Wts#$jX-7Hhi6GH5tKc!+6Ri~K^W}n8C&relQmALHhTh0l9Z+dJ^E$lT& zq^s#@8=kLp-biS1Zx<1$hW=U&hc<)M}s<5r~nmis4X1d=GFq$&wJXLR| z64})OX4k@AH;Pjp%Y$hg$L%)8kU1fsW7#sqf=1A_kR`7MD94-X{izI=t%~@{N!CKv&K#b_7$4 zt}<8y$+to8N>mL(|5|W2p>MzbH4b#G#5Xe5Qr00Z!%pM0*xNbOpUQKur3E4|v&eKt zNlC5CH?RX`Yyrz!znwOnZ6#Y|4_LR8t<<4Z!j%&7Wh`X-SsI8y|Gcz~)7%<2Wk!lx zcvB4wp3n0<&&Tt8Jf9v*KSiGN{Q7>13Nx#ycy$7g2JJbv7FMunVr(;P zhtg=VqD)Px-KFtY6AhwNhi6!!iOY|mP)PnaMA$5%c{&I7*cVfkyrN>bl4ygKdeP{O zg#dTFM`=YYNLN?ALgRe+cD1cKd@$!Ai7lOQH4YHokPwO&;b;wAR$xZW0BWrefiL;L zZb|DeCq@_jE$>!8zrdZMm`T=9+yQI#G~|Pt+I(|2FA^%4%B)}0Y|VJfg7iweZjBfA zGdijAP_1Rc$lxHKL+p6-90^O3 zn>qm$86t%(mYy2vdSU$3$N3y56WtJy2$&g&h#8a>G7t~}z!*J&4+b+Tc9xH-A##30 z>n$jXeU`Jj;M9&eDJc~+*(F+hFhsbVzb#SwDu8pV0sF%<#^7r%S;{O^5)GD*< zf~r~alwyX307F;2QkpO~QWx$z`0m#1yRZsj#kHf}gZi$U#tuLIbH`a8xdF#-%s${KiJ(n$!MZW57JTGf4=?YIEABZinwo7ofdOKG?S8R#x1Th4+F@SYkVexYp z9cqRD#0^bEi!%dGKj?aSGnd{Y15*=&TS@=4CHusE)>JG|le%_Hujn1@g;ywRYQ$x^ z_^nLe`|bYu`FWn_oL{>qg-)&x7$8 zjva~bQKs2}h$1p&YB0SCH26=qW1RDJ;UggoW+XOI01-oxiG{BY5_D`w)BU0`)V5VR zn4)_hg2K9FeZa^g@&{M_eaQx~N-}qUBH7fr5I+0c%HTiRc8kK3M>baT#tLYLOXEd6a1AC*qFWEiQSSk!hG&)~4U~$Zy*c zU3c}&CT#D~S-TedbqRR!mvnCGIyx}*(lOLrXwgf;AT-Qx&QUJS3CEsc{R!y_c`hK_ zn#}T>hnNZbYO>b{uVSyQsKPhE2m7Bb4*yA6W<`psn(`_hH#9Vt17K6_Lrt@qS+)mf z*yR~$aM}foj_YI9)4G)=xXm3klNZ9a*t}s$68HJ{{QiFWNOj75d_T|gX`o{E{rx!S zNrVJ2zt3~Z6d~s$rm-naLX{w7fI8=VJRhF@P6o$u19CS=i4$7cmkvaGEl!pkbGWHE zClBwL_0Y`cYR1f<2Y@&q%3ql8=RC#0w*jzVOSxh&Zo@$F?-~dX7+cBv;xxG;bzc%a zvj(^B{MrVL&1%&_`&*Ng`*!FVo^eZxYqr)}t9eGejv(rT;y^%=k5bh9ia;ce)MOlE z0K&{DJOA$LA$Ck(Lh!5ws`UYTtQqP_4GvcK&SY+L08Qc~uoj;c_B)R(nWq3C4F(5a z7%D9D6og-ML*xCp>sje&o#*RmEZya`Y1B;5Qx`x$7LtgtKW zabd@rEU6X>hPd@L?_izB(*M? zkf;bcWr{o>&)olw8KMK{cC$Z=g*(#_hU}65{*MQ zv4g3qpX3F2b7|&?Z#Odzuq9M)J1?TkD&1bPkoKp4y8}wiQv`5k3fQ$;Ss1whJjeYh2li_z8_rinJyhz81Bnrtz>{t$mnmY9R)YAS0KWX-*r zyJ{uqW`uOyZDfUWZ8a2S-ZK`x@)9T1#_&OXvVDbt%LCCq*bI4!A%JG|N5*|d1l!=q zorC~0)c?Uszj635v@m6?s9l3naH9`$VrNO=CAiB5u>_oz<48)F#rR51?g zu(u6vLLe|koT4(%IW@B0RU0WIHhT~|N~8P%QV|bKi?0A4(2dRKg|Jz9+t@?Pb8e9p zk?$RiF?`9bCIC0jMex*TE~&1GfrJOO;}>&DPRDKBZ!{QAK~1e*OJzz-MlhdRd2x|0 zrESH+fDajZg`F)Cnc%oQeYlr1X*0iQZr~*%Ce7;TK92?k*cntk7odyZ-)Twx$7_kq zL8!~wu&P?ii+mAsrJZ?+y(;5$jpZt_Aan;=d0ky5)$dn&azK?glmJACh2 zX8WeLq{M%HjAd<~3Cq;bzB)=JqV|NGHlOoLOBcM*N?aS0jRo;T+xr1aj+BArnh~w= zB^Q;QrgVo0&5b2-31Xs@JTpfx*o-pW)Fi4!0u@qoZYG*(iY#qz7a-u(*f%}P=vHUq+*CsW=O zZ_cg^U*B|e&){OEcwJH6mM94esjfvJgDX|cms6NjMlAJ4DgF?BDyFFi?_DEY^Aqx0 z*#bh_Ry3b`^g<2e`=TBx2ulX&PuoRu6i_*T_Nq26;5Z>=1ZKRT+8;9CKv`}qQ}PSV zCjKc|lQZuJC@3l)K5E#jnX*2hY6oe@j ziO)K!u;sQfBJu}655@w+r{s?i5zq7d{`vy5V;p8GbGpFXz*Oz@*`#Z!aG}D@dY1U| z*;9IPVULK-j6e6jU{`ccndkFy&QnF0AmSn-oukB`jYwqXn|rSa&2-MGQW9rqMwaDD z>7zuf!_1ntCTerafG1ees}@^Xw>agi(6_|?&j+;Hkbs+T5k!OpSVeTQDVo5-TJ9Gk zB8i^1okQp{*>5S9XKH4GKNB!g4HI zKvCWKRt_=`1CU2$aW001BWNkl+${l^ZW5NbrPb2_@>v3IX`(UlS5bXbPfyr znmNzsL8wHJ=SleU!weBe1V4bHbsF&Y@NlV+^MT(}4wr=3EUG;(If)p-6ja62FK7&= z<2*sd(2&Mq&-oMs;&HG%^^|8BI5dRNCgLKPPaUx+o``1rVX*#=wHzU!={ULphn>B!OW&@(1N_yeL?`0 zOw`Q~P=oRRrVGz`CLY5D5fTP{1yO2MdK8fQS(BQfyf4 z1Xq>g=~7tZY4C*v_!9+y=n-0qX#NKyx}v%+Qx!E4h?G|2FuP}h5E4fi;PvNR{vMy0 zQA7cz?%iN%O`z}??zzRm9_(G>l_llrh_d!5xKzkg6_AkAQUHYPWn0+rR7}OwzM49^ zcfE)_VtW!{0c9$MTBbl>8)usAMR%XP(>|cL{ z2NgX-sqEG{{k@PBHUUxr>%n%h)CP;$^Ud}OZ(kbLIj=z`#$Fh%IeA-hhD)x7X9gW6 zn?rreGB;M$x%K4i-11hR)#q0Yg9QJ>eg9R^03$hfmUdr6oF=7|b^}cV>DtZKW zMI;yiC^4-QcMqU5a2<;HA?#z_9(o-~AT=r% z3cke5fGg~}mVK?o$E!Yx(As_3;!`X8b(u>E2}i4n&?4X^^f751K+rrC6Z~x!tmFle zyV!^}Lrtz=R$*l7=!+`tLJh~Hsu)`>Kjguj?f4QlSG`)g5-9S&4MP+Uo4c_$5#6X9 z11cg+hi9WkInmY3Bx7O_yq+`DDRr3nQ$Av)1))LGiAuU4hq#O96tER};lNdYXp$)z z@sbc7ca=o|04loRfZf6npED&BLW6o2EAYk&Nmm}m+Sdx{o^Cbd`2VFG!uZg~=LDwO z)gGIPZ1=)!SfMuggBpOix_pcwD$`SJVjzxPoe&1tI0aJ`fPVGJbl9Mnpe+5B>j|5+kzgq;C< zSsEskPPe}-3?D$PE2z$KalbO7Yc^8Wo<4LT2_g1PnZEgK_pYOl z`1{*;`CdAkD#f7)tGkju4~&UC(vze>Gz zx;b3d9xnqig0W{L#x#H7NzfayoI`Hn0RJwdySH}JEUzmSq9XEnz&yrsjm8@jB_>`8 z%6D*{KSLs7s-qlM!LbT75Chep+?NRI6&tm&u@^xQfwD!Z$&p?O#*r8K%Zuttd~FCT zU-4vd9ns05iiO;bWJO>p%<>1+&6pm5RRum!RM>=g2Mp$61HhhYPvZ;O(2~ToUc5gMc^B{MZns|Yh&>K<^Nen3U+T`epaF>1#B69 z_AVn*lMB7c-P(R;{R=FprZtsKz*~+(H$!D*iun&#F>oJ@8B_* zj~nwhje~B3ej^eQ6=6oq!qI*Hh>#;)BLHOf!8v90hpJ8$FkgD&al5PPd7ftG?7(rm z5wYmZ;UI&dZgO5f<*`q77p~kv`70{L)Pq*#WHe$jV<7azRx=W%sd!F3rx;>+hb8@vd-&;fXsiFkQ9ifEL)HS~%Vm`?G^QV9(>3RQxoj$8-2WA`<*H?@^t zaYMeX@okeSwQt9t0ncY{AAA+-bwHRIi0?MTn$frG-Vk6Ee>n$Bsb#|jhHwop)&XXA zyN5xC^{mv%n5_m*wU{u_I<$)9jUz**#wxAFwE2(kn{c2PU5G6Qz-vfifi0Sjw09h>P0MGLbU#kU-YGr9-CSr&FYT1w%5X3(tH1da8 z)kr{z#uz-9&?3kPmvkUNWv(RCIVYMTfliroicD}&DlmBxDd^>1j7PC%8*Wb(&4FZ@ zsRXo*vatr_rfPG}d}Sm9LW?@}8U_r>p=diq=0WW87E#T_5X`8ONg~}u9XL%;1f+2c z9y~bMQ$@alW&;dmR@jIt?(D+5Y1>EY^;YTsTs7w|hj*C)u_IVe)fcux1L6ev`n@Ia zV#^13Uvb5B!#X|J-OV|sO?w+;^S*0vTcQ!YC?epJPI3ABFP)6jwqpX;f~cds+KC6L z2J6j7$Q2wSuZ!ye{cZhAE3K7m-G(%>|uaT_Ua#$Oo7b=k| zLhCW*Q@+s;<=P@gFKal(N-8XeR#VcT%C3la0Jh|?neiZ?1K<-8Oeg%!RL!Q8`nFbj z?y|A0cVlT)^%aJ6P|ZN~>+9$DUdc=jm}*-WVgUV7+j*(+K9JVWp0y zwAZN7ee+@}7l8qYnyMe$G|u^aJjLZR(FmtC4-+kA$z!q-$pEU(L424gS8zl&0(;nt zg+sqh4f~B)u=l_i0_q}`XSAF_#7HXG<*{}oBPxihD}l^Zor@Uy$UGg8i1XZ1XEsvm z@LXY%*!dPFpN%Xz!fp+p-LRKpFstt;u^6&v;8a{Ob6$cCtGK#Wt>dFQ>C38-_8v4K zG5$vt02Gqo8DPX8_Fv~sw2LfqqPyF&uA@y|$)u8!N zp!(md8IlmpSfrTRBxsFtmy3jZPEH^;*5qklkz^QI?UrpNHKg7prr9-Djr4A8M81^* zqMizX#N6uL3W*PwnK=BHFf2?RBVx@7ai!@%Ns8hqNxH4i>|+48-MEONV(KN7QhW8p z{SA4M8WJDFp9+gDv^I|}ESP1+G<2?$Plb`14aG#oYz!~KP069&G{{_lGFwWt z#W-E(R367*LPp;RDtIz^sK7fB)bBtd9D@flk%+H)NOP*+=xOdAvX&ie7uWq|eTKVj z7K%tvxMAo7@>~I5Dt;h%mt6z>mwyM=L8vrvgC6I!gi|XzaEC+1npPJgBRY!y_wFq> zZuaF1iJ$>_E}F2*Y_bdBi$t2N3~RBo*6kEM_1VDVj9OH3R37k3to_rsgl^Y}oeq*# zPLx_*B3XXLvRE>OIQq$DtX^+-H~ZJ2oKFvg;CAVg61B;UjkAO9cFNMKT0>&;ZW9*N z0Sw7+2&QeEVIk0u1XTb~6E*#zrXs)p_Pe<%5`#eLWSEqCqNxq$F~&Mzz1UGbRUePX zQ=VjiNHXW`cK_So|9;%>Jib0Zf86h%V~j{j!9spm^_ocq&k<8XG_~eHghI&7x7%&n z(_|XVDNi*)W&%2=eLd$XhQ!D*?5|x@&I^}#iRy|)WW<6 z(VjaNiv&LmES-$a^?~as$!=;5YXJd0R}N&Mu|nxY=0AW-{+EE?*^^;X7$ZL4F>upl zM3aJH;PNR2G(vu4qkx~iwj8wxW|BG3W+2{3FfeeNWJupJ^rN#Xtxn4g{iadEuR`$pq%;|EZU{_wxZZk1O(%6s2gGM3yAjW7gmv`5r=r99$%EMsTouzu( zMlSG!&%6L2BH*e`7CFqq^y?EqAEF{tuN6AI!f=hs+nwW{|IlbfH(iBH2uQ-T5ytnTU_c zcnlKIQ^kysR97H(LQ)AC-EYlK5>izW zPIzxx-l2)JA+S{l04h1uy-YAL3M@Vd2^}&DE*J<(2}I6=zr$-(YPlfrx)3fYrA{%! z&9aAp3fo4kYL&KEx>RhS_7;w_@o%$SEL8deHl(o6(=IVA;kbsfXn-5gE8NW$m_|{} zCwp?&jbjc_Ud!&Sy2_~UHsY}lx7h$y-CRcMHw@=TO;eV6f9O-06)ME1>z?WAIHIL-gBqqtwh_6){xWUI0W4~34|^pBQ%P1MFRm4 zVz__Y5D)u(s(l*{Vn7uK;``~nMz9-yAO{(Kiqy~#%l?#KOtv18?N^(o4y1@6GF-VV zbyam-u8)&7YT`&|Mns7Op|xGFR2J`JU1aOZZD2ZxR^OG36kl+-21`Z7YQu}Y5t>uX zlsQe3lx9NbWswg}Q)`0pgRTlKd@y+FvtPY97ui!@J!IA(_@3_LrEa8~m_d)cD7Ut& zKQM*9ou{SeJQ09l|B`D%Qduc(h*3GX@q-9sa;p6f>#@BX z4H=f~FwiNDM!){aFzA8@8T*D7o7b#A21pcCm1H#?x7*|Eo0x-Qnuoq;_4r8^c=Dz9 z!OYDlgzM(PveZ6Xy_}JVkmf@o1USZk@Dw2&;KddoBQQlPiK^2T1ri@nV6GNVK9qz4 zjZ@V%*S?L=usT@s1ql}m9Qsf*+rd=}u6n>=FQJ5xEHZIT)l@W4)ffvhW*R&gklOSa z+MWa<2T#|ilq~e=;K7Kld-O57&)xh*w)mGI$a2iD8B8@!S0E?V1KH3CU7&{WpNWI4 zCGf17doM>S%6XmCo6Ra=E@Y)^*PSweFAMRebHdhAMl;s-(e`Q#+Bdm%IvE-HrHn5q z`TDvqOZl!&Qg@SCdzm*zd|YIN6#^>&$Lf~eR#<;-RF3VIl$e0FHTphv-y;ZLbU28R z9d&h~p`*xk1~Y9V>zay`w4;(P%?9{fpAA9xPh%qo6z#`Lz@>7A+UseFGgOprhw4x+*u#@$^K zA`+sYs6G(#k>~-Yy*UZ<>7rC46Dy*b65$|F6eJ_!ar^jsJbpg(`wXvEcy~&xyT>h{B9hqGuKA^G zojsbNwj7%}vJEZDL8G!BxjMUPDmTz}!u(>hwDUP)e`QU@vLoFwc@ZU1B71o{;WeVc zKR^RfX+MS)&LEaE?jmHeYc#qQ>!92g3Cng5fMO#wMz>Eb#>-;Ef{PNKs2z>)#SOHB zT^WdqrfpN^r^EJ0r2HpU?NFTr5ou)|sW3A!cc)C9p)PE^fEL%*fDm&CWT53vt-h+X zXvcA^4$?=SqDzwG;BVUyvaQ3%j-ZZTpH?|o%B`~BtBQ*HyLzD$VX6uYe6&Wl+wt|& zaXm&vAD&@I^J+OXAt47ux3M7rup>zNtfKHE z4anr*t6;>ns+dQ^C#H>%>j_6ym?As~YvU2{hiP_4BW7(sz z2=)kWDB5gr8&LN`Qh@FqL%XKaw0+fON46`vGIep$_6S zT4MfRvv)D3UCd6)+XgMMI=nGPyN0~K<15KH-$dVNbphW+&)3s${9CYh76|}W&kuerD#zg+cOD){|@icHC~^(3|@C`Q!WdFV%BSj*8dJ z5O22|^I#rC?8B7-M~ER1kWEN|R6s;UMR?G0`@G$5VJP2)Om&BXHKXOe0A2zJaL!+l z$15&x47w40+kBo61fE9!`0eZe{`=40zn@|(CT)if$x|&EG5ODRGm@yHwk(~4d0H?uQpYU?0<+k@oTh8;JKtjwOXMXb($JrNRF#ydtVwwf6-v&SB5z;6SuT{PZ4 zLf!SkOGMJs%C}ad=poJ?+xbR0gDZ?v3d~lBv~3O#TwVtRtWfY?XJnL{5h3{51Zrl} zbcz7taU9Hap63*aTti#PmIiU&%pM+CQ8{suV2FmyU`>UcC72gYTo5Zm=7E6JM1&$1 z#1LXNK;pq;%G0-shJxvnRna-884$$CvpC?3?i3!?FJZSCwTgvpkMWX~7E9G^ zupfH!JfAX86$Mf?c|N~>{`_t59j5)ifB*IO?}tW*RZb?y^`X;tu-n(Oi|{6F?Bm~j z0o=zHL601@6B0!1QJCg+s;C+O!Kh!-ZIcMs`=F+}7j$|^g(NDi_`&k}>t8%UY=vX5 zmjE#rn<4~(HeYN4p!_ZJM@GDIM4J;>M3^~OkI0><sIC!xZQVV(97Vn8C@fDX8%x^@A)VeNrC3{wgjJ^5Yh4bY*%jlW z8e)sVUWc&PnM843;odJMtk4Qq2@8pX8Xa~5Ds$;Ts(VzVpR+|b}bJdl`(0Z~m=PBe}6g0&lw0C^ziMq#ln z4TuRTIMC{^%+@IT*B1U+gnusdNnRQ*rp6xwL0}In3$a}$YbPP8;=(dle02_x`aFzO z-(A&kDTChZ^;Sp=bcyD_1RC4wLX z2ff_ZE~mSucKlbVq5n+|7A9uUiZg4Slm>u63Q~1Ig|8*2eLKGWG>A+N04Cxwa$fZx z+`Z|RB*&4ZDT|tUWF|lm?0WxqoNf{s?xrHrKV(r+^FVd?3^_9_9G)r=Ok_rco2klj z?{{;@%j~>sTiPD;Lzm1N$8}*pA&m|ls3!Z!1sqmm5d$DIFy>K&;w3@wO%xF_ zrG47mi9vvthA~rXDWM7C!rVnbY2me)mRQXK=*`{Zy!Zf184|g+*CDUK%m${S4jLPS zB2zj~%_X$M^ZQ)v#WcnkgDr*~G{!(iQ(zu;h{}i$HpCw$Q%nUB z29pSYqhB<2-WFVA7myM!yQ^#L3T{wOweBRJrXf-2ygPH*g*MB@um%WyJa-F=Zk=L0_rM=MYPw` z?|@#FCTjZDVj*OG`>Bevz;N#UmMK@V}REJyuuoW3K|3M|bUg1lJrq@SePgcQSc z-yWJnNji?M57t{fw*RaeyR zEv|wL)XP1O!i5wWC74C2j^;PmV>oijz1$`ydYK*vM1&u!P9i(clMhNg7HQ=^sfrk6 zqB9{gYDm9qC6o5}4W#k}Vqs4M=-(b7PUE3%F|K``L_Tee6-lcbx-*EGfd?Y;U_um? zYXS{&9{x&((Bx{1fk?zx!&~ki0C4PCh+OYhoSRsC7ebT}rG}_Qq+fvH{~f7L$KT^N zt%5f5hSldaxp^8=)(v^bCVzwu`>>1PFY;*O}epQqzcY(&ew9ibQNSrYvtGF;i^j) zu>@O{CB4L31tAZ)=ioz!9>@9d4T$*f|Cc>~{v`A@5$^)rTYKsqT0xDy>7vKS+(1s-@U7QI&&q>^@t#jO4P~cOp>(VPE3bM&gFB#<$|^zvk=m3^PsoF z#9^$qY0oqb`9t|ZHo;)Um|-LznTkc-0)`wTflPbsaeuzC@*_T8vt*?dHZyw@^`|FQ zD^!wGE&ekE9~KfKo$pLtYDnNrFAocfk!khruqus2c@ft39Slvt5LKXD4*7EfW^U*d zN_bfOK~-wzljYy9oAMCAd0h-hkW?60a?M+IderLSEsbr6YZ$9zrl8J3oCu|JiU*t9 zF|ONS+@MWgg1>vF4G>fX%Nl3sn)P-2WBXgY&Y!brfhY|_;r zdsn9F#NcHTDOk`Fz$qb^p?Ey$HC;k*&CA<}Ip-L|n#xrqtR^bLi;jf8n@2M+i8Wnb zj#L3n#YhO3aUnUvcQzf$r5el4J!&w!@r5%mthX;Jhep&;H6Ae$4 z+E(1LJ^J0YQ|`_ZQ%jnVWzJ!MrA&c1zkV*y`_25mp6yOl`Illw!<8TH4T3ppFJvC7 zGq6m=JPs!;XlOFxD?c8O@crliB_ilEs?-&{>;K}{s5{#X(f141^P!!|5ShbAr zGq>>)MzDrL0IWb$zXy`%o2xZGAcTRcG?>R=f%7n7Cm|IdRB?e%$; z0Ew9&=eOfLT~XxjE@&BI4sEXEj&fBOvs-6_+je4TXiZ#tPvmw&hbpLEuj}*k_49dM zlSMt9F_djYL^K>(P*_U;My}TdvA4xh(oG_V$16m8pJ6Kr)x#}Xa@oh`oIaf*A~i)b zLNMgMzIB007)w#f_44Kb7QtX7l%c!XYE)~rzgQimkk<+wcK_*`SZYdGyt*=5@*3w! z`7d);&2?S=MMBase1Ywbws@$Ch(;@rArV|;u9VIGjSv;PfGm&!Y7&1yW(CR%8NdkNevdtHxxcN&* z63^07ipN8nc#bNf>EJq9W1f@k^;)D^5r-A}pDxX*qR`5Oux<6w?TM zRGC8arxcH_gD5t6T?RnxiIc0Y_!0u-uwouOg~oaCaUjz=p<*88RVfSE%U-&st=oQ-jbWv#m=Tcx4F9x_0|3O-`Lyl~n)7wZ@XR6+5t(z&vT7qC^I?Y1=N~RP z0LYHT$A4+(5`?w%Z zTNZzWeK_svB1Cl~d<+&atrE`kV5Y%NWhqR*rAqzJ5Mu8(%wRELNRHl!LWbGq*Ugp5 zm5M;-;{gjNvt=5FVbHdHak3JhFm6H5-SSMhw7=B+y`cO>3JrvvsE38Zaqt*NUM{L? zNQ|bjLVyYs=9+F)fzSi2omNm8_F1osf$L`w6isA4FY}CQ#Ooz01W0NiDNK)oCiVzz z6HK(sSOCn72BYouFx&_#NTHiERL>n&P+QUHW~L-|90!=qIaTC1jo3`JGAE~grznIXAjb0fCJbf+%rbo+y$^J)|; zqbMk#<_RWwBM_C%B=QJ6#>2dpLSKSmj!P7hL6$8$_JFQUy@5@6w3~R{_)=CBzgg?O zW~RnEs=lZm53&lcM9R+G(=iNojFwg04BYn|{+ekJlNPh3&Il@m8}6KIe_m;&Y0|#82X~*Gnd1?arfKPffEC3HgMF;OU$6`gdV9)(E zFuc*JyCpKSF_3656XErGUDt(XW`dsE>PJ{1!-*IX#(?uAP~RthK3_yY1WYsrUsF_O zs4T6jmB@}|@3o4f0NJ}Yv@WIsta`!b`&0iB4MfFtp=ygh3=O@imx)wnaVOvBDp^Hc zM(L1ZmwEu)mv2FCB_tk11DS{zGx%r0b5g+P$oOQNN_^t9p3F2iA!1L^O#hw_7E(Q) zZ_vtA*j~z9XLRvAZlJ@R>#|FltVJBRnE`bcPi7@#u1m-+wrBXA-Oyz;+4xpg)lvkg z8Aac7Pkp(Y2ftd~)ex?}O8gUzdJK6YD6EUMF_Wg@PYnqFEEnM-C+8xL$h+<1JWl{H z8)L*hTd_VEUp){8d7+8NL+bv9wz)-5-q!B%J7^ve?MMH0^kE zqMNaCN4dprwMc;;iDuCSp@PerEnI`2#8=#%QI1l z>f`YVsKrr|kYL?=oieUBEi)iFCwcLk!Vc|bBJw(KWjCqn^ZD$@di6-)K`&mY#N|gS zV5TNs#9L9>D;mVi#Kh+%>t;?$Q?zvk!`~htB#XF$dg;yl4#Nm8@G{xD`r1{^vec#M zt2jmDGQYW?t#WT-U}lBj%86f1>s{#9-cpZ-!@BUamg~3uR~A5!^|AjenmuJe0g4ZA z7J-b46`e^Pykm>Gio05zLazv`&aRvoP|(PRay5ZKDH@>ga;6}(Ly1s>uduQ8wgYRb z?rg3wg2qAANP%}=;=4pwRf$G%+KG9LL#|h4mU|Ml+gdx{OVlT7x+*-tjGHWWiLAC} z50k;*pG2?aiDa+q^B;fw_uqc`rt``PnmY2!OBp6qL?$+3%k=q>CXpf|8(lWl^Ebm! zw~8d(?s%Ujw>c9V+ke(PDDL~O zZ_^M%GYwUs0E*(;%eqQ6KqGAH9k-Ujgg43;9zb3?61Cp!&irKc>uBg1BaUmxO+TQUS9&^hKj&X*1I+yMF%aBuOYt$QfPo)0J zH5ucy&dtJg5Y_dm!!^{7tE5WunHALhw=wKuy z8|TLvi1SS6!!U`ofTW<&u03FFfx{oLm$to}syd_SfHnWlBwPazQpmi!HNwXgC0Sq? zWHMD$?%lPo7bAd<$X~kpJ<1t<&@d82aAnOHd>qHTE+_JMxJNLNl5K8&MypN{Q5Cgo zN=4|VQIDX-!)AQ0<{3g+8zfO8@;hyrny`DEz*J=lK_n0k;+I`MUU|LbH4Tu@+dc8#Eaf~Vj-J)Uuuh%7Wa^)%W@E#)w5ky3! z5OMpDI1L73LNFp+fC1Z(C_QJ|UDQ@3$c9m>sTpOs z5JK13VpCiZm!38G1XM^ZD6v@%D%SXyR^a^_pEL^swlKyUz&6-sHxFQ~1~4UXxun20 zlga~c2p-$AGC@{y>-`gRda;ZhKG%j6Nxcp2( zjS0u#Ij5?iui28PqY!gt_m9X_@g!^jQTcp52k{_QizG+eLen!0Lk$s_q06vb=VPi6 zE7r_BA@aUXZ03N0Tw_Cs$2b^H#7osYAPf-6{Pf9KFfuV&kze7^H}}T@k(rHvo}&?& zPocnIhDcdmAMXMT7pmV(WR$|yY{=Yc|Hhx(K6nbvh5v^sXpK<=E#xj4A(5w}M7tMY z=4ySoGc02bnp&CI!l=odrP%BbsJr*?EW6M|D-jWote3a_)EccTuB6RXb5Mp)r>u$) z)VhhswP2wB8^j7yL<6o^nMFuw=ntNX7LKIfE)LvJptn0QQ#R7h==MfIgB9HYfVV@l z1pCcGSgQ>0&zxOzV}5FIQ+-+5%b@t_fVgoW)z7*h^`NQ+&(6sZHG0{`#lAV%8*(!d zp-T*72!@1#aah+!b`H7LAa60==FL%pPxVf7|xg( zW61R~6Ngkx5fF7BGZXM}5{a2(+L4Kvhe3Uv0@1XURVQ8wyOCO9MJPq0Nd_+Ul$YTC zXU9z|DFF6FzL44JHU(KKE`LWIJK=i36$G2b=;m=`&p;d?8`vZBo}GuzRxz_qv;iw$ zokBz1R_ba8Ni}KsZR2Ab-yxo|Bt{m$<{pw`Fe5 zf{0#IR22wW<+?692?*76sxWcQ-uj)pehB&CO*2yC$l^%Jfy)9*r$t5#M0_%m9`hd# zCx$84bT!ZGbd8%E4hvcN-uK?!2)PnbtgaaO9eFkQfZMC^SSvsk)&p@16A=Vv+>JVD7`L zx7W9+e!^5Jj%%wGpBLXzYGTYfk(gtowcvlCW{T#kRU`{M!_sxZ-Tm+<-tu+sJEbCT z(1?!l6-_R1>$?yUBk*-wOMQ-qk8p+Ov^xpYzxwan1W z0})ha22FeAagn7K8p%xD$kU{Fm_y~9U>0Bm05H(HexF97nP#Q!b%PoaoyQHa21uGt3xp*NR{n zUGqz(ZTiyM&Q&3G?Nnue-pvh_WRsXJ%gJ%varLUcbxo1x(I+Rjh|Ojnv9B^AAY&9; z7#D2a4xlATL$&;C%LuYN7+|%aYsTmEv<_^y7=@}K-a&&oLPXemrW+)sA)}2-@6+|R z|2*JT{SDT4>+1k0lVZ*-njwgRTg=xvCXY#$;TG)^8*l$=UC;o6CpC~9Dl`jG9UUYAT!8f^Gv z;`2QGJtAg9A|~sTyv^ED0NWT~OL=Q@`JekVSC&}ba^h}OQV<|$7a!~);y4awMua)18HOz`Pdc|aSZ=aa6;Kt}0690BeuOQacTYrjRW$(75`?P7 zn*o@ha8s#t;T55bi!Y8APCnP7daoR*d2YxR1&i^cWn@G(mPG>;PY#aMK}Ffn41N~` zj8rk{mi1g>M*J1Eg)1^O2_=80RmEO^44L99PAJi9Sx#$dp7Sa8StGpS-NP9 zCCYmD0^Y8GNm3B?M zm$XI^H3i2TdDM!EJYO$gwGADJI7OyRGaw{2eZ5>hp$2f^0n7rT@vVrN1%R9g8%)A> zTCUnH3D2e(q5q@GY+**yD1reEJ8 zGD_A%L3;a^6mURN>Cz%F8vCQZWMX30#5-wAh0IKne;)7=D~F<)046)uZ{l zrGz{d_VkX8_PQFA-J^DgovejGzQF9zjp!K&K(RPy$)(Deh)URLMk)jYRS`2}K8aA` zA@)|pgNC8*BwPGvN1%Z<5e;sSRn6ckN;_H9s)cxEW{(YU&BT(8$I3YuTeYw#oMy<3 zKvV@nOW-W;#lKa(MV(ZsI{08Za%t`qD-w6G?8hq-!M!o9;Snu_D=q81my*oHA*v1E zjQ_aiH5Kg1{9yK+4N(CE5xK4>37aah5A_&hO6|T3%eVU}esiZUT4BozFj^5|R&=g>0uY&l;vKOFQ*??+h+&;mA_Do^ z?&dxOWWX?u5D`qlb)zg?{&5S#z|OB;@g4pI_GQ_Y7=2?bsVat#RK-Et|8#VFEJ^z_g_{8Wi&0zS)8D}S zh+Tc}-zsKaLP%@cm0E_aKH}=jXrE2>&%zK^$V!J@?HhxFAhavP0mI;8qWV4Dos;`g zGcdQ}nyAVYmFv31fQY7w|DIDkbr00+no~ul+BM}H0w0g+2IidCbu}*tu9_h)&|S-Qw6mzaHPUn{tbd*UO6-AX zHL|Irxn5mp9do2+Vix6KvSt7nA_Q_7Upy~bVed)uG-fnghGg3cKI_Egg(UEVj4S~i z+K%KB`uCU`iknbFT8R<+BU$GY5pS}6!`?u@9XHUHkFf?SM5M;1ziyh9x>G;@n1{PJ zlfw0>W;_PWsaog?GUwBQiD{XR?wUFEcq>}`qF9FkGZW^U7ZrKIwsOD>hJfdJJdP6~ zvNg%=*Mt*c@G!n=i_XM;c@N?#;yVy#07OwS0}-n!aO)~Fp0?TRuv$rg3Q-tTewWj1 zmfA0X0!dRe?VUGlUIaie6P;oNXw1Ze5>M&VLlK!UC#j-ws;e4i0u7Lk|LYlBovOv}QB*Tqb5w`~^M#>^}W zTYU4$+V0A=1PA`7q$RbSm}OcQI`R`DUI}jmt5t1TYK>RjgBXuirX$>Ei`E_F8wYMz zIuh)K!Yr(P#bn9Vr+PBx_o4_DpCC z*$~)3XOFE6&8Uwuvw1~0i%5>%bo)eo&f$ZH46|OftW^Y^nVEnXxT#lEb!x<{x@k;R zr|Qq=)79R7n}1#xAIJCnqsB2@Cf>umZ+q&Fq2Fy=5d)$C6yul*q3{8?f{E#6dYMj- zBDyXSL84)EUQ@8(&1-Ryt1b{v=mx??7cvG&yh59WDMPO5Nk){ZT8t6ZApQq;z4=6plKq(~ zcqjyF_)~JHT$$Y)iV!GrvjQ{L4aRjAQG`5(W1~+}y%-ByM$mg}y#s1XlP7B=Rw;M| zJ6)>fCQydexTkVK4cl`?Ejv7VHC0nP#yEHovRs)+zpOC`gf?T^QuhB`JS^OcY6TP` zRRng0qgW#Z8vzg^1EuB1Kn>>9*YkS4uJ7Z)K!e#_l{dy1Cz&D0OT`nh)QrFequThq zLS$dG$Hk{Dsz{H$OD!<8BvJpNcrpaLTia~TiHJ_o$xM|3EoA| z-lD~`DH(pXyrx!xW4A2}l$GR9Fi}OS+Rib`0Lr#G*@)it?^sR#A|wjI?#g)Wk=!?k zL!Ksga=RG>1U_XSDVlDt4Mj!*+m_c;XHmt>m*m-r-BI+lGZQgr>NQ#ou;CwCjLkB0KTI%aNV9`h)besz;f%p3H)z~R( z1&WoE2bpQcgEJtQsJBoQftc0kgnSK}o^*q3;%3<`Bp49^Ga`57Qhc1MYBNJ)h?#st zT+u*?IGCwHQ6O2XNk0d5f_WzU+N!`buTdzT!rFkSH62)YcRSD_5@pi8)DBr(-sYv& z*T^1itmg>%GF^7@HHpZD&baAN@oFG~Lt}w7wRye*GCr9H0j29M5<68*2~<^Sx|#LM8(jbmc_;GyTHrX`{ke-wpa^- zt(V9B1?(n}eO{#n_FG#~^I4@?Uo6*)@~`~s|3K#TzxtJ5PUh+`k9mD9mq2eVLC91n z65(zbWPon<%(N#Y5A+Ja^&Y`gwL$4m3{tEPMnq%q>xClodc9t+YhH88e11NssGkz5 zc3o4|ty(CepPx?y80RsLWAI_7b6zS!$3c{Rek!(C%;r6i0Gz7hjCG&r6It0WmYlW% z$7K3w)9XJkY(xTV5v5x;=r?y|y?O#bVGP6I6ogNgNJaecwiPTw%xNsyK}2rn9%F!l ziURtcrRy1iJY5#T_H!rydPzv_+uRemSMu7egb$WcZTcoKGcppYhRw$FLHu`BD}Uu0 z=3{}9S|UyHOTYv(APNBHoY01=uCEnU_V_CRW@7Rci6O$gW(KY_xH?q}tYn}# zBi%EGt{x=584HSBzgCU7qt$PL^QN|fE9>8FK;#Gl$|Zd{wM&CW2)Z&{tEhqqzf>`; zIZ7=25bwnE1a@UwBCMrkz8>qnUNC}cms|&>+0^^;Q?x8FdzuYYMB1&!+H@HHN9QCk z&Bn35vZh@3r&x{m#3S754yI0()$M5ZviG+Wep3U>bn zTaqsBWI|I=N+BEq1c}WQkqHSvTviX{AU7HW$aBJV>71%AknoTkoi$%4B2&BOj8`C0 zCZ@D1dq2fQa*4laV9;{nZ(p`%@FHUhU>&6fzBuOoIoh(6u0U}&rDUEf79$1;lIW*3 zVpr8EbLiv*COOvq&#pvdiaoNb=7iR&4?|N4b4}&?HGJoaUBY;X;SHp@(LN0-u^6`x zcfbG2cwhI#{bsb4O54v;00AJ(JTIarXP) z+*DH#NrB)*Nzg47qfWms+zbRNMc}s__5->{98fF?fgw~VF$+XIh^)4J$n|nd z-kfv3p4aE+Q&gwel=v%#4uCI_*X#B8_Wk$2{PnkAem#%DnMXLrIF6&}bCQy1=kjQq zk>p+?R@YH3R=UUH&n-+SsH#j0ppvTEB{oeg;X($WqE?L@Sf%~=V>ag`B4*4o7DgZj zoPDo3z7Iq-=D*+9=TOZeAu{X7RHpfApXc4Gb4&1M$rq@S>>$7NrliRa-J{WUsdT_ys;#YwIK@y1VfO;G zD&clfnJIw{0taCkf}lBk*6W;74`4scx>YJHcq^Dp9iW+u?#10O98APSM5+L&2OLDh zDs>l#h(nPU2D&(kL{+XZfUbH4)YOQH25Vv5vrs_h+YBFzcf1OSB@l514}yuiPY5d> zL;*PJ03;$L@)9Aihbv|?2Bnegn%X0ECcdfoWI1cDwqt$Y(729}kbno_<$8XMCvT;i zc;U~D3XKh3Z%a&}F?j5aM_(vsbMRhI!@b5@q$mNsSFQ;N+r>*O1EQes*hphb&yXLv zfKjxbicpRhNi~!-y!jJeYbY& ztUS5|!@vs~U>;3x`fhUgXGP`w)23hddDXiP-7n2R7T$`m{Rh|?V_)d%Dxch3(n`BW z2NWvwV#|nh#Dc2@R5e-~6%l>CKA+D|(U}?B5s-XcqI2pL6-g175)D7?zdatm{rL6A zV8ZA1}N~J3Gi_)Q9V+ou&&imI5S9Dd#c+~)dB$J`hWe4s=$=RbqM>=?d$y-R#oUL zp|$KoUvSXoQ0;tc^yyyIzJ|3YhTUJ#kHs|hRr02BaCW2nr1(Y*7hto_K{X?0N<5d| zxWmvQB2tGGIXS7avSaewtj64N% ztFCHmvc&&T)&t~P7`l9%f+OPtuZ-O!L_;2Y96SaOCd7leL>R7G_M?P(pj!&W0H*2m zLAq~}rVriB)GxC}M0CJ^^9EK09}i^4cEXb7AOZT1ya_}C4;E0Bu3OR+twq8Dk%*`W z9&F}*pleL7GmeOf2l05jX0TzSn3xB%e@sLmmYazvFXBB0qL6qyqRz6b_vOm+7h*R( zY>CdfD%}H>@!h*uEpOj*C4S4csZr}CmU=zZc}A3Kl{Qr>O{an)5HDlPo~e>*+7;XT zCWrsRo{V5%l;w==;w{|58(UP;veQv*_x3+-%Q^S4h4&eh$wfYta|JG?x_Mn&tKj_K zTGIW0Qe*uu|7)FfrCkfp4Ys#x5AS*}Lwh-H_J!IBn-Z&&UkYJmV5Wk8Y^a*gtgh#E zUC-C+^_s7jT(4p7kBe!U103a?iU*1DokVg6xuBS%`Y995%fzNHD*`V> zEsX%|f@@gn)WXsfB*ta_%ZZ7(SOip4T164nr=H*(fITD9tIHY(mz6U0x}jUn1JwxC z!HVdUsx*(7PN1=s5dnfFN1*uE-#@!*5WADb8Zyh4={xRRUyB?(+=CK|%38IqtZn#m z>RI^XHkpb^pD%z~dc0V=Te2+UFPJo?I8j>^e?28?V$6EU66*)+MX z*DGQoWQL7DA(uqAtF8^JA-pN!mGUVPMfi{@7(ww>JwMa{rwE9NED>JXo(oJxZt~}G zfQgy$prJNrX7bAS$YY)ZCyLtVNH>VIpK|fl*5W9wt9x;*p>2`nfw4CJBu07>z8KmHwHb8Hxyh zGX7}?=9+rpUYgway3L=p%`>CzOEKk_cZ~JTH!dF3EgKq%KyUmA+l!t)7)~lQ+}l6X zyS=M$JmpDvC)n*Rt$%R79*Ld{DXD)cre@eeyP}T62myv&cWeOfJNN&8?g#&m3a<{^ zyQOs0FyhN{>ZTuRfI!H3lUkplv>(TYtE@6F*A?_T#s& zJZ*!vWi;(u4ocg3XNQD&$b9HeY9AuWV}d_vH&PlK_iS%i_Rq`4$F#da#hWs5g*PE9xJsiqq)>{UQ-`q&N;>b zKxQJ@=eYLSOo@<(A&KF1tv&)E3Oc7+b^BQrmx`DNz2no(K+Kr-MR-^8y5E)9meJO$ zTO8x)i(pEHVX4WNvscxfNE)IIK;&SyA?@P(RtpgUry?7z+3C|NVx-Z{sT0eaFDL9D zP@YQrBKiBi`U&7hudZzGk3sK`qUjsSvz9^C*z8qK&(_?FoHoI2Rmj)XVcBmDtwL|s zcq-yF40~YW9wJ$_4W*aRTpJ_!0^90t>aWrSp6f58?<0463QY>-7?m z>-GHOkH259Pnnmg&M7~iub-dK>v>)Cib~mEQV{_BIM3hy`up#H{cpej<+sOi5c9|5 z@%`Il9Ag{>Z`tzhFdfH4G#GqeUrvi#3M#bd&*Y<%#E5V3ab8GfKy)BXQ&cgPT-#(! z8OE|32uUHOM}c?38wh%c0b_;@_~i<~wP;(W%hb4(%xK-Fsydsl5D*hrorAR9Oo3$z zB%u5Vw^!Jk?aE|#6uA58Y@2377uMKpxNi@8_O{sr%gEX6e#${$5+<*-W)EadHdN8rw>ER^%QMKE5-bI&|A zO8cSuw38T-oU4`=B2W3D%8l9qH$6oGx(Tj-RK%>RCSuqi@4m7{V5B$Lk8c~XZ3|(o z0P>YHb;b6k!_unhYk>kz2V2)lK2G{ROV2v2rjisPhyI>1*^(*r60O^;^213XOZWqt zS1FD6vCeDwpFU*+wP}G0oW8Fyy;LrMN$7VhLVQUCpjtU$n_Oi5BdSb-7A;hveHNBr zpGLD)VxC8`A`u4@%?z&V^7ubXC01-+g8l)B%wrHwQeXyAqagO`RJpF%B26$6n7Ksj zw{UU}z>qV#p>P6fLVyhHm?CaXC^-SZiYV%M@hvKuTA%#Xw~!0sX#~Q z>7r2kiacOlK|sXB#6;wUI1!#7-yYw;GZP=#xmf00EF8@o!R77>oDRRv@ulW+WuIqV;ysp>tb$vcxfBfypKfaxh^Te@KFf}u~)%vPxJl;Ev_I|0g zhrUdB8sc-0k6{G%SYR_ej>qFfqmV>Ro!;;upoxaoBCky!G4KNDn;0FW_cL7Rb$nnV(W&>Wmul)XTPF$Ap?RzhJDW4Jw}35XoHy3PyIf2M59( zf~#&CX;z5jcUKOtP(fAc&2Rf*FrNhza@14HRyRl^!9pt0C%ti0$!oX~|H5L%zswUpKqBj5^`^tk*xQIa}@o*mc_vq^LMYwo^> zr*r`jqD0r|wPjts@f6hpD}o17yGFSlQx*S+j7&uYfCz`Ll98@?U32=N2ol81V<3_H z?GVV;$?N3{Gatj4^o3IhiB{Iv5)XCxjw(+-1A_bsF72XPfm`JxO#>}PGOWj3?@yQoiW+vi;5AJ%@fA$$82Rnp~TORKsP z5xJ(xyyWtFKy_Z1pDWk%`TG2P{`~p;d|e)ZTT_y73imtQ_U z9*);IALrw7Fmu_=+Mm8b>Ti>(4tCy2qzjst9dF-ckr+-f5u2CJsX0Bz2+wi(AhN%x z=>Ihf1Rs<#5Tkp;-Ng)}fcHR1aObJ4VL^Qop=-K(gA-F(%Sp-|t+sA#@%0PnlA}5U zHSy-px97Mc1d~zUi}Y1p_2qFR#WNzPz2qe_iTrlPmB{N$DDYVWw{@o`5!jU>l0O2U zjILU*kp(cB2bf`gShbyr0A;RFbA)+-%a#`eag6#kGx$KF+tD1cZkc{gex`Yh4CRNY=)> z05|NOtoZ`H#nJ|0KP|suwnUd%6TvvhH+*15E(}0JHC2hZQKXMMXV%DZ>S<2%>(58{ z3>9RXI4>%RpQ@n&2Pc;S5$7eZ>-qWmq(6-L`#9LlfFkWI{mtMwVn7hp8KWU{g+fL( zAdlmLq;Ht)l!T%}z1k_nW(Npc(NnXi+78N!nePYaVy2{!E+1nCvpGdoF_RK7-kSJO z#K1&Rl*gAeBJ(1693w=f)~R0FS`0T?L?RGEpiRC1^n{_DFm8L9Y{?2>#?8fL-3sUO zPiqdq=tq`Z>5CrhCV}cVP+@ZG9~YIq!P}^08_;CZP*`V|9T+E&e{sZNTZX2dp^}Cw zns1rH(1SE!lYQk+1K_rD4*e`eJ8nU_wlM}HdQo+pk1@tL&v6{b=^l>3OvHl*l}$TU zSom*RW8KL|0IhTn#eyPqnd&Dj;OQ-$%*+QB2*Nd(_VARQ~+i^)UMZc%?X|l zkI3b~CnUqb#9)oXsw9iqiH&Sp6pYM|IwFm3Y{94sDHIoc?7RSgj)8fv6zCL6ZQ^e} zGkeuieP^cQ#>9k>fB^(Stx|1PDCv&U=~jFnpG*;*vH*9HKBz)ees4FZuRN*xtd8aH_98dJw=8E+Q49}ymW%4vntbc00fRWZfsF|;69Fo>&xt%Z> z_iZd#Lg!dZ4~3Ap*BO}^hg-;07H!!IGPN*h!<{L&oCG-_*#tK&rzu`=iEoNHmH~t` zm?<>d6^7{lDtpQz!d-iML$}v>F?WWDfYJz!JxpGkaBE)(1l2KIuMOo|8zW4Kz4JN! z!SVw~ENp