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 zcmeHJ`8U*y8=mpeOlc;2%~-P3wS{6Zw)mtW>lnL8O{FmQC9=d=Mn;x$T~d~zFrzDL zvQ?9^uVuS~7$QuGWKfDP-+$xY=bU$Yet6IOKIgpWyi@}I9Fk9r4+4Q8%}jB&yOF$S z`+;4*#=iFh0s$ZdOMBzpatE@ri{0cu{HMUbO@Rig#7hVS3JI~r+wGmfzZej^4fr1r z$bon>+!_0u7nibAgCukg#bcv)!Y1Fq?+Uq|#`LiQSx!er>UiU%Der!1Z}nIBr^Q77 zwz!F$Xu9(HwVQCj96xrZEQd0MSs9^Sm1B2F`Mq_(92{gm%);hz*R@1vlgY9wUl5jO zy?S!9V*esNq+BLLEr)^D{ikPgkmovG4qncC_c-xAsQbO7a{v9za)GkTWXC3QAFs6< z**ozbKBJ*C)w6c?hJt>*W_Y!zQRF0<>xUHZC)0BN(zfsjvR?0WaU7xKzHv+%`v9Rt zAHcm9@~ns@{F?vRMUZPx+kTQF>fBB`*flf=8tFNl5GeBXJ4jZXKvdpnBO#ftqVx;M zS-0RBlcNf+Y8Wbx2*5lLMZ~Z!TUDKr%{$!?TPt|Df+2m-YxIo(Uplh#ixE|3sH=;7#Y^3{M*-oHy#ue-f9etYuGbq^>oC2<3o^B!;h!he4hlH1HWHva7xViVKz zwAj$9S22Yxdg{v`HX5F7ZXGuxUR=|2XTIW=RV~;EN#!pxIK)D`21W)7=T4JErs^nv z?jT%1f&8nFHO1p(}QoH09jNm-!_Qk71Em@sM&{z&LJ;Q68Jfhe!!hQ%%R0W2I+Z)tO zGpz#|d^tYUaFuRyw}|Mw8j|5uTJK}(p~Rm4>;F*l$CZ;o&EfAMpcDRd;bqO_39rdncg7;30`=NXr4?T`b zo&j)Mmo554cq`7YK#j*1A{*!u9Y}9)|Kxq=$=@ldg0DPQ&mGN zo5KzgJu-GrTa)I@3(IOGe+e|CCFoF(ur+lRtYT=p%(miF)YAXO+meFe9_fxx8=9PO zT;*vtfwu-Z4YSe;e)4BPm)U|5_EDDj^-|OToMKITC4W3QDs(HJW%#(&hf^lI{>o7O z5!(oOauf&|w!3uRvHJnWrKcn-`DEnl?v%t-ScxA{d*b8bCHu2-EgR`q`YMBLEasNQ zX9xNNQ&r;vf!}vS-hm1{Am(@1n#ky~@c?76Q7;aek4oZT5i3c@q6fjFlUg#<@-Taz zxFW2WrMm&jo+)a)cpi)B5>}*mz%IN*Rc@1L;zq;v84vD}-q7?X$Xe5-FogJPv=o-m z@vQ|+kom6R_*)WS_WG7E=n92FPp|b69WrF1JvKm&uQawuo;se~?-g*`UFHc7Ew`eE zl=wUoiuP>dW@CxefZ(g9HjX(|=t@?Dm_rvy`Acd9A_dhM2X~H_3>ya1J3FJ_f>U8L zPsJA0bXfdofir=e`!apeAa|;f(G@b2PhNV*2|&A8C!kG!&s6u2=s6AK5pjABJc# z+?V$pYRwfy4`2z+arm)Si|U_>2%!8@!st7JJ7GXcn2g7{e5xhQT+WZ%boa_)tknQ> zgtsZ{YrtjniYK3sEx1MuB2M*xfDC%;n=;ES7tQyJEC$Hzq;vRX-k&C+171rSeV*9I z<7=rK=DJWaHl0j-?tWwpbh(vQXS8I--YHF*E_hNDGMA?S z$V?O?Z>kaYS*XHre0ac7$A{J!iX{n;{qR@PCyLfV+l`!n;i@OkPLT5^Io1c#WBQre zD?J{CM`s*k%unHAy!m3z7Bdf|D0qKvDQ;2-L_`JWVwtOCm%yR6X!tV^*Wtn~HP}tV zjx)+(q;|ZR$|o3Uv`t=>dgXH$*-&71o3tq&MmY90c)fY7-@L7yGtdee+?!P^6aIc$ z23T@zz15fRv~|9--a)bvwPI$`qOMq8q$FuZ&=B_=7h9UCDei*0ji@6sE6a?{>|jMJ ze?DHga(LyX_}Y7i?^AKym!T}mHD;rTvt1%c9hUuE@+PRPYVPF=i;*6 zES9Nat2vtm>dcM7siop4G6mF~7P5ic&xDu)sKF%n7`GHT>za8&tM3l)YTl>$zYlGT z0XmuSA&>(W3ljCK6>4luc!T9e;0;H*Qa+5n-6>8V)c)JVy6n3z(|`-RW#9+9e@heW zVqN?-^O^reZj^zKbPOIn@#j_0w8>3J${(uBFp%0ltR0eZh^Xwnr9Ou_Uji*kjFLOW zv^31mm$*bm(cfpI7f}BcM60&4o}<`2TCJ}y++Hu-8@3dtJrHT62MfZ)jO^a%B_Ia* hOLJw%k3Cwk1A+fuN|`#o?!Whrn;GMAPmPFi{{s*$q%Z&g literal 0 HcmV?d00001 diff --git a/resources/text/fonts/alpha_beta.png b/resources/text/fonts/alpha_beta.png new file mode 100644 index 0000000000000000000000000000000000000000..6b880bd84ae486f88dbac76a69125ce488e65867 GIT binary patch literal 2338 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 D;Y2mR 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!ia0vp^4Is?H3?#oinD~={ftew|C&U%V{m<|p2!M=HFd70Q zEd+LU%IsrcU}Pu>@(TuKgAoiEg1@t?GBB|8c)B=-RK&dv=dQkGARztc|NlLn%d0K@ zGy)XvhVNeKw{Q8QmQ8zFPM5mvzJGzRQf+vIki&m9_Q-_2J5RA?ul<> zx!|8|9p%lUpybqv$Q+u(5=MG-eKh9>l!N*zE5$HHMU-(Mu^;rcP4RU6i8Y+Yr zJldoasIq$Q;>W_h1ZQ}OEIQdExa=QOy-8WI0d!f-*}+DSnT?+@QSas9^( zhW&>=TQRDyFJn43>yTS*>G|3Uk&}0Y7#M%K97tR@?W(t~F1S`3AU942P$3=R1q#Ax-|LylFUvvXRLXzvl>iOPAQM;jmO?R?Agm&G6_++k7J z_dD(G6Yu*%GypzMNc)(s}yWmdQ z3fk6mmj7-6UoE zg_rNV_dNgnQ?(&LM8-f@{09ta)?`e-l+EL`zFKH+zpu%V@)n_ z<~Z$PlV^DGI+&^9$Epea7vvq6nR7ki7u)mYgVbZ`9`^#3hGVsl_Wj!aFkvC>Lw)ADVA80dInDqvy4x{&hN~SMU&!1;f=k~X1oNGVjeS9;6bnPOBUa`6yT}F|D wZ{>`~Ztkw1)-d_H&;}Ne27FY$c)`v;%(2E>*L(kOiv`t7p00i_>zopr0Oy%9od5s; 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 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 N4w5a|rrL_Z`42|}02=@R literal 0 HcmV?d00001 diff --git a/resources/text/fonts/romulus.png b/resources/text/fonts/romulus.png new file mode 100644 index 0000000000000000000000000000000000000000..37b8f63cfcf7d4b17dfdfb1cb46e65dec6e39134 GIT binary patch literal 2616 zcmeHI|3A}-AAirA4Yz5dPGdKO5}L+kS;ZV0hRBRN%4A84tb9$nHl`SbMJO8P+;n%% z2^Tq5t@Gvj#Al78g;|lW(a@Juw_Be-;PVgMJs*$Pm*-Ef*YovyydJOo;2<)>(9943 z0EC~f_d#uBe=>bg>sOT}?*RY=f&-{NTB-pwT4wUhkC0#GT5>^w`tRH1she~+sLfu@Ep3Ua{tw^Q2U|ElI-_K zNGf$;@H05$!4dZ4j^5Uu%k}sv_QlL9k-_O8Mv2jzWjQj&CHQWZ;ne78!@O$L1kJCw znU5Pfl}(0zK9V9^3vBuV8`2=}F}QKu^2h%vmrAZ%rz!CIy(XQ>i_ecw1EKu?=s?Tgssb6ky`Gu6g97E=VNX=^=7Riv# z_XA%G;Z0t`UyaKi>tud+pEV&HgYHGzSkk~N;5nG&YRHiNyjisUBtsf#yex(X;1(uG zV~}sRByJR?AzOLjD}5npsf40As)%v#0yUu=X1(Yt?k+)5~MtK&omfaTE7n%F({ycM> z-*9r}L3-wh(HU;P9<~M2W_ipsWU=|{ti15qX0P@P1#3JWa=_S^FKW=Tr??n*)(H3PM0ykYi(5s zY9+ry&Kf>b zqAckVi3Bxey34~YH(YQ>zBwB*PpNfGxj@KeuF}RJt&J}@4d$n=IFS&ZDxcIc{x$P; zdCUEWPH-jl;+GED_RS?eyXtX$&gO-VYoj7X&Pswr{7~W#;CLt4I-xxNhqxTV_qN;Q zdG^y}{hN-uPWi*sAe6Gs2Tjk`H?~V2v7S1G-}!K}QUc$S`MLBDb*INgv8}ot($)~5 z>I|!My5Is`-80R)#<)_rK4tftDL6;~8?P{>N4YCGbARD$HoLC+?j}6tQ_synHZY}2 z=9@dV3FPT}MX2*!4uL$uL7b`5CEqUoDRHo7B?zXvh*rjWN@MGUdi$Ihyf~|U-9pco z)ke}uqf!pW`hzL>`vU4-0w6%faC@H|*!{#Z_XB54_gGk-fAVu?HE$Q{$4JUn@KMBc zNbhqSyGJ&Y+LgtNI%JjmYR_7j(SOqWxTm5r?`L&lQ4*DRV_)6K+gFlvV4i;{jEcYQ zT_tiW-vUxAmnD(I+h1k#{agETQax)=S3~lkWvEcBkg3 zLIVWJ3~YY$ECSA2j|zY-k!v(R_oQBWLM&iP&P f|ET6JN3poUl-)lr5cm#$dij1nLEg8%qG$gNGymbr 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 zcmeH|`#;kQ7{|Zg?Ypw2W1=a_rI}pjwvN^f!(=-cvFy;AnL2c#t^T5H0)c)^@5NRNXct*5zVqFIZ_R;*v^BQ@00fQ(F@nFI z!8Z&LJhPMl04N7K)q{DQ^KNHG5Pq{R`;%5Hyl$35?3UzWbxPk}JKPuRy0r}uyNw(a zyM5_ZP6o}ArO)J^ZOe~#tw*LASwv!H7mUWuwz+NNlGcSR+ed`rWX=AB3qKGGB~|Xd z1TsWDZ5NjC!>{)Z$qjXD2Wlo(k%}Q&IL`VGf4uQx)yiD!kd*A`6}EQ|@X88-aO|ic zJ}QDa-iYW|$kL7o!*c7K4ejsw4P(u{3^}OnyOaDF?OnZRtRz&L&lvNSFUXTzOcw|{ zpY2Qt6WpCrTg4pE+!$Ko2cGvVy@uhB%QsS3TpUW!mEtd1);BaCF^FkefCf@&o#`Lu za~vL4I45%28xp zBwlVX5j5d!4?Yf84|{Ey$w-DJwSI=St2DD}Qci zL&}XVJ&3G`50S2-sR9-|n(^d`qsF(RKSR_Tt}37HJaz)%Tk(2@|2n83=L}b;fOAp4 zr&U=`ke&2adu0hy`;^3-0NK<{AJi3_D@O_+=$36;515MVVJ9@La*eKs(RR*xVSKtV zXOx9d#W!@tcxx`ZY}m>pDr+fjHMVA0;Qrn`=N+A-)yQ{f#+YTPU&o0WY9AS##qKVT z)$q?(I>zu&53@JzQTZ=3rS$26638|{#bU8P?thx~SXkN&nR^6ZUb?w|wgb;W81ftE z;iH45Z(_1H)aZfoS}?yLuGPX^QCC@RA}Fo*-?IWvrYWj-#Koe)buQ8Dd!zA2miH3; z9{8w!hdK<(M)9i__rua={bqdYkAW!uSvQT&RKJQ|R#IJM>z;B|jYp`*vXaO7XE_*E z2uXC?8V(MbSO}mDyPLPR+}Cs`1w_{2a+}hw>%%b{8e5<>({7pGZ4FaPvex&s&0^y? zmJ}0B|7sb^^0}}G5b_)8aO~(7FL>h0^gg2TcHL8obI+FyV!7!70r`MS1$zmV9wn&q zjc~{-IkCk-A