[Title] extend the MouseEventData
authorgiwoong.kim <giwoong.kim@samsung.com>
Fri, 7 Sep 2012 11:23:46 +0000 (20:23 +0900)
committergiwoong.kim <giwoong.kim@samsung.com>
Fri, 7 Sep 2012 11:23:46 +0000 (20:23 +0900)
[Type] enhancement
[Module] Emulator / touch
[Priority] major
[Jira#]
[Redmine#]
[Problem]
[Cause]
[Solution] added mouse button field
[TestCase]

tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java
tizen/src/skin/client/src/org/tizen/emulator/skin/comm/ICommunicator.java
tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/data/MouseEventData.java
tizen/src/skin/maruskin_operation.c
tizen/src/skin/maruskin_operation.h
tizen/src/skin/maruskin_server.c

index 319976c..a29540a 100644 (file)
@@ -70,6 +70,7 @@ import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.Shell;
 import org.tizen.emulator.skin.comm.ICommunicator.KeyEventType;
+import org.tizen.emulator.skin.comm.ICommunicator.MouseButtonType;
 import org.tizen.emulator.skin.comm.ICommunicator.MouseEventType;
 import org.tizen.emulator.skin.comm.ICommunicator.Scale;
 import org.tizen.emulator.skin.comm.ICommunicator.SendCommand;
@@ -831,8 +832,10 @@ public class EmulatorSkin {
                                        int[] geometry = SkinUtil.convertMouseGeometry( e.x, e.y, currentLcdWidth, currentLcdHeight,
                                                        currentScale, currentAngle );
 
-                                       MouseEventData mouseEventData = new MouseEventData( eventType,
-                                                       e.x, e.y, geometry[0], geometry[1], 0 );
+                                       MouseEventData mouseEventData = new MouseEventData(
+                                                       MouseButtonType.LEFT.value(), eventType,
+                                                       e.x, e.y, geometry[0], geometry[1], 0);
+
                                        communicator.sendToQEMU( SendCommand.SEND_MOUSE_EVENT, mouseEventData );
                                }
                        }
@@ -848,14 +851,18 @@ public class EmulatorSkin {
 
                                        int[] geometry = SkinUtil.convertMouseGeometry( e.x, e.y, currentLcdWidth, currentLcdHeight,
                                                        currentScale, currentAngle );
-
                                        logger.info( "mouseUp in LCD" + " x:" + geometry[0] + " y:" + geometry[1] );
-                                       MouseEventData mouseEventData = new MouseEventData( MouseEventType.UP.value(),
-                                                       e.x, e.y, geometry[0], geometry[1], 0 );
+
+                                       MouseEventData mouseEventData = new MouseEventData(
+                                                       MouseButtonType.LEFT.value(), MouseEventType.UP.value(),
+                                                       e.x, e.y, geometry[0], geometry[1], 0);
+
                                        communicator.sendToQEMU( SendCommand.SEND_MOUSE_EVENT, mouseEventData );
                                        if ( true == EmulatorSkin.this.isDragStartedInLCD ) {
                                                EmulatorSkin.this.isDragStartedInLCD = false;
                                        }
+                               } else if (2 == e.button) { // wheel button
+                                       logger.info("wheelUp in LCD");
                                }
                        }
 
@@ -865,10 +872,12 @@ public class EmulatorSkin {
 
                                        int[] geometry = SkinUtil.convertMouseGeometry( e.x, e.y, currentLcdWidth, currentLcdHeight,
                                                        currentScale, currentAngle );
-
                                        logger.info( "mouseDown in LCD" + " x:" + geometry[0] + " y:" + geometry[1] );
-                                       MouseEventData mouseEventData = new MouseEventData( MouseEventType.DOWN.value(),
-                                                       e.x, e.y, geometry[0], geometry[1], 0 );
+
+                                       MouseEventData mouseEventData = new MouseEventData(
+                                                       MouseButtonType.LEFT.value(), MouseEventType.DOWN.value(),
+                                                       e.x, e.y, geometry[0], geometry[1], 0);
+
                                        communicator.sendToQEMU( SendCommand.SEND_MOUSE_EVENT, mouseEventData );
                                        if ( false == EmulatorSkin.this.isDragStartedInLCD ) {
                                                EmulatorSkin.this.isDragStartedInLCD = true;
index d3d18c2..efd80c2 100644 (file)
@@ -55,11 +55,44 @@ public interface ICommunicator extends Runnable {
                }
        }
        
+       public enum MouseButtonType {
+               LEFT( (short)1 ),
+               WHEEL( (short)2 ),
+               RIGHT( (short)3 );
+
+               private short value;
+               MouseButtonType( short value ) {
+                       this.value = value;
+               }
+               public short value() {
+                       return this.value;
+               }
+               public static MouseButtonType getValue( String val ) {
+                       MouseButtonType[] values = MouseButtonType.values();
+                       for (int i = 0; i < values.length; i++) {
+                               if( values[i].value == Integer.parseInt( val ) ) {
+                                       return values[i];
+                               }
+                       }
+                       throw new IllegalArgumentException( val );
+               }
+               public static MouseButtonType getValue( short val ) {
+                       MouseButtonType[] values = MouseButtonType.values();
+                       for (int i = 0; i < values.length; i++) {
+                               if( values[i].value == val ) {
+                                       return values[i];
+                               }
+                       }
+                       throw new IllegalArgumentException( Integer.toString(val) );
+               }
+
+       }
+
        public enum MouseEventType {
                DOWN( (short)1 ),
                UP( (short)2 ),
                DRAG( (short)3 );
-               
+
                private short value;
                MouseEventType( short value ) {
                        this.value = value;
index b247b49..2d61b59 100644 (file)
@@ -37,45 +37,51 @@ import java.io.IOException;
  */
 public class MouseEventData extends AbstractSendData {
 
+       int mouseButton;
        int eventType;
-       int originX;
-       int originY;
-       int x;
-       int y;
+       int hostX;
+       int hostY;
+       int guestX;
+       int guestY;
        int z;
 
-       public MouseEventData(int eventType, int originX, int originY, int x, int y, int z) {
+       public MouseEventData(int mouseButton, int eventType,
+                       int hostX, int hostY, int guestX, int guestY, int z) {
+               this.mouseButton = mouseButton;
                this.eventType = eventType;
-               this.originX = originX;
-               this.originY = originY;
-               this.x = x;
-               this.y = y;
+               this.hostX = hostX;
+               this.hostY = hostY;
+               this.guestX = guestX;
+               this.guestY = guestY;
                this.z = z;
        }
 
        @Override
        protected void write() throws IOException {
+               writeInt(mouseButton);
                writeInt(eventType);
-               writeInt(originX);
-               writeInt(originY);
-               writeInt(x);
-               writeInt(y);
+               writeInt(hostX);
+               writeInt(hostY);
+               writeInt(guestX);
+               writeInt(guestY);
                writeInt(z);
        }
 
        @Override
        public String toString() {
                StringBuilder builder = new StringBuilder();
-               builder.append("MouseEventData [eventType=");
+               builder.append("MouseEventData [mouseButton=");
+               builder.append(mouseButton);
+               builder.append(", eventType=");
                builder.append(eventType);
-               builder.append(", originX=");
-               builder.append(originX);
-               builder.append(", originY=");
-               builder.append(originY);
-               builder.append(", transposeX=");
-               builder.append(x);
-               builder.append(", transposeY=");
-               builder.append(y);
+               builder.append(", hostX=");
+               builder.append(hostX);
+               builder.append(", hostY=");
+               builder.append(hostY);
+               builder.append(", guestX=");
+               builder.append(guestX);
+               builder.append(", guestY=");
+               builder.append(guestY);
                builder.append(", id=");
                builder.append(z);
                builder.append("]");
index 7805d05..88d4929 100644 (file)
@@ -47,6 +47,7 @@
 #include "mloop_event.h"
 #include "emul_state.h"
 #include "maruskin_keymap.h"
+#include "maruskin_server.h"
 #include "emul_state.h"
 #include "hw/maru_pm.h"
 #include "sysemu.h"
@@ -80,15 +81,17 @@ void start_display(uint64 handle_id, int lcd_size_width, int lcd_size_height, do
     maruskin_init(handle_id, lcd_size_width, lcd_size_height, false);
 }
 
-void do_mouse_event( int event_type, int origin_x, int origin_y, int x, int y, int z )
+void do_mouse_event(int button_type, int event_type,
+    int origin_x, int origin_y, int x, int y, int z)
 {
-    if ( brightness_off ) {
-        TRACE( "reject mouse touch in lcd off : %d, x:%d, y:%d, z:%d\n", event_type, x, y, z );
+    if (brightness_off) {
+        TRACE("reject mouse touch in lcd off = button:%d, type:%d, x:%d, y:%d, z:%d\n",
+            button_type, event_type, x, y, z);
         return;
     }
 
-    TRACE("mouse_event event_type:%d, origin:(%d, %d), x:%d, y:%d, z:%d\n",
-        event_type, origin_x, origin_y, x, y, z);
+    TRACE("mouse_event button:%d, type:%d, host:(%d, %d), x:%d, y:%d, z:%d\n",
+        button_type, event_type, origin_x, origin_y, x, y, z);
 
 #ifndef USE_SHM
     /* multi-touch */
index 4c83260..cd9e3dc 100644 (file)
@@ -49,7 +49,7 @@ typedef struct DetailInfo DetailInfo;
 
 void start_display(uint64 handle_id, int lcd_size_width, int lcd_size_height, double scale_factor, short rotation_type);
 
-void do_mouse_event( int event_type, int origin_x, int origin_y, int x, int y, int z );
+void do_mouse_event(int button_type, int event_type, int origin_x, int origin_y, int x, int y, int z);
 
 void do_key_event( int event_type, int keycode, int key_location );
 
index c459129..a55757b 100644 (file)
@@ -617,34 +617,39 @@ static void* run_skin_server( void* args ) {
                     }
 
                     /* keep it consistent with emulator-skin definition */
+                    int button_type = 0;
                     int event_type = 0;
-                    int origin_x = 0;
-                    int origin_y = 0;
-                    int x = 0;
-                    int y = 0;
+                    int host_x = 0;
+                    int host_y = 0;
+                    int guest_x = 0;
+                    int guest_y = 0;
                     int z = 0;
 
                     char* p = recvbuf;
+                    memcpy( &button_type, p, sizeof( button_type ) );
+                    p += sizeof( button_type );
                     memcpy( &event_type, p, sizeof( event_type ) );
                     p += sizeof( event_type );
-                    memcpy( &origin_x, p, sizeof( origin_x ) );
-                    p += sizeof( origin_x );
-                    memcpy( &origin_y, p, sizeof( origin_y ) );
-                    p += sizeof( origin_y );
-                    memcpy( &x, p, sizeof( x ) );
-                    p += sizeof( x );
-                    memcpy( &y, p, sizeof( y ) );
-                    p += sizeof( y );
+                    memcpy( &host_x, p, sizeof( host_x ) );
+                    p += sizeof( host_x );
+                    memcpy( &host_y, p, sizeof( host_y ) );
+                    p += sizeof( host_y );
+                    memcpy( &guest_x, p, sizeof( guest_x ) );
+                    p += sizeof( guest_x );
+                    memcpy( &guest_y, p, sizeof( guest_y ) );
+                    p += sizeof( guest_y );
                     memcpy( &z, p, sizeof( z ) );
 
+                    button_type = ntohl( button_type );
                     event_type = ntohl( event_type );
-                    origin_x = ntohl( origin_x );
-                    origin_y = ntohl( origin_y );
-                    x = ntohl( x );
-                    y = ntohl( y );
+                    host_x = ntohl( host_x );
+                    host_y = ntohl( host_y );
+                    guest_x = ntohl( guest_x );
+                    guest_y = ntohl( guest_y );
                     z = ntohl( z );
 
-                    do_mouse_event( event_type, origin_x, origin_y, x, y, z );
+                    do_mouse_event(button_type, event_type,
+                        host_x, host_y, guest_x, guest_y, z);
                     break;
                 }
                 case RECV_KEY_EVENT: {