From 9faf4b97a1b57894757ea94a23fc6e1071422d8b Mon Sep 17 00:00:00 2001 From: Frost-Phoenix <67cyril6767@gmail.com> Date: Fri, 31 Jan 2025 11:36:13 +0100 Subject: [PATCH] add text_raylib_fonts example remove unused import and simplify code --- build.zig | 5 ++ examples/text/text_raylib_fonts.zig | 89 +++++++++++++++++++++++++ resources/text/fonts/alagard.png | Bin 0 -> 3540 bytes resources/text/fonts/alpha_beta.png | Bin 0 -> 2338 bytes resources/text/fonts/jupiter_crash.png | Bin 0 -> 2889 bytes resources/text/fonts/mecha.png | Bin 0 -> 2269 bytes resources/text/fonts/pixantiqua.png | Bin 0 -> 2653 bytes resources/text/fonts/pixelplay.png | Bin 0 -> 2749 bytes resources/text/fonts/romulus.png | Bin 0 -> 2616 bytes resources/text/fonts/setback.png | Bin 0 -> 2431 bytes 10 files changed, 94 insertions(+) create mode 100644 examples/text/text_raylib_fonts.zig create mode 100644 resources/text/fonts/alagard.png create mode 100644 resources/text/fonts/alpha_beta.png create mode 100644 resources/text/fonts/jupiter_crash.png create mode 100644 resources/text/fonts/mecha.png create mode 100644 resources/text/fonts/pixantiqua.png create mode 100644 resources/text/fonts/pixelplay.png create mode 100644 resources/text/fonts/romulus.png create mode 100644 resources/text/fonts/setback.png diff --git a/build.zig b/build.zig index 17ddb08..5405904 100644 --- a/build.zig +++ b/build.zig @@ -342,6 +342,11 @@ pub fn build(b: *std.Build) !void { .path = "examples/text/text_format_text.zig", .desc = "Renders variables as text", }, + .{ + .name = "text_raylib_fonts", + .path = "examples/text/text_raylib_fonts.zig", + .desc = "Show fonts included with raylib", + }, .{ .name = "textures_image_loading", .path = "examples/textures/textures_image_loading.zig", diff --git a/examples/text/text_raylib_fonts.zig b/examples/text/text_raylib_fonts.zig new file mode 100644 index 0000000..408eb0e --- /dev/null +++ b/examples/text/text_raylib_fonts.zig @@ -0,0 +1,89 @@ +const rl = @import("raylib"); +const Color = rl.Color; + +const MAX_FONTS = 8; + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +pub fn main() !void { + // Initialization + //-------------------------------------------------------------------------------------- + const screenWidth = 800; + const screenHeight = 450; + + rl.initWindow(screenWidth, screenHeight, "raylib [text] example - raylib fonts"); + defer rl.closeWindow(); // Close window and OpenGL context + + // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) + var fonts: [MAX_FONTS]rl.Font = undefined; + + fonts[0] = try rl.loadFont("resources/text/fonts/alagard.png"); + fonts[1] = try rl.loadFont("resources/text/fonts/pixelplay.png"); + fonts[2] = try rl.loadFont("resources/text/fonts/mecha.png"); + fonts[3] = try rl.loadFont("resources/text/fonts/setback.png"); + fonts[4] = try rl.loadFont("resources/text/fonts/romulus.png"); + fonts[5] = try rl.loadFont("resources/text/fonts/pixantiqua.png"); + fonts[6] = try rl.loadFont("resources/text/fonts/alpha_beta.png"); + fonts[7] = try rl.loadFont("resources/text/fonts/jupiter_crash.png"); + + // Fonts unloading + defer for (fonts) |font| { + rl.unloadFont(font); + }; + + const messages = [MAX_FONTS][*:0]const u8{ + "ALAGARD FONT designed by Hewett Tsoi", + "PIXELPLAY FONT designed by Aleksander Shevchuk", + "MECHA FONT designed by Captain Falcon", + "SETBACK FONT designed by Brian Kent (AEnigma)", + "ROMULUS FONT designed by Hewett Tsoi", + "PIXANTIQUA FONT designed by Gerhard Grossmann", + "ALPHA_BETA FONT designed by Brian Kent (AEnigma)", + "JUPITER_CRASH FONT designed by Brian Kent (AEnigma)", + }; + + const spacings = [_]i32{ 2, 4, 8, 4, 3, 4, 4, 1 }; + + var positions: [MAX_FONTS]rl.Vector2 = undefined; + for (0..MAX_FONTS) |i| { + const font_base_size = @as(f32, @floatFromInt(fonts[i].baseSize)); + positions[i].x = screenWidth / 2.0 - rl.measureTextEx(fonts[i], messages[i], font_base_size * 2.0, @floatFromInt(spacings[i])).x / 2.0; + positions[i].y = 60.0 + font_base_size + 45.0 * @as(f32, @floatFromInt(i)); + } + + // Small Y position corrections + positions[3].y += 8; + positions[4].y += 2; + positions[7].y -= 8; + + const colors = [MAX_FONTS]Color{ Color.maroon, Color.orange, Color.dark_green, Color.dark_blue, Color.dark_purple, Color.lime, Color.gold, Color.red }; + + rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!rl.windowShouldClose()) { // Detect window close button or ESC key + // Update + //---------------------------------------------------------------------------------- + // TODO: Update your variables here + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + rl.beginDrawing(); + + rl.clearBackground(Color.white); + + rl.drawText("free fonts included with raylib", 250, 20, 20, Color.dark_gray); + rl.drawLine(220, 50, 590, 50, Color.dark_gray); + + for (0..MAX_FONTS) |i| { + const font_base_size = @as(f32, @floatFromInt(fonts[i].baseSize)); + rl.drawTextEx(fonts[i], messages[i], positions[i], font_base_size * 2.0, @floatFromInt(spacings[i]), colors[i]); + } + + rl.endDrawing(); + //---------------------------------------------------------------------------------- + } +} diff --git a/resources/text/fonts/alagard.png b/resources/text/fonts/alagard.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d15ee09e0bc5df5ee18efd3b21d5f0a823f1ad GIT binary patch literal 3540 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 literal 0 HcmV?d00001 diff --git a/resources/text/fonts/jupiter_crash.png b/resources/text/fonts/jupiter_crash.png new file mode 100644 index 0000000000000000000000000000000000000000..064df103368d8788c809a9abade4c3cfd8d3e856 GIT binary patch literal 2889 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4rT@hhA$5${$yZaW(e>Jab;j&_|NeF|Ns9C zqhK@yMqUW)?3CHZz`)2*666;Q$_67CGX#HUS7l&e`{C*07*Y}UHtOxPM^-$yXMV4L zzIT$2wOAK^cze~ z#fj#=iY0%89)tDcB9=AJCVYrE+|sttb>6{`%#1mY zy;VOinBl{}B63s0#FW6wo6A2>k$UiBXM^3I8BwCW5@-BWF0Zzm9+lVht(fuV0*Bc; zuU4KpDS7gX8RMy*u7+U74J%S2teZcX%oCL?ov@JOi`|qg%c*-?HtQ$WW*%EG>&;oV z_Dogdf@lYp7tFI5%=sCwzS{7+k5yup`FB~KD3*+qon6;f6@2}x%hptr6oLe%}@36$wTW_xPd~j;`ZK9zjkq++Dgd7uV-vb?@IgAHo85xbi{I9NRJm)vCvOH(vbG&yW!@KAsPqf1aMy7i?m8|a^ z)_h?1S(4K??@&9(jQ8i158Rz)?3#Xuw1yxnSS7@vGkeL%;J)!rOK=o zV)IR;)->^1T}aQ8XIiC`n=L1x{{2BJqh7&JorZkR4JPvsswv#N88)5ik?sW!p07qx z?_U{Y`i9+a6j~7M7Td`BfuSWsZLQUvr8B2a%sH6Czqd`-}B1MrQF3a7c<)+lU^*L-C zCavMtVEZ8YBDN>LXZiEl&ptBpRmL32ym=>4$Uv`~<;xjaM#)bzg#wNo*H53zAf?ZJ zqE^vRFL$N|!>cNRsbUV^34a<2C+09&oV=R3pw_KjC)AV6LD!gbL+{GP=VTh@PF`fy zTQW;8s~6sx8*$edZ#L*t_I`8#i=(%BiL`=Dm zM@ZnNWg+{H(Dyt=_O1@0E{~406bQ{dEVNTGA;e`7=L!A~lNzoaxe&`3!Ej5BLG12x zrVQcF2i(^?Z2Q~UP}U(4b3>G|$%BXShH|;yf~TB?nPIXHtxU&Gd4{o;htis~4GY-brSBQ;=@R zxT?AHOpj`enyP|yeGxarjqxZWsZhE`E-7x+si7S zm%jyk4H{TjDtj9)x-4^;bef6n&BWUWK1Xl(yZB%?i;jTz6XkyzTP31i{W4xK_sPf3 z8dxh;fHK(-frLj?J6`>qAoEqk&v#yxA(3r8};AxiaIZi#1CidzKdT&-S zOqwsm!2I|c>xDDlI3m9=Im!tmdKI;Vst0O3S6zW@LL literal 0 HcmV?d00001 diff --git a/resources/text/fonts/mecha.png b/resources/text/fonts/mecha.png new file mode 100644 index 0000000000000000000000000000000000000000..88c2df7d2b6bc6568ffd36fe8dc2ba0f5026554a GIT binary patch literal 2269 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4rT@hhA$5${$yZaW(e>Jab;j&_|NeF|Ns9C zqhK@yMqUW)?3CHZz`)2*666;Q$_67CGX#HUS7l&e>G5=N45^5F8_r#Q%RoT-&;S2> zJeOBn`e_6x+zsEo(r@4LM=hKF?wqsdU(COv*bmNM&h~8BwQKp!J7Pbj{u?u1KYg|A z>C10Yx4+zPjAgjJ_@wAsiMG8lI~kKABczHhWf*Vlcqnk|(L#pSScf)Ehfgmgb-Ock z+>cyfEqLs~@qZ&j@x$#FI zFWeK~#&W?w+d9gdMM2SxJJfg0x~KMH3C|t8rhlBxbc2txsw2>Ga=!4D)a$bfG#cd0 zHZ@cTFL<;`Cs1j7;eM9W{$Kpgl>J-6ur**>Z@&94VF2STE#I&0s zSF=Iyc9t1~oM}q4j#h~8^SjJEjGgnQ?sGg)!}QGH@cnx$wo6Bu^M7z;w0_?p8lks2 zB;>~N%Gb{r?X(yQ4>?TC*clq~Lx|Dpvxgk3LTBf+Cehv_!V{JALXS2+*4z1(=P!#v zPPoIOu-lp;R2ZcumQ~JJ5RGazHnCZhN%b6dRGJO(N7v{W^!>xG0 zUS_-CPTAwK7dG3hh-Nz<>8CTtFD$5GVr`1ln>Y8Lv>pF9YcrSLzkJJd%a0k4tXV@E zeCJe{eB@>FIoQWg?;%|0%)s>TLT=wjwFb{S+`T<>k9s$})RddG@%$5~DAymh2fv+q zBvYBY=$TM2kL(eJI^W}roW9c6E0+ohiwU74w+Ws(N z<-w$|Nxx&iG_&4qtLRmCc>MVxl>PEbwkv`qLfXfR>tai)+9 zg8zyvoU;o27p|B3F>4?96xP0j2hUX5OprY~HT+;w<6*s9zob|^W?A1;T)_X~tMNa_ zMYBs%5B2MEZb-KDWw;+`Ggp}P2B!|A_kl{LFH_H-XHw_(w`!bgKjnRVGlO*PB8FbE zx*T0bk%DjKjK^;7uAkO0`MS^s7LW#fRK9q@&Ogkt##`5W|8I*0)l8nQelF{r5}E+# CnKGRK literal 0 HcmV?d00001 diff --git a/resources/text/fonts/pixantiqua.png b/resources/text/fonts/pixantiqua.png new file mode 100644 index 0000000000000000000000000000000000000000..d9d3dfa5cc31573fe80bba656efaedba30636f06 GIT binary patch literal 2653 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4rT@hhA$5${$yZaW(e>Jab;j&_|NeF|Ns9C zqhK@yMqUW)?3CHZz`)2*666;Q$_67CGX#HUS7l&e+eSy#jn4w|C_UZKa;5B%Kb;AV?_#YJdkhGy~UrM~z{w;3Y6IpkJgzIp$Hfz>7uuj;{|aKw@WGhCkv)V_Z~c(Ruzp=L-dvk!&-xJ$>pQG&-^bv z&zv4GeU7~lgQA4hQ?UaVH_FHfg=znsXXae-Q{^0!%o@RSH#RaPa!k3dJ%ede_Kl}U zBoFa(MjLmu+-lii5!mMQG08J#A7ixt#`0rIDp%YX1k*Sk?3lyMJ&W6$;n+6T3#lHN zM;*CzbK8pMo}E~f=JMi+R>{)J8;cv{B=T&&PIxc5b2Z=07aQ1xpUxLJF`p%4;ueNy zhwe?gdXJN_{QU=6ojoZ`_4)}9)FUcRvQ+SieK@S`e;~_&DMyA;KY#hwW0&Rgl}ywP zu3r86&eoa5;aT-U-Kk&W8TYFzFs8{>ITtTFe01#}RzId|+qYVOf3od=8^cEB1@beM zEH6C{bYRkP-Zw1dUj1wo+@oEGabDZvu4$|lvJcdr?{~T6^`w?-bJ?i^ z(Fw`j3b)U2n(zE-vWJCdR^pzgCNeC4KAaNP$bJ8ZHUCo69*cK6miE%sJ1=g3-P`a} zhJDUsR+|cwHR1`n*Cxc@zFn%HaMtpmWn6)1!t47EbHAi{GTfh7r+(;1kJ7_vjvs9| zYSX39ELHojaG+$j{PjQag~#4WTg`jYDf)iZ3#KeDU&e`SYyGM=FJmaLRd=|);@2M+ zBd)_A_Retp`q+wV1)tlQngh4ff0!&c+`Vvvl5v6ky2%XRYs4n})LwLt*YTbMOTj;R zPJy%RbK^39ckU^hRnxaqyy10UK5NU%gSAqczyB1wT=@JXL8n20F)DM1aKiV;r|vV) zjM&@wQh$cwGcV#7o< g_s4$jAHROFvwZ9~oopE625K32y85}Sb4q9e0F}k+UH||9 literal 0 HcmV?d00001 diff --git a/resources/text/fonts/pixelplay.png b/resources/text/fonts/pixelplay.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5d56346c62107b3b238c4927a05ccd7ac9f6c3 GIT binary patch literal 2749 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4rT@hhA$5${$yZaW(e>Jab;j&_|NeF|Ns9C zqhK@yMqUW)?3CHZz`)2*666;Q$_67CGX#HUS7l&e%kgw^45^5F8^Jy4mX!d{o&V=N z|EH-m^0sYw7;2mS_T{|wQi+pS{n=Gh`FGc!XS*Ksn{hw6mFMd2dpG7l!1MO)xz{fU z6zq+uj}Jcdn66Bn;GuPF&gso_gIC=b+EB;3Dbizkv_ikMMTJAdKBaKuBPL25Hi8S(zB;<@ zid_Aom%&?=e=f@c=R1NCOETw9Pu{K1U}l`9)YQ#z=hUpO%I1 zp-61O@$V}bu5Rw@Gw%A5W4Wo_zv0af&V*df3A*i_;c?EkVJT}o*NPcj`Kgs2Yq{yw zs>0t)dnWWTG_}28N%^a|N=#yx_JXqD8s4{D5pvO12_g^9?G(EiaOT04DZi!r&suEZ zcQ4}z*wr>EMc(@0s+F_3XSZ3|@5$ZWCdZL+`=TtPuRr5^t{1=x?5Wpb=$jNVc{@kK-ebMr%2+lQ zJDpIR%n)FH($Z_BKiruVpn8aGw=HEb5+t}T9Gc2+ZH z>e@{^vkIrR7)*?1%zj`NyE^j3r1^7I6@8wFC@{vySvFn^f0vN`XxSNy+l|c$cUgNy z8jkOb<8$NTllXe!`|Yh2Wsg^G-EcB)0>^3L3vDv0o|UJy54`;Jc-_3oJdf5VA5ybE zSW@S~@G?Wd>?Y?c?F_~pL5u+hLstG!W|U!jGh>4%t7k#4mJ^G?6tmrbn1fIAb2Ut5 za9icOpxehuSV54=UjhDYU!=9j$O~8;3u#5 z)OOX|@!A&d6=9)Rg!?%pq6f{C9Ph7mh+JR^?b5mp66XZW5Sqnn!F> zYn~+2l`XYQrvyH?ocOizjoIicbB&Y2W4C)!?k5kTu-6%*1>#^Xcui zrs4@;xE>~$Kx{nu)!mKQ#d z-^u%DQ_7#H>FejeV|}me7L~_knDWEAf@ww2%F^B5^2+lU+xZ7vk9Bj%uVL-nr=<|P z%tTcG%29t$Goz{Xk0l=*iDc;CqRGBy#c63hCWjZbP7SksEEONmy;OcXXO+UGItPZ` z^SC7>+1xH$Gu1rWBK$N(GJg$kZ&J_WYi?^8%57PeGzTu-eD&KW&Xg^;E?K{@JvWh~ z>-g=keJOu8Fl;@(y!LVY;r${8if>;t6}V|Vja+%hxB1@VxVCSljPY^H8-fpLJ`gG3 mvS6LVJab;j&_|NeF|Ns9C zqhK@yMqUW)?3CHZz`)2*666;Q$_67CGX#HUS7l&eeeUVv7*Y}UHllmdEe{@^-~a#5 z`Qm-4XRpppD~{;WYX?hKe=SHZST`wtyZQ0;xAWP~scDDpdbQ;BZH2HCGcKKDmy`N2 zqvUG-etWw-dHG37-mw!5m(JzSVcR3Dey>JQP#}>xY>NM4ACEAGBV2|HeP3SL$n?6O zN1)F6N$rX`+fxi1QfEw?#Vvl#WmntkC5j#H%)3N>OUgV<3&^|7wRi>34?d5p*#&BU zI-i|ldut^vkk}b2!<1jFC&Qet z6I+k>EiruB&|WoX1!s|8%0#|zAFc=_8VBsI;d*-W=Caq1ZVF3Inz5==?`mO_JDb>z zl1pEGH^|BbF1vD^b6%#x8nDlg9GIu=y=4tz_${uuwmdE%hM8|Gw&iAQ5jN?A|wY&|i(t;DyPE9-Fd|BqdA0x3sc zpJIqy%(KCH@m`^+=a{ON9xAwh=`Nd%fQmvG^JL~)_5;%buWG%Pir0FWa>Q5Y!+IVc zy*KwA?lRUX<%+B*6WH1n{`q8JS*dyds}Nz~WkIUzUsyfQb@<4z;nc~nl`glBm{s)L zH#pEQYMZGc-aFMhf-RT9WWMv;e^b4# z>M;}xF|QYV^*-V5fmfA_TV6C=x!th%g33)jy`Ns)xi7RWoyr{cTw#zYaX-P=aa}6H z%BjrZ$bs35-yg_&o3f8H@v_#>CHo#b_Wn@jc`@<9#N#Vg%wI5-<-@ft^NjV9qN)R5 zdoR=}X)|xl`Vw}RaqG$_jmxA9C+j=#IzDnOojPfj^zSQM4jt9!c@WZWqTQsmX`-v? z61|f~(mgs~Z?3rA{5j{q`lAQD81%Zb8<>K-CjCikHear)ex*a}nLEcS9Txr0YaxDu z4;HyfCNyyfX%yd3ep+Z~a8%;K0Uo6)u_M<%?XhoPuli{xZr_*(9Aqp>}IJLai395`;!G{Uz%d{?FArjwD9h+ zwA;_jDAUR;Srb;1s}TQk)n8}k9lPQde{_FVA5$H7$NT_$V|juc$N#q)&F8uP-kos% zd{@g|hQ8^N4?gYU5DZ_rg?9y0{(8fPr#EceDn8w^n(|3I;iW6vt3%w6j2`_J)rd=J zm>(Z+fZeM9v48BzNf37%Q~loCIB=4 B;mQC2 literal 0 HcmV?d00001 diff --git a/resources/text/fonts/setback.png b/resources/text/fonts/setback.png new file mode 100644 index 0000000000000000000000000000000000000000..7331c9586e9d3cff36a0605585a154cf9a893c2b GIT binary patch literal 2431 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4rT@hhA$5${$yZaW(e>Jab;j&_|NeF|Ns9C zqhK@yMqUW)?3CHZz`)2*666;Q$_67CGX#HUS7l&e)$??545^5F8`>SDY{?Vz?f?JE z_41Q+&i70f;8^%-P0^J+TkFFN^>+7i>h1nreDFHxhxvqSJDd*lmYh>(?i5!{=KAql z{JFf1olSy~QW$rp4om5ry}qgo_;hCVthK+WYR=-)q#f1FSAJZ?eCIaV8yjCr7|mnx zh!@j1Snzz;qP3!vHNx5_W(a8=$xd1}iy>a%NnvApV#xDdOji%h=`5~{n!L?WME97_ zT>%AWkvLYj*j69EqvtO6tM#~exIYVd?9G_ev#6`E^6a(H=BUCWpT4N&X8+xAhs}p^ zrqjYTTm{c}m^p+eh_M!)YxnKpzH;YR;!UnSzgcc{c%1F}_-m5hsg;H;aYuI@>YneE zbYS;;2I(H7Jdb(Z`CI{$Uq8+YVf^q#d4hS-Dc10e9gTOCi#qh3jzu$xt$1C)JYVEP zTDN+E^CJiO`|K>5EwawuQyOZt*GH z8X;aWYAV|qCf)E%Xxzh9TDX2)m8o$PA4ZM|Jq=2QB`<)L-NL;>2sDJO_J*fj0@WveuK4*AyP3YvgUzJlBUAmXHOaK z+?2N6)HWw_sn`Nd(=TF+&g&!zgZ=YImg!#3_jw2Ae)-$PDrURC7Bu$`;kt)W8u z^2%TB0nC-F3-&NuUTi(25iP4oK&NCOnp7)SJXj~@Q@Q8 zt@ZmGl6NdTSL&#-=hS6gmIr307nu4IKPKDOe3}s+li_#ilKx-s6IZ)yF2;XY{^M*} z6_fYMr$W9;EHftcCveP&TeKtPz=Q3obE;jxIQJEHTzQ}~$$!qLP428KG*=YQI?1!l zMx8;fMz_I$(_@tkkE6I-+|0_xE~&UD;Y=SIcb?02{kzoE*g8q)!4?O*jau>o498Qa z7zUm-l4O3%>Gw=!q0fn`jV@Qr8Gi`GF3nsvGFOy$D8EDDanOW7^2{y3o=$0Sm)>sLd`O}Q7j6OA|WGw#^JIDJOx0Y!yF z+g2@?E?l_XH$|wS&EwFzz|uTUMkUjXm}5^G#Z`_q`O@}5{ZH@sZ&Ia5cI=wCij)1roaa{iidSu8d)G@k}pV>z$}KWqy^F z-k}{+7+#+=ICq|_Vso#(%k&6-<-^MVeZRFZ{5?|V!f>BQcHe2iWh#+h>Tl+891yc- zj8&3Ze~+K@f)z`gb_4TIk79%Q`ac~Tn$Fd4X5e}JLQ3a-uXDq