Open salviati opened 12 years ago
This doesn't look as pretty, but at least it works:
func PushEvent(event Event) bool {
var p cast
switch ev := event.(type) {
case ActiveEvent: p = cast(&ev)
case KeyboardEvent: p = cast(&ev)
case MouseMotionEvent: p = cast(&ev)
case MouseButtonEvent: p = cast(&ev)
case JoyAxisEvent: p = cast(&ev)
case JoyBallEvent: p = cast(&ev)
case JoyHatEvent: p = cast(&ev)
case JoyButtonEvent: p = cast(&ev)
case ResizeEvent: p = cast(&ev)
case ExposeEvent: p = cast(&ev)
case QuitEvent: p = cast(&ev)
case UserEvent: p = cast(&ev)
case SysWMEvent: p = cast(&ev)
default: panic(fmt.Errorf("Unknown event type: %T", event))
}
ret := C.SDL_PushEvent((*C.SDL_Event)(p))
return ret != 0
}
Found the problem. cEvent() is attempting to run UnsafeAddr() on a pointer. I'll send in a pull-request with a fix.
One other thing to note, however: It looks like you're attempting to run PushEvent() on a non-pointer. You need to run it on a pointer:
PushEvent(UserEvent{})
will panic, but
PushEvent(&UserEvent{})
will succeed, after the fix is implemented. I'll also add something to the godoc comment for PushEvent() that explicitly states that.
This is not compatible with the current event-handling though (which needs to be changed anyway: Issue 55).
cEvent() causes panic with
panic: reflect.Value.UnsafeAddr of unaddressable value.
. One can simply try pushing a UserEvent to get this.