From d2ddaf9f336b36ff508a6bea270047f4ca1909a1 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Fri, 19 Feb 2021 19:57:00 -0600 Subject: [PATCH] random addition and efficiency gains --- dist/prez.wasm | Bin 33281 -> 34418 bytes initial.prez | 4 ++- onyx.prez | 2 +- src/show_parser.onyx | 68 ++++++++++++++++++++++++++++++------------- src/slides.onyx | 17 +++++++---- 5 files changed, 64 insertions(+), 27 deletions(-) diff --git a/dist/prez.wasm b/dist/prez.wasm index 598ac5a4ea5db3dd4ff0b49896bef2c830ecb6a5..5a1bf6436ba03e657c1e5cec7315bd273d2fd09d 100644 GIT binary patch delta 13203 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 diff --git a/initial.prez b/initial.prez index 8fa408a..ddecafc 100644 --- a/initial.prez +++ b/initial.prez @@ -1,3 +1,5 @@ +[aspect_ratio 4 3] + [slide] [background 60 60 60] -[text_style undefind font_name "monospace" font_size 48 font_attr bold centered] +[text_style inherit font_name "monospace" font_size 48 font_attr bold centered] [y 50] Drop a presentation file here! diff --git a/onyx.prez b/onyx.prez index 8af1ebf..a5d7fac 100644 --- a/onyx.prez +++ b/onyx.prez @@ -60,7 +60,7 @@ [y 30] It defines: [text_style inherit padding 15] -▪ A Virtual Instruction Set Architecture +▪ Virtual Instruction Set Architecture ▪ Linear Memory Model ▪ Arbitrary imports ▪ Safe indirect function calls diff --git a/src/show_parser.onyx b/src/show_parser.onyx index a3c5d27..310930e 100644 --- a/src/show_parser.onyx +++ b/src/show_parser.onyx @@ -25,16 +25,22 @@ parse_slideshow :: (source: str, slideshow: ^Slideshow) { text_styles := map.make(str, Slide_Item_Text, default_text_style); defer map.free(^text_styles); + map.put(^text_styles, "inherit", default_text_style); variables := map.make(str, u32); defer map.free(^variables); parse_context := ParseContext.{ ^show_reader, ^variables }; - current_slide: ^Slide; - current_item_idx := 0; + current_slide: ^Slide = null; current_text_style: Slide_Item_Text; + current_slide_items := array.make(#type ^Slide_Item, 8); + defer array.free(^current_slide_items); + + aspect_ratio := 1.0f; + y_increment := 0.05f; + while !stream_end_of_file(^show_stream) { skip_whitespace(^show_reader); defer skip_whitespace(^show_reader); @@ -48,23 +54,39 @@ parse_slideshow :: (source: str, slideshow: ^Slideshow) { command_name := read_word(^show_reader, allocator=parse_alloc); if command_name == "slide" { - prev_slide := ^slideshow.slides[slideshow.slides.count - 1]; + background_color := Color.{ 0, 0, 0 }; + + if current_slide != null { + background_color = current_slide.background; + flush_items(current_slide, ^current_slide_items); + } + current_slide = slideshow_insert_slide(slideshow); - current_item_idx = 0; - // @Robustness @Incomplete: Currently, there is a fixed number of items - // on EVERY slide, which both wastes memory for small slides, and limits - // how many things can be in a slide. - slide_init(current_slide, background_color=prev_slide.background, item_count = 16); + // @NOTE: item_count is 0 because the items will be allocated and inserted later + slide_init(current_slide, + item_count = 0, + background_color = background_color, + aspect = aspect_ratio); } elseif command_name == "background" { r, g, b := parse_color(^parse_context); current_slide.background = Color.{ r, g, b }; } elseif command_name == "y" { - y := read_u32(^show_reader); + y := parse_numeric_value(^parse_context); current_text_style.y_pos = cast(f32) y / 100; } + elseif command_name == "y_inc" { + y := parse_numeric_value(^parse_context); + y_increment = cast(f32) y / 100; + } + elseif command_name == "aspect_ratio" { + w := parse_numeric_value(^parse_context); + h := parse_numeric_value(^parse_context); + + aspect_ratio = cast(f32) w / cast(f32) h; + } elseif command_name == "text_style" { text_style_name := read_word(^show_reader, numeric_allowed=true); if !map.has(^text_styles, text_style_name) { @@ -100,16 +122,14 @@ parse_slideshow :: (source: str, slideshow: ^Slideshow) { new_slide_image.kind = Slide_Item.Kind.Image; parse_image_style(^parse_context, ^new_slide_image.image, parse_alloc); - current_slide.items[current_item_idx] = new_slide_image; - current_item_idx += 1; + array.push(^current_slide_items, new_slide_image); } elseif command_name == "rect" { new_slide_rect := slideshow_make_item(slideshow); new_slide_rect.kind = Slide_Item.Kind.Rect; parse_rect_style(^parse_context, ^new_slide_rect.rect, parse_alloc); - current_slide.items[current_item_idx] = new_slide_rect; - current_item_idx += 1; + array.push(^current_slide_items, new_slide_rect); } elseif command_name == "var" { var_name := read_word(^show_reader, numeric_allowed=true); @@ -130,24 +150,32 @@ parse_slideshow :: (source: str, slideshow: ^Slideshow) { case #default { // @Memory - text := read_line(^show_reader); + text_allocator := alloc.arena.make_allocator(^slideshow.arena); + text := read_line(^show_reader, text_allocator); new_slide_text := slideshow_make_item(slideshow); new_slide_text.text = current_text_style; new_slide_text.text.text = text; // Oofta... - current_slide.items[current_item_idx] = new_slide_text; - current_item_idx += 1; + array.push(^current_slide_items, new_slide_text); - // @Robustness - // This feels like the right amount, but obviously this should change - // depending on font size, window height, etc... - current_text_style.y_pos += .05; + current_text_style.y_pos += y_increment; } } } + flush_items(current_slide, ^current_slide_items); + 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); + for idx: items.count { + slide.items[idx] = items.data[idx]; + } + + array.clear(items); + } } #private_file diff --git a/src/slides.onyx b/src/slides.onyx index 0af702f..ce54db5 100644 --- a/src/slides.onyx +++ b/src/slides.onyx @@ -25,7 +25,8 @@ Slideshow :: struct { } Slide :: struct { - background: Color; + background : Color; + aspect_ratio : f32 = 1; items : [] ^Slide_Item; } @@ -51,7 +52,7 @@ Slide_Item_Base :: struct { Slide_Item_Text :: struct { use base := Slide_Item_Base.{ Slide_Item.Kind.Text }; - color : Color = Color.{ 1, 1, 1 }; + color := Color.{ 1, 1, 1 }; font_name : str; font_size : u32; @@ -163,11 +164,17 @@ slideshow_load_image :: (use s: ^Slideshow, image_name: str, image_path: str) -> return image; } -slide_init :: (use slide: ^Slide, background_color := Color.{0, 0, 0, 1}, item_count := 4) { +slide_init :: (use slide: ^Slide, background_color := Color.{0, 0, 0, 1}, item_count := 4, aspect := 1.0f) { background = background_color; + aspect_ratio = aspect; - items = memory.make_slice(#type ^Slide_Item, item_count); - memory.set(items.data, 0, items.count * sizeof ^Slide_Item); + if item_count > 0 { + items = memory.make_slice(#type ^Slide_Item, item_count); + memory.set(items.data, 0, items.count * sizeof ^Slide_Item); + + } else { + items.count = 0; + } } slide_render :: (use slide: ^Slide) { -- 2.25.1