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; |
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 { |
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 |