javauis/lcdui_qt/src/javax/microedition/lcdui/LCDUIInvokerImpl.java
changeset 21 2a9601315dfc
child 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/LCDUIInvokerImpl.java	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,269 @@
+/*
+* 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 org.eclipse.swt.graphics.Internal_GfxPackageSupport;
+import org.eclipse.swt.internal.qt.graphics.GraphicsContext;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Button;
+import com.nokia.mid.ui.DirectGraphics;
+import com.nokia.mj.impl.nokialcdui.LCDUIInvoker;
+
+final class LCDUIInvokerImpl extends LCDUIInvoker {
+
+    private boolean eswtReturn;
+
+   /**
+     * Constant for Soft Key Label Height
+     */
+    public static final int LABEL_HEIGHT = 30;
+    
+    static void createInvoker() {
+        LCDUIInvoker.setInvoker(
+                new javax.microedition.lcdui.LCDUIInvokerImpl());
+    }
+    
+    
+    protected void doESWTUIThreadRunnerSyncExec(Runnable runnable) {
+        ESWTUIThreadRunner.syncExec(runnable);
+    }
+
+    /**
+     * Returns main eSWT Control that is used by LCDUI Displayable or Item.
+     *
+     * @param lcduiObject - LCDUI Displayable or Item.
+     * @return eSWT Control that is used by Displayable/Item or null if no
+     *         Control is available.
+     */
+    protected Control doGetEswtControl(Object lcduiObject) {
+        Logger.method(this, "doGetEswtControl", lcduiObject);
+        if (lcduiObject instanceof Displayable) {
+            return ((Displayable) lcduiObject).getShell();
+        }
+        else if (lcduiObject instanceof Item) {
+            Item item = (Item) lcduiObject;
+            if (item.isContainedInForm()) {
+                Form parentForm = (Form) item.getParent();
+                return parentForm.getLayoutPolicy().getItemControl(item);
+            }
+        }
+        return null;
+    }
+
+    /*
+    * This method checks if the current Displayable exists
+    * If yes, then the current Displayable is asked for the property
+    * If no, the null is returned
+    */
+    protected String getSoftKeyLabelLocationImpl(String softKeyId)
+    {
+        String SoftKeyLabelLocation = null;
+
+        Displayable disp = javax.microedition.lcdui.Display.getDisplay().getCurrent();
+
+            if( ( disp != null) && (disp instanceof Canvas))
+            {
+                  if( ( (Canvas) disp).IsFullScreenMode()) {
+
+                      if("com.nokia.softkey1.label.location".equals(softKeyId))
+                      {
+                          SoftKeyLabelLocation = "0," + String.valueOf(( (Canvas) disp).getHeight()) + ","
+                                                 + String.valueOf( (((Canvas) disp).getWidth())/2 ) + ","
+                                                 + String.valueOf(LABEL_HEIGHT);
+                      }
+                      else if("com.nokia.softkey2.label.location".equals(softKeyId))
+                      {
+                          SoftKeyLabelLocation = String.valueOf( (((Canvas) disp).getWidth())/2 ) + "," 
+                                                 + String.valueOf(( (Canvas) disp).getHeight()) + ","
+                                                 + String.valueOf( (((Canvas) disp).getWidth())/2 ) + ","
+                                                 + String.valueOf(LABEL_HEIGHT);
+                      }
+                  }
+            }
+
+        return SoftKeyLabelLocation;
+    }
+
+    /*
+    * This method checks if the current Displayable exists
+    * If yes, then the current Displayable is asked for the property
+    * If no, the null is returned
+    */
+    protected String getSoftKeyLabelAnchorImpl(String softKeyId)
+    {
+        String SoftKeyLabelAnchor = null;
+
+        Displayable disp = javax.microedition.lcdui.Display.getDisplay().getCurrent();
+
+            if( ( disp != null) && (disp instanceof Canvas))
+            {
+                 if( null == ((Canvas) disp).getCanvasKeypad())
+                 {
+                     SoftKeyLabelAnchor = String.valueOf(Graphics.TOP | Graphics.HCENTER);
+                 }
+                 else
+                 {
+                     if("com.nokia.softkey1.label.anchor".equals(softKeyId))
+                     {
+                         SoftKeyLabelAnchor = String.valueOf(Graphics.TOP | Graphics.LEFT);
+                     }
+                     else if("com.nokia.softkey2.label.anchor".equals(softKeyId))
+                     {
+                         SoftKeyLabelAnchor = String.valueOf(Graphics.TOP | Graphics.RIGHT);
+                     }
+                 }
+            }
+
+        return SoftKeyLabelAnchor;
+    }
+
+    protected Display doGetEswtDisplay() {
+        Logger.method(this, "doGetEswtDisplay");
+        return ESWTUIThreadRunner.getInstance().getDisplay();
+    }
+
+    protected org.eclipse.swt.graphics.Image doGetEswtImage(Image img) {
+        Logger.method(this, "doGetEswtImage", img);
+        return Image.getESWTImage(img);
+    }
+
+    protected DirectGraphics doGetDirectGraphics(Graphics g) {
+        Logger.method(this, "doGetDirectGraphics", g);
+        if (g != null) {
+            return g.getDirectGraphics();
+        }
+        return null;
+    }
+
+    protected GraphicsContext doGetGc(Graphics g) {
+        Logger.method(this, "doGetGc", g);
+        if (g != null) {
+            return g.getGc();
+        }
+        return null;
+    }
+
+    protected Font doGetFreeSizedFont(int face, int style, int height) {
+        Logger.method(this, "doGetFreeSizedFont");
+        return Font.getFreeSizedFont(face, style, height);
+    }
+
+
+    protected void doInitGameCanvas(Object canvas, boolean suppressKeys) {
+        Logger.method(canvas, "doInitGameCanvas", String.valueOf(suppressKeys));
+        ((Canvas) canvas).initGameCanvas(suppressKeys);
+    }
+
+    protected Object doGetGraphics(Object canvas) {
+        return ((Canvas) canvas).getGameBufferGraphics();
+    }
+
+    protected Object doGetFlushLock(Object graphics) {
+    	return ((Graphics) graphics).getLock();
+    }
+    
+    protected int doGetKeyStates(Object canvas) {
+        return ((Canvas) canvas).getGameKeyStates();
+    }
+
+    protected void doRenderGraphics(Object canvas, Object graphics) {
+        ((Canvas) canvas).renderGraphics((Graphics) graphics);
+    }
+
+    protected void doFlushGraphics(Object canvas,
+            int x, int y, int width, int height) {
+        ((Canvas) canvas).flushGameBuffer(x, y, width, height);
+    }
+
+    protected String doGetDynamicProperty(String key) {
+        if ("com.nokia.key.scancode".equals(key)) {
+            return String.valueOf(ESWTUIThreadRunner.getLastKeyScancode());
+        }
+        else if ("com.nokia.key.modifier".equals(key)) {
+            return String.valueOf(ESWTUIThreadRunner.getLastKeyModifier());
+        }
+        else if ("com.nokia.keyboard.type".equals(key)) {
+            // TODO: eSWT support required
+            /*
+            No keypad (for example a touch device without keypad)   - None
+            Standard ITU-T keypad (Phone keypad with 12 keys)       - PhoneKeypad
+            QWERTY (4x12 layout)                                    - FullKeyboard
+            QWERTY (limited, 4x10 layout)                           - LimitedKeyboard4x10
+            QWERTY (limited, 3x11 layout)                           - LimitedKeyboard3x11
+            Half QWERTY layout (aka Compact QWERTY keyboard).       - HalfKeyboard
+            Custom QWERTY layout                                    - Custom
+            Unknown layout                                          - Unknown
+            */
+            return "Unknown";
+        }
+        else if("com.nokia.softkey1.label.location".equals(key))
+        {
+        	  return getSoftKeyLabelLocationImpl(key);
+        }
+        else if("com.nokia.softkey1.label.anchor".equals(key))
+        {
+        	  return getSoftKeyLabelAnchorImpl(key);
+        }
+        else if("com.nokia.softkey2.label.location".equals(key))
+        {
+        	  return getSoftKeyLabelLocationImpl(key);
+        }
+        else if("com.nokia.softkey2.label.anchor".equals(key))
+        {
+        	  return getSoftKeyLabelAnchorImpl(key);
+        }
+        return "key not supported";
+    }
+
+    protected boolean doDetectCollision(Image image1, int transform1, int p1x, int p1y,
+                                        int r1x1, int r1y1, int r1x2, int r1y2,
+                                        Image image2, int transform2, int p2x, int p2y,
+                                        int r2x1, int r2y1, int r2x2, int r2y2) {
+
+        final org.eclipse.swt.graphics.Image eswtImg1 = Image.getESWTImage(image1);;
+        final int ftransform1 = transform1;
+        final int fp1x = p1x;
+        final int fp1y = p1y;
+        final int fr1x1 = r1x1;
+        final int fr1y1 = r1y1;
+        final int fr1x2 = r1x2;
+        final int fr1y2 = r1y2;
+
+        final org.eclipse.swt.graphics.Image eswtImg2 = Image.getESWTImage(image2);
+        final int ftransform2 = transform2;
+        final int fp2x = p2x;
+        final int fp2y = p2y;
+        final int fr2x1 = r2x1;
+        final int fr2y1 = r2y1;
+        final int fr2x2 = r2x2;
+        final int fr2y2 = r2y2;
+
+        eswtReturn = false;
+        ESWTUIThreadRunner.safeSyncExec(new Runnable() {
+            public void run() {
+                eswtReturn = org.eclipse.swt.internal.qt.graphics.Image.detectCollision(
+                        Internal_GfxPackageSupport.getImage(eswtImg1), ftransform1, fp1x, fp1y,
+                        fr1x1, fr1y1, fr1x2, fr1y2,
+                        Internal_GfxPackageSupport.getImage(eswtImg2), ftransform2, fp2x, fp2y,
+                        fr2x1, fr2y1, fr2x2, fr2y2);
+            }
+        });
+        return eswtReturn;
+    }
+
+}