webengine/osswebengine/WebKit/s60/webview/WebCannedImages.cpp
changeset 0 dd21522fd290
child 13 10e98eab6f85
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/s60/webview/WebCannedImages.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,488 @@
+/*
+* Copyright (c) 2006 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:   
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "WebCannedImages.h"
+#include <data_caging_path_literals.hrh>
+#include "../../bidi.h"
+#include <AknsConstants.h>
+#include <AknsUtils.h>
+#include <AknsItemID.h>
+#include <AknsConstants.h>
+#include <eikenv.h>
+
+#ifdef __BROWSER_SDK
+#include <WebKitIcons_sdk.mbg>
+#else
+#include <WebKitIcons.mbg>
+#endif
+// tot:move ibeam from bitmap to svg
+#include <WebKit.mbg>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+#ifdef __BROWSER_SDK
+_LIT( KBrowserSvgFile, "Webkiticons_sdk.mif" );
+_LIT( KBrowserBitmapsFile, "webkit_sdk.mbm" );
+#else
+_LIT( KBrowserSvgFile, "webkiticons.mif" );
+_LIT( KBrowserBitmapsFile, "webkit.mbm" );
+#endif
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// WebCannedImages::WebCannedImages
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+WebCannedImages::WebCannedImages( )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// WebCannedImages::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void WebCannedImages::ConstructL()
+    {
+    m_mbmfile = WebCannedImages::getImageDirL();
+    m_mbmfile->Des().Append( KBrowserBitmapsFile );
+    m_svgfile = WebCannedImages::getImageDirL();
+    m_svgfile->Des().Append( KBrowserSvgFile );
+    }
+
+// -----------------------------------------------------------------------------
+// WebCannedImages::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+WebCannedImages* WebCannedImages::NewL()
+    {
+    WebCannedImages* self = new( ELeave ) WebCannedImages( );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+// Destructor
+WebCannedImages::~WebCannedImages()
+    {
+    // remove all loaded images in the dictionary
+    for (TInt i = 0; i < KNumberOfCannedImages; i++)
+      {
+      TCannedImageData imageData = m_imgarray[i];
+
+      // don't delete the error image now, it's life time is maintained by
+      // ImageRenderer's ref-counting.
+      if( i != EImageMissing )
+          {
+          delete imageData.m_img;
+          delete imageData.m_msk;
+          }
+      }
+
+    delete m_mbmfile;
+    delete m_svgfile;
+    }
+
+// -----------------------------------------------------------------------------
+// WebCannedImages::GetImage
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+TCannedImageData& WebCannedImages::getImage( TInt imgid )
+    {
+
+  // load canned image on demond
+  TCannedImageData& img = m_imgarray[imgid];
+  if( img.m_img == NULL )
+    {
+#ifndef __SCALABLE_ICONS
+    TRAP_IGNORE( WebCannedImages::loadImageDirL(imgid, *m_mbmfile, img));
+#else
+        switch (imgid)
+            {
+#ifdef __BROWSER_SDK
+            case EImageMissing:
+                loadSvg(EMbmWebkiticons_sdkQgn_indi_wml_image_not_shown,
+                    KAknsIIDQgnIndiWmlImageNotShown, *m_svgfile, img);
+                break;
+            case EImageObject:
+                loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_object,
+                    KAknsIIDQgnPropWmlObject, *m_svgfile, img);
+                break;
+            case EImageSelectArrow:
+                loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_selectarrow,
+                    KAknsIIDQgnPropWmlSelectarrow, *m_svgfile, img);
+                break;
+            case EImageSelectFile:
+                loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_selectfile,
+                    KAknsIIDQgnPropWmlSelectfile, *m_svgfile, img);
+                break;
+            case EImageRadioButtonOff:
+                loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_radiobutt_off,
+                    KAknsIIDQgnPropWmlRadiobuttOff, *m_svgfile, img);
+                break;
+            case EImageRadioButtonOn:
+                loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_radiobutt_on,
+                    KAknsIIDQgnPropWmlRadiobuttOn, *m_svgfile, img);
+                break;
+            case EImageCheckBoxOff:
+                loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_checkbox_off,
+                    KAknsIIDQgnPropWmlCheckboxOff, *m_svgfile, img);
+                break;
+            case EImageCheckBoxOn:
+                loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_checkbox_on,
+                    KAknsIIDQgnPropWmlCheckboxOn, *m_svgfile, img);
+                break;
+            case EImageFingerBitmap:
+                loadSvg(EMbmWebkiticons_sdkQgn_indi_viewer_pointer_hand,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageArrowBitmap:
+                loadSvg(EMbmWebkiticons_sdkQgn_indi_viewer_pointer,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageWaitArrowBitmap:
+                loadSvg(EMbmWebkiticons_sdkQgn_indi_viewer_pointer_wait,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlCall:
+                loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_call,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlEmail:
+                loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_email,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlMm:
+                loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_mm,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlMms:
+                loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_mms,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlPage:
+                loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_page,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlVideo:
+                loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_video,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+#else
+            case EImageMissing:
+                loadSvg(EMbmWebkiticonsQgn_indi_wml_image_not_shown,
+                    KAknsIIDQgnIndiWmlImageNotShown, *m_svgfile, img);
+                break;
+            case EImageObject:
+                loadSvg(EMbmWebkiticonsQgn_prop_wml_object,
+                    KAknsIIDQgnPropWmlObject, *m_svgfile, img);
+                break;
+            case EImageSelectArrow:
+                loadSvg(EMbmWebkiticonsQgn_prop_wml_selectarrow,
+                    KAknsIIDQgnPropWmlSelectarrow, *m_svgfile, img);
+                break;
+            case EImageSelectFile:
+                loadSvg(EMbmWebkiticonsQgn_prop_wml_selectfile,
+                    KAknsIIDQgnPropWmlSelectfile, *m_svgfile, img);
+                break;
+            case EImageRadioButtonOff:
+                loadSvg(EMbmWebkiticonsQgn_prop_wml_radiobutt_off,
+                    KAknsIIDQgnPropWmlRadiobuttOff, *m_svgfile, img);
+                break;
+            case EImageRadioButtonOn:
+                loadSvg(EMbmWebkiticonsQgn_prop_wml_radiobutt_on,
+                    KAknsIIDQgnPropWmlRadiobuttOn, *m_svgfile, img);
+                break;
+            case EImageCheckBoxOff:
+                loadSvg(EMbmWebkiticonsQgn_prop_wml_checkbox_off,
+                    KAknsIIDQgnPropWmlCheckboxOff, *m_svgfile, img);
+                break;
+            case EImageCheckBoxOn:
+                loadSvg(EMbmWebkiticonsQgn_prop_wml_checkbox_on,
+                    KAknsIIDQgnPropWmlCheckboxOn, *m_svgfile, img);
+                break;
+            case EImageFingerBitmap:
+                loadSvg(EMbmWebkiticonsQgn_indi_viewer_pointer_hand,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageArrowBitmap:
+                loadSvg(EMbmWebkiticonsQgn_indi_viewer_pointer,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageWaitArrowBitmap:
+                loadSvg(EMbmWebkiticonsQgn_indi_viewer_pointer_wait,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlCall:
+                loadSvg(EMbmWebkiticonsQgn_indi_browser_url_call,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlEmail:
+                loadSvg(EMbmWebkiticonsQgn_indi_browser_url_email,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlMm:
+                loadSvg(EMbmWebkiticonsQgn_indi_browser_url_mm,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlMms:
+                loadSvg(EMbmWebkiticonsQgn_indi_browser_url_mms,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlPage:
+                loadSvg(EMbmWebkiticonsQgn_indi_browser_url_page,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageUrlVideo:
+                loadSvg(EMbmWebkiticonsQgn_indi_browser_url_video,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+
+#endif
+            case EImageSmartLinkPhone:
+                loadSvg(EMbmWebkiticonsQgn_prop_nrtyp_phone,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageSmartLinkEmail:
+                loadSvg(EMbmWebkiticonsQgn_indi_ai_nt_message,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageIBeam:
+                loadSvg(EMbmWebkiticonsQgn_indi_viewer_pointer_text,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+           case EImageEscFullScreen:
+                loadSvg(EMbmWebkiticonsQgn_indi_button_exit_fs,
+                    KAknsIIDDefault, *m_svgfile, img);
+                break;
+            case EImageSelectMulti:
+                TRAP_IGNORE(loadImageDirL(EMbmWebkitSelectmulti, *m_mbmfile, img ));
+                break;
+            default:
+                TRAP_IGNORE(loadImageDirL(imgid, *m_mbmfile, img));
+            }
+#endif // __SCALABLE_ICONS
+    }
+
+  return img;
+
+    }
+
+// -----------------------------------------------------------------------------
+// WebCannedImages::GetCannedImageDirL
+// Gets the folder where the canned image is located
+// -----------------------------------------------------------------------------
+//
+HBufC* WebCannedImages::getImageDirL( )
+    {
+    TFileName mbmDrive;
+    HBufC* mbmFile = NULL;
+    TParse parse;
+
+    // get the drive letter - MBM is on the same drive as this DLL
+    Dll::FileName( mbmDrive );
+    parse.Set( mbmDrive, NULL, NULL );
+    mbmDrive = parse.Drive();
+
+    // allocate memory for MBM file name
+    mbmFile = HBufC::NewL( KMaxFileName );
+
+    // assemble the MBM file name
+    TPtr ptr( mbmFile->Des() );
+    ptr.SetLength( 0 );
+    ptr.Append( mbmDrive );
+    ptr.Append( KDC_APP_BITMAP_DIR );
+    return mbmFile;
+    }
+
+// -----------------------------------------------------------------------------
+// WebCannedImages::loadImageDirL
+// Loads the canned image
+// -----------------------------------------------------------------------------
+//
+void WebCannedImages::loadImageDirL( TInt imgid, const TDesC& filename, TCannedImageData& image )
+    {
+    // allocate a bitmap object
+    image.m_img = new (ELeave) CFbsBitmap();
+
+    // load an image from the MBM file
+    TInt error = image.m_img->Load( filename, imgid );
+    if (error!=KErrNone)
+        {
+        // FIXME: to avoid crash in Mars
+        //User::Leave(KBrsrOutOfMemory);
+        }
+
+    // load the mask
+    image.m_msk = new (ELeave) CFbsBitmap();
+
+    error = image.m_msk->Load( filename, imgid);
+    if (error!=KErrNone)
+        {
+        //User::Leave(KBrsrOutOfMemory);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// WebCannedImages::loadSvg
+// Loads the canned image
+// -----------------------------------------------------------------------------
+//
+void WebCannedImages::loadSvg( TInt imgid, TAknsItemID aknsid, const TDesC& filename, TCannedImageData& image )
+    {
+    // This stuff is copied from Kimono
+
+    // Check the device resolution
+    CEikonEnv* eikEnv = CEikonEnv::Static();
+    CWsScreenDevice& screenDev = *eikEnv->ScreenDevice();
+
+    TUint dpi = screenDev.VerticalTwipsToPixels(KTwipsPerInch);
+
+    // Initialize size to be 12 pixels
+    TInt defaultPx = 10;
+    TInt px = 10;
+
+    // Since web designers assume a 96 pixel per inch (ppi) display use that as the reference point.
+    // Thus the multiplier should be:
+    // ppi/96
+    // Below is a list of the density of commercially available LCD displays.
+    // Density Multiplier:
+    // 400 ppi  4.2
+    // 210 ppi  2.2
+    // 200 ppi  2.1
+    // 120 ppi  1.3
+    // 100 ppi  1.0
+    // 96 ppi   1.0
+    if ((200 > dpi) && (dpi >= 120))
+        {
+        defaultPx = (TInt)((float)defaultPx * 1.7);
+        }
+    else if ((210 > dpi) && (dpi >= 200))
+        {
+        defaultPx = (TInt)((float)defaultPx * 2.1);
+        }
+    else if ((400 > dpi) && (dpi >= 210))
+        {
+        defaultPx = (TInt)((float)defaultPx * 2.2);
+        }
+    else if (dpi >= 400)
+        {
+        defaultPx = (TInt)((float)defaultPx * 4.2);
+        }
+
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+    TRAPD(error, AknsUtils::CreateIconL( skin,
+                                   aknsid,
+                                   image.m_img,
+                                   image.m_msk,
+                                   filename,
+                                   imgid,
+                                   imgid+1));
+
+
+    if (error!=KErrNone)
+        {
+        return;
+        }
+
+
+    // adjust the size for the disc, circle, square, radio and checkbox icons to be
+    // slightly smaller than the other canned icons in order to improve look and feel
+    // radio and checkbox
+#ifdef __BROWSER_SDK
+    if (imgid == EMbmWebkiticons_sdkQgn_prop_wml_selectfile ||
+        imgid == EMbmWebkiticons_sdkQgn_prop_wml_selectarrow ||
+        imgid == EMbmWebkiticons_sdkQgn_prop_wml_radiobutt_off ||
+        imgid == EMbmWebkiticons_sdkQgn_prop_wml_radiobutt_on ||
+        imgid == EMbmWebkiticons_sdkQgn_prop_wml_checkbox_off ||
+        imgid == EMbmWebkiticons_sdkQgn_prop_wml_checkbox_on
+        )
+#else
+    if (imgid == EMbmWebkiticonsQgn_prop_wml_selectfile ||
+        imgid == EMbmWebkiticonsQgn_prop_wml_selectarrow ||
+        imgid == EMbmWebkiticonsQgn_prop_wml_radiobutt_off ||
+        imgid == EMbmWebkiticonsQgn_prop_wml_radiobutt_on ||
+        imgid == EMbmWebkiticonsQgn_prop_wml_checkbox_off ||
+        imgid == EMbmWebkiticonsQgn_prop_wml_checkbox_on
+        )
+#endif
+        {
+        px = (TInt)((float)defaultPx * .90);
+        }
+#ifdef __BROWSER_SDK
+    else if (imgid == EMbmWebkiticons_sdkQgn_indi_viewer_pointer ||
+        imgid == EMbmWebkiticons_sdkQgn_indi_viewer_pointer_hand ||
+        imgid == EMbmWebkiticons_sdkQgn_indi_viewer_pointer_wait)
+#else
+    else if (imgid == EMbmWebkiticonsQgn_indi_viewer_pointer ||
+        imgid == EMbmWebkiticonsQgn_indi_viewer_pointer_hand ||
+        imgid == EMbmWebkiticonsQgn_indi_viewer_pointer_wait)
+#endif
+        {
+        // cursor
+        if (dpi < 200)
+            {
+            px = (TInt)((float)defaultPx * 1.1);
+            }
+        else
+            {
+            px = (TInt)((float)defaultPx * 1.3);
+            }
+        }
+    else if (imgid == EMbmWebkiticonsQgn_indi_button_exit_fs)
+        {
+        px = (TInt)((float)defaultPx * 2);
+        }
+    else
+        {
+        px = (TInt)((float)defaultPx * 1.2);
+        }
+
+    AknIconUtils::SetSize(image.m_img,TSize(px,px)); //rect.Rect().Size());
+    AknIconUtils::SetSize(image.m_msk,TSize(px,px)); //rect.Rect().Size());
+    }
+
+
+//  End of File