e_mod_rdp : implement rdp mouse event using e_info_server api 57/269657/7
authordyamy-lee <dyamy.lee@samsung.com>
Thu, 20 Jan 2022 01:52:15 +0000 (10:52 +0900)
committerdyamy-lee <dyamy.lee@samsung.com>
Thu, 27 Jan 2022 08:17:19 +0000 (17:17 +0900)
Change-Id: I2eea4db018f99ae0fa31fd1c40c4af6b5b98cfe6

src/e_mod_rdp.c

index 0e52d2987fd12e4c2571ee7c77b6078cb6c3b018..e7d28925c2c42cc9f1b36220adb2acf7b387031e 100644 (file)
@@ -1010,13 +1010,63 @@ static BOOL
 e_rdp_input_synchronize_event(rdpInput *input, UINT32 flags)
 {
    //To do
+   DBG("e_rdp_input_synchronize_event\n");
    return TRUE;
 }
 
 static BOOL
 e_rdp_mouse_event(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y)
 {
-   //To do
+   static int prev_w, prev_h;
+   int e_output_w, e_output_h;
+   int move_x = 0, move_y = 0;
+   uint32_t button = 0;
+   uint32_t state = 0;
+
+   E_Rdp_Peer_Context *peerContext = (E_Rdp_Peer_Context *)input->context;
+   E_Rdp_Output *output = peerContext->rdpBackend->output;
+   E_Output *e_output = output->primary_output;
+   e_output_w = e_output->config.mode.w;
+   e_output_h = e_output->config.mode.h;
+
+   if (flags & PTR_FLAGS_MOVE)
+     {
+        if (x < e_output_w && y < e_output_h)
+          {
+             state = E_INFO_EVENT_STATE_MOTION;
+             move_x = (int)(x - prev_w);
+             move_y = (int)(y - prev_h);
+             prev_w = x;
+             prev_h = y;
+          }
+     }
+
+   if (flags & PTR_FLAGS_BUTTON1)
+     button = BTN_LEFT;
+   else if (flags & PTR_FLAGS_BUTTON2)
+     button = BTN_RIGHT;
+   else if (flags & PTR_FLAGS_BUTTON3)
+     button = BTN_MIDDLE;
+
+   if (button)
+     state = (flags & PTR_FLAGS_DOWN) ? E_INFO_EVENT_STATE_PRESS : E_INFO_EVENT_STATE_RELEASE;
+
+   if (flags & PTR_FLAGS_WHEEL)
+     {
+        double value;
+        value = (flags & 0xff) / 120.0;
+
+        button = E_INFO_BUTTON_WHEEL;
+        state = E_INFO_EVENT_STATE_MOTION;
+
+        if (flags & PTR_FLAGS_WHEEL_NEGATIVE)
+          value = -value;
+
+        move_x = (int)value;
+     }
+
+   e_info_server_input_mousegen(button, move_x, move_y, state);
+
    return TRUE;
 }
 
@@ -1024,6 +1074,7 @@ static BOOL
 e_rdp_extended_mouse_event(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y)
 {
    //To do
+   DBG("e_rdp_extended_mouse_event\n");
    return TRUE;
 }