diff -r abc41079b313 -r 59b3b4473dc8 javauis/lcdui_qt/src/javax/microedition/lcdui/CanvasKeypad.java --- a/javauis/lcdui_qt/src/javax/microedition/lcdui/CanvasKeypad.java Fri Jul 23 12:27:20 2010 +0300 +++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/CanvasKeypad.java Thu Aug 05 16:07:57 2010 +0300 @@ -1,136 +1,129 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: + * + */ package javax.microedition.lcdui; -import java.util.Vector; import java.util.Timer; import java.util.TimerTask; -import org.eclipse.ercp.swt.mobile.MobileShell; import org.eclipse.swt.SWT; import org.eclipse.swt.events.*; import org.eclipse.swt.widgets.*; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.graphics.*; +import org.eclipse.swt.internal.extension.ImageUtil; import org.eclipse.swt.internal.qt.*; -import com.nokia.mj.impl.rt.support.ApplicationInfo; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; -import javax.microedition.lcdui.EventDispatcher.LCDUIEvent; - - /** - * The CanvasKeypad class is designed to generate the on screen keypad - * and handle graphical operations as well as low-level pointer events. - * CanvasKeypad maps the pointer events to key events that are needed by the Canvas. - * + * The CanvasKeypad class is designed to generate the on screen keypad and + * handle graphical operations as well as low-level pointer events. CanvasKeypad + * maps the pointer events to key events that are needed by the Canvas. + * */ final class CanvasKeypad implements MouseListener, MouseMoveListener { - /** - * Constant for UP game action. - */ + * Constant for UP game action. + */ private static final int UP = -1; /** - * Constant for DOWN game action. - */ + * Constant for DOWN game action. + */ private static final int DOWN = -2; /** - * Constant for LEFT game action. - */ + * Constant for LEFT game action. + */ private static final int LEFT = -3; /** - * Constant for RIGHT game action. - */ + * Constant for RIGHT game action. + */ private static final int RIGHT = -4; /** - * Constant for FIRE game action. - */ + * Constant for FIRE game action. + */ private static final int FIRE = -5; /** - * Constant for SLK game action. - */ + * Constant for SLK game action. + */ private static final int SLK = -6; /** - * Constant for SRK game action. - */ + * Constant for SRK game action. + */ private static final int SRK = -7; /** - * Constant for general "A" game action. - */ + * Constant for general "A" game action. + */ private static final int GAME_A = 55; /** - * Constant for general "B" game action. - */ + * Constant for general "B" game action. + */ private static final int GAME_B = 57; /** - * Constant for general "C" game action. - */ + * Constant for general "C" game action. + */ private static final int GAME_C = 42; /** - * Constant for general "D" game action. - */ + * Constant for general "D" game action. + */ private static final int GAME_D = 35; /** - * Constant for general invalid key code. - */ + * Constant for general invalid key code. + */ private static final int INVALID_CODE = -99; /** - * Constant for long keypress timeout. - */ + * Constant for long keypress timeout. + */ private static final int KEYREPEAT_INTERVAL = 500; /** - * alpha value of a transparent pixel. - */ + * Alpha value of a transparent pixel. + */ private static final int TRANSPARENT = 0; /** - * keypad and game keys composites. - */ + * Keypad and game keys composites. + */ private Composite keypadComposite; private Composite gameKeysComposite; private Canvas canvas; /** - * CSS engine instance - */ + * CSS engine instance + */ private BaseCSSEngine cssEngine; /** - * Canvas keypad buttons. - */ - + * Canvas keypad buttons. + */ private Label center; private Label up; private Label down; @@ -169,30 +162,31 @@ private Label rockerKeyPressed; /** - * Timer for handling long key press and mouse move events. - */ + * Timer for handling long key press and mouse move events. + */ private Timer timer = new Timer(); private CanvasKeypadTimerTask timerTask; /** - * Path of the osk graphics - */ + * Path of the osk graphics + */ private static final String RESOURCE_PATH = "c:/data/images/"; /** - * offset on the composite in pixels where the osk rocker keys are layed out. - */ + * Offset on the composite in pixels where the osk rocker keys are layed + * out. + */ private int image_offset; - /** - * Constructs a canvas kepad based on the JAD attribute - * - * @param canvas - canvas for which the keypad is required. - * @param canvasComp - Composite corresponding to the canvas. - * @param mode- the jad attribute as a string. - */ - CanvasKeypad(Canvas canvas, Composite canvasComp, String mode) + * Constructs a canvas kepad based on the JAD attribute + * + * @param canvas + * - canvas for which the keypad is required. + * @param mode + * - the jad attribute as a string. + */ + CanvasKeypad(Canvas canvas, String mode) { this.canvas = canvas; @@ -200,73 +194,68 @@ cssEngine = new BaseCSSEngine(display); + // Load the images + center_normal = ImageUtil.createImageFromTheme(display, "qtg_fr_rocker_normal_c"); + center_pressed = ImageUtil.createImageFromTheme(display, "qtg_fr_rocker_pressed_c"); + left_normal = ImageUtil.createImageFromTheme(display, "qtg_fr_rocker_normal_l"); + left_pressed = ImageUtil.createImageFromTheme(display, "qtg_fr_rocker_pressed_l"); + right_normal = ImageUtil.createImageFromTheme(display, "qtg_fr_rocker_normal_r"); + right_pressed = ImageUtil.createImageFromTheme(display, "qtg_fr_rocker_pressed_r"); + up_normal = ImageUtil.createImageFromTheme(display, "qtg_fr_rocker_normal_t"); + up_pressed = ImageUtil.createImageFromTheme(display, "qtg_fr_rocker_pressed_t"); + down_normal = ImageUtil.createImageFromTheme(display, "qtg_fr_rocker_normal_b"); + down_pressed = ImageUtil.createImageFromTheme(display, "qtg_fr_rocker_pressed_b"); - //load the images - center_normal = new org.eclipse.swt.graphics.Image(display,RESOURCE_PATH + "qtg_fr_rocker_normal_c.svg"); - center_pressed = new org.eclipse.swt.graphics.Image(display,RESOURCE_PATH + "qtg_fr_rocker_pressed_c.svg"); - left_normal = new org.eclipse.swt.graphics.Image(display,RESOURCE_PATH + "qtg_fr_rocker_normal_l.svg"); - left_pressed = new org.eclipse.swt.graphics.Image(display,RESOURCE_PATH + "qtg_fr_rocker_pressed_l.svg"); - right_normal = new org.eclipse.swt.graphics.Image(display,RESOURCE_PATH + "qtg_fr_rocker_normal_r.svg"); - right_pressed = new org.eclipse.swt.graphics.Image(display,RESOURCE_PATH + "qtg_fr_rocker_pressed_r.svg"); - up_normal = new org.eclipse.swt.graphics.Image(display,RESOURCE_PATH + "qtg_fr_rocker_normal_t.svg"); - up_pressed = new org.eclipse.swt.graphics.Image(display,RESOURCE_PATH + "qtg_fr_rocker_pressed_t.svg"); - down_normal = new org.eclipse.swt.graphics.Image(display,RESOURCE_PATH + "qtg_fr_rocker_normal_b.svg"); - down_pressed = new org.eclipse.swt.graphics.Image(display,RESOURCE_PATH + "qtg_fr_rocker_pressed_b.svg"); + image_offset = (display.getBounds().width / 2) - (center_normal.getBounds().width / 2); - image_offset = (display.getBounds().width/2) - (center_normal.getBounds().width/2); - - //Load image data required to determine the osk button pressed on mouse events + // Load image data required to determine the osk button pressed on mouse events center_data = center_normal.getImageData(); left_data = left_normal.getImageData(); right_data = right_normal.getImageData(); up_data = up_normal.getImageData(); down_data = down_normal.getImageData(); - - //Set form layout for the shell containing the canvas. + // Set form layout for the shell containing the canvas. canvas.getShell().setLayout(new FormLayout()); - //Create the Navigation keypad + // Create the Navigation keypad createNavKeypad(); - //check if game keys are needed - if(mode.equalsIgnoreCase("gameactions")) + // Check if game keys are needed + if (mode.equalsIgnoreCase("gameactions")) { - //create the game key pad createGamePad(); } - - //Layout the game keys, navigation keys and the canvas composites on the shell using form layout - + // Layout the game keys, navigation keys and the canvas composites on + // the shell using form layout FormData canvasData = new FormData(); canvasData.right = new FormAttachment(100); canvasData.left = new FormAttachment(0); canvasData.top = new FormAttachment(0); canvasData.bottom = new FormAttachment(keypadComposite); - canvasComp.setLayoutData(canvasData); + canvas.getContentComp().setLayoutData(canvasData); FormData navKeyData = new FormData(); navKeyData.right = new FormAttachment(100); navKeyData.left = new FormAttachment(0); - if(gameKeysComposite != null) + if (gameKeysComposite != null) { - //game keypad was created above, so layout the game keys. + // Game keypad was created above, so layout the game keys. navKeyData.bottom = new FormAttachment(gameKeysComposite); } else { - //game keys are not needed + // Game keys are not needed navKeyData.bottom = new FormAttachment(100); } keypadComposite.setLayoutData(navKeyData); - - if(gameKeysComposite != null) + if (gameKeysComposite != null) { - //game keys were created, layout the game keys + // Game keys were created, layout the game keys FormData gameKeyData = new FormData(); gameKeyData.right = new FormAttachment(100); gameKeyData.left = new FormAttachment(0); @@ -274,19 +263,15 @@ gameKeysComposite.setLayoutData(gameKeyData); } - //layout the shell canvas.getShell().layout(); - } /** - * creates the navigation keypad - the directional keys and selctio key. - */ + * creates the navigation keypad - the directional keys and selctio key. + */ private void createNavKeypad() { - - //Create the navigation key composite - + // Create the navigation key composite keypadComposite = new Composite(canvas.getShell(), SWT.NONE); center = new Label(keypadComposite, SWT.NONE); @@ -306,39 +291,42 @@ down.setImage(down_normal); down.pack(); - //layout the navigation keys + // layout the navigation keys keypadComposite.setLayout(new FormLayout()); - FormData navkeysFormData = new FormData(); - navkeysFormData.top=new FormAttachment(0); - navkeysFormData.left = new FormAttachment(0,image_offset); + navkeysFormData.top = new FormAttachment(0); + navkeysFormData.left = new FormAttachment(0, image_offset); center.setLayoutData(navkeysFormData); left.setLayoutData(navkeysFormData); right.setLayoutData(navkeysFormData); up.setLayoutData(navkeysFormData); down.setLayoutData(navkeysFormData); - keypadComposite.pack(); + keypadComposite.pack(); // will also layout - keypadComposite.layout(); - + // The down Label will catch all mouse down events as it is covering + // all other rocker Labels, with the assumption that they all have + // the same bounds! + down.addMouseListener(this); + down.addMouseMoveListener(this); + + // We want to catch all drag events occurring on top of the rocker + // including those starting outside. keypadComposite.addMouseListener(this); keypadComposite.addMouseMoveListener(this); - } - /** - * creates the game keypad - the game action keys A, B, C and D. - */ + * creates the game keypad - the game action keys A, B, C and D. + */ private void createGamePad() { - //create the game pad composite + // create the game pad composite gameKeysComposite = new Composite(canvas.getShell(), SWT.NONE); gameKeysComposite.setLayout(new FormLayout()); - //Add the game buttons + // Add the game buttons gameA = new Button(gameKeysComposite, SWT.PUSH); gameA.addMouseListener(this); @@ -351,114 +339,93 @@ gameD = new Button(gameKeysComposite, SWT.PUSH); gameD.addMouseListener(this); - //Set the game key style sheets - cssEngine.applyCSS(gameA,"QPushButton" + - "{" + - "background-color:white;" + - "border-style: outset;" + - "border-width: 1px; " + - "border-color: black;" + - "border-radius: 2px;" + - "font: bold 14px;" + - "min-height: 2em;" + - "min-width: 5.1em;" + - "image: url(" + RESOURCE_PATH + "qtg_mono_game_a.svg);" + - "}" + - "QPushButton:pressed { image: url(" + RESOURCE_PATH + "qtg_mono_game_a.svg);" + - " border-style: inset;" + - "}"); - cssEngine.applyCSS(gameB,"QPushButton" + - "{" + - "background-color:white;" + - "border-style: outset;" + - "border-width: 1px; " + - "border-color: black;" + - "border-radius: 2px;" + - "font: bold 14px;" + - "min-height: 2em;" + - "min-width: 5.1em;" + - "image: url(" + RESOURCE_PATH + "qtg_mono_game_b.svg);" + - "}" + - "QPushButton:pressed { image: url(" + RESOURCE_PATH + "qtg_mono_game_b.svg);" + - " border-style: inset;" + - "}"); - cssEngine.applyCSS(gameC,"QPushButton" + - "{" + - "background-color:white;" + - "border-style: outset;" + - "border-width: 1px; " + - "border-color: black;" + - "border-radius: 2px;" + - "font: bold 14px;" + - "min-height: 2em;" + - "min-width: 5.1em;" + - "image: url(" + RESOURCE_PATH + "qtg_mono_game_c.svg);" + - "}" + - "QPushButton:pressed { image: url(" + RESOURCE_PATH + "qtg_mono_game_c.svg);" + - " border-style: inset;" + - "}"); - cssEngine.applyCSS(gameD,"QPushButton" + - "{" + - "background-color:white;" + - "border-style: outset;" + - "border-width: 1px; " + - "border-color: black;" + - "border-radius: 2px;" + - "font: bold 14px;" + - "min-height: 2em;" + - "min-width: 5.1em;" + - "image: url(" + RESOURCE_PATH + "qtg_mono_game_d.svg);" + - "}" + - "QPushButton:pressed { image: url(" + RESOURCE_PATH + "qtg_mono_game_d.svg);" + - " border-style: inset;" + - "}"); + // Set the game key style sheets + cssEngine.applyCSS(gameA, "QPushButton" + "{" + "background-color:white;" + + "border-style: outset;" + "border-width: 1px; " + "border-color: black;" + + "border-radius: 2px;" + "font: bold 14px;" + "min-height: 2em;" + "min-width: 5.1em;" + + "image: url(" + RESOURCE_PATH + "qtg_mono_game_a.svg);" + "}" + + "QPushButton:pressed { image: url(" + RESOURCE_PATH + "qtg_mono_game_a.svg);" + + " border-style: inset;" + "}"); + cssEngine.applyCSS(gameB, "QPushButton" + "{" + "background-color:white;" + + "border-style: outset;" + "border-width: 1px; " + "border-color: black;" + + "border-radius: 2px;" + "font: bold 14px;" + "min-height: 2em;" + "min-width: 5.1em;" + + "image: url(" + RESOURCE_PATH + "qtg_mono_game_b.svg);" + "}" + + "QPushButton:pressed { image: url(" + RESOURCE_PATH + "qtg_mono_game_b.svg);" + + " border-style: inset;" + "}"); + cssEngine.applyCSS(gameC, "QPushButton" + "{" + "background-color:white;" + + "border-style: outset;" + "border-width: 1px; " + "border-color: black;" + + "border-radius: 2px;" + "font: bold 14px;" + "min-height: 2em;" + "min-width: 5.1em;" + + "image: url(" + RESOURCE_PATH + "qtg_mono_game_c.svg);" + "}" + + "QPushButton:pressed { image: url(" + RESOURCE_PATH + "qtg_mono_game_c.svg);" + + " border-style: inset;" + "}"); + cssEngine.applyCSS(gameD, "QPushButton" + "{" + "background-color:white;" + + "border-style: outset;" + "border-width: 1px; " + "border-color: black;" + + "border-radius: 2px;" + "font: bold 14px;" + "min-height: 2em;" + "min-width: 5.1em;" + + "image: url(" + RESOURCE_PATH + "qtg_mono_game_d.svg);" + "}" + + "QPushButton:pressed { image: url(" + RESOURCE_PATH + "qtg_mono_game_d.svg);" + + " border-style: inset;" + "}"); - - //layout the game Keys + // layout the game Keys FormData gameAFormData = new FormData(); - gameAFormData.bottom=new FormAttachment(100,0); - gameAFormData.left=new FormAttachment(0,0); + gameAFormData.bottom = new FormAttachment(100, 0); + gameAFormData.left = new FormAttachment(0, 0); gameA.setLayoutData(gameAFormData); FormData gameBFormData = new FormData(); - gameBFormData.bottom=new FormAttachment(100,0); - gameBFormData.left=new FormAttachment(gameA,0); + gameBFormData.bottom = new FormAttachment(100, 0); + gameBFormData.left = new FormAttachment(gameA, 0); gameB.setLayoutData(gameBFormData); FormData gameCFormData = new FormData(); - gameCFormData.bottom=new FormAttachment(100,0); - gameCFormData.left=new FormAttachment(gameB,0); + gameCFormData.bottom = new FormAttachment(100, 0); + gameCFormData.left = new FormAttachment(gameB, 0); gameC.setLayoutData(gameCFormData); FormData gameDFormData = new FormData(); - gameDFormData.bottom=new FormAttachment(100,0); - gameDFormData.left=new FormAttachment(gameC,0); + gameDFormData.bottom = new FormAttachment(100, 0); + gameDFormData.left = new FormAttachment(gameC, 0); gameD.setLayoutData(gameDFormData); gameKeysComposite.layout(); } /** - * Handles orientation changes. - */ + * Handles orientation changes. + */ void handleOrientationChange(int mode) { - //change the layout as per orientation mode + // change the layout as per orientation mode } + /** + * Sets the currect Canvas for Key events. + * + * @param canvas + * - Current Canvas to which the key events needs to be + * delivered. + */ + void setCurrentCanvas(Canvas canvas) + { + this.canvas = canvas; + } /** - * Adds LSk and RSK keys to navigation keypad if the canvas is set to full screen mode. - * @param mode- Indicates if the canvas is in fullscreen mode or not. True if fullscreen, False otherwise. - */ + * Adds LSk and RSK keys to navigation keypad if the canvas is set to full + * screen mode. + * + * @param mode + * - Indicates if the canvas is in fullscreen mode or not. True + * if fullscreen, False otherwise. + */ void setFullScreenMode(boolean mode) { - //add the soft keys if the canvas is set to full screen mode/remove otherwise - if(mode == true) + // add the soft keys if the canvas is set to full screen mode/remove + // otherwise + if (mode == true) { - if(keypadComposite != null) + if (keypadComposite != null) { Color black = display.getSystemColor(SWT.COLOR_BLACK); @@ -470,48 +437,31 @@ skleft = new Button(keypadComposite, SWT.PUSH); skleft.addMouseListener(this); - //Set the style sheet - cssEngine.applyCSS(skright,"QPushButton" + - "{" + - "background-color:white;" + - "border-style: outset;" + - "border-width: 1px; " + - "border-bottom-left-radius: 22px;"+ - "border-color: black;" + - "font: bold 14px;" + - "min-width: 3em;" + - "min-height: 2em;" + - "image: url(" + RESOURCE_PATH + "qtg_mono_rsk_horizontal.svg);" + - "}" + - "QPushButton:pressed { image: url(" + RESOURCE_PATH + "qtg_mono_rsk_horizontal.svg);" + - " border-style: inset;" + - "}"); + // Set the style sheet + cssEngine.applyCSS(skright, "QPushButton" + "{" + "background-color:white;" + + "border-style: outset;" + "border-width: 1px; " + + "border-bottom-left-radius: 22px;" + "border-color: black;" + + "font: bold 14px;" + "min-width: 3em;" + "min-height: 2em;" + "image: url(" + + RESOURCE_PATH + "qtg_mono_rsk_horizontal.svg);" + "}" + + "QPushButton:pressed { image: url(" + RESOURCE_PATH + + "qtg_mono_rsk_horizontal.svg);" + " border-style: inset;" + "}"); - cssEngine.applyCSS(skleft,"QPushButton" + - "{" + - "background-color:white;" + - "border-style: outset;" + - "border-width: 1px; " + - "border-bottom-right-radius: 22px;"+ - "border-color: black;" + - "font: bold 14px;" + - "min-width: 3em;" + - "min-height: 2em;" + - "image: url(" + RESOURCE_PATH + "qtg_mono_lsk_horizontal.svg);" + - "}" + - "QPushButton:pressed { image: url(" + RESOURCE_PATH + "qtg_mono_lsk_horizontal.svg);" + - " border-style: inset;" + - "}"); - + cssEngine.applyCSS(skleft, "QPushButton" + "{" + "background-color:white;" + + "border-style: outset;" + "border-width: 1px; " + + "border-bottom-right-radius: 22px;" + "border-color: black;" + + "font: bold 14px;" + "min-width: 3em;" + "min-height: 2em;" + "image: url(" + + RESOURCE_PATH + "qtg_mono_lsk_horizontal.svg);" + "}" + + "QPushButton:pressed { image: url(" + RESOURCE_PATH + + "qtg_mono_lsk_horizontal.svg);" + " border-style: inset;" + "}"); FormData sklFormData = new FormData(); - sklFormData.top=new FormAttachment(0, 0); - sklFormData.left=new FormAttachment(0, 0); + sklFormData.top = new FormAttachment(0, 0); + sklFormData.left = new FormAttachment(0, 0); skleft.setLayoutData(sklFormData); FormData skrFormData = new FormData(); - skrFormData.top=new FormAttachment(0, 0); - skrFormData.right=new FormAttachment(100, 0); + skrFormData.top = new FormAttachment(0, 0); + skrFormData.right = new FormAttachment(100, 0); skright.setLayoutData(skrFormData); keypadComposite.layout(); @@ -519,10 +469,11 @@ } else { - //LSK and RSK buttons are not needed, remove the buttons from navigation keypad - if(skright != null) + // LSK and RSK buttons are not needed, remove the buttons from + // navigation keypad + if (skright != null) skright.dispose(); - if(skleft != null) + if (skleft != null) skleft.dispose(); keypadComposite.setBackground(null); @@ -531,384 +482,332 @@ } /** - * returns the height of the canvas keypad in pixels. - * @return Height of the canvas keypad in pixels. - */ + * returns the height of the canvas keypad in pixels. + * + * @return Height of the canvas keypad in pixels. + */ int getHeight() { int navKeyPadHeight = 0; int gameKeyPadHeight = 0; - if(keypadComposite != null) + if (keypadComposite != null) { - //calculate the navigation keypad height + // calculate the navigation keypad height navKeyPadHeight = keypadComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y; } - if(gameKeysComposite != null) + if (gameKeysComposite != null) { - //calculate the game keypad height + // calculate the game keypad height gameKeyPadHeight = gameKeysComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y; } - //return the total height + // return the total height return (navKeyPadHeight + gameKeyPadHeight); } /** - * returns the keycode corresponding to the canvas keypad button. - * @return keycode. - */ + * returns the keycode corresponding to the canvas keypad button. + * + * @return keycode. + */ private int getKeyCode(Widget w) { - int keyCode = INVALID_CODE; // Find out which osk button was pressed - if(w == up) + if (w == up) { keyCode = UP; } - else if(w == down) + else if (w == down) { keyCode = DOWN; } - else if(w == left) + else if (w == left) { keyCode = LEFT; } - else if(w == right) + else if (w == right) { keyCode = RIGHT; } - else if(w == center) + else if (w == center) { keyCode = FIRE; } - else if(w == skleft) + else if (w == skleft) { keyCode = SLK; } - else if(w == skright) + else if (w == skright) { keyCode = SRK; } - else if(w == gameA) + else if (w == gameA) { keyCode = GAME_A; } - else if(w == gameB) + else if (w == gameB) { keyCode = GAME_B; } - else if(w == gameC) + else if (w == gameC) { keyCode = GAME_C; } - else if(w == gameD) + else if (w == gameD) { keyCode = GAME_D; } else { - keyCode = INVALID_CODE;; + keyCode = INVALID_CODE; } return keyCode; } - /** - * Mouse listeners. - */ - + * Mouse listeners. + */ public void mouseDown(MouseEvent e) { - - //handle the mouse down event handleMouseDown(e); - } public void mouseUp(MouseEvent e) { - - //handle the mouse up event handleMouseUp(e); - } public void mouseMove(MouseEvent e) { - - //handle the mouse move event handleMouseMove(e); - } public void mouseDoubleClick(MouseEvent event) { - //do nothing + // Do nothing } - - - - /** - * Handles the mouse down event - * - */ + * Handles the mouse down event + * Note that e.x and e.y are relative to the widget that was pressed. + */ private void handleMouseDown(MouseEvent e) { - - if(e.widget == keypadComposite) + if (e.widget == down) // highest in the z-order { - //the mouse down was grabbed by the keypad composite, map the key code based on the on rocker images. keyPressed = handleRockerPressed(e); - } else { - //get the keycode of the game or soft keys based on the button that was clicked keyPressed = getKeyCode(e.widget); } - if(keyPressed != INVALID_CODE) + if (keyPressed != INVALID_CODE) { - - //notify the canvas canvas.doKeyPressed(keyPressed); - // Create and Schedule the long keypress timer timerTask = new CanvasKeypadTimerTask(); timer.schedule(timerTask, KEYREPEAT_INTERVAL); } } /** - * Handles the mouse up event - * - */ + * Handles the mouse up event + * Note that e.x and e.y are relative to the widget that was pressed. + */ private void handleMouseUp(MouseEvent e) { int keyReleased; - if(timerTask != null) - { - //cancel the long keypress timer if it is running - timerTask.cancel(); - timerTask = null; - } - - if(e.widget == keypadComposite) - { - //the mouse up was grabbed by the keypad composite, map the key code based on the on rocker images. - keyReleased = handleRockerReleased(e); - - } - else + if (timerTask != null) { - //get the keycode of the game or soft keys based on the button that was clicked - keyReleased = getKeyCode(e.widget); - } - - if(keyReleased != INVALID_CODE) - { - - //notify the canvas - canvas.doKeyReleased(keyReleased); - } - } - - - /** - * Handles the mouse move event - * - */ - private void handleMouseMove(MouseEvent e) - { - - if(timerTask != null) - { - //cancel the long keypress timer if it is running timerTask.cancel(); timerTask = null; } - if(e.widget == keypadComposite) + if (e.widget == down || e.widget == keypadComposite) { - //the mouse move was grabbed by the keypad composite, handle the rocker key swipe - handleRockerMoved(e); - + keyReleased = handleRockerReleased(e); } else { - //get the keycode of the game or soft keys based on the button that was clicked - keyPressed = getKeyCode(e.widget); + keyReleased = getKeyCode(e.widget); + } + + if (keyReleased != INVALID_CODE) + { + canvas.doKeyReleased(keyReleased); + } + } - //notify the canvas + /** + * Handles the mouse move event + * Note that e.x and e.y are relative to the widget that was pressed. + */ + private void handleMouseMove(MouseEvent e) + { + if (timerTask != null) + { + timerTask.cancel(); + timerTask = null; + } + + if (e.widget == down || e.widget == keypadComposite) + { + handleRockerMoved(e); + } + else + { + keyPressed = getKeyCode(e.widget); canvas.doKeyPressed(keyPressed); - - // Create and Schedule Timer timerTask = new CanvasKeypadTimerTask(); timer.schedule(timerTask, KEYREPEAT_INTERVAL); } - - } - /** - * Handles the rocker key press - * - */ + * Handles the rocker key press + */ private int handleRockerPressed(MouseEvent e) { - keyPressed = INVALID_CODE; - - Rectangle image_bounds = center.getBounds(); - - // Find out which rocker button was pressed - if(image_bounds.contains(e.x,e.y) == true) + + Point rockerSize = center.getSize(); + if (e.x >= 0 && e.x <= rockerSize.x && e.y >= 0 && e.y <= rockerSize.y) { - //check each of the button images to check which osk navkey button was pressed - if(center_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT) + if (center_data.getAlpha(e.x, e.y) != TRANSPARENT) { - //center button was pressed keyPressed = FIRE; rockerKeyPressed = center; center.setImage(center_pressed); } - else if(left_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT) + else if (left_data.getAlpha(e.x, e.y) != TRANSPARENT) { - //left button was pressed keyPressed = LEFT; rockerKeyPressed = left; left.setImage(left_pressed); } - else if(right_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT) + else if (right_data.getAlpha(e.x, e.y) != TRANSPARENT) { - //right button was pressed keyPressed = RIGHT; rockerKeyPressed = right; right.setImage(right_pressed); } - else if(up_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT) + else if (up_data.getAlpha(e.x, e.y) != TRANSPARENT) { - //up button was pressed keyPressed = UP; rockerKeyPressed = up; up.setImage(up_pressed); } - else if(down_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT) + else if (down_data.getAlpha(e.x, e.y) != TRANSPARENT) { - //down button was pressed keyPressed = DOWN; rockerKeyPressed = down; down.setImage(down_pressed); } else { - keyPressed = INVALID_CODE;; + keyPressed = INVALID_CODE; } - } return keyPressed; - } - /** - * Handles the mouse released on the rocker keys - * - */ + * Handles the mouse released on the rocker keys + */ private int handleRockerReleased(MouseEvent e) { - int keyReleased = INVALID_CODE; - Rectangle image_bounds = center.getBounds(); - - // Find out which rocker button was released - if(image_bounds.contains(e.x,e.y) == true) + Point rockerSize = center.getSize(); + Point rockerLoc = center.getLocation(); + + if (e.widget == keypadComposite) { - //check each of the button images to check which osk navkey button was released - if((rockerKeyPressed == center) && - (center_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT)) + // Drag started outside rocker + e.x -= rockerLoc.x; + e.y -= rockerLoc.y; + } + + if (e.x >= 0 && e.x <= rockerSize.x && e.y >= 0 && e.y <= rockerSize.y) + { + if ((rockerKeyPressed == center) + && (center_data.getAlpha(e.x, e.y) != TRANSPARENT)) { - //center button was released keyReleased = FIRE; center.setImage(center_normal); } - else if((rockerKeyPressed == left) && - (left_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT)) + else if ((rockerKeyPressed == left) + && (left_data.getAlpha(e.x, e.y) != TRANSPARENT)) { - //left button was released keyReleased = LEFT; left.setImage(left_normal); } - else if((rockerKeyPressed == right) && - (right_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT)) + else if ((rockerKeyPressed == right) + && (right_data.getAlpha(e.x, e.y) != TRANSPARENT)) { - //right button was released keyReleased = RIGHT; right.setImage(right_normal); } - else if((rockerKeyPressed == up) && - (up_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT)) + else if ((rockerKeyPressed == up) + && (up_data.getAlpha(e.x, e.y) != TRANSPARENT)) { - //up button was released keyReleased = UP; up.setImage(up_normal); } - else if((rockerKeyPressed == down) && - (down_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT)) + else if ((rockerKeyPressed == down) + && (down_data.getAlpha(e.x, e.y) != TRANSPARENT)) { - //down button was released keyReleased = DOWN; down.setImage(down_normal); } else { - keyReleased = INVALID_CODE;; + keyReleased = INVALID_CODE; } - } return keyReleased; - } - /** - * Handles the mouse move on the rocker keys - * - */ + * Handles the mouse move on the rocker keys + */ private void handleRockerMoved(MouseEvent e) { - keyPressed = INVALID_CODE; - - Rectangle image_bounds = center.getBounds(); + Point size = center.getSize(); + Point rockerLoc = center.getLocation(); + + if (e.widget == keypadComposite) + { + // Drag started outside rocker + e.x -= rockerLoc.x; + e.y -= rockerLoc.y; + } - // Find out which rocker button was traversed to - if(image_bounds.contains(e.x,e.y) == true) + if (e.x >= 0 && e.x <= size.x && e.y >= 0 && e.y <= size.y) { - //check each of the button images to check which osk navkey button was traversed to - if((center_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT) && - (rockerKeyPressed != center)) + if ((center_data.getAlpha(e.x, e.y) != TRANSPARENT) + && (rockerKeyPressed != center)) { - //Mouse moved to center rocker key from another rocker key, release the other(source) rocker key + // Mouse moved to center rocker key from another rocker key, + // release the other(source) rocker key releaseRockerKey(rockerKeyPressed); } - else if((left_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT) && - (rockerKeyPressed != left)) + else if ((left_data.getAlpha(e.x, e.y) != TRANSPARENT) + && (rockerKeyPressed != left)) { - //Mouse moved to left rocker key from another rocker key, release the other(source) rocker key + // Mouse moved to left rocker key from another rocker key, + // release the other(source) rocker key // and press the left key releaseRockerKey(rockerKeyPressed); keyPressed = LEFT; @@ -917,10 +816,11 @@ canvas.doKeyPressed(keyPressed); pressedKeyData = left_data; } - else if((right_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT) && - (rockerKeyPressed != right)) + else if ((right_data.getAlpha(e.x, e.y) != TRANSPARENT) + && (rockerKeyPressed != right)) { - //Mouse moved to right rocker key from another rocker key, release the other(source) rocker key + // Mouse moved to right rocker key from another rocker key, + // release the other(source) rocker key // and press the right key releaseRockerKey(rockerKeyPressed); keyPressed = RIGHT; @@ -929,10 +829,11 @@ canvas.doKeyPressed(keyPressed); pressedKeyData = right_data; } - else if((up_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT) && - (rockerKeyPressed != up)) + else if ((up_data.getAlpha(e.x, e.y) != TRANSPARENT) + && (rockerKeyPressed != up)) { - //Mouse moved to up rocker key from another rocker key, release the other(source) rocker key + // Mouse moved to up rocker key from another rocker key, release + // the other(source) rocker key // and press the up key releaseRockerKey(rockerKeyPressed); keyPressed = UP; @@ -941,10 +842,11 @@ rockerKeyPressed = up; pressedKeyData = up_data; } - else if((down_data.getAlpha(e.x-image_offset,e.y)!=TRANSPARENT) && - (rockerKeyPressed != down)) + else if ((down_data.getAlpha(e.x, e.y) != TRANSPARENT) + && (rockerKeyPressed != down)) { - //Mouse moved to down rocker key from another rocker key, release the other(source) rocker key + // Mouse moved to down rocker key from another rocker key, + // release the other(source) rocker key // and press the down key releaseRockerKey(rockerKeyPressed); keyPressed = DOWN; @@ -955,76 +857,65 @@ } else { - if((pressedKeyData != null) && - (pressedKeyData.getAlpha(e.x-image_offset,e.y) == TRANSPARENT)) + if ((pressedKeyData != null) + && (pressedKeyData.getAlpha(e.x, e.y) == TRANSPARENT)) { - //Mouse moved to out of all rocker keys from another rocker key, release the other(source) rocker key + // Mouse moved to out of all rocker keys from another rocker + // key, release the other(source) rocker key releaseRockerKey(rockerKeyPressed); pressedKeyData = null; rockerKeyPressed = null; } } - } else { - //Mouse moved to out of all rocker keys, release the other(source) rocker key + // Mouse moved to out of all rocker keys, release the other(source) + // rocker key releaseRockerKey(rockerKeyPressed); } - - } - - /** - * Releases a rocker key - * - */ + * Releases a rocker key + */ private void releaseRockerKey(Label rockerKeyPressed) { - - if(rockerKeyPressed == center) + if (rockerKeyPressed == center) { center.setImage(center_normal); canvas.doKeyReleased(FIRE); } - else if(rockerKeyPressed == left) + else if (rockerKeyPressed == left) { left.setImage(left_normal); canvas.doKeyReleased(LEFT); } - else if(rockerKeyPressed == right) + else if (rockerKeyPressed == right) { right.setImage(right_normal); canvas.doKeyReleased(RIGHT); } - else if(rockerKeyPressed == up) + else if (rockerKeyPressed == up) { up.setImage(up_normal); canvas.doKeyReleased(UP); } - else if(rockerKeyPressed == down) + else if (rockerKeyPressed == down) { down.setImage(down_normal); canvas.doKeyReleased(DOWN); } - } - - /** - * Canvas Keypad timer task - * - */ + * Canvas Keypad timer task + */ class CanvasKeypadTimerTask extends TimerTask { - public void run() { - ESWTUIThreadRunner.syncExec(new Runnable() { public void run() @@ -1032,11 +923,6 @@ canvas.doKeyPressed(keyPressed); } }); - - } } - - - }