variant_type_ptr get_object_event_arg_type(int id) { #define EVENT_ARG(event_id, arg_string) \ case OBJECT_EVENT_##event_id: { \ static const variant_type_ptr p = parse_variant_type(variant(arg_string)); \ return p; \ } switch(id) { EVENT_ARG(WINDOW_RESIZE, "{width: int, height: int}") EVENT_ARG(MOUSE_DOWN, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal]}") EVENT_ARG(MOUSE_UP, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal]}") EVENT_ARG(MOUSE_MOVE, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal]}") EVENT_ARG(MOUSE_DOWN_STAR, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal], handled: bool, objects_under_mouse: [custom_obj]}") EVENT_ARG(MOUSE_UP_STAR, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal], handled: bool, objects_under_mouse: [custom_obj]}") EVENT_ARG(MOUSE_MOVE_STAR, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal], handled: bool, objects_under_mouse: [custom_obj]}") EVENT_ARG(MOUSE_ENTER, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal]}") EVENT_ARG(MOUSE_LEAVE, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal]}") EVENT_ARG(MOUSE_CLICK, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal]}") EVENT_ARG(MOUSE_DRAG, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal]}") EVENT_ARG(MOUSE_DRAG_START, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal]}") EVENT_ARG(MOUSE_DRAG_END, "{mouse_x: int, mouse_y: int, mouse_button: int, world_point: [decimal, decimal, decimal]}") default: return variant_type_ptr(); } #undef EVENT_ARG }
variant_type_ptr null_excluded() const { std::vector<variant_type_ptr> new_types; foreach(variant_type_ptr t, types_) { if(t->is_type(variant::VARIANT_TYPE_NULL) == false) { new_types.push_back(t); } } if(new_types.size() != types_.size()) { return get_union(new_types); } else { return variant_type_ptr(); } }