javauis/mmapi_qt/baseline/src/cmmadisplay.cpp
changeset 47 f40128debb5d
parent 26 dc7c549001d5
child 61 bf7ee68962da
--- a/javauis/mmapi_qt/baseline/src/cmmadisplay.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/cmmadisplay.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -50,16 +50,59 @@
         iFullScreen(EFalse),
         iContainerVisible(ETrue),
         iIsForeground(ETrue),
-        iResetDrawRect(EFalse)
+        iResetDrawRect(EFalse),
+        iIseSWT(EFalse)
 {
 }
 
-void CMMADisplay::Construct(MMAFunctionServer* eventSource , jobject javadisplayref)
+void CMMADisplay::Construct(MMAFunctionServer* eventSource ,JNIEnv* aJni, jobject javadisplayref)
 {
     iEventSource = eventSource;
-    iJni = iEventSource->getValidJniEnv();
+    iJavadisplayref = javadisplayref;
+    LOG1(EJavaMMAPI,EInfo,"MID::CMMADisplay::Construct=%d",iIseSWT);
+    if (iIseSWT)
+    {
+        iJni = aJni;
+    }
+    else
+    {
+        iJni = iEventSource->getValidJniEnv();
+    }
     iJavaDisplayObject = iJni->NewGlobalRef(javadisplayref);
     iJavaDisplayClass = iJni->GetObjectClass(iJavaDisplayObject);
+
+    setRectID = iJni->GetMethodID(iJavaDisplayClass,
+                                  "setRect",
+                                  "()V");
+    iRectDimensionField = iJni->GetFieldID(iJavaDisplayClass, "rectDimension", "[I");
+
+    redrawControlID = iJni->GetMethodID(
+                          iJavaDisplayClass,
+                          "redrawControl",
+                          "()V");
+
+    removeContentBoundID = iJni->GetMethodID(
+                               iJavaDisplayClass,
+                               "removeContentBound",
+                               "()V");
+
+    setContentBoundID = iJni->GetMethodID(
+                            iJavaDisplayClass,
+                            "setContentBound",
+                            "()V");
+
+    getCallBackMethodID = iJni->GetMethodID(
+                              iJavaDisplayClass,
+                              "GetCallbackInUiThread",
+                              "(I)V");
+
+    getBoundRectID = iJni->GetMethodID(
+                         iJavaDisplayClass,
+                         "getBoundRect",
+                         "()V");
+
+    iDisplayboundarrField = iJni->GetFieldID(iJavaDisplayClass, "displayboundarr", "[I");
+
     // Components must have direct content.
     /* __ASSERT_LOG(EJavaMMAPI,EInfo,"aDirectContainer, User::Invariant());
 
@@ -123,6 +166,7 @@
     }
 
     drawRect.Move(position);
+    LOG2(EJavaMMAPI, EInfo, "CMMADisplay::ScaleToFullScreen::drawRect.Width=%d, drawRect.Height=%d",drawRect.Width(), drawRect.Height());
     LOG(EJavaMMAPI,EInfo,"CMMADisplay::ScaleToFullScreen() -");
     return drawRect;
 }
@@ -243,12 +287,15 @@
 // from MMMADisplay
 TSize CMMADisplay::DisplaySize()
 {
+    LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::DisplaySize +");
     if (iWindow && iFullScreen)
     {
+        LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::DisplaySize if loop ");
         return iWindow->DrawRect().Size();
     }
     else
     {
+        LOG1(EJavaMMAPI,EInfo,"MID::CMMADisplay::DisplaySize else loop %d",iUserRect.Size().iHeight);
         return iUserRect.Size();
     }
 }
@@ -295,7 +342,15 @@
     {
         // iWindow->SetVisible(aValue, EFalse);
         //MMAPI UI 3.x req. (had to comment above line and add below line which excutes in FS thread)
-        iWindow->SetVisible(aValue, ETrue);
+        if (iIseSWT == true)
+        {
+            iWindow->SetVisible(aValue, ETrue);
+        }
+        else
+        {
+            iWindow->SetVisible(aValue, EFalse);
+        }
+        LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::SetVisible after iWindow->SetVisible()");
         SetClippingRegion();
         LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::SetVisible -");
     }
@@ -468,21 +523,31 @@
 
 void CMMADisplay::GetCallbackInUiThread(TInt placeholder)
 {
+    JNIEnv* validJni = iEventSource->getValidJniEnv();
+    jobject javaDisplayObject;
+    jclass javaDisplayClass;
     LOG(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread +");
-
-
-
-
-
-
-
-
-    jmethodID getCallBackMethodID = iJni->GetMethodID(
-                                        iJavaDisplayClass,
-                                        "GetCallbackInUiThread",
-                                        "(I)V");
-    // LOG1(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread getCallBackMethodID = %d",getCallBackMethodID);
-    iJni->CallVoidMethod(iJavaDisplayObject,getCallBackMethodID,placeholder);
+    /**
+     * In case of eSWT iJavaDisplayClass and iJavaDisplayObject were initialized with JNI
+     * in UI Thread. Since this function is called from FunctionServer Thread so we need to get
+     * valid JNI for FunctionServer Thread and need to initialize iJavaDisplayClass and iJavaDisplayObject
+     * again for FunctionServer Thread rather than using the one that was created in Constructor(UI Thread).
+     */
+    if (iIseSWT)
+    {
+        javaDisplayObject = validJni->NewGlobalRef(iJavadisplayref);
+        javaDisplayClass =  validJni->GetObjectClass(iJavaDisplayObject);
+    }
+    else
+    {
+        javaDisplayObject = iJavaDisplayObject;
+        javaDisplayClass = iJavaDisplayClass;
+    }
+    getCallBackMethodID = validJni->GetMethodID(javaDisplayClass,
+                          "GetCallbackInUiThread",
+                          "(I)V");
+    LOG1(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread getCallBackMethodID = %d",getCallBackMethodID);
+    validJni->CallVoidMethod(javaDisplayObject,getCallBackMethodID,placeholder);
     LOG(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread -");
 }
 
@@ -514,6 +579,7 @@
         return;
     }
     iWindow->ProcureWindowResourcesFromQWidget(iWs,iScreenDevice,window);
+    iWindow->SetVisible(ETrue,ETrue);
     LOG(EJavaMMAPI,EInfo,"CMMADisplay::SetWindowResources -");
 }
 
@@ -629,27 +695,28 @@
 void CMMADisplay::ResetJavaRectObject(const TRect& aRect)
 {
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject +");
-    JNIEnv* validJni = iEventSource->getValidJniEnv();
-    jmethodID setRectID = validJni->GetMethodID(
-                              iJavaDisplayClass,
-                              "setRect",
-                              "()V");
-
+    //TRect rect = aRect;
+    JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();//iJni;
+    /*jmethodID setRectID = validJni->GetMethodID(
+                                                 iJavaDisplayClass,
+                                                 "setRect",
+                                             "()V");
+    */
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --1");
     // set the value to java,so that we can access those from array
-    jfieldID field = validJni->GetFieldID(iJavaDisplayClass, "rectDimension", "[I");
-    if (field == NULL)
+
+    //jfieldID iRectDimensionField = validJni->GetFieldID(iJavaDisplayClass, "rectDimension", "[I");
+    if (iRectDimensionField == NULL)
     {
         // handle error
     }
     /* Write to the instance fields */
-    jintArray javaDimensionarr = (jintArray)validJni->GetObjectField(iJavaDisplayObject, field);
+    jintArray javaDimensionarr = (jintArray)validJni->GetObjectField(iJavaDisplayObject, iRectDimensionField);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --2");
     jint* nativeRectDimensionArr = validJni->GetIntArrayElements(javaDimensionarr, NULL);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --3");
     if (!nativeRectDimensionArr)
-    {
-        // inputBuffer was already allocated
+    {    // inputBuffer was already allocated
         validJni->ReleaseIntArrayElements(javaDimensionarr, nativeRectDimensionArr, JNI_ABORT);
         LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject Error in resetting rect dimension to java");
         return;
@@ -659,9 +726,10 @@
     nativeRectDimensionArr[2] = aRect.Width();
     nativeRectDimensionArr[3] = aRect.Height();
     // Now the dimension array in java is updated hence reset the java rect
+
+    validJni->ReleaseIntArrayElements(javaDimensionarr, nativeRectDimensionArr, JNI_COMMIT);
     validJni->CallVoidMethod(iJavaDisplayObject,setRectID);
 
-    validJni->ReleaseIntArrayElements(javaDimensionarr, nativeRectDimensionArr, JNI_COMMIT);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject -");
 }
 
@@ -669,13 +737,14 @@
 void CMMADisplay::SetContentBoundToJavaControl(const TRect& aRect)
 {
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::SetContentBoundToJavaControl +");
-    JNIEnv* validJni = iEventSource->getValidJniEnv();
+    JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();//iJni;
     // Reset the java rect
     ResetJavaRectObject(aRect);
-    jmethodID setContentBoundID = validJni->GetMethodID(
-                                      iJavaDisplayClass,
-                                      "setContentBound",
-                                      "()V");
+    /*jmethodID setContentBoundID = validJni->GetMethodID(
+                                         iJavaDisplayClass,
+                                         "setContentBound",
+                                     "()V");
+    */
     // call java function
     validJni->CallVoidMethod(iJavaDisplayObject,setContentBoundID);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::SetContentBoundToJavaControl -");
@@ -684,13 +753,14 @@
 void CMMADisplay::RemoveContentBoundFromJavaControl(const TRect& aRect)
 {
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RemoveContentBoundFromJavaControl +");
-    JNIEnv* validJni = iEventSource->getValidJniEnv();
+    JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();
     // Reset the java rect
     ResetJavaRectObject(aRect);
-    jmethodID removeContentBoundID = validJni->GetMethodID(
+    /*jmethodID removeContentBoundID = validJni->GetMethodID(
                                          iJavaDisplayClass,
                                          "removeContentBound",
-                                         "()V");
+                                     "()V");
+    */
     // call java function
     validJni->CallVoidMethod(iJavaDisplayObject,removeContentBoundID);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RemoveContentBoundFromJavaControl -");
@@ -699,16 +769,26 @@
 void CMMADisplay::RefreshJavaControl()
 {
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RefreshJavaControl +");
-    JNIEnv* validJni = iEventSource->getValidJniEnv();
+    JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();//iJni;
     // Reset the java rect
     //ResetJavaRectObject(aRect);
-    jmethodID redrawControlID = validJni->GetMethodID(
-                                    iJavaDisplayClass,
-                                    "redrawControl",
-                                    "()V");
+    /*jmethodID redrawControlID = validJni->GetMethodID(
+                                         iJavaDisplayClass,
+                                         "redrawControl",
+                                     "()V");
+    */
     // call java function
     validJni->CallVoidMethod(iJavaDisplayObject,redrawControlID);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RefreshJavaControl -");
 }
 
+TBool CMMADisplay::iseSWT()
+{
+    return iIseSWT;
+}
+
+void CMMADisplay::SetFullscreenSize(TSize &aFullscreenSize)
+{
+    iFullScreenSize = aFullscreenSize;
+}
 //  END OF FILE