added advancing through the slideshow
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 17 Feb 2021 19:25:03 +0000 (13:25 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 17 Feb 2021 19:25:03 +0000 (13:25 -0600)
dist/index.js
src/prez.onyx
src/slides.onyx

index 1877084bb9df9d2098a5f64c9089bb67a403d874..db3df5bd7dded248a5419ce96a4d6b12a4b35254 100644 (file)
@@ -62,6 +62,11 @@ let event_import_obj = {
         });
 
         push_event_to_buffer(esp, event_size, 0x06, [ window.innerWidth, window.innerHeight ]);
+
+        document.oncontextmenu = (e) => {
+            e.preventDefault = true;
+            return false;
+        };
     }
 }
 
index 6f810aa7625c490de4b405416e1aaef2bbb86875..eb3da2ce5992f29e783f656ea5d01972efa46057 100644 (file)
@@ -36,6 +36,14 @@ poll_events :: () {
 
         case MouseDown {
             printf("Mouse down: %i, %i\n", ev.mouse.pos_x, ev.mouse.pos_y);
+
+            use event.MouseButton
+            switch ev.mouse.button {
+                case Right    do slideshow_advance_slide(^the_slideshow, -1);
+                case #default do slideshow_advance_slide(^the_slideshow, 1);
+            }
+
+            redraw = 2;
         }
     }
 }
@@ -72,6 +80,29 @@ create_dummy_show :: () {
         slide.items[1].text.y_pos = .6;
         slide.items[1].text.font_name = "italic 36px Arail";
     }
+
+    { // Slide 2
+        slide := slideshow_insert_slide(^the_slideshow);
+        slide_init(slide, background_color = Color.{ 0.2, 0.1, 0.1 }, item_count = 3);
+        
+        slide.items[0] = slideshow_make_item(^the_slideshow);
+        slide.items[0].kind = Slide_Item.Kind.Text;
+        slide.items[0].text.text = "The Second Slide! Duh duh duhhhh";
+        slide.items[0].text.y_pos = .2;
+        slide.items[0].text.font_name = "bold 72px Arail";
+
+        slide.items[1] = slideshow_make_item(^the_slideshow);
+        slide.items[1].kind = Slide_Item.Kind.Text;
+        slide.items[1].text.text = "Here is some monospace text.";
+        slide.items[1].text.y_pos = .4;
+        slide.items[1].text.font_name = "36px monospace";
+
+        slide.items[2] = slideshow_make_item(^the_slideshow);
+        slide.items[2].kind = Slide_Item.Kind.Text;
+        slide.items[2].text.text = "Here is a block of much longer text that will not wrap correctly, which is annoying but I think the best thing to do is... I don't know yet.";
+        slide.items[2].text.y_pos = .7;
+        slide.items[2].text.font_name = "36px Calibri";
+    }
 }
 
 main :: (args: [] cstr) {
index 52a3c4fe22de0c42d73a828cd9e654de56b7ee7c..30a63347725d892d5b8bb06914e2fbf526b963f0 100644 (file)
@@ -58,13 +58,23 @@ Slide_Item_Text :: struct {
 
 slideshow_make :: (allocator := context.allocator) -> Slideshow {
     slideshow: Slideshow;
-    slideshow.title = "Untitled Slideshow";
+    slideshow_init(^slideshow, allocator);
+    return slideshow;
+}
 
-    slideshow.arena = alloc.arena.make(allocator, arena_size = 16 * 1024);
+slideshow_init :: (use s: ^Slideshow, allocator := context.allocator) {
+    title = "Untitled Slideshow";
+    current_slide = 0;
 
-    array.init(^slideshow.slides, 4);
+    arena = alloc.arena.make(allocator, arena_size = 16 * 1024);
+    array.init(^slides, 4);
+}
 
-    return slideshow;
+slideshow_reset :: (use s: ^Slideshow) {
+    alloc.arena.free(^arena);
+    array.free(^slides);
+
+    slideshow_init(s);
 }
 
 slideshow_get_current_slide :: (use s: ^Slideshow) -> ^Slide {
@@ -73,6 +83,11 @@ slideshow_get_current_slide :: (use s: ^Slideshow) -> ^Slide {
     return ^slides[current_slide];
 }
 
+slideshow_advance_slide :: (use s: ^Slideshow, count := 1) {
+    current_slide += count;
+    current_slide = math.clamp(current_slide, 0, slides.count - 1); 
+}
+
 slideshow_insert_slide :: (use s: ^Slideshow, at := -1) -> ^Slide {
     // @Robustness: not checking the return values on these calls
 
@@ -82,7 +97,8 @@ slideshow_insert_slide :: (use s: ^Slideshow, at := -1) -> ^Slide {
     }
 
     array.ensure_capacity(^slides, slides.count + 1);
-    return ^slides[at];
+    defer slides.count += 1;
+    return ^slides[slides.count];
 }
 
 slideshow_make_item :: (use s: ^Slideshow) -> ^Slide_Item {