From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57876) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W9MUi-00066R-39 for qemu-devel@nongnu.org; Fri, 31 Jan 2014 17:23:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W9MUZ-0004fb-FX for qemu-devel@nongnu.org; Fri, 31 Jan 2014 17:23:28 -0500 Received: from mail-qc0-x22d.google.com ([2607:f8b0:400d:c01::22d]:63408) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W9MUZ-0004fS-94 for qemu-devel@nongnu.org; Fri, 31 Jan 2014 17:23:19 -0500 Received: by mail-qc0-f173.google.com with SMTP id i8so7989402qcq.18 for ; Fri, 31 Jan 2014 14:23:18 -0800 (PST) Sender: Paolo Bonzini Message-ID: <52EC2250.5050105@redhat.com> Date: Fri, 31 Jan 2014 23:23:12 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1390903055-479-1-git-send-email-kraxel@redhat.com> <1390903055-479-21-git-send-email-kraxel@redhat.com> In-Reply-To: <1390903055-479-21-git-send-email-kraxel@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 20/42] input: mouse: add graphic_rotate support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann , qemu-devel@nongnu.org Cc: Anthony Liguori Il 28/01/2014 10:57, Gerd Hoffmann ha scritto: > Transform absolute mouse events according to graphic_rotate. > > Legacy input code does it for both absolute and relative events, > but the logic is broken for relative coordinates, so this is > most likely not used anyway. > > Signed-off-by: Gerd Hoffmann > --- > ui/input.c | 33 +++++++++++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) > > diff --git a/ui/input.c b/ui/input.c > index a02172e..2c4d4d6 100644 > --- a/ui/input.c > +++ b/ui/input.c > @@ -50,6 +50,33 @@ qemu_input_find_handler(uint32_t mask) > return NULL; > } > > +static void qemu_input_transform_abs_rotate(InputEvent *evt) > +{ > + switch (graphic_rotate) { > + case 90: > + if (evt->abs->axis == INPUT_AXIS_X) { > + evt->abs->axis = INPUT_AXIS_Y; > + } > + if (evt->abs->axis == INPUT_AXIS_Y) { Need else here, same for "case 270". > + evt->abs->axis = INPUT_AXIS_X; > + evt->abs->axis = INPUT_EVENT_ABS_SIZE - 1 - evt->abs->axis; ->value here, not ->axis. It looks like doing it right for relative is easy: if (graphic_rotate == 0) { return; } if (move->axis != INPUT_AXIS_X && move->axis != INPUT_AXIS_Y) { return; } if ((graphic_rotate <= 180 && move->axis == INPUT_AXIS_X) || (graphic_rotate >= 180 && move->axis == INPUT_AXIS_Y)) { if (kind == INPUT_EVENT_KIND_ABS) { move->value = INPUT_EVENT_ABS_SIZE - 1 - move->value; } else { move->value = -move->value; } } if (graphic_rotate == 90 || graphic_rotate == 270) { move->axis ^= INPUT_AXIS_X ^ INPUT_AXIS_Y; } ... if (evt->kind == INPUT_EVENT_KIND_ABS) { qemu_input_transform_rotate(evt->kind, &evt->abs); } else if (evt->kind == INPUT_EVENT_KIND_REL) { qemu_input_transform_rotate(evt->kind, &evt->rel); } Paolo > + } > + break; > + case 180: > + evt->abs->axis = INPUT_EVENT_ABS_SIZE - 1 - evt->abs->axis; > + break; > + case 270: > + if (evt->abs->axis == INPUT_AXIS_X) { > + evt->abs->axis = INPUT_AXIS_Y; > + evt->abs->axis = INPUT_EVENT_ABS_SIZE - 1 - evt->abs->axis; > + } > + if (evt->abs->axis == INPUT_AXIS_Y) { > + evt->abs->axis = INPUT_AXIS_X; > + } > + break; > + } > +} > + > void qemu_input_event_send(QemuConsole *src, InputEvent *evt) > { > QemuInputHandlerState *s; > @@ -58,6 +85,12 @@ void qemu_input_event_send(QemuConsole *src, InputEvent *evt) > return; > } > > + /* pre processing */ > + if (graphic_rotate && (evt->kind == INPUT_EVENT_KIND_ABS)) { > + qemu_input_transform_abs_rotate(evt); > + } > + > + /* send event */ > s = qemu_input_find_handler(1 << evt->kind); > s->handler->event(s->dev, src, evt); > s->events++; >