--- /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);
+ }
+
+