javauis/mmapi_qt/baseline/src/cmmaitemdisplay.cpp
changeset 26 dc7c549001d5
parent 23 98ccebc37403
child 47 f40128debb5d
--- a/javauis/mmapi_qt/baseline/src/cmmaitemdisplay.cpp	Fri May 14 15:47:24 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/cmmaitemdisplay.cpp	Thu May 27 12:49:31 2010 +0300
@@ -25,11 +25,11 @@
 
 // CONSTRUCTION
 // Static constructor, leaves pointer to cleanup-stack
-CMMAItemDisplay* CMMAItemDisplay::NewLC(/*MMIDCustomItem* aCustomItem*/)
+CMMAItemDisplay* CMMAItemDisplay::NewLC(MMAFunctionServer* aEventSource , jobject aItemDispObj)
 {
-    CMMAItemDisplay* self = new(ELeave) CMMAItemDisplay(/*aCustomItem*/);
+    CMMAItemDisplay* self = new(ELeave) CMMAItemDisplay();
     CleanupStack::PushL(self);
-   // self->Construct(/*&(aCustomItem->DirectContainer())*/);
+    self->Construct(aEventSource, aItemDispObj);
     return self;
 }
 
@@ -41,18 +41,18 @@
 
 
 CMMAItemDisplay::CMMAItemDisplay(/*MMIDCustomItem* aCustomItem*/)
-        //: iItem(aCustomItem)
+//: iItem(aCustomItem)
 {
     iVisible = ETrue; // Item is visible at startup
 }
 
-void CMMAItemDisplay::SizeChangedL(CMMAItemDisplay* aDisplay,
+void CMMAItemDisplay::SizeChangedL(CMMAItemDisplay* /*aDisplay*/,
                                    TInt /*aWidth*/,
                                    TInt /*aHeight*/)
 // currently width and height is ignored
 // may be used later to layout the image.
 {
-	/*
+    /*
     if (aDisplay->iWindow)
     {
         CFbsBitmap* bitmap = aDisplay->iItem->FrameBuffer();
@@ -86,17 +86,17 @@
     CMMADisplay::SetWindowL(aWindow);
     if (!iWindow)
     {
-        LOG( EJavaMMAPI, EInfo, "CMMAItemDisplay::SetWindowL: NULL window, returning");
+        LOG(EJavaMMAPI, EInfo, "CMMAItemDisplay::SetWindowL: NULL window, returning");
         return;
     }
     iSourceSize = iWindow->WindowSize();
-   /* CFbsBitmap* bitmap = iItem->FrameBuffer();
+    /* CFbsBitmap* bitmap = iItem->FrameBuffer();
 
-    if (bitmap)
-    {
-        iWindow->SetDestinationBitmapL(bitmap);
-    }
-   */
+     if (bitmap)
+     {
+         iWindow->SetDestinationBitmapL(bitmap);
+     }
+    */
 }
 
 void CMMAItemDisplay::SetDisplayLocationL(const TPoint& /*aPosition*/)
@@ -111,6 +111,7 @@
     return TPoint(0, 0);
 }
 
+/*
 void CMMAItemDisplay::SourceSizeChanged(const TSize& aSourceSize)
 {
     LOG1(EJavaMMAPI,EInfo,"MMA::CMMAItemDisplay::SourceSizeChanged %d",
@@ -118,12 +119,12 @@
     LOG1(EJavaMMAPI,EInfo,"MMA::CMMAItemDisplay::SourceSizeChanged %d",
               aSourceSize.iHeight);
 
-	#ifdef RD_JAVA_NGA_ENABLED
-	if ( iWindow )
-	{
-	iWindow->SetVideoCropRegion( TRect( iUserRect.iTl, aSourceSize ) );
-	}
-	#endif
+    #ifdef RD_JAVA_NGA_ENABLED
+    if ( iWindow )
+    {
+    iWindow->SetVideoCropRegion( TRect( iUserRect.iTl, aSourceSize ) );
+    }
+    #endif
 
     iSourceSize = aSourceSize;
 
@@ -148,11 +149,162 @@
         iUserRect.SetSize(iSourceSize);
     }
 }
+*/
+
+
+void CMMAItemDisplay:: SourceSizeChanged(TInt aJavaControlWidth, TInt aJavaControlHeight,TInt x, TInt y,TRect aBoundsRect)
+{
+    JELOG2(EJavaMMAPI);
+    LOG2(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged(aSourceSize,aJavaControlWidth,aJavaControlHeight) + aJavaControlWidth = %d ,aJavaControlHeight = %d",aJavaControlWidth,aJavaControlHeight);
+    iSourceSize = SourceSize();
+    //iUserRect = TRect(103,0,aJavaControlWidth,aJavaControlHeight);
+    //int x = 103;
+    //int y = 0;
+
+    LOG2(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged(aSourceSize,aJavaControlWidth,aJavaControlHeight) + sourcesize = %d X %d",iSourceSize.iWidth , iSourceSize.iHeight);
+    TSize itemSize(aJavaControlWidth, aJavaControlHeight);
+
+    //iUserRect.iTl.iX = iUserRect.iTl.iX + x;
+    //iUserRect.iTl.iY = iUserRect.iTl.iY + y;
+
+    TRect visibleRect(0,0,0,0);
+    visibleRect.iBr.iX = visibleRect.iBr.iX + aJavaControlWidth;
+    visibleRect.iBr.iY = visibleRect.iBr.iY + aJavaControlHeight;
+
+    // To Do remove adding amrgine once lcdui add them
+    /*
+    visibleRect.iTl.iX = visibleRect.iTl.iX + 5;
+    visibleRect.iTl.iY = visibleRect.iTl.iY + 8;
+    visibleRect.iBr.iX = visibleRect.iBr.iX + 5;
+    visibleRect.iBr.iY = visibleRect.iBr.iY + 8;
+    */
+
+    // Add the form top left co-od to visible rect - to avoid form title
+
+    visibleRect.iTl.iY = visibleRect.iTl.iY + aBoundsRect.iTl.iY;
+    visibleRect.iBr.iY = visibleRect.iBr.iY + aBoundsRect.iTl.iY;
+
+    // add the exact location co-od of custom item
+    visibleRect.iTl.iX = visibleRect.iTl.iX + x;
+    visibleRect.iTl.iY = visibleRect.iTl.iY + y;
+    visibleRect.iBr.iX = visibleRect.iBr.iX + x;
+    visibleRect.iBr.iY = visibleRect.iBr.iY + y;
+    LOG2(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - aBoundsRect.iTl %d , %d",aBoundsRect.iTl.iX,aBoundsRect.iTl.iY);
+    LOG2(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - aBoundsRect.ibr %d , %d",aBoundsRect.iBr.iX,aBoundsRect.iBr.iY);
+
+    TPoint topLeft(0,0);
+#ifdef RD_JAVA_NGA_ENABLED
+    if (iWindow)
+    {
+        //iWindow->SetVideoCropRegion( TRect( iUserRect.iTl, itemSize ) );
+        iWindow->SetVideoCropRegion(TRect(topLeft , iSourceSize));
+    }
+#endif
+
+
+
+    TBool sourceIsBigger = (iSourceSize.iWidth > itemSize.iWidth ||
+                            iSourceSize.iHeight > itemSize.iHeight);
+    // size of canvas in java
+    /*TSize canvasSize(aJavaControlWidth, aJavaControlHeight);
+    iFullScreenSize = canvasSize;
+    TBool sourceIsBigger = (iSourceSize.iWidth > iFullScreenSize.iWidth ||
+                            iSourceSize.iHeight > iFullScreenSize.iHeight);
+
+
+
+    if(itemSize.iWidth == 0 && itemSize.iHeight == 0)
+    {
+        LOG(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - item size is (0,0)");
+        LOG1(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - iUserRect.iTl.iHeight = %d",iUserRect.Size().iHeight);
+        iWindow->SetDrawRect(TRect(iUserRect.iTl, iSourceSize));
+    }
+    else
+    {
+    if (sourceIsBigger)
+    {
+        // Source is larger than display area.
+        // clip the source to fit into item
+        LOG(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - source is bigger than display area");
+        iWindow->SetDrawRect(ScaleToFullScreen(iFullScreenSize, iSourceSize));
+        LOG(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - source is bigger than display area - after SetDrawRect");
+
+    }
+    else
+    { */
+    // source is smaller than display area
+    if (iSourceSize.iHeight == itemSize.iHeight && iSourceSize.iWidth == itemSize.iWidth)
+    {
+        LOG(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - source is smaller than display area");
+        LOG1(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - iSourceSize.iWidth = %d",iSourceSize.iWidth);
+        LOG1(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - iSourceSize.iHeight = %d",iSourceSize.iHeight);
+
+        //iWindow->SetWindowRect(TRect(TPoint(5,100),TPoint(133,196)),MMMADisplay::EMmaThread);
+        iWindow->SetWindowRect(visibleRect,MMMADisplay::EMmaThread);
+        iWindow->SetRWindowRect(aBoundsRect,MMMADisplay::EMmaThread);
+        //iWindow->SetRWindowRect(TRect(TPoint(0,92),TPoint(360,487)),MMMADisplay::EMmaThread);
+        iWindow->SetDrawRect(TRect(iUserRect.iTl, iSourceSize));
+    }
+    else
+    {
+        if (sourceIsBigger)
+        {
+            LOG(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - SOURCE IS BIGGER");
+            TPoint temp(iUserRect.iTl.iX-x,iUserRect.iTl.iY-y);
+
+
+
+            LOG2(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - visibleRect.iTl %d , %d",visibleRect.iTl.iX,visibleRect.iTl.iY);
+            LOG2(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged - visibleRect.iBr %d , %d",visibleRect.iBr.iX,visibleRect.iBr.iY);
+            iWindow->SetWindowRect(visibleRect,MMMADisplay::EMmaThread);
+            iWindow->SetRWindowRect(aBoundsRect,MMMADisplay::EMmaThread);
+            iWindow->SetDrawRect(TRect(iUserRect.iTl, iSourceSize));
+
+            //iWindow->SetWindowRect(TRect(iUserRect.iTl,itemSize),MMMADisplay::EMmaThread);
+            //iWindow->SetRWindowRect(TRect(temp,itemSize),MMMADisplay::EMmaThread);
+
+            //iWindow->SetWindowRect(TRect(TPoint(127,100),TPoint(255,96)),MMMADisplay::EMmaThread);
+            //iWindow->SetRWindowRect(TRect(TPoint(127,100),TPoint(255,96)),MMMADisplay::EMmaThread);
+            //iWindow->SetRWindowRect(TRect(TPoint(0,92),TPoint(360,579)),MMMADisplay::EMmaThread);
+
+
+
+
+            //iWindow->SetDrawRect(TRect(temp, iSourceSize));
+            //iWindow->SetDrawRect(TRect(TPoint(0,0), iSourceSize));
+        }
+        else
+        {
+        }
+    }
+
+
+
+    SetClippingRegion();
+
+    if (iUserRect.IsEmpty())
+    {
+        // Java side hasn't set size.
+        iUserRect = iWindow->DrawRect();
+
+        //if (!sourceIsBigger)
+        //{
+        // Addjusting rect to top left corner.
+        iUserRect = TRect(iUserRect.Size());
+        //}
+    }
+    LOG(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged(aJavaControlWidth,aJavaControlHeight)-");
+}
 
 void CMMAItemDisplay::StaticSourceSize(CMMAItemDisplay* aDisplay,
                                        TSize* aSize)
 {
-    *aSize = aDisplay->iUserRect.Size();
+    LOG(EJavaMMAPI,EInfo,"CMMAItemDisplay::StaticSourceSize +");
+
+    // To DO check if this is correct
+    //*aSize = aDisplay->iUserRect.Size();
+    *aSize = aDisplay->SourceSize();
+
 }
 
 /*void CMMAItemDisplay::MdcItemContentRectChanged(const TRect& aContentRect,