From f69aa008c9e160b0e7871a8a60b01705f32779ab Mon Sep 17 00:00:00 2001 From: "giwoong.kim" Date: Mon, 12 Nov 2012 19:52:23 +0900 Subject: [PATCH] skin: separate a adjustLcdGeometry Separate a adjustLcdGeometry function according to skin type. Signed-off-by: GiWoong Kim --- .../org/tizen/emulator/skin/EmulatorSkin.java | 96 ++++++++++--------- .../layout/GeneralPurposeSkinComposer.java | 31 +++++- .../emulator/skin/layout/ISkinComposer.java | 9 +- .../skin/layout/PhoneShapeSkinComposer.java | 74 +++++++++----- .../tizen/emulator/skin/util/SkinUtil.java | 50 ---------- 5 files changed, 137 insertions(+), 123 deletions(-) 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 bb410741fb..05c7fa30f0 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 @@ -64,9 +64,7 @@ import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Canvas; -import org.eclipse.swt.widgets.Decorations; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; @@ -181,6 +179,7 @@ public class EmulatorSkin { private MouseWheelListener canvasMouseWheelListener; private KeyListener canvasKeyListener; private MenuDetectListener canvasMenuDetectListener; + private FocusListener canvasFocusListener; private LinkedList pressedKeyEventList; private int pressedHWKeyCode; @@ -426,35 +425,6 @@ public class EmulatorSkin { shell.addPaintListener(shellPaintListener); } - FocusListener shellFocusListener = new FocusListener() { - @Override - public void focusGained(FocusEvent event) { - logger.info("gain focus"); - } - - public void focusLost(FocusEvent event) { - logger.info("lost focus"); - - /* key event compensation */ - if (pressedKeyEventList.isEmpty() == false) { - for (KeyEventData data : pressedKeyEventList) { - KeyEventData keyEventData = new KeyEventData( - KeyEventType.RELEASED.value(), data.keycode, - data.stateMask, data.keyLocation); - communicator.sendToQEMU(SendCommand.SEND_KEY_EVENT, keyEventData); - - logger.info("auto release : keycode=" + keyEventData.keycode + - ", stateMask=" + keyEventData.stateMask + - ", keyLocation=" + keyEventData.keyLocation); - } - } - - pressedKeyEventList.clear(); - } - }; - - lcdCanvas.addFocusListener(shellFocusListener); - shellMouseTrackListener = new MouseTrackAdapter() { @Override public void mouseExit( MouseEvent e ) { @@ -707,8 +677,8 @@ public class EmulatorSkin { } - private void addCanvasListener( final Shell shell, final Canvas canvas ) { - + private void addCanvasListener(final Shell shell, final Canvas canvas) { + /* menu */ canvasMenuDetectListener = new MenuDetectListener() { @Override public void menuDetected(MenuDetectEvent e) { @@ -725,7 +695,37 @@ public class EmulatorSkin { }; // remove 'input method' menu item ( avoid bug ) - canvas.addMenuDetectListener( canvasMenuDetectListener ); + canvas.addMenuDetectListener(canvasMenuDetectListener); + + /* focus */ + canvasFocusListener = new FocusListener() { + @Override + public void focusGained(FocusEvent event) { + logger.info("gain focus"); + } + + public void focusLost(FocusEvent event) { + logger.info("lost focus"); + + /* key event compensation */ + if (pressedKeyEventList.isEmpty() == false) { + for (KeyEventData data : pressedKeyEventList) { + KeyEventData keyEventData = new KeyEventData( + KeyEventType.RELEASED.value(), data.keycode, + data.stateMask, data.keyLocation); + communicator.sendToQEMU(SendCommand.SEND_KEY_EVENT, keyEventData); + + logger.info("auto release : keycode=" + keyEventData.keycode + + ", stateMask=" + keyEventData.stateMask + + ", keyLocation=" + keyEventData.keyLocation); + } + } + + pressedKeyEventList.clear(); + } + }; + + lcdCanvas.addFocusListener(canvasFocusListener); /* mouse event */ /*canvasDragDetectListener = new DragDetectListener() { @@ -1022,26 +1022,32 @@ public class EmulatorSkin { } private void removeCanvasListeners() { - // if ( null != canvasDragDetectListener ) { // lcdCanvas.removeDragDetectListener( canvasDragDetectListener ); // } - if ( null != canvasMouseMoveListener ) { - lcdCanvas.removeMouseMoveListener( canvasMouseMoveListener ); + if (null != canvasMouseMoveListener) { + lcdCanvas.removeMouseMoveListener(canvasMouseMoveListener); } - if ( null != canvasMouseListener ) { - lcdCanvas.removeMouseListener( canvasMouseListener ); + + if (null != canvasMouseListener) { + lcdCanvas.removeMouseListener(canvasMouseListener); } - if ( null != canvasKeyListener ) { - lcdCanvas.removeKeyListener( canvasKeyListener ); + + if (null != canvasKeyListener) { + lcdCanvas.removeKeyListener(canvasKeyListener); } - if ( null != canvasMenuDetectListener ) { - lcdCanvas.removeMenuDetectListener( canvasMenuDetectListener ); + + if (null != canvasMenuDetectListener) { + lcdCanvas.removeMenuDetectListener(canvasMenuDetectListener); } - if ( null != canvasMouseWheelListener ) { - lcdCanvas.removeMouseWheelListener( canvasMouseWheelListener ); + + if (null != canvasFocusListener) { + lcdCanvas.removeFocusListener(canvasFocusListener); } + if (null != canvasMouseWheelListener) { + lcdCanvas.removeMouseWheelListener(canvasMouseWheelListener); + } } private Field getOSField( String field ) { diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/GeneralPurposeSkinComposer.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/GeneralPurposeSkinComposer.java index 13adf71cc5..e136643e5f 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/GeneralPurposeSkinComposer.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/GeneralPurposeSkinComposer.java @@ -46,6 +46,7 @@ import org.eclipse.swt.widgets.Decorations; import org.eclipse.swt.widgets.Shell; import org.tizen.emulator.skin.EmulatorSkinState; import org.tizen.emulator.skin.comm.ICommunicator.KeyEventType; +import org.tizen.emulator.skin.comm.ICommunicator.RotationInfo; import org.tizen.emulator.skin.comm.ICommunicator.SendCommand; import org.tizen.emulator.skin.comm.sock.SocketCommunicator; import org.tizen.emulator.skin.comm.sock.data.KeyEventData; @@ -101,7 +102,7 @@ public class GeneralPurposeSkinComposer implements ISkinComposer { int scale = SkinUtil.getValidScale(config); short rotationId = EmulatorConfig.DEFAULT_WINDOW_ROTATION; - composeInternal(lcdCanvas, x, y, scale, rotationId, false); + composeInternal(lcdCanvas, x, y, scale, rotationId); logger.info("resolution : " + currentState.getCurrentResolution() + ", scale : " + scale); @@ -110,7 +111,7 @@ public class GeneralPurposeSkinComposer implements ISkinComposer { @Override public void composeInternal(Canvas lcdCanvas, - int x, int y, int scale, short rotationId, boolean isOnKbd) { + int x, int y, int scale, short rotationId) { //shell.setBackground(shell.getDisplay().getSystemColor(SWT.COLOR_BLACK)); shell.setLocation(x, y); @@ -136,10 +137,9 @@ public class GeneralPurposeSkinComposer implements ISkinComposer { currentState.setCurrentAngle(SkinRotation.getAngle(rotationId)); /* arrange the lcd */ - Rectangle lcdBounds = SkinUtil.adjustLcdGeometry(lcdCanvas, + Rectangle lcdBounds = adjustLcdGeometry(lcdCanvas, currentState.getCurrentResolutionWidth(), - currentState.getCurrentResolutionHeight(), scale, rotationId, - false); + currentState.getCurrentResolutionHeight(), scale, rotationId); if (lcdBounds == null) { logger.severe("Failed to lcd information for phone shape skin."); @@ -207,4 +207,25 @@ public class GeneralPurposeSkinComposer implements ISkinComposer { shell.pack(); } + @Override + public Rectangle adjustLcdGeometry( + Canvas lcdCanvas, int resolutionW, int resolutionH, + int scale, short rotationId) { + Rectangle lcdBounds = new Rectangle(0, 0, 0, 0); + + float convertedScale = SkinUtil.convertScale(scale); + RotationInfo rotation = RotationInfo.getValue(rotationId); + + /* resoultion, that is lcd size in general skin mode */ + if (RotationInfo.LANDSCAPE == rotation || + RotationInfo.REVERSE_LANDSCAPE == rotation) { + lcdBounds.width = (int)(resolutionH * convertedScale); + lcdBounds.height = (int)(resolutionW * convertedScale); + } else { + lcdBounds.width = (int)(resolutionW * convertedScale); + lcdBounds.height = (int)(resolutionH * convertedScale); + } + + return lcdBounds; + } } diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/ISkinComposer.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/ISkinComposer.java index 1b4c7880a0..5862ee70d9 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/ISkinComposer.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/ISkinComposer.java @@ -28,11 +28,18 @@ package org.tizen.emulator.skin.layout; +import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Canvas; public interface ISkinComposer { public abstract Canvas compose(); + public abstract void composeInternal(Canvas lcdCanvas, - int x, int y, int scale, short rotationId, boolean isOnKbd); + int x, int y, int scale, short rotationId); + public abstract void arrangeSkin(int scale, short rotationId); + + public abstract Rectangle adjustLcdGeometry( + Canvas lcdCanvas, int resolutionW, int resolutionH, + int scale, short rotationId); } diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/PhoneShapeSkinComposer.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/PhoneShapeSkinComposer.java index b1a0a49c35..980cf48977 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/PhoneShapeSkinComposer.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/PhoneShapeSkinComposer.java @@ -34,16 +34,15 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.layout.FormAttachment; -import org.eclipse.swt.layout.FormData; -import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Shell; -import org.tizen.emulator.skin.EmulatorSkin; import org.tizen.emulator.skin.EmulatorSkinState; import org.tizen.emulator.skin.config.EmulatorConfig; import org.tizen.emulator.skin.config.EmulatorConfig.ArgsConstants; import org.tizen.emulator.skin.config.EmulatorConfig.SkinPropertiesConstants; +import org.tizen.emulator.skin.dbi.LcdType; +import org.tizen.emulator.skin.dbi.RegionType; +import org.tizen.emulator.skin.dbi.RotationType; import org.tizen.emulator.skin.image.ImageRegistry; import org.tizen.emulator.skin.image.ImageRegistry.IconName; import org.tizen.emulator.skin.image.ImageRegistry.ImageType; @@ -91,7 +90,7 @@ public class PhoneShapeSkinComposer implements ISkinComposer { // has to be portrait mode at first booting time short rotationId = EmulatorConfig.DEFAULT_WINDOW_ROTATION; - composeInternal(lcdCanvas, x, y, scale, rotationId, false); + composeInternal(lcdCanvas, x, y, scale, rotationId); logger.info("resolution : " + currentState.getCurrentResolution() + ", scale : " + scale); @@ -100,7 +99,7 @@ public class PhoneShapeSkinComposer implements ISkinComposer { @Override public void composeInternal(Canvas lcdCanvas, - int x, int y, int scale, short rotationId, boolean isOnKbd) { + int x, int y, int scale, short rotationId) { //shell.setBackground(shell.getDisplay().getSystemColor(SWT.COLOR_BLACK)); shell.setLocation(x, y); @@ -132,22 +131,6 @@ public class PhoneShapeSkinComposer implements ISkinComposer { currentState.setCurrentRotationId(rotationId); currentState.setCurrentAngle(SkinRotation.getAngle(rotationId)); - /* arrange the lcd */ - Rectangle lcdBounds = SkinUtil.adjustLcdGeometry(lcdCanvas, - currentState.getCurrentResolutionWidth(), - currentState.getCurrentResolutionHeight(), scale, rotationId, - true); - - if (lcdBounds == null) { - logger.severe("Failed to lcd information for phone shape skin."); - SkinUtil.openMessage(shell, null, - "Failed to read lcd information for phone shape skin.\n" + - "Check the contents of skin dbi file.", - SWT.ICON_ERROR, config); - System.exit(-1); - } - logger.info("lcd bounds : " + lcdBounds); - /* arrange the skin image */ Image tempImage = null; Image tempKeyPressedImage = null; @@ -184,6 +167,53 @@ public class PhoneShapeSkinComposer implements ISkinComposer { shell.redraw(); shell.pack(); + /* arrange the lcd */ + Rectangle lcdBounds = adjustLcdGeometry(lcdCanvas, + currentState.getCurrentResolutionWidth(), + currentState.getCurrentResolutionHeight(), scale, rotationId); + + if (lcdBounds == null) { + logger.severe("Failed to lcd information for phone shape skin."); + SkinUtil.openMessage(shell, null, + "Failed to read lcd information for phone shape skin.\n" + + "Check the contents of skin dbi file.", + SWT.ICON_ERROR, config); + System.exit(-1); + } + logger.info("lcd bounds : " + lcdBounds); + lcdCanvas.setBounds(lcdBounds); } + + @Override + public Rectangle adjustLcdGeometry( + Canvas lcdCanvas, int resolutionW, int resolutionH, + int scale, short rotationId) { + Rectangle lcdBounds = new Rectangle(0, 0, 0, 0); + + float convertedScale = SkinUtil.convertScale(scale); + RotationType rotation = SkinRotation.getRotation(rotationId); + + LcdType lcd = rotation.getLcd(); /* from dbi */ + if (lcd == null) { + return null; + } + + RegionType region = lcd.getRegion(); + if (region == null) { + return null; + } + + Integer left = region.getLeft(); + Integer top = region.getTop(); + Integer width = region.getWidth(); + Integer height = region.getHeight(); + + lcdBounds.x = (int) (left * convertedScale); + lcdBounds.y = (int) (top * convertedScale); + lcdBounds.width = (int) (width * convertedScale); + lcdBounds.height = (int) (height * convertedScale); + + return lcdBounds; + } } diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java index b307b626aa..75f83032df 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java @@ -36,9 +36,6 @@ import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.graphics.Region; -import org.eclipse.swt.layout.FormAttachment; -import org.eclipse.swt.layout.FormData; -import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.tizen.emulator.skin.comm.ICommunicator.RotationInfo; @@ -48,7 +45,6 @@ import org.tizen.emulator.skin.config.EmulatorConfig.ArgsConstants; import org.tizen.emulator.skin.config.EmulatorConfig.SkinPropertiesConstants; import org.tizen.emulator.skin.dbi.EventInfoType; import org.tizen.emulator.skin.dbi.KeyMapType; -import org.tizen.emulator.skin.dbi.LcdType; import org.tizen.emulator.skin.dbi.RegionType; import org.tizen.emulator.skin.dbi.RotationType; import org.tizen.emulator.skin.image.ImageRegistry; @@ -110,52 +106,6 @@ public class SkinUtil { return sdbPath; } - public static Rectangle adjustLcdGeometry( - Canvas lcdCanvas, int resolutionW, int resolutionH, - int scale, short rotationId, boolean isPhoneShape) { - - float convertedScale = convertScale(scale); - Rectangle lcdBounds = new Rectangle(0, 0, 0, 0); - - if (isPhoneShape == false) { - RotationInfo rotation = RotationInfo.getValue(rotationId); - - /* resoultion, that is lcd size in general skin mode */ - if (RotationInfo.LANDSCAPE == rotation || - RotationInfo.REVERSE_LANDSCAPE == rotation) { - lcdBounds.width = (int)(resolutionH * convertedScale); - lcdBounds.height = (int)(resolutionW * convertedScale); - } else { - lcdBounds.width = (int)(resolutionW * convertedScale); - lcdBounds.height = (int)(resolutionH * convertedScale); - } - } else { - RotationType rotation = SkinRotation.getRotation(rotationId); - - LcdType lcd = rotation.getLcd(); /* from dbi */ - if (lcd == null) { - return null; - } - - RegionType region = lcd.getRegion(); - if (region == null) { - return null; - } - - Integer left = region.getLeft(); - Integer top = region.getTop(); - Integer width = region.getWidth(); - Integer height = region.getHeight(); - - lcdBounds.x = (int) (left * convertedScale); - lcdBounds.y = (int) (top * convertedScale); - lcdBounds.width = (int) (width * convertedScale); - lcdBounds.height = (int) (height * convertedScale); - } - - return lcdBounds; - } - public static SkinRegion getHardKeyArea( int currentX, int currentY, short rotationId, int scale ) { float convertedScale = convertScale( scale ); -- 2.34.1