display: enable blank guide on maru_shm
authorGiWoong Kim <giwoong.kim@samsung.com>
Mon, 26 Aug 2013 08:09:35 +0000 (17:09 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Mon, 26 Aug 2013 08:45:43 +0000 (17:45 +0900)
Change-Id: Ie172e1e7396cb0a439e9b4a8b87ade8cc0adca4e
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/Makefile
tizen/src/maru_sdl.c
tizen/src/maru_shm.c
tizen/src/maru_shm.h
tizen/src/skin/client/resource/images/blank-guide.png [changed mode: 0755->0644]
tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorShmSkin.java
tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java
tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java
tizen/src/skin/maruskin_server.c

index dc2c53dd366d275ace64d41c73748b9941d0dd57..acae81634e946a9525cfea8452296772e74a5a31 100644 (file)
@@ -107,7 +107,9 @@ install: all
        cp -pP skin/client/emulator-skin.jar $(EMUL_DIR)/bin
        cp -pP skin/client/lib/swt.jar $(EMUL_DIR)/bin
        cp -pPR skin/client/skins $(EMUL_DIR)
+ifndef CONFIG_USE_SHM
        cp -pP skin/client/resource/images/blank-guide.png $(EMUL_DIR)/images
+endif
 
 # check capabilities of OpenGL and Webcam
        cp -pP ../../i386-softmmu/check-gl$(EXECUTABLE_EXTENSION) $(EMUL_DIR)/bin
@@ -204,7 +206,9 @@ install_dibs: all_dibs
 # resources and jar for skin
        cp -pP skin/client/emulator-skin.jar $(DIBS_COMMON_DIR)/bin
        cp -pPR skin/client/skins $(DIBS_COMMON_DIR)
+ifndef CONFIG_USE_SHM
        cp -pP skin/client/resource/images/blank-guide.png $(DIBS_COMMON_DIR)/images
+endif
 
 # check capabilities of OpenGL and Webcam
        cp -pP ../../i386-softmmu/check-gl$(EXECUTABLE_EXTENSION) $(DIBS_COMMON_DIR)/bin
index 1f366de7b117ca32e81c0f874830d5e0b91ed901..7fb16aa2d6dc9279ccb54d40416c8cc3b28d16b8 100644 (file)
@@ -64,7 +64,7 @@ static int sdl_alteration;
 
 static int sdl_skip_update;
 static int blank_cnt;
-#define MAX_BLANK_FRAME_CNT 100
+#define MAX_BLANK_FRAME_CNT 120
 #define BLANK_GUIDE_IMAGE_PATH "../images/"
 #define BLANK_GUIDE_IMAGE_NAME "blank-guide.png"
 
index 176f494b59cede714fcbecb86bc287912d7d12a1..89928752221eab33265c817b93828e2d561b39a8 100644 (file)
@@ -49,7 +49,7 @@ static int skin_shmid;
 static int shm_skip_update;
 static int shm_skip_count;
 static int blank_cnt;
-#define MAX_BLANK_FRAME_CNT 100
+#define MAX_BLANK_FRAME_CNT 120
 
 extern pthread_mutex_t mutex_draw_display;
 extern int draw_display_state;
@@ -265,3 +265,7 @@ void maruskin_shm_quit(void)
     }
 }
 
+void maruskin_shm_resize(void)
+{
+    shm_skip_update = 0;
+}
index 2b73ad8fd0fa1418d80bd23fdc912239b9d835bd..5468d2ee524f0c2f81538bacad4a66c06857a256 100644 (file)
@@ -37,6 +37,7 @@ extern DisplayChangeListenerOps maru_dcl_ops;
 
 void maruskin_shm_init(uint64 swt_handle,
     int lcd_size_width, int lcd_size_height, bool is_resize);
+void maruskin_shm_resize(void);
 void maruskin_shm_quit(void);
 
 #endif /* MARU_SHM_H_ */
index 935a051e0dc318ba7660bc0347a0db639963b849..ec62597ea034975eca9c537fec75f85ea632a165 100644 (file)
@@ -97,6 +97,7 @@ public class EmulatorShmSkin extends EmulatorSkin {
 
        private PaletteData paletteData;
        private PollFBThread pollThread;
+       private Image imageGuide;
 
        private int maxTouchPoint;
        private EmulatorFingers finger;
@@ -218,6 +219,8 @@ public class EmulatorShmSkin extends EmulatorSkin {
                /* get MaxTouchPoint from startup argument */
                this.maxTouchPoint = config.getArgInt(
                                ArgsConstants.INPUT_TOUCH_MAXPOINT);
+
+               this.imageGuide = null;
        }
 
        protected void skinFinalize() {
@@ -268,7 +271,7 @@ public class EmulatorShmSkin extends EmulatorSkin {
                        System.exit(-1);
                }
 
-               /* update lcd thread */
+               /* display updater thread */
                pollThread = new PollFBThread(
                                currentState.getCurrentResolutionWidth(),
                                currentState.getCurrentResolutionHeight());
@@ -280,8 +283,8 @@ public class EmulatorShmSkin extends EmulatorSkin {
                                        logger.info("Advanced graphics not supported");
                                } */
 
-                               int x = lcdCanvas.getSize().x;
-                               int y = lcdCanvas.getSize().y;
+                               int ww = lcdCanvas.getSize().x;
+                               int hh = lcdCanvas.getSize().y;
 
                                /* if (pollThread.getWaitIntervalTime() == 0) {
                                        logger.info("draw black screen");
@@ -293,59 +296,71 @@ public class EmulatorShmSkin extends EmulatorSkin {
                                if (currentState.getCurrentAngle() == 0) { /* portrait */
                                        e.gc.drawImage(pollThread.imageFramebuffer,
                                                        0, 0, pollThread.widthFB, pollThread.heightFB,
-                                                       0, 0, x, y);
+                                                       0, 0, ww, hh);
+                               } else { /* non-portrait */
+                                       Transform newTransform = new Transform(lcdCanvas.getDisplay());
+                                       Transform oldTransform = new Transform(lcdCanvas.getDisplay());
+                                       newTransform.rotate(currentState.getCurrentAngle());
+
+                                       if (currentState.getCurrentAngle() == 90) { /* reverse landscape */
+                                               int temp = ww;
+                                               ww = hh;
+                                               hh = temp;
+                                               newTransform.translate(0, hh * -1);
+                                       } else if (currentState.getCurrentAngle() == 180) { /* reverse portrait */
+                                               newTransform.translate(ww * -1, hh * -1);
+                                       } else if (currentState.getCurrentAngle() == -90) { /* landscape */
+                                               int temp = ww;
+                                               ww = hh;
+                                               hh = temp;
+                                               newTransform.translate(ww * -1, 0);
+                                       }
+
+                                       /* save current transform as oldTransform */
+                                       e.gc.getTransform(oldTransform);
+                                       /* set to new transform */
+                                       e.gc.setTransform(newTransform);
+                                       e.gc.drawImage(pollThread.imageFramebuffer,
+                                                       0, 0, pollThread.widthFB, pollThread.heightFB,
+                                                       0, 0, ww, hh);
+                                       /* back to old transform */
+                                       e.gc.setTransform(oldTransform);
+
+                                       newTransform.dispose();
+                                       oldTransform.dispose();
+                               }
+
+                               /* blank guide */
+                               if (imageGuide != null) {
+                                       logger.info("draw blank guide");
+
+                                       float convertedScale = SkinUtil.convertScale(
+                                                       currentState.getCurrentScale());
+
+                                       int widthImage = imageGuide.getImageData().width;
+                                       int heightImage = imageGuide.getImageData().height;
+                                       int scaledWidthImage = (int)(widthImage * convertedScale);
+                                       int scaledHeightImage = (int)(heightImage * convertedScale);
+
+                                       e.gc.drawImage(imageGuide, 0, 0,
+                                                       widthImage, heightImage,
+                                                       (lcdCanvas.getSize().x - scaledWidthImage) / 2,
+                                                       (lcdCanvas.getSize().y - scaledHeightImage) / 2,
+                                                       scaledWidthImage, scaledHeightImage);
 
+                                       imageGuide = null;
+                               } else {
+                                       /* draw finger image for when rotate while use multitouch */
                                        if (finger.getMultiTouchEnable() == 1 ||
                                                        finger.getMultiTouchEnable() == 2) {
-                                               finger.rearrangeFingerPoints(currentState.getCurrentResolutionWidth(), 
-                                                               currentState.getCurrentResolutionHeight(), 
-                                                               currentState.getCurrentScale(), 
+                                               finger.rearrangeFingerPoints(currentState.getCurrentResolutionWidth(),
+                                                               currentState.getCurrentResolutionHeight(),
+                                                               currentState.getCurrentScale(),
                                                                currentState.getCurrentRotationId());
                                        }
 
                                        finger.drawImage(e, currentState.getCurrentAngle());
-                                       return;
-                               }
-
-                               Transform transform = new Transform(lcdCanvas.getDisplay());
-                               Transform oldtransform = new Transform(lcdCanvas.getDisplay());
-                               transform.rotate(currentState.getCurrentAngle());
-
-                               if (currentState.getCurrentAngle() == 90) { /* reverse landscape */
-                                       int temp;
-                                       temp = x;
-                                       x = y;
-                                       y = temp;
-                                       transform.translate(0, y * -1);
-                               } else if (currentState.getCurrentAngle() == 180) { /* reverse portrait */
-                                       transform.translate(x * -1, y * -1);
-                               } else if (currentState.getCurrentAngle() == -90) { /* landscape */
-                                       int temp;
-                                       temp = x;
-                                       x = y;
-                                       y = temp;
-                                       transform.translate(x * -1, 0);
                                }
-
-                               /* draw finger image for when rotate while use multitouch */
-                               if (finger.getMultiTouchEnable() == 1) {
-                                       finger.rearrangeFingerPoints(currentState.getCurrentResolutionWidth(), 
-                                                       currentState.getCurrentResolutionHeight(), 
-                                                       currentState.getCurrentScale(), 
-                                                       currentState.getCurrentRotationId());
-                               }
-                               /* save current transform as "oldtransform" */
-                               e.gc.getTransform(oldtransform);
-                               /* set to new transfrom */
-                               e.gc.setTransform(transform);
-                               e.gc.drawImage(pollThread.imageFramebuffer,
-                                               0, 0, pollThread.widthFB, pollThread.heightFB,
-                                               0, 0, x, y);
-                               /* back to old transform */
-                               e.gc.setTransform(oldtransform);
-
-                               transform.dispose();
-                               finger.drawImage(e, currentState.getCurrentAngle());
                        }
                });
 
@@ -363,6 +378,18 @@ public class EmulatorShmSkin extends EmulatorSkin {
                }
        }
 
+       @Override
+       public void drawImageToDisplay(Image image) {
+               imageGuide = image;
+
+               Display.getDefault().syncExec(new Runnable() {
+                       @Override
+                       public void run() {
+                               lcdCanvas.redraw();
+                       }
+               });
+       }
+
        @Override
        public void displayOn() {
                logger.info("display on");
index 238423066750a9474ea47609a10490e4249c9f35..ee063eadd880148461db6f2dbb949726086fbb3d 100644 (file)
@@ -55,6 +55,7 @@ import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.ShellEvent;
 import org.eclipse.swt.events.ShellListener;
 import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.graphics.Rectangle;
@@ -1119,6 +1120,10 @@ public class EmulatorSkin {
                /* abstract */
        }
 
+       public void drawImageToDisplay(Image image) {
+               /* abstract */
+       }
+
        protected void openScreenShotWindow() {
                /* abstract */
        }
index e01b4eb0810029e3fc8dfc84e5818e2b7928c4cb..cfb3b5ff8949f6e18af3cac79a9afd28762f76dc 100644 (file)
@@ -45,6 +45,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.eclipse.swt.graphics.Image;
 import org.tizen.emulator.skin.EmulatorSkin;
 import org.tizen.emulator.skin.comm.ICommunicator;
 import org.tizen.emulator.skin.comm.ICommunicator.SendCommand;
@@ -52,6 +53,7 @@ import org.tizen.emulator.skin.comm.sock.data.ISendData;
 import org.tizen.emulator.skin.comm.sock.data.StartData;
 import org.tizen.emulator.skin.config.EmulatorConfig;
 import org.tizen.emulator.skin.config.EmulatorConfig.ArgsConstants;
+import org.tizen.emulator.skin.image.ImageRegistry.ResourceImageName;
 import org.tizen.emulator.skin.log.SkinLogger;
 import org.tizen.emulator.skin.util.IOUtil;
 import org.tizen.emulator.skin.util.SkinUtil;
@@ -419,7 +421,12 @@ public class SocketCommunicator implements ICommunicator {
                                case DRAW_BLANK_GUIDE: {
                                        logger.info("received DRAW_BLANK_GUIDE from QEMU.");
 
-                                       //TODO:
+                                       Image imageGuide = skin.getImageRegistry().getResourceImage(
+                                                       ResourceImageName.RESOURCE_BLANK_GUIDE);
+                                       if (imageGuide != null) {
+                                               skin.drawImageToDisplay(imageGuide);
+                                       }
+
                                        break;
                                }
                                case SHUTDOWN: {
index 17c2d24a82f5a3cb4a6fb0bc617a541ffabd2c4e..e342752acd5dd4e088a67b7d1082662a501e9fab 100644 (file)
@@ -48,6 +48,8 @@
 
 #ifndef CONFIG_USE_SHM
 #include "maru_sdl.h"
+#else
+#include "maru_shm.h"
 #endif
 
 #ifdef CONFIG_WIN32
@@ -937,7 +939,9 @@ static void* run_skin_server(void* args)
                     }
 
 #ifndef CONFIG_USE_SHM
-                    maruskin_sdl_resize(); // send sdl event
+                    maruskin_sdl_resize(); /* send sdl event */
+#else
+                    maruskin_shm_resize();
 #endif
                     if (is_rotate) {
                         send_rotation_event( rotation_type );