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 {