javauis/mmapi_qt/baseline/src/cmmadisplay.cpp
changeset 47 f40128debb5d
parent 26 dc7c549001d5
child 61 bf7ee68962da
equal deleted inserted replaced
35:85266cc22c7f 47:f40128debb5d
    48 CMMADisplay::CMMADisplay():
    48 CMMADisplay::CMMADisplay():
    49         iVisible(ETrue),
    49         iVisible(ETrue),
    50         iFullScreen(EFalse),
    50         iFullScreen(EFalse),
    51         iContainerVisible(ETrue),
    51         iContainerVisible(ETrue),
    52         iIsForeground(ETrue),
    52         iIsForeground(ETrue),
    53         iResetDrawRect(EFalse)
    53         iResetDrawRect(EFalse),
    54 {
    54         iIseSWT(EFalse)
    55 }
    55 {
    56 
    56 }
    57 void CMMADisplay::Construct(MMAFunctionServer* eventSource , jobject javadisplayref)
    57 
       
    58 void CMMADisplay::Construct(MMAFunctionServer* eventSource ,JNIEnv* aJni, jobject javadisplayref)
    58 {
    59 {
    59     iEventSource = eventSource;
    60     iEventSource = eventSource;
    60     iJni = iEventSource->getValidJniEnv();
    61     iJavadisplayref = javadisplayref;
       
    62     LOG1(EJavaMMAPI,EInfo,"MID::CMMADisplay::Construct=%d",iIseSWT);
       
    63     if (iIseSWT)
       
    64     {
       
    65         iJni = aJni;
       
    66     }
       
    67     else
       
    68     {
       
    69         iJni = iEventSource->getValidJniEnv();
       
    70     }
    61     iJavaDisplayObject = iJni->NewGlobalRef(javadisplayref);
    71     iJavaDisplayObject = iJni->NewGlobalRef(javadisplayref);
    62     iJavaDisplayClass = iJni->GetObjectClass(iJavaDisplayObject);
    72     iJavaDisplayClass = iJni->GetObjectClass(iJavaDisplayObject);
       
    73 
       
    74     setRectID = iJni->GetMethodID(iJavaDisplayClass,
       
    75                                   "setRect",
       
    76                                   "()V");
       
    77     iRectDimensionField = iJni->GetFieldID(iJavaDisplayClass, "rectDimension", "[I");
       
    78 
       
    79     redrawControlID = iJni->GetMethodID(
       
    80                           iJavaDisplayClass,
       
    81                           "redrawControl",
       
    82                           "()V");
       
    83 
       
    84     removeContentBoundID = iJni->GetMethodID(
       
    85                                iJavaDisplayClass,
       
    86                                "removeContentBound",
       
    87                                "()V");
       
    88 
       
    89     setContentBoundID = iJni->GetMethodID(
       
    90                             iJavaDisplayClass,
       
    91                             "setContentBound",
       
    92                             "()V");
       
    93 
       
    94     getCallBackMethodID = iJni->GetMethodID(
       
    95                               iJavaDisplayClass,
       
    96                               "GetCallbackInUiThread",
       
    97                               "(I)V");
       
    98 
       
    99     getBoundRectID = iJni->GetMethodID(
       
   100                          iJavaDisplayClass,
       
   101                          "getBoundRect",
       
   102                          "()V");
       
   103 
       
   104     iDisplayboundarrField = iJni->GetFieldID(iJavaDisplayClass, "displayboundarr", "[I");
       
   105 
    63     // Components must have direct content.
   106     // Components must have direct content.
    64     /* __ASSERT_LOG(EJavaMMAPI,EInfo,"aDirectContainer, User::Invariant());
   107     /* __ASSERT_LOG(EJavaMMAPI,EInfo,"aDirectContainer, User::Invariant());
    65 
   108 
    66      // Not owned
   109      // Not owned
    67      iDirectContainer = aDirectContainer;
   110      iDirectContainer = aDirectContainer;
   121         // move rect middle of the screen
   164         // move rect middle of the screen
   122         position.iX = (aFullScreenSize.iWidth - drawRect.iBr.iX) / 2;
   165         position.iX = (aFullScreenSize.iWidth - drawRect.iBr.iX) / 2;
   123     }
   166     }
   124 
   167 
   125     drawRect.Move(position);
   168     drawRect.Move(position);
       
   169     LOG2(EJavaMMAPI, EInfo, "CMMADisplay::ScaleToFullScreen::drawRect.Width=%d, drawRect.Height=%d",drawRect.Width(), drawRect.Height());
   126     LOG(EJavaMMAPI,EInfo,"CMMADisplay::ScaleToFullScreen() -");
   170     LOG(EJavaMMAPI,EInfo,"CMMADisplay::ScaleToFullScreen() -");
   127     return drawRect;
   171     return drawRect;
   128 }
   172 }
   129 
   173 
   130 // from MMMADisplay
   174 // from MMMADisplay
   241 }
   285 }
   242 
   286 
   243 // from MMMADisplay
   287 // from MMMADisplay
   244 TSize CMMADisplay::DisplaySize()
   288 TSize CMMADisplay::DisplaySize()
   245 {
   289 {
       
   290     LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::DisplaySize +");
   246     if (iWindow && iFullScreen)
   291     if (iWindow && iFullScreen)
   247     {
   292     {
       
   293         LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::DisplaySize if loop ");
   248         return iWindow->DrawRect().Size();
   294         return iWindow->DrawRect().Size();
   249     }
   295     }
   250     else
   296     else
   251     {
   297     {
       
   298         LOG1(EJavaMMAPI,EInfo,"MID::CMMADisplay::DisplaySize else loop %d",iUserRect.Size().iHeight);
   252         return iUserRect.Size();
   299         return iUserRect.Size();
   253     }
   300     }
   254 }
   301 }
   255 
   302 
   256 // from MMMADisplay
   303 // from MMMADisplay
   293     // if not it can not be set visible.
   340     // if not it can not be set visible.
   294     if (iWindow && iContainerVisible)
   341     if (iWindow && iContainerVisible)
   295     {
   342     {
   296         // iWindow->SetVisible(aValue, EFalse);
   343         // iWindow->SetVisible(aValue, EFalse);
   297         //MMAPI UI 3.x req. (had to comment above line and add below line which excutes in FS thread)
   344         //MMAPI UI 3.x req. (had to comment above line and add below line which excutes in FS thread)
   298         iWindow->SetVisible(aValue, ETrue);
   345         if (iIseSWT == true)
       
   346         {
       
   347             iWindow->SetVisible(aValue, ETrue);
       
   348         }
       
   349         else
       
   350         {
       
   351             iWindow->SetVisible(aValue, EFalse);
       
   352         }
       
   353         LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::SetVisible after iWindow->SetVisible()");
   299         SetClippingRegion();
   354         SetClippingRegion();
   300         LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::SetVisible -");
   355         LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::SetVisible -");
   301     }
   356     }
   302 }
   357 }
   303 
   358 
   466 */
   521 */
   467 
   522 
   468 
   523 
   469 void CMMADisplay::GetCallbackInUiThread(TInt placeholder)
   524 void CMMADisplay::GetCallbackInUiThread(TInt placeholder)
   470 {
   525 {
       
   526     JNIEnv* validJni = iEventSource->getValidJniEnv();
       
   527     jobject javaDisplayObject;
       
   528     jclass javaDisplayClass;
   471     LOG(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread +");
   529     LOG(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread +");
   472 
   530     /**
   473 
   531      * In case of eSWT iJavaDisplayClass and iJavaDisplayObject were initialized with JNI
   474 
   532      * in UI Thread. Since this function is called from FunctionServer Thread so we need to get
   475 
   533      * valid JNI for FunctionServer Thread and need to initialize iJavaDisplayClass and iJavaDisplayObject
   476 
   534      * again for FunctionServer Thread rather than using the one that was created in Constructor(UI Thread).
   477 
   535      */
   478 
   536     if (iIseSWT)
   479 
   537     {
   480     jmethodID getCallBackMethodID = iJni->GetMethodID(
   538         javaDisplayObject = validJni->NewGlobalRef(iJavadisplayref);
   481                                         iJavaDisplayClass,
   539         javaDisplayClass =  validJni->GetObjectClass(iJavaDisplayObject);
   482                                         "GetCallbackInUiThread",
   540     }
   483                                         "(I)V");
   541     else
   484     // LOG1(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread getCallBackMethodID = %d",getCallBackMethodID);
   542     {
   485     iJni->CallVoidMethod(iJavaDisplayObject,getCallBackMethodID,placeholder);
   543         javaDisplayObject = iJavaDisplayObject;
       
   544         javaDisplayClass = iJavaDisplayClass;
       
   545     }
       
   546     getCallBackMethodID = validJni->GetMethodID(javaDisplayClass,
       
   547                           "GetCallbackInUiThread",
       
   548                           "(I)V");
       
   549     LOG1(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread getCallBackMethodID = %d",getCallBackMethodID);
       
   550     validJni->CallVoidMethod(javaDisplayObject,getCallBackMethodID,placeholder);
   486     LOG(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread -");
   551     LOG(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread -");
   487 }
   552 }
   488 
   553 
   489 void CMMADisplay::CalledBackInUiThread(TInt placeholder)
   554 void CMMADisplay::CalledBackInUiThread(TInt placeholder)
   490 {
   555 {
   512     if (!iWindow)
   577     if (!iWindow)
   513     {
   578     {
   514         return;
   579         return;
   515     }
   580     }
   516     iWindow->ProcureWindowResourcesFromQWidget(iWs,iScreenDevice,window);
   581     iWindow->ProcureWindowResourcesFromQWidget(iWs,iScreenDevice,window);
       
   582     iWindow->SetVisible(ETrue,ETrue);
   517     LOG(EJavaMMAPI,EInfo,"CMMADisplay::SetWindowResources -");
   583     LOG(EJavaMMAPI,EInfo,"CMMADisplay::SetWindowResources -");
   518 }
   584 }
   519 
   585 
   520 
   586 
   521 void CMMADisplay::SetForeground(TBool aForeground, TBool aUseEventServer)
   587 void CMMADisplay::SetForeground(TBool aForeground, TBool aUseEventServer)
   627 
   693 
   628 
   694 
   629 void CMMADisplay::ResetJavaRectObject(const TRect& aRect)
   695 void CMMADisplay::ResetJavaRectObject(const TRect& aRect)
   630 {
   696 {
   631     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject +");
   697     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject +");
   632     JNIEnv* validJni = iEventSource->getValidJniEnv();
   698     //TRect rect = aRect;
   633     jmethodID setRectID = validJni->GetMethodID(
   699     JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();//iJni;
   634                               iJavaDisplayClass,
   700     /*jmethodID setRectID = validJni->GetMethodID(
   635                               "setRect",
   701                                                  iJavaDisplayClass,
   636                               "()V");
   702                                                  "setRect",
   637 
   703                                              "()V");
       
   704     */
   638     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --1");
   705     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --1");
   639     // set the value to java,so that we can access those from array
   706     // set the value to java,so that we can access those from array
   640     jfieldID field = validJni->GetFieldID(iJavaDisplayClass, "rectDimension", "[I");
   707 
   641     if (field == NULL)
   708     //jfieldID iRectDimensionField = validJni->GetFieldID(iJavaDisplayClass, "rectDimension", "[I");
       
   709     if (iRectDimensionField == NULL)
   642     {
   710     {
   643         // handle error
   711         // handle error
   644     }
   712     }
   645     /* Write to the instance fields */
   713     /* Write to the instance fields */
   646     jintArray javaDimensionarr = (jintArray)validJni->GetObjectField(iJavaDisplayObject, field);
   714     jintArray javaDimensionarr = (jintArray)validJni->GetObjectField(iJavaDisplayObject, iRectDimensionField);
   647     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --2");
   715     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --2");
   648     jint* nativeRectDimensionArr = validJni->GetIntArrayElements(javaDimensionarr, NULL);
   716     jint* nativeRectDimensionArr = validJni->GetIntArrayElements(javaDimensionarr, NULL);
   649     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --3");
   717     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --3");
   650     if (!nativeRectDimensionArr)
   718     if (!nativeRectDimensionArr)
   651     {
   719     {    // inputBuffer was already allocated
   652         // inputBuffer was already allocated
       
   653         validJni->ReleaseIntArrayElements(javaDimensionarr, nativeRectDimensionArr, JNI_ABORT);
   720         validJni->ReleaseIntArrayElements(javaDimensionarr, nativeRectDimensionArr, JNI_ABORT);
   654         LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject Error in resetting rect dimension to java");
   721         LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject Error in resetting rect dimension to java");
   655         return;
   722         return;
   656     }
   723     }
   657     nativeRectDimensionArr[0] = aRect.iTl.iX;
   724     nativeRectDimensionArr[0] = aRect.iTl.iX;
   658     nativeRectDimensionArr[1] = aRect.iTl.iY;;
   725     nativeRectDimensionArr[1] = aRect.iTl.iY;;
   659     nativeRectDimensionArr[2] = aRect.Width();
   726     nativeRectDimensionArr[2] = aRect.Width();
   660     nativeRectDimensionArr[3] = aRect.Height();
   727     nativeRectDimensionArr[3] = aRect.Height();
   661     // Now the dimension array in java is updated hence reset the java rect
   728     // Now the dimension array in java is updated hence reset the java rect
       
   729 
       
   730     validJni->ReleaseIntArrayElements(javaDimensionarr, nativeRectDimensionArr, JNI_COMMIT);
   662     validJni->CallVoidMethod(iJavaDisplayObject,setRectID);
   731     validJni->CallVoidMethod(iJavaDisplayObject,setRectID);
   663 
   732 
   664     validJni->ReleaseIntArrayElements(javaDimensionarr, nativeRectDimensionArr, JNI_COMMIT);
       
   665     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject -");
   733     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject -");
   666 }
   734 }
   667 
   735 
   668 
   736 
   669 void CMMADisplay::SetContentBoundToJavaControl(const TRect& aRect)
   737 void CMMADisplay::SetContentBoundToJavaControl(const TRect& aRect)
   670 {
   738 {
   671     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::SetContentBoundToJavaControl +");
   739     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::SetContentBoundToJavaControl +");
   672     JNIEnv* validJni = iEventSource->getValidJniEnv();
   740     JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();//iJni;
   673     // Reset the java rect
   741     // Reset the java rect
   674     ResetJavaRectObject(aRect);
   742     ResetJavaRectObject(aRect);
   675     jmethodID setContentBoundID = validJni->GetMethodID(
   743     /*jmethodID setContentBoundID = validJni->GetMethodID(
   676                                       iJavaDisplayClass,
   744                                          iJavaDisplayClass,
   677                                       "setContentBound",
   745                                          "setContentBound",
   678                                       "()V");
   746                                      "()V");
       
   747     */
   679     // call java function
   748     // call java function
   680     validJni->CallVoidMethod(iJavaDisplayObject,setContentBoundID);
   749     validJni->CallVoidMethod(iJavaDisplayObject,setContentBoundID);
   681     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::SetContentBoundToJavaControl -");
   750     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::SetContentBoundToJavaControl -");
   682 }
   751 }
   683 
   752 
   684 void CMMADisplay::RemoveContentBoundFromJavaControl(const TRect& aRect)
   753 void CMMADisplay::RemoveContentBoundFromJavaControl(const TRect& aRect)
   685 {
   754 {
   686     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RemoveContentBoundFromJavaControl +");
   755     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RemoveContentBoundFromJavaControl +");
   687     JNIEnv* validJni = iEventSource->getValidJniEnv();
   756     JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();
   688     // Reset the java rect
   757     // Reset the java rect
   689     ResetJavaRectObject(aRect);
   758     ResetJavaRectObject(aRect);
   690     jmethodID removeContentBoundID = validJni->GetMethodID(
   759     /*jmethodID removeContentBoundID = validJni->GetMethodID(
   691                                          iJavaDisplayClass,
   760                                          iJavaDisplayClass,
   692                                          "removeContentBound",
   761                                          "removeContentBound",
   693                                          "()V");
   762                                      "()V");
       
   763     */
   694     // call java function
   764     // call java function
   695     validJni->CallVoidMethod(iJavaDisplayObject,removeContentBoundID);
   765     validJni->CallVoidMethod(iJavaDisplayObject,removeContentBoundID);
   696     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RemoveContentBoundFromJavaControl -");
   766     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RemoveContentBoundFromJavaControl -");
   697 }
   767 }
   698 
   768 
   699 void CMMADisplay::RefreshJavaControl()
   769 void CMMADisplay::RefreshJavaControl()
   700 {
   770 {
   701     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RefreshJavaControl +");
   771     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RefreshJavaControl +");
   702     JNIEnv* validJni = iEventSource->getValidJniEnv();
   772     JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();//iJni;
   703     // Reset the java rect
   773     // Reset the java rect
   704     //ResetJavaRectObject(aRect);
   774     //ResetJavaRectObject(aRect);
   705     jmethodID redrawControlID = validJni->GetMethodID(
   775     /*jmethodID redrawControlID = validJni->GetMethodID(
   706                                     iJavaDisplayClass,
   776                                          iJavaDisplayClass,
   707                                     "redrawControl",
   777                                          "redrawControl",
   708                                     "()V");
   778                                      "()V");
       
   779     */
   709     // call java function
   780     // call java function
   710     validJni->CallVoidMethod(iJavaDisplayObject,redrawControlID);
   781     validJni->CallVoidMethod(iJavaDisplayObject,redrawControlID);
   711     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RefreshJavaControl -");
   782     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RefreshJavaControl -");
   712 }
   783 }
   713 
   784 
       
   785 TBool CMMADisplay::iseSWT()
       
   786 {
       
   787     return iIseSWT;
       
   788 }
       
   789 
       
   790 void CMMADisplay::SetFullscreenSize(TSize &aFullscreenSize)
       
   791 {
       
   792     iFullScreenSize = aFullscreenSize;
       
   793 }
   714 //  END OF FILE
   794 //  END OF FILE