added members to enum type info
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 23 Jun 2021 16:35:10 +0000 (11:35 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 23 Jun 2021 16:35:10 +0000 (11:35 -0500)
bin/onyx
modules/json/encoder.onyx
modules/ui/components/slider.onyx
src/onyxwasm_type_table.c

index b0b63777c1a4d183aa47f60091fbaddb147b0c1c..c55c29c4ae9604960fcb50c789c9836d98c56294 100755 (executable)
Binary files a/bin/onyx and b/bin/onyx differ
index 99ce21e56ece0c43d8f672781b80e03dcd607fcc..286a8d5b36c56433768439bfecf0c87aed2df20b 100644 (file)
@@ -134,4 +134,4 @@ encode :: #match {
     // #precedence 1000 (w: ^io.Writer, v: $T) -> Encoding_Error {
     //     return .Unsupported_Type;
     // }
-}
\ No newline at end of file
+}
index 4c1251a18cbe9913ce7300a49a5a80e1a8252684..6fbfe9a4b713d7936929b36ba7718ae70d22e67c 100644 (file)
@@ -10,8 +10,9 @@ Slider_Theme :: struct {
     box_border_color := gfx.Color4.{ 0.2, 0.2, 0.2 };
     box_border_width := 4.0f;   @InPixels
 
-    bar_color       := gfx.Color4.{ 0.4, 0.4, 0.4 };
-    bar_hover_color := gfx.Color4.{ 1, 0, 0 };
+    bar_color                := gfx.Color4.{ 0.4, 0.4, 0.4 };
+    bar_hover_color          := gfx.Color4.{ 0, 0, 1 };
+    bar_hover_negative_color := gfx.Color4.{ 1, 0, 0 }; // The color when value is less than 0
 }
 
 default_slider_theme := Slider_Theme.{};
@@ -62,7 +63,9 @@ slider :: (use r: Rectangle, value: ^$T, min_value: T, max_value: T, text: str,
 
     box_border_width := theme.box_border_width;
 
-    bar_color := color_lerp(animation_state.hover_time, theme.bar_color, theme.bar_hover_color);
+    bar_color := theme.bar_color;
+    if *value < 0 do bar_color = color_lerp(animation_state.hover_time, bar_color, theme.bar_hover_negative_color);
+    else          do bar_color = color_lerp(animation_state.hover_time, bar_color, theme.bar_hover_color);
 
     gfx.set_texture();
     gfx.rect(.{ x0, y0 }, .{ width, height }, theme.box_border_color);
index e14f9906197f8f5489f3accd0b56f1d6cd17c6d4..936dbb4fd82b029366d8c8fc69bd79ba6b6f857b 100644 (file)
@@ -121,14 +121,35 @@ u64 build_type_table(OnyxWasmModule* module) {
             }
 
             case Type_Kind_Enum: {
+                AstEnumType* ast_enum = (AstEnumType *) type->ast_type;
+                u32 member_count = bh_arr_length(ast_enum->values);
+                u32* name_locations = bh_alloc_array(global_scratch_allocator, u32, member_count);
+
+                u32 i = 0;
+                bh_arr_each(AstEnumValue *, value, ast_enum->values) {
+                    name_locations[i++] = table_buffer.length;
+
+                    bh_buffer_append(&table_buffer, (*value)->token->text, (*value)->token->length);
+                }
+                bh_buffer_align(&table_buffer, 8);
+
+                u32 member_base = table_buffer.length;
+                i = 0;
+                bh_arr_each(AstEnumValue *, value, ast_enum->values) {
+                    u32 name_loc = name_locations[i++];
+
+                    bh_buffer_align(&table_buffer, 8);
+                    PATCH;
+                    bh_buffer_write_u64(&table_buffer, name_loc);
+                    bh_buffer_write_u64(&table_buffer, (*value)->token->length);
+                    bh_buffer_write_u64(&table_buffer, (*value)->value->value.l);
+                }
 
                 u32 name_base = table_buffer.length;
                 u32 name_length = strlen(type->Enum.name);
                 bh_buffer_append(&table_buffer, type->Enum.name, name_length);
                 bh_buffer_align(&table_buffer, 8);
 
-                // u32 member_base = table_buffer.length;
-
                 table_info[type_idx] = table_buffer.length;
                 bh_buffer_write_u32(&table_buffer, type->kind);
                 bh_buffer_write_u32(&table_buffer, type_size_of(type));
@@ -137,8 +158,9 @@ u64 build_type_table(OnyxWasmModule* module) {
                 PATCH;
                 bh_buffer_write_u64(&table_buffer, name_base);
                 bh_buffer_write_u64(&table_buffer, name_length);
-                bh_buffer_write_u64(&table_buffer, 0);                   // TODO: Add member info here. Also, Patching
-                bh_buffer_write_u64(&table_buffer, 0);
+                PATCH;
+                bh_buffer_write_u64(&table_buffer, member_base);
+                bh_buffer_write_u64(&table_buffer, member_count);
                 bh_buffer_write_u32(&table_buffer, type->Enum.is_flags ? 1 : 0);
                 break;
             }