mouse: Replace press_state with bool pressed
Change the mouse_button structure to use a bool pressed field instead of an unsigned char press_state. This simplifies the API by using a natural boolean type for a binary state. Remove the BUTTON_PRESSED/BUTTON_RELEASED defines as they're no longer needed. Update all mouse drivers, tests, and the mouse command to use the new field name and type. Series-changes: 2 - Add new patch to replace press_state with bool pressed Co-developed-by: Claude <noreply@anthropic.com> Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -110,9 +110,7 @@ static void sandbox_sdl_poll_events(void)
|
||||
m->button.button = BUTTON_MIDDLE;
|
||||
else if (event.button.button == SDL_BUTTON_RIGHT)
|
||||
m->button.button = BUTTON_RIGHT;
|
||||
m->button.press_state = event.type ==
|
||||
SDL_MOUSEBUTTONDOWN ?
|
||||
BUTTON_PRESSED : BUTTON_RELEASED;
|
||||
m->button.pressed = event.type == SDL_MOUSEBUTTONDOWN;
|
||||
m->button.x = event.button.x;
|
||||
m->button.y = event.motion.y;
|
||||
break;
|
||||
|
||||
@@ -35,7 +35,7 @@ static int do_mouse_dump(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||
struct mouse_button *but = &evt.button;
|
||||
|
||||
printf("button: button==%d, press=%d, clicks=%d, X=%d, Y=%d\n",
|
||||
but->button, but->press_state,
|
||||
but->button, but->pressed,
|
||||
but->clicks, but->x, but->y);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ static int efi_mouse_get_event(struct udevice *dev, struct mouse_event *event)
|
||||
u8 mask = 1 << i;
|
||||
if (diff & mask) {
|
||||
but->button = i;
|
||||
but->press_state = (new_buttons & mask) ? 1 : 0;
|
||||
but->pressed = (new_buttons & mask) ? true : false;
|
||||
but->clicks = 1;
|
||||
but->x = priv->x;
|
||||
but->y = priv->y;
|
||||
|
||||
@@ -51,18 +51,17 @@ int mouse_get_click(struct udevice *dev, struct vid_pos *pos)
|
||||
/* Only process button events for left button */
|
||||
if (event.type == MOUSE_EV_BUTTON &&
|
||||
event.button.button == BUTTON_LEFT) {
|
||||
bool pressed = event.button.press_state == BUTTON_PRESSED;
|
||||
bool pending = false;
|
||||
|
||||
/* Detect press->release transition (click) */
|
||||
if (uc_priv->left_pressed && !pressed) {
|
||||
if (uc_priv->left_pressed && !event.button.pressed) {
|
||||
pending = true;
|
||||
uc_priv->click_pos.x = event.button.x;
|
||||
uc_priv->click_pos.y = event.button.y;
|
||||
}
|
||||
|
||||
/* Update button state */
|
||||
uc_priv->left_pressed = pressed;
|
||||
uc_priv->left_pressed = event.button.pressed;
|
||||
|
||||
/* If we just detected a click, return it */
|
||||
if (pending) {
|
||||
|
||||
@@ -142,7 +142,7 @@ static int usb_mouse_get_event(struct udevice *dev, struct mouse_event *event)
|
||||
|
||||
if (diff && mask) {
|
||||
but->button = i;
|
||||
but->press_state = priv->buttons & mask;
|
||||
but->pressed = priv->buttons & mask;
|
||||
but->clicks = 1;
|
||||
but->x = priv->x;
|
||||
but->y = priv->y;
|
||||
|
||||
@@ -27,9 +27,6 @@ enum mouse_state_t {
|
||||
BUTTON_SCROLL_MINUS = 1 << 4,
|
||||
};
|
||||
|
||||
#define BUTTON_RELEASED 0
|
||||
#define BUTTON_PRESSED 1
|
||||
|
||||
/**
|
||||
* struct mouse_uc_priv - pre-device private data for mouse uclass
|
||||
*
|
||||
@@ -74,14 +71,14 @@ struct mouse_event {
|
||||
|
||||
/**
|
||||
* @button: Button number that was pressed/released (BUTTON_...)
|
||||
* @state: BUTTON_PRESSED / BUTTON_RELEASED
|
||||
* @pressed: True if button was pressed, false if released
|
||||
* @clicks: number of clicks (normally 1; 2 = double-click)
|
||||
* @x: X position of mouse
|
||||
* @y: Y position of mouse
|
||||
*/
|
||||
struct mouse_button {
|
||||
unsigned char button;
|
||||
unsigned char press_state;
|
||||
bool pressed;
|
||||
unsigned char clicks;
|
||||
unsigned short x;
|
||||
unsigned short y;
|
||||
|
||||
@@ -75,7 +75,7 @@ static int dm_test_mouse_button(struct unit_test_state *uts)
|
||||
/* inject a button press event */
|
||||
inject.type = MOUSE_EV_BUTTON;
|
||||
inject.button.button = BUTTON_LEFT;
|
||||
inject.button.press_state = BUTTON_PRESSED;
|
||||
inject.button.pressed = true;
|
||||
inject.button.clicks = 1;
|
||||
inject.button.x = 150;
|
||||
inject.button.y = 250;
|
||||
@@ -86,7 +86,7 @@ static int dm_test_mouse_button(struct unit_test_state *uts)
|
||||
ut_assertok(mouse_get_event(dev, &event));
|
||||
ut_asserteq(MOUSE_EV_BUTTON, event.type);
|
||||
ut_asserteq(BUTTON_LEFT, event.button.button);
|
||||
ut_asserteq(BUTTON_PRESSED, event.button.press_state);
|
||||
ut_asserteq(true, event.button.pressed);
|
||||
ut_asserteq(1, event.button.clicks);
|
||||
ut_asserteq(150, event.button.x);
|
||||
ut_asserteq(250, event.button.y);
|
||||
@@ -112,7 +112,7 @@ static int dm_test_mouse_click(struct unit_test_state *uts)
|
||||
/* inject a left button press */
|
||||
inject.type = MOUSE_EV_BUTTON;
|
||||
inject.button.button = BUTTON_LEFT;
|
||||
inject.button.press_state = BUTTON_PRESSED;
|
||||
inject.button.pressed = true;
|
||||
inject.button.clicks = 1;
|
||||
inject.button.x = 300;
|
||||
inject.button.y = 400;
|
||||
@@ -128,7 +128,7 @@ static int dm_test_mouse_click(struct unit_test_state *uts)
|
||||
/* inject a left button release */
|
||||
inject.type = MOUSE_EV_BUTTON;
|
||||
inject.button.button = BUTTON_LEFT;
|
||||
inject.button.press_state = BUTTON_RELEASED;
|
||||
inject.button.pressed = false;
|
||||
inject.button.clicks = 1;
|
||||
inject.button.x = 300;
|
||||
inject.button.y = 400;
|
||||
@@ -161,7 +161,7 @@ static int dm_test_mouse_click_no_coordinates(struct unit_test_state *uts)
|
||||
/* inject press and release to create a click */
|
||||
inject.type = MOUSE_EV_BUTTON;
|
||||
inject.button.button = BUTTON_LEFT;
|
||||
inject.button.press_state = BUTTON_PRESSED;
|
||||
inject.button.pressed = true;
|
||||
inject.button.clicks = 1;
|
||||
inject.button.x = 500;
|
||||
inject.button.y = 600;
|
||||
@@ -170,7 +170,7 @@ static int dm_test_mouse_click_no_coordinates(struct unit_test_state *uts)
|
||||
/* process the press event */
|
||||
ut_asserteq(-EAGAIN, mouse_get_click(dev, &pos));
|
||||
|
||||
inject.button.press_state = BUTTON_RELEASED;
|
||||
inject.button.pressed = false;
|
||||
sandbox_mouse_inject(dev, &inject);
|
||||
|
||||
/* now test that click is detected (coordinates are ignored) */
|
||||
@@ -197,7 +197,7 @@ static int dm_test_mouse_right_button(struct unit_test_state *uts)
|
||||
*/
|
||||
inject.type = MOUSE_EV_BUTTON;
|
||||
inject.button.button = BUTTON_RIGHT;
|
||||
inject.button.press_state = BUTTON_PRESSED;
|
||||
inject.button.pressed = true;
|
||||
inject.button.clicks = 1;
|
||||
inject.button.x = 100;
|
||||
inject.button.y = 200;
|
||||
@@ -205,7 +205,7 @@ static int dm_test_mouse_right_button(struct unit_test_state *uts)
|
||||
|
||||
ut_asserteq(-EAGAIN, mouse_get_click(dev, &pos));
|
||||
|
||||
inject.button.press_state = BUTTON_RELEASED;
|
||||
inject.button.pressed = false;
|
||||
sandbox_mouse_inject(dev, &inject);
|
||||
|
||||
/* still no click detected since it was right button */
|
||||
|
||||
Reference in New Issue
Block a user