started working on notion of slides
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 17 Feb 2021 16:20:29 +0000 (10:20 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 17 Feb 2021 16:20:29 +0000 (10:20 -0600)
src/build.onyx
src/prez.onyx
src/slides.onyx [new file with mode: 0644]

index 92729c61c42aa329608618e524c175d89a11bf10..84315f8c52a2568ce42cc7c4b36bf9c03d6f1064 100644 (file)
@@ -8,3 +8,4 @@ use package build_opts as build_opts
 
 #load "src/prez"
 #load "src/events"
+#load "src/slides"
index 9703b200ede47e4dd233bdff322be132921588b5..c5b7ec1beed047e561603133ccd919e7876c1636 100644 (file)
@@ -57,7 +57,7 @@ draw_centered_text :: (text: str, y_baseline: f32) {
 
     x := (width - font_metrics.width) / 2;
 
-    fill_text(canvas, text, x, y_baseline);
+    fill_text(canvas, text, x, y_baseline * height);
 }
 
 dirty_display := true
@@ -71,7 +71,7 @@ poll_events :: () {
             printf("New window size: %i, %i\n", ev.resize.width, ev.resize.height);
             dirty_display = true;
 
-            use Canvas;
+            use Canvas
             set_size(canvas, ev.resize.width, ev.resize.height);
         }
 
@@ -92,7 +92,7 @@ loop :: () -> void #export "loop" {
 
         Canvas.clear(canvas, 0.1, 0.1, 0.1);
         Canvas.set_font(canvas, "bold 72px Arial");
-        draw_centered_text("Hello, World! This is a long title!", 100);
+        draw_centered_text("Hello, World! This is a long title!", .3);
 
         Canvas.set_font(canvas, "bold 48px Arial");
         draw_centered_text("This is some more text.", 170);
diff --git a/src/slides.onyx b/src/slides.onyx
new file mode 100644 (file)
index 0000000..2808212
--- /dev/null
@@ -0,0 +1,66 @@
+use package core
+
+Color :: struct {
+    r, g, b, a: f32;
+}
+
+Slideshow :: struct {
+    // A basic arena that should store everything related to slides.
+    // This makes it easy to free everything at once.
+    arena : alloc.arena.ArenaState;
+
+    title  : str;
+    slides : [..] Slide;
+
+    current_slide : i32;
+}
+
+Slide :: struct {
+    foreground, background: Color;
+    font_name : str;
+
+    items : [] ^Slide_Item;
+}
+
+Slide_Item :: struct #union {
+    Kind :: enum {
+        Undefined;
+        Text;
+    }
+
+    base: Slide_Item_Base;
+    text: Slide_Item_Text;
+}
+
+Slide_Item_Base :: struct {
+    kind : Slide_Item.Kind;
+}
+
+Slide_Item_Text :: struct {
+    use base : Slide_Item_Base;
+
+    Justify :: enum { Left; Center; Right; }
+
+    text    : str;
+    y_pos   : f32; // Between 0 and 1
+    justify : Justify;
+}
+
+
+
+slideshow_make :: (allocator := context.allocator) -> Slideshow {
+    slideshow: Slideshow;
+    slideshow.title = "Untitled Slideshow";
+
+    slideshow.arena = alloc.arena.make(allocator, arena_size = 16 * 1024);
+
+    array.init(^slideshow.slides, 4);
+
+    return slideshow;
+}
+
+slideshow_get_current_slide :: (use s: ^Slideshow) -> ^Slide {
+    current_slide = math.clamp(current_slide, 0, slides.count - 1); 
+
+    return ^slides[current_slide];
+}