// TODO: Make sure that events are given in sorted order (by timestamp) // TODO: Adjust timestamp on events so that the oldest timestamp is newer than the // newest timestemp from the events from the previous call to GetInputEvents // Actually that should be in system func (linux *linuxSystemObject) GetInputEvents() ([]gin.OsEvent, int64) { var first_event *C.GlopKeyEvent cp := (*unsafe.Pointer)(unsafe.Pointer(&first_event)) var length C.int var horizon C.longlong C.GlopGetInputEvents(cp, unsafe.Pointer(&length), unsafe.Pointer(&horizon)) linux.horizon = int64(horizon) c_events := (*[1000]C.GlopKeyEvent)(unsafe.Pointer(first_event))[:length] events := make([]gin.OsEvent, length) for i := range c_events { events[i] = gin.OsEvent{ KeyId: gin.KeyId{ Device: gin.DeviceId{ Index: 5, Type: gin.DeviceTypeKeyboard, }, Index: gin.KeyIndex(c_events[i].index), }, Press_amt: float64(c_events[i].press_amt), Timestamp: int64(c_events[i].timestamp), } } done := false for !done { select { case event := <-jsCollect: events = append(events, gin.OsEvent{ KeyId: gin.KeyId{ Device: gin.DeviceId{ Index: gin.DeviceIndex(event.Index + 1), Type: gin.DeviceTypeController, }, Index: gin.KeyIndex(event.Key), }, Press_amt: event.FValue, Timestamp: int64(event.TimestampMs), }) default: done = true } } sort.Sort(osEventSlice(events)) return events, linux.horizon // return nil, 0 }
// TODO: Make sure that events are given in sorted order (by timestamp) // TODO: Adjust timestamp on events so that the oldest timestamp is newer than the // newest timestemp from the events from the previous call to GetInputEvents // Actually that should be in system func (win32 *win32SystemObject) GetInputEvents() ([]gin.OsEvent, int64) { var first_event *C.GlopKeyEvent cp := (*unsafe.Pointer)(unsafe.Pointer(&first_event)) var length C.int var horizon C.longlong C.GlopGetInputEvents(unsafe.Pointer(win32.window), cp, unsafe.Pointer(&length), unsafe.Pointer(&horizon)) win32.horizon = int64(horizon) c_events := (*[10000]C.GlopKeyEvent)(unsafe.Pointer(first_event))[:length] events := make([]gin.OsEvent, length) for i := range c_events { wx, wy := win32.rawCursorToWindowCoords(int(c_events[i].cursor_x), int(c_events[i].cursor_y)) events[i] = gin.OsEvent{ KeyId: gin.KeyId(c_events[i].index), Press_amt: float64(c_events[i].press_amt), Timestamp: int64(c_events[i].timestamp), X: wx, Y: wy, } } return events, win32.horizon }