diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/WebKit/s60/webview/WebCannedImages.cpp --- /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 +#include "../../bidi.h" +#include +#include +#include +#include +#include + +#ifdef __BROWSER_SDK +#include +#else +#include +#endif +// tot:move ibeam from bitmap to svg +#include + +// 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