From bb22075943d4b5326264109d6f9074a3b7a4080b Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 5 Jun 2021 23:42:01 -0500 Subject: [PATCH] moved ui module to onyx core modules --- src/build.onyx | 3 +- src/config.onyx | 2 +- src/font/bitmap_font.onyx | 19 ++++- src/res/font.data | Bin 262144 -> 0 bytes src/res/font_2.data | Bin 262144 -> 0 bytes src/tower.onyx | 81 +++++++++--------- src/ui/ui.onyx | 168 -------------------------------------- 7 files changed, 64 insertions(+), 209 deletions(-) delete mode 100644 src/res/font.data delete mode 100644 src/res/font_2.data delete mode 100644 src/ui/ui.onyx diff --git a/src/build.onyx b/src/build.onyx index 85329ac..9a96cbd 100644 --- a/src/build.onyx +++ b/src/build.onyx @@ -7,8 +7,9 @@ #load "modules/webgl2/module" #load "modules/js_events/module" #load "modules/immediate_mode/module" +#load "modules/ui/module" -#load "src/ui/ui" +// #load "src/ui/ui" #load "src/config" #load "src/font/bitmap_font" #load "src/tower" diff --git a/src/config.onyx b/src/config.onyx index 7dab26d..50e515c 100644 --- a/src/config.onyx +++ b/src/config.onyx @@ -1,2 +1,2 @@ -DEBUG :: true +DEBUG :: false diff --git a/src/font/bitmap_font.onyx b/src/font/bitmap_font.onyx index 5cb0afa..7feba42 100644 --- a/src/font/bitmap_font.onyx +++ b/src/font/bitmap_font.onyx @@ -22,8 +22,7 @@ The separator color must be present on the entire left and top sides of the glyp - - +@Cleanup // this should be part of the standard set of modules package bitmap_font use package core @@ -58,6 +57,22 @@ Bitmap_Font :: struct { return width; } + + get_height :: (use bmp: ^Bitmap_Font, text: str, size: f32) -> f32 { + tallest_height: f32 = 0; + for char: text { + glyph := map.get_ptr(^glyphs, ~~char); + + if glyph == null { + glyph = map.get_ptr(^glyphs, 255); + assert(glyph != null, "NO NULL GLYPH"); + } + + tallest_height = math.max(tallest_height, glyph.h * size * em); + } + + return tallest_height; + } } Bitmap_Font_Texture :: struct { diff --git a/src/res/font.data b/src/res/font.data deleted file mode 100644 index 615eafbd72191e1cd88f15011f1f4289b42345c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262144 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 diff --git a/src/res/font_2.data b/src/res/font_2.data deleted file mode 100644 index 85287d47be863769b3e0d7c198d95057618c3ac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262144 zcmeI4U6Ld@ZiHv`rYr2bbO7o4+P&I{&I)HcksufmmD!!0?O|2}5#Cx>8zkhkv&zz57`;0MbeQ*}{f1iAqPpkc& zM2s{tV3mXYNZKrrtB-Ovr4Qj}aR4UkJN>LUU_Ug!aIg>BsvqXiMkM{P6(`nlAM1{N z`u(#evAFx0^Lrk0kDrJ-%RwC(-J?d9FjCi)}`?sVViRtpx zH+O;q=EP!;YEN*;&>p#FY?=>)Vn<%{VI7|lM?ayzG3Qp)^O*Ah(ZaT_;(BkCRk>AM zId>W0E2laSF+8iY-kG!N`RhjOJ0Y(3dKQQ0!tR)QKJwds=n{K~`K z?r^ldX|4S%&a2$%y%q%{H;IoJ`q2h;&aH0T9XXMsb-TFUdzV|qmGf@>RDB~>J$f(X z?e4Z>DQCy1;;-On&(+z;)ANu0tH1x)686(~f}VJXBzfebZuRKB62{Io&N#_oe&o{M z=d8Up?wB*~fgj%c0iuO%UB$IulvTM^Tsb=iIIBlF$l0-0@vEF?^>c=^>UmYGe!bU@ zQ^l2|{Hg|dv99fhE|r6IWVJnf{U>sg+?8uEz&gR1@?($OD`$0Z;U8yQ;GiZx6NkOQ zHtv{nE9!YT3$X~#)yydj%(+ot?Y# zX+M#(+bdH!>W>VKVIAw*e&{mhMpoN*-NHsrlAF0kJs4R(Nzp@1>@#u_#?Cd)(0lEQ zlK8~YK6TEmuIJ$_#&b(>|eo&XY08! z7W>kEvfRq2=O{=0v0h_X$GW!v6TW}_#&peb_3yE5rui^sN59`NSCZtA1jx=3!mM~Ik)Vd$DC1pEVK^mDz5$Ra;vyoz>96k199q`W(hsW~ z?3qIgpFZ@{GWM%DJU?3PhrQCqT>5D>{tAxrc_yvKu&&N;HABD0ni$#IFS-`nkjj z?`wSj$K3l_nsaBZ{obi(jX9h|Za-x{@g8kI=`z3lqt~3rnWzWz3HygR#~jT+yN>VS zY+cMVCr)JEf69E~J=*?3m-Ef@ojLhj=*4`vhRx>88QS{)2gMrrNDYkdp5K44{olF$ z?mzO~``xxb1Fh|82J!d7^mhdP`@-2Z=X*APm1oXsGGBhr$MdNtP)85_OiA!fjvE{6 zvL2e}BgN{0`Qj9d8>qW#@r;T+T{r#d@}t@_DwcRsRS(GS?W^JDx>Kg^+BF%Z{# zVPEA|apl})fd9^%?EdktagQ22dap0fy?-hvo`wBc>cN@P;e#V`r=(3>`(xc5o^tNg z^K9k7cbBD{y9}JK9PI~dJS#T+Us*GUF2l>opty;!ltA6fsz}54Vlf^Wy{UG=56FF5s)foq8N`ViK9kYtZ{_gUWQ=PZt zD`%Hm#g+5SesHEfJ2rD))z9wyRs3i56VK^ zd18ME#r$edlyYJ|b7-r$a*!W$vpui!A`T&>l0SQq!o(K@VSZWUJ!>Z;r-esKEHXaPU)RW&`i{i8ZF_IHLyu3F{9 z^LG0cXV*){C9CR(Ikb^OKdf@p&vjMH99ZS-YO1($l#g|+<38qLuN>x`waVLZn47T~ zgH?|Dv5vJduKUP|wb*NZj5DU3RSt8jxN?wRQ;X8 zl(WmN;>sZ#Hr8;jIl7J<=AX4>Dd%jh=Dmp1vF)7c`-fA{uGZ{}R_|GHn7^`-v&zeQ z(_H23a#0s^$Wl(07wfoZJ#FOB&-|5T9&O~T>Y|_Zw2?!2E|oHvIGNhv(kv9XQ$pfB)aP%{y>bJzTxl zCv*62F%v%7d@uvX?^>PXT?XpRsi*gy`Dkrh_dgHn)AHy$a8^BBz1Jsm`1UXpKG}RQ z1IF)Konys_|IHqI%|FZ0nryw|Wano-GFKeN&sybF=k0jPiMf#*<67I+%kMvO+P?qq z#ISgjljOoR<;Om_R}TAG@E(|1?a|xvUOZRrCv$jD%$5)5%snh-p!+*(onuv>yTQ9$p$Z7lOdsa@83)hs-^P^P` z`&sZFm{~3O(!# zNxzd7tNF(_t#<(@sTsM8{(3xez~ZxGX0=Jp$~F2UrzQ4zpodja;(sY8IdA8h`f161 zuXDv(_sD7c{{8RZG0t}d3&yiK;Knm|d(`03e!e`9Ecz>}oZZ=3oNVR5m*rNz6{ljc zhE{uM>q!U9DSDW+1r}<+Noq!J5`(M9tA3KY!930#dRz36ASTz;1A2Nl&eZMs&A1ot z#C!4m;*R*iBk}b6XANy^fqvM=9PgvbLv9sU&Mvo#?>JQt;PO$zs12GTtZh_8Y57^^;7Kk0^9yJo` z%eUnm{Z8*0cjTNUe(L+@yU8r)h}gq`LO~T*PR5G0anGZ!a#$Cwa#m-triv>E`BiQe zj~t#|)i6hE+j{7LaoX5h+mCMmIgyj(XRe8nanKW=1TfW~=s{RdUc1p9E0WF7oNl-d*Q$CM~hgg9T#8xyTVemv75C`kmgh zzITcLHs3$>v9o-yn#UJLtFhHOa#(xDDs#utT&yFX@yMaSs$q`Sw)Lb7=471K%lHNm zkDS=6=2x-EK~H?Dx(huJ^Ds~L$R4oA`797S?taurs4si`CvxKXaX8S0w$2z9`Y)(91_oGkDr#{1s38Y3nR6DebQ5E{odH!_iM<^*DP#&Wkzm{J6i{Pp`wA^})Tk$G!Mq zt$X-2H#W7}lSd229S->`4*bm7Su$YH_M;ZP%&%d+i}QPj`DhPqUFl0NHnhe&MGjbZ zp6_s0wdmzaKkv-Zmk`$DoizVg>pQ@`xYv1Lt$XBXE^Dq@Fw9v`?H%T$J+$?M4%Xez zk$2#%dboP8Pv-EgVJ3XC`EUldU%$gV2hZU{G|+#?x4Z0Y|Fio;?(Dl9e;4!n^zSjz zK=nId{JR4Go^aLjoU3&){~b8mLtFpWe^1u=`d&JX$Mq-Ahqul2jC(VF*Xr!iL9$gzY=dhb?A$M!$^TwR-2f4AlJ$j{djQtXJ)!t^NInA-(&2^!;wu z(|z}!9LAyzy#O5(oXFX?(Od%Cp?2g2CUAm zzQG(lQ9I^_+_}2%Mtsx5$h*S9`>W2ZSnu4=;$F#BCs&_gaWBsJ>&1M%uQ)&EOqxMI z_~A31`n4H#%%RnOB8NG&75AAOo~Qk^v-=%z4&t#F*3edQ?e#k>>KfU)V{t8ZGKD?)+r`}3-NA|4!6r2^m-y8f3oIcXkj3Ng;#V4tyYrF^LFnCzz z^exzJfggS7d$^bOqXox$)Wx2)A25>I$~Cx=!+xsbtT%AjBN)QzXE7eRtf8&qV333S zDz}O&XUAY)nN^O)&oH$%=C}QLKiNGrzTp5(7S{1$>_L|?@x;Efw4b)_IyhU~^2Qh= zCt-}ihj_?vQ8OTD+j%3KQTAldpZXk=4Twn6GrJG6BZ0|u#biCop~ass;SOcajF`g zrL{4??Wgxw#g)_6{rx5R(KYeWQ{=>g6Z_7L9Q1Uyw&ig=5B;3v=uyjlaEK;`b+6N2 zkgxYTlfTMQ4(@~>KA{HNw3kgkWgX9=t@>dOZPgz*%!~JeU*id9=^~Siile#J8Vqvc z!LhE2D@W_98s=$j%y0YYy;pJNwDr(aQbX6o&iVm|$ro(r#(t7|o*zT>_m(0DJylPH zwSC&p=5A9DdY<+Z&Pr=mIm$sV_~8?3uua*>SI(}kia(RXd&GOOU&bpNd)3@cuf0_B zSL-vJ*a!E@RF3+Yn_1>*ZI-w34P7Xwt)HSNa*`f+ZVb`?5?!L7cwpO)GcnUuJkBS{ z+qwEV%Gnhp@zJYta4-BM`O!7%U#XvX=!yO43-^-VCLO}Bappz4I*)l^kh9BWO=gvY z_=*+%krg=_kG0%0M{C>qbPtU)W)4>5fTfR~%UX?dz2dCuSAOL%N9@$Q__-W$<={?C zxL`Z$4LIXYn04&urdjW^pW_7HvgpgoYjoxJ##+fW_rdsjNi4|>s`d_0GomhbOhW}x$U_ch)j-e-L0e8;;O;?zNw8@akizCL$3 zVE$R8}z&nI~!n>Qkrz(b8>fmQ_cITY!=Xd6y z_q$IupZKn`J z%eCfT>4){SujVNK>bklY`>!m|Bd6tNv-J1>rr-SWzWVQEyhFUt_`dm$cQM4NgEP6v zSv{}dtj>z}#Xja<=_m4(^$L#iudb_p;ytoG&m#w;OY;2v|Hj{c@;)aQH2_N;U_B)j z8|2344hKh6oEXDCYb(psepYp7Sjx%rE1&kI9Q9vaE2lbp72|p2v^>mo{4{@GBd&h0 zf6VAzW`TEv_lXyE<)H>(sROL&{u?DxL^{{I{N4!}F)`&`+miI_(nM1S00;p}p& zc-2o;7yDJtuC9tJC!P`a&*DU`?zNwI-kCjFVaBOYVk&$If~^T0de`@CzZgS+*tGl!GN?JMSk5A^E8 z?$}SO_xB%W5NGnPd%Q!w&%2g7xLeOUb2y3IzUzFVwp*Y6^Zz&beLzjw`v3Rl6&i@Y z8@!+YuH<=m9@c<0U=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!# zfHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r& z4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU z)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~w zU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=` z1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8 zHDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZ zSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!# zfHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r& z4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU z)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~w zU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=` z1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8 zHDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZ zSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!# zfHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r& z4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU z)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~w zU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=` z1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8 zHDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZ zSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!#fHhzZSOeC8HDC=`1J-~wU=3IU)_^r&4Oj!# WfHhzZSOeC8HDC=`1J=OnH1PicJ>8K2 diff --git a/src/tower.onyx b/src/tower.onyx index a59d2df..f52a927 100644 --- a/src/tower.onyx +++ b/src/tower.onyx @@ -8,7 +8,6 @@ use package core #private_file bitmap_font :: package bitmap_font #private_file ui :: package ui - main :: (args: [] cstr) { gl.init("game"); events.init(); @@ -41,26 +40,24 @@ last_time := 0; window_width := 0 window_height := 0 poll_events :: () { - for event: events.consume() do switch event.kind { - case .MouseDown do println("Mouse was down!"); - - case .Resize { - printf("Window was resized to: %i %i\n", event.resize.width, event.resize.height); - - window_width = event.resize.width; - window_height = event.resize.height; - - gl.setSize(event.resize.width, event.resize.height); - gl.viewport(0, 0, event.resize.width, event.resize.height); - gfx.use_ortho_projection(0, ~~window_width, 0, ~~window_height); + for event: events.consume() { + switch event.kind { + case .MouseDown do println("Mouse was down!"); + + case .Resize { + printf("Window was resized to: %i %i\n", event.resize.width, event.resize.height); + + window_width = event.resize.width; + window_height = event.resize.height; + + gl.setSize(event.resize.width, event.resize.height); + gl.viewport(0, 0, event.resize.width, event.resize.height); + gfx.use_ortho_projection(0, ~~window_width, 0, ~~window_height); + } } - } -} -#if DEBUG { - fps := 0 - fps_timer := 1.0f - frames := 0 + #if DEBUG { updates_this_frame += 1; } + } } update :: (dt: f32) { @@ -80,33 +77,33 @@ draw :: () { gl.clearColor(0.1, 0.1, 0.1, 1); gl.clear(gl.COLOR_BUFFER_BIT); - #if false { - ui.draw_text("Hello World", 100, 100, 128); - ui.draw_text("something else...", 100, 230, 32, .{1,0,0}); - - ui.draw_text("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 100, 300, 16); - ui.draw_text("abcdefghijklmnopqrstuvwxyz", 100, 340, 16); - - gfx.set_texture(); - gfx.rect(.{100, 400}, .{200, 200}, .{0, 0, 1}); - } - master_rectangle := ui.Rectangle.{ x1 = ~~window_width, y1 = ~~window_height }; - left, right := ui.Flow.split_vertical(master_rectangle, left_percent=0.4); - right_top, right_bottom := ui.Flow.split_horizontal(right, top_height=200); + left, right := ui.Flow.split_vertical(master_rectangle, left_width=400); + right_top, right_bottom := ui.Flow.split_horizontal(right, top_percent=.6); - ui.draw_rect(left, .{ 0.5, 0, 0.5 }); + ui.draw_rect(left, .{ 0.2, 0.15, 0.15 }); ui.draw_rect(right, .{ 0, 0.25, 0.5 }); ui.draw_rect(right_top, .{ 1, 0, 0 }); ui.draw_text("Something here", right_bottom.x0, right_bottom.y0, 48, .{ 1, 1, 1 }); - #if DEBUG { - fps_buffer : [16] u8; - fps_str := conv.str_format("FPS: %i", ~~ fps_buffer, fps); - ui.draw_text(fps_str, 0, 0, 32, .{0,1,0}); + { + button_rect, _ := ui.Flow.split_horizontal(left, top_height=75); + ui.draw_button(button_rect, "Test Button"); } + #if DEBUG { + Debug_Info_Font_Size :: 32; + + fps_buffer : [24] u8; + fps_str := conv.str_format("%i %i", ~~ fps_buffer, fps, updates_this_frame); + + gfx.set_texture(); + gfx.rect(.{ 0, 0 }, .{ 160, 36 }, .{0,0,0,.8}); + ui.draw_text(fps_str, 0, 0, ~~Debug_Info_Font_Size, .{0,1,0}); + + updates_this_frame = 0; + } gfx.flush(); } @@ -114,3 +111,13 @@ draw :: () { + +// Debug variables +#if DEBUG { + fps := 0 + fps_timer := 1.0f + frames := 0 + + updates_this_frame := 0 +} + diff --git a/src/ui/ui.onyx b/src/ui/ui.onyx deleted file mode 100644 index ccb6b2f..0000000 --- a/src/ui/ui.onyx +++ /dev/null @@ -1,168 +0,0 @@ -package ui - -#private_file gfx :: package immediate_mode -#private_file bitmap_font :: package bitmap_font -#private_file gl :: package gl -#private_file math :: package core.math - -#private font : bitmap_font.Bitmap_Font; -#private font_texture : gl.GLTexture; - -@Temporary -DEFAULT_TEXT_SIZE :: 32.0f - - -init_ui :: () { - init_font(); -} - -#private init_font :: () { - font_data := #file_contents "./../res/font_2.data"; - - bft := bitmap_font.Bitmap_Font_Texture.{ - data = font_data, - width = 256, - height = 256, - }; - - font = bitmap_font.bitmap_font_create(bft, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 \xff:"); - - font_texture = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, font_texture); - gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 256, 256, 0, gl.RGBA, gl.UNSIGNED_BYTE, font_data); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - gl.bindTexture(gl.TEXTURE_2D, -1); -} - -get_text_width :: (text: str, size: f32 = DEFAULT_TEXT_SIZE) -> f32 { - return font->get_width(text, size); -} - -// 'x' and 'y' are the top-left coordinates of the text. 'y' is NOT the baseline. -draw_text :: (text: str, x: f32, y: f32, size := DEFAULT_TEXT_SIZE, color := gfx.Color4.{1,1,1}) { - gl.bindTexture(gl.TEXTURE_2D, font_texture); - gfx.set_texture(0); - - for char: text { - glyph := font->get_glyph(char); - - if glyph == null { - glyph = font->get_glyph(255); - assert(glyph != null, "NO NULL GLYPH"); - } - - gfx.textured_rect( - .{ x, y }, - .{ glyph.w * size * font.em, glyph.h * size * font.em }, - .{ glyph.x0, glyph.y0 }, - .{ glyph.x1 - glyph.x0, glyph.y1 - glyph.y0 }, - color = color); - - x += glyph.w * size * font.em; - } - - gfx.flush(); - gl.bindTexture(gl.TEXTURE_2D, -1); -} - -draw_rect :: proc { - (use r: Rectangle, color := gfx.Color4.{1,1,1}) { - gfx.set_texture(); - - width, height := Rectangle.dimensions(r); - gfx.rect(.{ x0, y0 }, .{ width, height }, color); - }, - - (x: f32, y: f32, w: f32, h: f32, color := gfx.Color4.{1,1,1}) { - gfx.set_texture(); - gfx.rect(.{ x, y }, .{ w, h }, color); - } -} - - - -Rectangle :: struct { - // - // x0,y0 ------------+ - // | | - // | | - // +------------ x1, y1 - // - - x0: f32 = 0; - y0: f32 = 0; - x1: f32 = 0; - y1: f32 = 0; - - width :: (use r: Rectangle) -> f32 do return math.abs(x1 - x0); - height :: (use r: Rectangle) -> f32 do return math.abs(y1 - y0); - - dimensions :: (use r: Rectangle) -> (width: f32, height: f32) { - return math.abs(x1 - x0), math.abs(y1 - y0); - } - - top_left :: (use r: Rectangle) -> (x: f32, y: f32) do return math.min(x0, x1), math.min(y0, y1); - bottom_right :: (use r: Rectangle) -> (x: f32, y: f32) do return math.max(x0, x1), math.max(y0, y1); -} - - - -// UI Flow - -Flow :: struct { - split_vertical :: proc { - (r: Rectangle, left_percent: f32) -> (left: Rectangle, right: Rectangle) { - return split_vertical(r, left_width=left_percent * Rectangle.width(r)); - }, - - (r: Rectangle, right_percent: f32) -> (left: Rectangle, right: Rectangle) { - return split_vertical(r, right_width=right_percent * Rectangle.width(r)); - }, - - (r: Rectangle, left_width: f32) -> (left: Rectangle, right: Rectangle) { - x0, y0 := Rectangle.top_left(r); - x1, y1 := Rectangle.bottom_right(r); - - return .{ x0=x0, x1=x0+left_width, y0=y0, y1=y1 }, - .{ x0=x0+left_width, x1=x1, y0=y0, y1=y1 }; - }, - - (r: Rectangle, right_width: f32) -> (left: Rectangle, right: Rectangle) { - x0, y0 := Rectangle.top_left(r); - x1, y1 := Rectangle.bottom_right(r); - - return .{ x0=x0, x1=x1-right_width, y0=y0, y1=y1 }, - .{ x0=x1-right_width, x1=x1, y0=y0, y1=y1 }; - } - } - - - split_horizontal :: proc { - (r: Rectangle, top_percent: f32) -> (top: Rectangle, bottom: Rectangle) { - return split_horizontal(r, top_height=top_percent * Rectangle.height(r)); - }, - - (r: Rectangle, bottom_percent: f32) -> (top: Rectangle, bottom: Rectangle) { - return split_horizontal(r, bottom_height=bottom_percent * Rectangle.height(r)); - }, - - (r: Rectangle, top_height: f32) -> (top: Rectangle, bottom: Rectangle) { - x0, y0 := Rectangle.top_left(r); - x1, y1 := Rectangle.bottom_right(r); - - return .{ x0=x0, x1=x1, y0=y0, y1=y0+top_height }, - .{ x0=x0, x1=x1, y0=y0+top_height, y1=y1 }; - }, - - (r: Rectangle, bottom_height: f32) -> (top: Rectangle, bottom: Rectangle) { - x0, y0 := Rectangle.top_left(r); - x1, y1 := Rectangle.bottom_right(r); - - return .{ x0=x0, x1=x1, y0=y0, y1=y1-bottom_height }, - .{ x0=x0, x1=x1, y0=y1-bottom_height, y1=y1 }; - } - } -} \ No newline at end of file -- 2.25.1