cleaned up enum editor code
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 8 Feb 2022 14:53:06 +0000 (08:53 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 8 Feb 2022 14:53:06 +0000 (08:53 -0600)
src/entity/editor.onyx

index efedda2cfb32fc6a9ae4785dac2f34be0f684a78..3cdb998e2fe2c253965663d109ada89c76919c6f 100644 (file)
@@ -313,10 +313,17 @@ editor_draw :: () {
                         y += 20;
                         checkbox_value := (value & it.value) != 0;
                         if draw_checkbox(.{x, y, w, 20}, ^checkbox_value, it.name, increment=~~y) {
-                            println(checkbox_value);
-
-                            if !checkbox_value do *cast(^u32) v.data = ~~(value & ~it.value);
-                            else               do *cast(^u32) v.data = ~~(value |  it.value);
+                            switch enum_info.backing_type {
+                                case i8,  u8  do set_value(u8);
+                                case i16, u16 do set_value(u16);
+                                case i32, u32 do set_value(u32);
+                                case i64, u64 do set_value(u64);
+                            }
+
+                            set_value :: macro (T: type_expr) {
+                                if !checkbox_value do *cast(^T) v.data = ~~(value & ~it.value);
+                                else               do *cast(^T) v.data = ~~(value |  it.value);
+                            }
                         }
                     }
                 } else {