func convertEventPy()

in main.go [499:565]


func convertEventPy(eventPy *C.PyObject) (event gymvnc.VNCEvent, ok bool) {
	// eventPy: ("PointerEvent", x, y, buttonmask) or ("KeyEvent", key, down)

	// if PyTuple_Check(eventPy) == 0 {
	// 	setError(errors.New("event was not a tuple"))
	// 	ok = false
	// 	return
	// }
	t := C.PyTuple_GetItem(eventPy, C.Py_ssize_t(0))
	if t == nil {
		C.PyErr_Clear()
		repr, isOk := PyObject_Repr(eventPy)
		if !isOk {
			return
		}
		setError(errors.Errorf("Expected non-empty tuple rather than: %s", repr))
		return
	}

	eventType, isOk := GoString_FromPyString(t)
	if !isOk {
		return
	}

	if eventType == "PointerEvent" {
		x, isOk := getIntFromTuple(eventPy, 1)
		if !isOk {
			return
		}

		y, isOk := getIntFromTuple(eventPy, 2)
		if !isOk {
			return
		}

		mask, isOk := getIntFromTuple(eventPy, 3)
		if !isOk {
			return
		}

		event = gymvnc.PointerEvent{
			Mask: vncclient.ButtonMask(mask),
			X:    uint16(x),
			Y:    uint16(y),
		}
	} else if eventType == "KeyEvent" {
		keysym, isOk := getIntFromTuple(eventPy, 1)
		if !isOk {
			return
		}

		down, isOk := getBoolFromTuple(eventPy, 2)
		if !isOk {
			return
		}

		event = gymvnc.KeyEvent{
			Keysym: uint32(keysym),
			Down:   down,
		}
	} else {
		setError(errors.Errorf("invalid event type: %s", eventType))
	}

	ok = true
	return
}