From: GiWoong Kim Date: Mon, 26 Aug 2013 08:09:35 +0000 (+0900) Subject: display: enable blank guide on maru_shm X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.1~795 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7728e46be828c16f27f1a36bc55943ebe3363f89;p=sdk%2Femulator%2Fqemu.git display: enable blank guide on maru_shm Change-Id: Ie172e1e7396cb0a439e9b4a8b87ade8cc0adca4e Signed-off-by: GiWoong Kim --- diff --git a/tizen/src/Makefile b/tizen/src/Makefile index dc2c53dd36..acae81634e 100644 --- a/tizen/src/Makefile +++ b/tizen/src/Makefile @@ -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 diff --git a/tizen/src/maru_sdl.c b/tizen/src/maru_sdl.c index 1f366de7b1..7fb16aa2d6 100644 --- a/tizen/src/maru_sdl.c +++ b/tizen/src/maru_sdl.c @@ -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" diff --git a/tizen/src/maru_shm.c b/tizen/src/maru_shm.c index 176f494b59..8992875222 100644 --- a/tizen/src/maru_shm.c +++ b/tizen/src/maru_shm.c @@ -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; +} diff --git a/tizen/src/maru_shm.h b/tizen/src/maru_shm.h index 2b73ad8fd0..5468d2ee52 100644 --- a/tizen/src/maru_shm.h +++ b/tizen/src/maru_shm.h @@ -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_ */ diff --git a/tizen/src/skin/client/resource/images/blank-guide.png b/tizen/src/skin/client/resource/images/blank-guide.png old mode 100755 new mode 100644 diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorShmSkin.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorShmSkin.java index 935a051e0d..ec62597ea0 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorShmSkin.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorShmSkin.java @@ -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"); diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java index 2384230667..ee063eadd8 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java @@ -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 */ } diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java index e01b4eb081..cfb3b5ff89 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java @@ -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: { diff --git a/tizen/src/skin/maruskin_server.c b/tizen/src/skin/maruskin_server.c index 17c2d24a82..e342752acd 100644 --- a/tizen/src/skin/maruskin_server.c +++ b/tizen/src/skin/maruskin_server.c @@ -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 );