diff --git a/src/ginput/driver_mouse.h b/src/ginput/driver_mouse.h index 836ae1de..5f948458 100644 --- a/src/ginput/driver_mouse.h +++ b/src/ginput/driver_mouse.h @@ -74,7 +74,6 @@ typedef struct GMouseVMT { #define GMOUSE_VFLG_CALIBRATE 0x0010 // This device requires calibration #define GMOUSE_VFLG_CAL_EXTREMES 0x0020 // Use edge to edge calibration #define GMOUSE_VFLG_CAL_TEST 0x0040 // Test the results of the calibration - #define GMOUSE_VFLG_CAL_LOADFREE 0x0080 // Call gfxFree on the buffer returned by the VMT calload() routine. #define GMOUSE_VFLG_ONLY_DOWN 0x0100 // This device returns a valid position only when the mouse is down #define GMOUSE_VFLG_POORUPDOWN 0x0200 // Position readings during up/down are unreliable #define GMOUSE_VFLG_DYNAMICONLY 0x8000 // This mouse driver should not be statically initialized eg Win32 @@ -89,8 +88,8 @@ typedef struct GMouseVMT { bool_t (*init)(GMouse *m, unsigned driverinstance); // Required void (*deinit)(GMouse *m); // Optional bool_t (*get)(GMouse *m, GMouseReading *prd); // Required - void (*calsave)(GMouse *m, void *buf, size_t sz); // Optional - const char *(*calload)(GMouse *m, size_t sz); // Optional: Can return NULL if no data is saved. + void (*calsave)(GMouse *m, const void *buf, size_t sz); // Optional + bool_t (*calload)(GMouse *m, void *buf, size_t sz); // Optional } GMouseVMT; #define gmvmt(m) ((const GMouseVMT const *)((m)->d.vmt)) diff --git a/src/ginput/ginput_mouse.c b/src/ginput/ginput_mouse.c index 570839a2..fcaa53b8 100644 --- a/src/ginput/ginput_mouse.c +++ b/src/ginput/ginput_mouse.c @@ -462,7 +462,7 @@ static void MousePoll(void *param) { gdispGSetClip(m->display, 0, 0, w, h); #endif - // Ensure we get minimaly processed readings for the calibration + // Ensure we get minimally processed readings for the calibration m->flags |= GMOUSE_FLG_IN_CAL; // Set up our calibration locations @@ -519,7 +519,7 @@ static void MousePoll(void *param) { gfxSleepMilliseconds(CALIBRATION_POLL_PERIOD); } - // Ignore presses less than CALIBRATION_MAXPRESS_PERIOD milliseconds + // Ignore presses less than CALIBRATION_MINPRESS_PERIOD milliseconds } while(j < CALIBRATION_MINPRESS_PERIOD/CALIBRATION_POLL_PERIOD); points[i].x = px / j; points[i].y = py / j; @@ -689,23 +689,13 @@ void _gmousePostInitDriver(GDriver *g) { #if !GINPUT_TOUCH_NOCALIBRATE && !GINPUT_TOUCH_STARTRAW if ((gmvmt(m)->d.flags & GMOUSE_VFLG_CALIBRATE)) { - GMouseCalibration *pc; - #if GINPUT_TOUCH_USER_CALIBRATION_LOAD - if ((pc = (GMouseCalibration *)LoadMouseCalibration(gdriverGetDriverInstanceNumber((GDriver *)m), sizeof(GMouseCalibration)))) { - memcpy(&m->caldata, pc, sizeof(GMouseCalibration)); - #if GINPUT_TOUCH_USER_CALIBRATION_FREE - gfxFree(pc); - #endif + if (LoadMouseCalibration(gdriverGetDriverInstanceNumber((GDriver *)m), &m->caldata, sizeof(GMouseCalibration)))) m->flags |= GMOUSE_FLG_CALIBRATE; - } else + else #endif - if (gmvmt(m)->calload && (pc = (GMouseCalibration *)gmvmt(m)->calload(m, sizeof(GMouseCalibration)))) { - memcpy(&m->caldata, pc, sizeof(GMouseCalibration)); - if ((gmvmt(m)->d.flags & GMOUSE_VFLG_CAL_LOADFREE)) - gfxFree(pc); + if (gmvmt(m)->calload && gmvmt(m)->calload(m, &m->caldata, sizeof(GMouseCalibration)))) m->flags |= GMOUSE_FLG_CALIBRATE; - } #if !GINPUT_TOUCH_NOCALIBRATE_GUI else while (CalibrateMouse(m)); diff --git a/src/ginput/ginput_mouse.h b/src/ginput/ginput_mouse.h index 29405e50..e59b2dae 100644 --- a/src/ginput/ginput_mouse.h +++ b/src/ginput/ginput_mouse.h @@ -156,15 +156,14 @@ extern "C" { * @return A pointer to the data or NULL on failure * * @param[in] instance The mouse input instance number + * @param[in] data Where the data should be placed * @param[in] sz The size in bytes of the data to retrieve. * * @note This routine is provided by the user application. It is only * called if GINPUT_TOUCH_USER_CALIBRATION_LOAD has been set to TRUE in the * users gfxconf.h file. - * @note If GINPUT_TOUCH_USER_CALIBRATION_FREE has been set to TRUE in the users - * gfxconf.h file then the buffer returned will be free'd using gfxFree(). */ - void *LoadMouseCalibration(unsigned instance, size_t sz); + bool_t LoadMouseCalibration(unsigned instance, void *data, size_t sz); /** * @brief Save a set of mouse calibration data diff --git a/src/ginput/sys_options.h b/src/ginput/sys_options.h index 4bc37715..6de8ea83 100644 --- a/src/ginput/sys_options.h +++ b/src/ginput/sys_options.h @@ -134,12 +134,12 @@ #endif /** * @brief Milliseconds to generate a CXTCLICK on a touch device. - * @details Defaults to 700 millseconds + * @details Defaults to 500 millseconds * @note If you hold the touch down for longer than this a CXTCLICK is generated * but only on a touch device. */ #ifndef GINPUT_TOUCH_CXTCLICK_TIME - #define GINPUT_TOUCH_CXTCLICK_TIME 700 + #define GINPUT_TOUCH_CXTCLICK_TIME 500 #endif /** * @brief There is a user supplied routine to load mouse calibration data @@ -149,14 +149,6 @@ #ifndef GINPUT_TOUCH_USER_CALIBRATION_LOAD #define GINPUT_TOUCH_USER_CALIBRATION_LOAD FALSE #endif - /** - * @brief The buffer returned by the users @p LoadMouseCalibration() routine must be gfxFree()'d - * by the mouse code. - * @details Defaults to FALSE - */ - #ifndef GINPUT_TOUCH_USER_CALIBRATION_FREE - #define GINPUT_TOUCH_USER_CALIBRATION_FREE FALSE - #endif /** * @brief There is a user supplied routine to save mouse calibration data * @details Defaults to FALSE