javauis/mmapi_qt/baseline/src/cmmaitemdisplay.cpp
branchRCL_3
changeset 25 ae942d28ec0e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/baseline/src/cmmaitemdisplay.cpp	Tue Aug 31 15:09:22 2010 +0300
@@ -0,0 +1,299 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Bitmap display that draws to the Java CustomItem's bitmap.
+*
+*/
+
+
+//  Include Files
+#include <logger.h>
+//#include <lcdui.h>
+
+#include "cmmaitemdisplay.h"
+#include "cmmabitmapwindow.h"
+
+// CONSTRUCTION
+// Static constructor, leaves pointer to cleanup-stack
+CMMAItemDisplay* CMMAItemDisplay::NewLC(MMAFunctionServer* aEventSource , jobject aItemDispObj)
+{
+    CMMAItemDisplay* self = new(ELeave) CMMAItemDisplay();
+    CleanupStack::PushL(self);
+    self->Construct(aEventSource, NULL, aItemDispObj);
+    return self;
+}
+
+
+// Destructor (virtual by CBase)
+CMMAItemDisplay::~CMMAItemDisplay()
+{
+}
+
+
+CMMAItemDisplay::CMMAItemDisplay(/*MMIDCustomItem* aCustomItem*/)
+//: iItem(aCustomItem)
+{
+    iVisible = ETrue; // Item is visible at startup
+}
+
+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();
+        aDisplay->iWindow->SetDestinationBitmapL(bitmap);
+    }
+    */
+}
+
+void CMMAItemDisplay::SetFullScreenL(TBool aFullScreen)
+{
+    iFullScreen = aFullScreen;
+    if (!iWindow)
+    {
+        return;
+    }
+    if (aFullScreen)
+    {
+        // switch to fullscreen
+        iWindow->SetDrawRect(ScaleToFullScreen(
+                                 iWindow->WindowSize(), iSourceSize));
+    }
+    else
+    {
+        // switch to normal screen
+        iWindow->SetDrawRect(iUserRect);
+    }
+}
+
+void CMMAItemDisplay::SetWindowL(MMMADisplayWindow* aWindow)
+{
+    CMMADisplay::SetWindowL(aWindow);
+    if (!iWindow)
+    {
+        LOG(EJavaMMAPI, EInfo, "CMMAItemDisplay::SetWindowL: NULL window, returning");
+        return;
+    }
+    iSourceSize = iWindow->WindowSize();
+    /* CFbsBitmap* bitmap = iItem->FrameBuffer();
+
+     if (bitmap)
+     {
+         iWindow->SetDestinationBitmapL(bitmap);
+     }
+    */
+}
+
+void CMMAItemDisplay::SetDisplayLocationL(const TPoint& /*aPosition*/)
+{
+    // In item( USE_GUI_PRIMITIVE ) mode, this call will be ignored.
+}
+
+
+TPoint CMMAItemDisplay::DisplayLocation()
+{
+    // Java Item's location is always 0, 0
+    return TPoint(0, 0);
+}
+
+
+
+
+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());
+        //}
+    }*/
+    if (iUserRect.IsEmpty())
+    {
+        // Java side hasn't set size.
+        LOG1(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged()iUserRect is set to source size iSourceSize - %d",iSourceSize.iHeight);
+        iUserRect.SetSize(iSourceSize);
+        LOG1(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged()iUserRect is set to source size iUserRect - %d",iUserRect.Size().iHeight);
+    }
+    LOG(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged(aJavaControlWidth,aJavaControlHeight)-");
+}
+
+void CMMAItemDisplay::StaticSourceSize(CMMAItemDisplay* aDisplay,
+                                       TSize* aSize)
+{
+    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,
+        const TRect& aScreenRect)
+{
+    if (iWindow)
+    {
+        // Change windows rect.
+        iWindow->SetWindowRect(aScreenRect, MMMADisplay::EUiThread);
+        TRect drawRect = aContentRect;
+        drawRect.Move(- aScreenRect.iTl);
+        iWindow->SetDrawRectThread(drawRect);
+    }
+    SetClippingRegion();
+}
+*/
+/*void CMMAItemDisplay::MdcContentBoundsChanged(const TRect& aRect)
+{
+    // Do nothing in Item display
+}
+*/
+//  END OF FILE