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