From 5ad4db7fe2fb839f3def49cc974965b2546ce8c0 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 20 Feb 2021 11:07:18 -0600 Subject: [PATCH] added configurable slide animation in text format --- dist/prez.wasm | Bin 36146 -> 38294 bytes onyx.prez | 7 +++++ src/show_parser.onyx | 27 ++++++++++++++--- src/slides.onyx | 67 ++++++++++++++++++++++++++++--------------- todo | 2 +- 5 files changed, 75 insertions(+), 28 deletions(-) diff --git a/dist/prez.wasm b/dist/prez.wasm index 4ec8aced8c4354821333d4e802acce6a217b0cae..dd262a3d54c03ef2263813641b85acfdcb2da7b3 100644 GIT binary patch delta 12042 zcmcIqe|%Kcm4ElX_vT05B=aUeCm|$nhL8;5SHKVgDsq7!q9B5TS~UzLflNXINfdv< zgf6Ah+Aj52*V@+NcC~iJmNl+*YiXgo+s#(3bgNtKwk~vc{n*`Y#df#y>4)0=p8IC< z1902@V<-9C`|j`a>z;G&x%Zhz!%tdSnvAq>M1PmB0wnavuT4P&!FhHsJGY-YJi z@Mi#@d-m)xbe&&D5oHSv=wx#%ihhm`VO^20j%<(gI)atJ97Q3&O5t@47pMd3hx}~?i*?!92zjp+?XIH-Ozn^ zr(s#!hj#Q9^!BGa+Pin8x1lE2C4^}=b$1MHH*9)Ecv&M~-__mQdwu7fLqD^c9wL`foXGdpx@b-aDy-ZkF7N!S7 z7{0u}w|~GWpmU-sYj5rCOb-}NZjja82b}X5h8WECom+>Di1`oVq%cie7Fog+RyZmQ zDMiq*WpR-Zvd9&tVOw^YWm}eE$(U)`G8~Q?!BW!>o03bxLNhE2(buwtER>chWjHG> z{3H*u3o$$Xf?<@x7+_mrv(OBhmg)Zt)3l^4F^Z&tPib0!z&6aV5e%B9fx#A13lnk; z7LY;9392b{a|B62@>S5QGq`GchMvWd?S1?&u%5 zOBw;N9MWRkYH4|?3(paTGMwb=V(W*+o=3#azRuDr^*wRtuvmEY(C+R(5@pwJXm2i` zKlS#+rYT#lEBN|@@}&58kSaUPNJ`a|sWUvO&K4!jlr%j0+Kp}UY!SVGqllSi<6kggS2U zNg7WrTDGJ?zG6_%l7^YT7Al-D6IMcc(z9Bmhs`m;38`a(jx9MO-w^bbD`qS@>u`hM_9kv`b)70tpy1B-M4jPO0#+d937*cg zFjY!=v9RILnd;_7X*k>kX zsa(pdURx+V!=2`MhAPb@jELbl+_ls-oGQTX30?@OV2blImdo9$Ui zo9T!oq+T}0d(z8=HO}-2<#)0bR8$mL{Ux2exYoC{%MAC!Fl&zs3x%?r0Ug_ zX@+OfDX)fpF9+jgf%EzZ~FvV%6P7DCIFbl}O2gku1a%KiB6MwCWuTOl>HZ1z)va3Ziy*Vdbblz6rL100X7V{? z%nNwI2dNdZFy7TdS5E@bCxi%Kza+rAJk%W&is>_p*b6aU>)(kP1=FP38W3z4*AJcUkW~Xv>pPhZH__(f{H)pzN(fvL< zdxI0;C2SSRxcBSU$lN;Jdaw8d${!V<)U|z0{@eppFt0#dLtmZSLf6cz5r53BraEEJ z6Z1UzvY^p@SU=|l1L@^W5? z=FKakljU)-jeb_Xg7#G`k&nxf6BX^E`n2@Tmaj`#J!9%ipi!|I=#A<1F@Ni7wj+tS zHo5f`t09qD_q2!zhlNw%(}|dlTuty=$rkW!mD zfIhC~V0k8~J=5nM)L!nx9ZA>;OIv%kJXhQb$(O7opk%U6T`^mIW9fr#iS6q?UF}i( zbUUsGQNG=AUa~|v8%0XQO656cWMQmW6rFQ2&<7%;N_)9!Q}O$=VEfLo?p0d-C=tED z431ktDlVN*&SgunNqkcmqQT4d=+dJ!IPJ=^L)es_(6rR3W>~M#E7O{(yUd$?Y^IE5 z!+YSYnChg(S^@+p8sF1uc$n>nHZI%ggz6DpdYx;Ql^67*fvp$>_FcP_hLT4-wC$%=Px6!}4Q4V-n_?-~3w&8%g$nwo zmF-0;tYp6W*?jfP?5Ko5J1z1g=LIeDRnEgL@^#KbE%FrS!4~RIM5J?lyK#^kVKhADU@M$AEO^q)K%z4aJmReTd67h2GT112RHL4;QP0;X&w*QBsr#CM zs853ANm~_Y$H!D>);5erX8{4=J}KVT%(Cy zmm84GcTSX@-}RAzij2eI&&?3I4a*ZDEaHVmKAnK8HyQdPW*+(+^|b{AjSVI=`&ODu znj5W}mf!{`Y^tLIa>JD1+7#;CZ|md3d$yVehi_sN9a(?L1fzJ-(e&8L61w&3-t4di z_Eopa{hUu}mG^O8)hh4jys}ju;=HIuKFoPxi#*JEq(wf-Ikv|U&apj?a*plsJm(OP zxCQjvW#G1P7FpDGO!#U%_Ipf1QMc_R^Gq7X1dSRzV6DFyG+>PsSnKq#P8lR% zty2aESR-X3YOHn5sF?^QDiU!%G$ouwgq~e9ylhHW18G-F-neSdtK^{jH=^o% zS$QX*EG;X!Sr8t$_$)R4EK4pv%`qECH$Dk7nqwk|Qrgm~AT&2@HH zv(9F7>BG(Kto*Rl-(FxEUJR)4g)3cLxSJ-@pUw7UGP~d5Q-|rXW1uy17xU$s34GC( zD|f70-()uM8YmOKT5QpUy2lX2u;`od_!U=RP#2bkDcB zXL#(8LvOEd6mzI#!+h}}x^hDuyd+R=2Ks8sz3t1Bb~BjMT+b#vkI09(ch>|u``q=( zJB-d+HzCFTMvC2y^pKtex(QPq*6EWvg>FL4QJq3Jq33a(VlSh9lonrqa04&JEYtfa z1R$YYn|xSXeZleN#slDbd>MjV$4#7FSz6q6evBg56TX8w9i-A58kdea?^=Z26FGOw z{ThEjVBEjRX zW=*Z|eRKA&wPzmUFNB5~rRzrN7omz&?x@0!Y!iocTH*B~qUTwNMfe{1rxRgz;b(_y zMVQuv;|nev67~w%nfsO-=JUyg?U<4t3D;a?u?ZvjbOXX!IGfO^a9lh_k9I9CK!gB+ z3IJ6=mlv#*0OTVDtraEtRV?0#n8b6uh+9an7R;XOFQ2QsDCQ-6!AjpH?{Ni})pufmKyb2xP%| zF-lFDYE1lCri`{^mSC~RGKuD9gf2~-;jJo-B{Jy;n4UAChPenKwyGTUWDo~ms|txp zFILubF!^13l`Rp9Dx#%TDL z6WWdfP(L(58{N4GN*r)klzd7EGdoENm>p&GAG?#9G5i&#S$D>Cse=BjHX~{&>aAP2 zkYj3$iq6k`>NpELs;&UW%Fyif5gVDT`nQ1S{(7=RE;y2NZ2Jb|CNm9^6c@MCFLXTONv*ccX!@r55VzAv;3h z+6_8NS4`IxLRYxA>Ch&Edh}@HY-(y=CnW7_o=?|aayfmeWp~4b3x)jx7YcDzsj4o1 zq0j&;{fAsA(B}DBm;4yqXgx(-)>mPD{~@TIyL;Fh$1!VdJ&3M>6JiJt&~JYj5&E zdfc(3aOegz5yC@kB9KHdN-i~*N@h%8EpARM73$^nJw$f+lNq1U%r!VN8q6dtZLWp; z5O9VVtf88QIbsK`ZK$C)XEYV-dj{|x>p+d-o}r3<+N$YyZc$!`ZCEs?NMDV?j)!`b zRK^1fOF2|Tzge`J&MXQsxqq|hL*g>pxLCPuen21hScnj*Z^Y>S)=jjmB_-x*3-R6N zifR*FiC-AYWco&F^UZf%^?NSa8nrNMej&K>X#u{mYx4K}F)=*q-a{u^lT@>C{oJ46 zUNRfxU>9OPyvN}@fKb0D;=SCYZLiwI~3(0p(m(kJTxTvS^A_$jvN;Pio z2VE{TYQ>YELmR#r)Ph_Yb&d$!lY)x4qx{>_l-N$cDBV`}aE`#(#fVmdOP>+W)wJo( zxs{FM3V%$J-4`Hgv}5D)53tVFdwd%*wml5@Qy8I|dem@?4&1N>f>}W?EUcvT{Q0ym zP+Iy?D5+J9(khPKB5%z^Y0ZpP|4V#x%sBw)dV36s7|b6QHMdEe`7mBfaib^ow2Pv}N?zlo%-m#^Kj(1e*?_=8{=!~-^pQQD`MjA1AHen&TT~UxgM}C)##&Df9J))Ck?l?$fZ$d5g;9- z)j!hazFAdcz&k#z`T8zL>l2w;@mF*@^KG&Qek-0Ck%J4wloqheKYOs2Fs@X;6S&I7 zmm8-y8>*90EZ`pZF?CN0=K^ESZc7Dpzt78ATSGC8X@sTkq@l%+Rt_b_t2h&^9Qo?d z>ry;T_w7!VBV?|9ESY<%091tg9PR18gO=@>sv%uM>(VJP3YeGC3+Xy~dRHsm+Yu64 zCQF`@GLj8U6qg^3oVuqpuif3e##@U$GdDP1dG8siJ|i%ZO}g3@)qj|mOK z_6MTleqYeN+b{QxFpd+jNxl(=%w#IWY&z3X6UuKtQafrOEV;?(u{%9oT0Uam^_+-K zlK3A8Ix~N!hW#ZC`(HBbT6$P!G&FPJrDzw^^vxk$92WE>+fS%+*F%Eq&b*PB!(It{ zF16_8`qvfy03ZU1ncVO01x504K?fH!iHT&b==I6EhVJdXHadw@-xZ8G=1Fr zzr64GfcF=hm%WvbK{34>paCa8_Bb2Ng{aWXsE=J}=Mh2xknh&sOq7Q{5%T+vy)MzF zKk!h9!*X;@a%$ieLj~~JpRA3X#x9IrbMMMr(s0j8zTL`T*QgkW}TM2Wp z&Y>f_7KQVzTJwl6jqRcJdjG7UcRSZ@eOo{CV%LigrVxD=el6}CAWsw~if};_@`_p| zB9LBTE8;pKFVYInI^;R6`uR_w6%wh9PaN0%+E4@$RLL_*N8FM;8lg&n1ZxxISli@? zCR}TT+Uh;OTZ-}W;P)a+!FP5Sgh9_4+TpKfX+DFV=$K*b|qJz={9s&vyi1=Zl z3D?E+mw$A7*bmkSSJEZ>H%4UU9?uXPo*X%k^KX@pG;VLkg>DyDFyNG}MVks!g?t6-aAof9g`PiN3OHAsyNq z_6-I7bwjLRvRR|&Z(&>5b6w@gyZ916q1bH=F}$^5r;sV7y^nvUIlI0#Zg6NtM{8J< zGfyfyy0v10MYa@!-Dt8*GeOY)BTd z=^Vx7IP?}t;Ed$*KUWqy4 zE<=3}*>*#{g7=%L z8n_)WeIH+4=?;9oM!g5>W4{(o`1U@m-P_%V%HIik|09ifyuxKH&aKd=B<@Gd%C{=kD&E_&jGiQ8hT&IWXjP zX$%)*rjJ|n`GYGfUbdX*mj2!jZ{hr%cY11|JKbxjA6t|@P<|$x1G>dyf*F}=tRF!oBsYIh#}L_0}a_n z0!}17xD!ul+XvD^-Tj7oBH#qPbZ>7z;64&?tlrKpAagX}#5y{=K)v>f6gUxZCO$7# zF9w`&x({!SF;yQQmmEW<#W(Z~bq_HUH!v9nxA#Mm-U>Js;V!%(_FopOcd*(3Kk8M# zqJKTOVEz|_j_p5NMljJ42oQfc=)`a6>*?#?-RF%hv)F5xKG=ZP6G3|8Kwb89&?&#Z zA5!OOl6zZ0o}tCw^lo%{5A%S?XM>Kva9?@{7_l$p1O__w^Jeu?e0yHkKqu-y5z2K- z58-*WdMM;r%o9UB5_0UE5Pu;wCf2^hnuv?h3mNr>WjF q^e^CNM$npE7Uz`>yfSk9Iz9sq-@m|#Io8kH_k*YiAUt>f{Qm)()h6En delta 11121 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 ^Slide_Animation, default=null_proc, hash_count=2); + defer map.free(^animations); + map.put(^animations, "swipe", Slide_Animation_Swipe.make); + map.put(^animations, "fade", Slide_Animation_Fade.make); + parse_context := ParseContext.{ ^show_reader, ^variables }; current_slide: ^Slide = null; @@ -58,7 +63,7 @@ parse_slideshow :: (source: str, slideshow: ^Slideshow) { if current_slide != null { background_color = current_slide.background; - flush_items(current_slide, ^current_slide_items); + flush_items(current_slide, ^current_slide_items, slideshow); } current_slide = slideshow_insert_slide(slideshow); @@ -137,6 +142,18 @@ parse_slideshow :: (source: str, slideshow: ^Slideshow) { map.put(^variables, var_name, var_value); } + elseif command_name == "animation" { + anim_name := read_word(^show_reader, numeric_allowed=true); + + if map.has(^animations, anim_name) { + allocator := alloc.arena.make_allocator(^slideshow.arena); + current_slide.animation = (map.get(^animations, anim_name))(allocator); + } else { + printf("Unknown animation: '%s'\n", anim_name); + + current_slide.animation = null; + } + } else { printf("******** Unknown command: '%s'.\n", command_name); } @@ -164,12 +181,14 @@ parse_slideshow :: (source: str, slideshow: ^Slideshow) { } } - flush_items(current_slide, ^current_slide_items); + flush_items(current_slide, ^current_slide_items, slideshow); printf("Total slide count: %i\n", slideshow.slides.count); - flush_items :: (slide: ^Slide, items: ^[..] ^Slide_Item) { - slide.items = memory.make_slice(#type ^Slide_Item, items.count); + flush_items :: (slide: ^Slide, items: ^[..] ^Slide_Item, slideshow: ^Slideshow) { + allocator := alloc.arena.make_allocator(^slideshow.arena); + slide.items = memory.make_slice(#type ^Slide_Item, items.count, allocator = allocator); + for idx: items.count { slide.items[idx] = items.data[idx]; } diff --git a/src/slides.onyx b/src/slides.onyx index 799cd92..ea6717b 100644 --- a/src/slides.onyx +++ b/src/slides.onyx @@ -29,7 +29,7 @@ Slide :: struct { background : Color; aspect_ratio : f32 = 1; - animation_generator : (i32, i32) -> ^Slide_Animation; + animation: ^Slide_Animation; items : [] ^Slide_Item; } @@ -142,9 +142,11 @@ slideshow_advance_slide :: (use s: ^Slideshow, count := 1) { current_slide = math.clamp(current_slide, 0, slides.count - 1); if old_slide != current_slide { - if slides[current_slide].animation_generator == null_proc do return; + current_animation = slides[old_slide].animation; - current_animation = slides[current_slide].animation_generator(old_slide, current_slide); + if current_animation != null { + current_animation->init(old_slide, current_slide); + } } } @@ -186,7 +188,6 @@ slideshow_update_animation :: (use s: ^Slideshow) { if current_animation == null do return; if current_animation->update() { - cfree(current_animation); current_animation = null; } } @@ -194,14 +195,19 @@ slideshow_update_animation :: (use s: ^Slideshow) { -slide_init :: (use slide: ^Slide, background_color := Color.{0, 0, 0, 1}, item_count := 4, aspect := 1.0f) { +slide_init :: (use slide: ^Slide, + background_color := Color.{0, 0, 0, 1}, + item_count := 0, + aspect := 1.0f) { + background = background_color; aspect_ratio = aspect; - - animation_generator = fade_animation_make; + animation = null; if item_count > 0 { - items = memory.make_slice(#type ^Slide_Item, item_count); + // @GlobalVariable + allocator := alloc.arena.make_allocator(^the_slideshow.arena); + items = memory.make_slice(#type ^Slide_Item, item_count, allocator=allocator); memory.set(items.data, 0, items.count * sizeof ^Slide_Item); } else { @@ -356,8 +362,9 @@ aprintf :: (allocator: Allocator, format: str, va: ...) -> str { // Slide_Animation :: struct { - render : (anim: ^Slide_Animation, slideshow: ^Slideshow) -> void; + init : (anim: ^Slide_Animation, source: i32, target: i32) -> void; update : (anim: ^Slide_Animation) -> bool; + render : (anim: ^Slide_Animation, slideshow: ^Slideshow) -> void; source_slide : i32 = -1; target_slide : i32 = -1; @@ -365,22 +372,29 @@ Slide_Animation :: struct { Slide_Animation_Swipe :: struct { use base := Slide_Animation.{ + init = swipe_animation_init, update = swipe_animation_update, render = swipe_animation_render }; t : f32 = 0; dt : f32 = 0.03; -} -swipe_animation_make :: (source := -1, target := -1) -> ^Slide_Animation { - anim := new(Slide_Animation_Swipe); - *anim = Slide_Animation_Swipe.{}; - anim.source_slide = source; - anim.target_slide = target; + make :: (allocator := context.allocator) -> ^Slide_Animation_Swipe { + anim := new(Slide_Animation_Swipe, allocator=allocator); + *anim = Slide_Animation_Swipe.{}; + + return anim; + } +} - return anim; +#private_file +swipe_animation_init :: (use anim: ^Slide_Animation_Swipe, source := -1, target := -1) { + source_slide = source; + target_slide = target; + + t = 0; } #private_file @@ -411,22 +425,29 @@ swipe_animation_render :: (use anim: ^Slide_Animation_Swipe, slideshow: ^Slidesh Slide_Animation_Fade :: struct { use base := Slide_Animation.{ + init = fade_animation_init, update = fade_animation_update, render = fade_animation_render }; t : f32 = 0; dt : f32 = 0.03; -} -fade_animation_make :: (source := -1, target := -1) -> ^Slide_Animation { - anim := new(Slide_Animation_Fade); - *anim = Slide_Animation_Fade.{}; - anim.source_slide = source; - anim.target_slide = target; + make :: (allocator := context.allocator) -> ^Slide_Animation_Fade { + anim := new(Slide_Animation_Fade, allocator=allocator); + *anim = Slide_Animation_Fade.{}; + + return anim; + } +} + +#private_file +fade_animation_init :: (use anim: ^Slide_Animation_Fade, source := -1, target := -1) { + source_slide = source; + target_slide = target; - return anim; + t = 0; } #private_file diff --git a/todo b/todo index 1248765..b37fc6b 100644 --- a/todo +++ b/todo @@ -4,4 +4,4 @@ [X] Slide animation: Slide from Right [X] Slide animation: Fade -[ ] Slide animation config in text format +[X] Slide animation config in text format -- 2.25.1