webengine/osswebengine/webkit/s60/webview/ThumbnailGenerator.cpp
branchRCL_3
changeset 37 ac77f89b1d9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/webkit/s60/webview/ThumbnailGenerator.cpp	Wed Apr 14 17:06:56 2010 +0300
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  Page thumbnail generator class definition
+*
+*/
+
+
+// INCLUDE FILES
+#include "ThumbnailGenerator.h"
+
+#include <fbs.h>
+#include <bitstd.h>
+#include <w32std.h>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================= CLASSES METHODS===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+CThumbnailGenerator* CThumbnailGenerator::NewL(MPageScalerCallback& aCallback)
+    {
+        CThumbnailGenerator* self = new( ELeave ) CThumbnailGenerator(aCallback);
+        
+        CleanupStack::PushL( self );
+        self->ConstructL();
+        CleanupStack::Pop();
+        
+        return self;
+    
+    }
+
+CThumbnailGenerator::CThumbnailGenerator(MPageScalerCallback& aCallback)
+    : iCallback(&aCallback),
+    iThumbnailBitmap(NULL),
+    iThumbnailBitmapDevice(NULL),
+    iThumbnailBitmapGc(NULL)
+    {
+    }
+
+void CThumbnailGenerator::ConstructL()
+    {
+    }
+
+CThumbnailGenerator::~CThumbnailGenerator()
+    {
+        delete iThumbnailBitmap;
+        delete iThumbnailBitmapDevice;
+        delete iThumbnailBitmapGc;
+    }
+
+TBool CThumbnailGenerator::CreateBitMapL(TSize aSize, CFbsBitmap*& aBm, CFbsBitmapDevice*& aDev, CFbsBitGc*& aGc)
+    {
+    if ( aSize.iWidth==0 || aSize.iHeight==0 )
+        {
+        // delete bitmap if there was one
+        delete aGc;
+        delete aDev;
+        delete aBm;
+        aGc = 0;
+        aDev = 0;
+        aBm = 0;
+        return EFalse;
+        }
+    else
+        {
+        if ( aBm && aSize != aBm->SizeInPixels() )
+            {
+            // resize if different size
+            User::LeaveIfError(aDev->Resize(aSize));
+            aGc->Resized();
+            }
+        else if ( !aBm )
+            {
+            // create new
+            CFbsBitmap* bm = new (ELeave) CFbsBitmap;
+            CleanupStack::PushL(bm);
+            User::LeaveIfError(bm->Create(aSize,EColor64K));
+            CFbsBitmapDevice* dev = CFbsBitmapDevice::NewL(bm);
+            CleanupStack::PushL(dev);
+            User::LeaveIfError(dev->CreateContext(aGc));
+            aDev = dev;
+            aBm = bm;
+            CleanupStack::Pop(2);
+            }
+        }
+    return ETrue;
+    }
+
+void CThumbnailGenerator::CreatePageThumbnailL()
+    {
+    //Get the thumnail size
+    //if in portrait mode, take Thumbnail(60*height, height)
+    //In lanadscape mode, take Thumbnail(60*width,width)
+    
+    TInt thumbnailWidth;
+    TInt thumbnailHeight;
+    TRect clientRect = iCallback->DocumentViewport();
+    if (clientRect.Width() > clientRect.Height())
+        {
+        thumbnailWidth = clientRect.Width() * 60 / 100;
+        thumbnailHeight = clientRect.Width();
+        }
+    else
+        {
+        thumbnailWidth = clientRect.Height() * 60 / 100;
+        thumbnailHeight = clientRect.Height();
+        }
+        
+    TRect viewRect = TRect(0, 0, thumbnailWidth, thumbnailHeight);
+    if (!CreateBitMapL(viewRect.Size(), iThumbnailBitmap, iThumbnailBitmapDevice, iThumbnailBitmapGc))
+        {
+        return;
+        }
+    
+    iCallback->DrawDocumentPart(*iThumbnailBitmapGc,iThumbnailBitmap,viewRect);
+    TSize bitmapSize = iThumbnailBitmap->SizeInPixels();
+    iCallback->ScaledPageChanged(viewRect, true, false);
+    }
+
+