svgtviewer/SvgtViewerPlugin/SVGCodecSrc/SVGConvert.cpp
branchRCL_3
changeset 20 5fd161fa28b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/SVGCodecSrc/SVGConvert.cpp	Thu Sep 09 11:17:40 2010 +0300
@@ -0,0 +1,162 @@
+/*
+* Copyright (c) 2005 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:  This file implements the decoder for the SVG presentation
+*
+*/
+
+
+#include "SVGConvert.h"
+#include <coemain.h>
+#include <imageconversion.h>
+#include <icl_uids.hrh>
+#include <102073d7_extra.rsg>
+#include <SvgCodecImageConstants.hrh>
+#include "SVGCodec.h"
+
+_LIT(KSVGPanicCategory, "SVGConvertPlugin");
+const TInt KInitialFrameWidth = 1;
+const TInt KInitialFrameHeight = 1;
+
+// Number of bits per pixel used in ReadFormatL
+const TInt KSvgDecBitsPerPixel = 24;
+
+enum TIclPanic
+    {
+    EFrameNumberOutOfRange = 0x1
+    };
+    
+// Global panic function
+GLDEF_C void Panic(TIclPanic aError)
+    {
+    User::Panic(KSVGPanicCategory, aError);
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSvgDecoder::NewL
+// Static constructor. Returns the pointer to the CSvgDecoder
+// -----------------------------------------------------------------------------
+//
+CSvgDecoder* CSvgDecoder::NewL()
+    {
+    return new (ELeave) CSvgDecoder;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgDecoder::~CSvgDecoder
+// C++ destructor.
+// -----------------------------------------------------------------------------
+//
+CSvgDecoder::~CSvgDecoder()
+    {
+    CImageDecoderPlugin::Cleanup();
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgDecoder::ImageType 
+// Returns the image type and sub-type for a given frame of the image that
+// has just been opened.
+// -----------------------------------------------------------------------------
+//
+void CSvgDecoder::ImageType(TInt aFrameNumber, TUid& aImageType, TUid& aImageSubType) const
+    {
+    __ASSERT_ALWAYS(aFrameNumber == 0, Panic( EFrameNumberOutOfRange ));
+    aImageType = KImageTypeSVGUid;
+    aImageSubType = KNullUid;
+    }
+
+// -----------------------------------------------------------------------------
+// Returns the codec specific frame information stored in resource files.
+// This is a virtual funtion that each individual plugin must implement.
+// -----------------------------------------------------------------------------
+//
+CFrameInfoStrings* CSvgDecoder::FrameInfoStringsL( RFs& /*aFs*/, TInt /*aFrameNumber*/ )
+    {
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgDecoder::CSvgDecoder
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSvgDecoder::CSvgDecoder()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//    Invokes the ReadFrameHeadersL() method of the supplied plugin.
+//    This is a virtual funtion that each individual plugin must implement.
+// -----------------------------------------------------------------------------
+//
+void CSvgDecoder::ScanDataL()
+    {
+    CSvgReadCodec* imageReadCodec = CSvgReadCodec::NewL( 
+        TSize(KInitialFrameWidth, KInitialFrameHeight) 
+        );
+    SetImageReadCodec( imageReadCodec );
+
+    ReadFormatL();
+    ReadFrameHeadersL();
+    }
+    
+// -----------------------------------------------------------------------------
+// Reads the image header & data information
+// -----------------------------------------------------------------------------
+//
+void CSvgDecoder::ReadFormatL()
+    {
+    ReadDataL(0, iFileData, KMaxTInt);
+    SetDataLength( iFileData.Length() );
+    CSvgReadCodec* imageReadCodec = static_cast<CSvgReadCodec* >(ImageReadCodec());
+    imageReadCodec->SetFileDataL( iFileData );
+
+    imageReadCodec->PrepareEngine();
+    const TSize contentSize = imageReadCodec->ContentSize();
+    
+    TFrameInfo imageInfo;
+    imageInfo = ImageInfo();
+    imageInfo.iFrameCoordsInPixels.SetRect(TPoint(0, 0), contentSize );
+    imageInfo.iOverallSizeInPixels = contentSize;
+    imageInfo.iBitsPerPixel = KSvgDecBitsPerPixel;
+    imageInfo.iDelay = 0;
+    imageInfo.iFlags = TFrameInfo::ECanDither | TFrameInfo::ETransparencyPossible;
+    imageInfo.iFrameDisplayMode = EColor64K;
+    imageInfo.iFrameSizeInTwips = ContentSizeInTwips(contentSize);
+    
+    SetImageInfo(imageInfo);
+    SetStartPosition(0);
+    }
+
+TSize CSvgDecoder::ContentSizeInTwips(const TSize aContentSizeInPixels) const
+    {
+    // Create zoom factor object
+    TRect boxInTwips(TPoint(0,0), TSize(0,0));
+    CCoeEnv* coeEnv = CCoeEnv::Static();
+    if(coeEnv)
+        {
+        TZoomFactor deviceMap(CCoeEnv::Static()->ScreenDevice());
+        // Set zoom factor at 1 to 1
+        deviceMap.SetZoomFactor(TZoomFactor::EZoomOneToOne);
+        const TRect boxInPixels(TPoint(0,0), aContentSizeInPixels);
+        // convert rectangle co-ordinates into pixels
+        boxInTwips = deviceMap.PixelsToTwips(boxInPixels);
+        }
+    return boxInTwips.Size();
+    }
+    
+// End of File
+