webengine/osswebengine/WebKit/s60/webview/WebCannedImages.cpp
changeset 0 dd21522fd290
child 5 10e98eab6f85
equal deleted inserted replaced
-1:000000000000 0:dd21522fd290
       
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 #include "WebCannedImages.h"
       
    22 #include <data_caging_path_literals.hrh>
       
    23 #include "../../bidi.h"
       
    24 #include <AknsConstants.h>
       
    25 #include <AknsUtils.h>
       
    26 #include <AknsItemID.h>
       
    27 #include <AknsConstants.h>
       
    28 #include <eikenv.h>
       
    29 
       
    30 #ifdef __BROWSER_SDK
       
    31 #include <WebKitIcons_sdk.mbg>
       
    32 #else
       
    33 #include <WebKitIcons.mbg>
       
    34 #endif
       
    35 // tot:move ibeam from bitmap to svg
       
    36 #include <WebKit.mbg>
       
    37 
       
    38 // EXTERNAL DATA STRUCTURES
       
    39 
       
    40 // EXTERNAL FUNCTION PROTOTYPES
       
    41 
       
    42 // CONSTANTS
       
    43 
       
    44 #ifdef __BROWSER_SDK
       
    45 _LIT( KBrowserSvgFile, "Webkiticons_sdk.mif" );
       
    46 _LIT( KBrowserBitmapsFile, "webkit_sdk.mbm" );
       
    47 #else
       
    48 _LIT( KBrowserSvgFile, "webkiticons.mif" );
       
    49 _LIT( KBrowserBitmapsFile, "webkit.mbm" );
       
    50 #endif
       
    51 
       
    52 // MACROS
       
    53 
       
    54 // LOCAL CONSTANTS AND MACROS
       
    55 
       
    56 // MODULE DATA STRUCTURES
       
    57 
       
    58 // LOCAL FUNCTION PROTOTYPES
       
    59 
       
    60 // FORWARD DECLARATIONS
       
    61 
       
    62 // ============================= LOCAL FUNCTIONS ===============================
       
    63 
       
    64 // ============================ MEMBER FUNCTIONS ===============================
       
    65 
       
    66 // -----------------------------------------------------------------------------
       
    67 // WebCannedImages::WebCannedImages
       
    68 // C++ default constructor can NOT contain any code, that
       
    69 // might leave.
       
    70 // -----------------------------------------------------------------------------
       
    71 //
       
    72 WebCannedImages::WebCannedImages( )
       
    73     {
       
    74     }
       
    75 
       
    76 // -----------------------------------------------------------------------------
       
    77 // WebCannedImages::ConstructL
       
    78 // Symbian 2nd phase constructor can leave.
       
    79 // -----------------------------------------------------------------------------
       
    80 //
       
    81 void WebCannedImages::ConstructL()
       
    82     {
       
    83     m_mbmfile = WebCannedImages::getImageDirL();
       
    84     m_mbmfile->Des().Append( KBrowserBitmapsFile );
       
    85     m_svgfile = WebCannedImages::getImageDirL();
       
    86     m_svgfile->Des().Append( KBrowserSvgFile );
       
    87     }
       
    88 
       
    89 // -----------------------------------------------------------------------------
       
    90 // WebCannedImages::NewL
       
    91 // Two-phased constructor.
       
    92 // -----------------------------------------------------------------------------
       
    93 //
       
    94 WebCannedImages* WebCannedImages::NewL()
       
    95     {
       
    96     WebCannedImages* self = new( ELeave ) WebCannedImages( );
       
    97 
       
    98     CleanupStack::PushL( self );
       
    99     self->ConstructL();
       
   100     CleanupStack::Pop();
       
   101 
       
   102     return self;
       
   103     }
       
   104 
       
   105 // Destructor
       
   106 WebCannedImages::~WebCannedImages()
       
   107     {
       
   108     // remove all loaded images in the dictionary
       
   109     for (TInt i = 0; i < KNumberOfCannedImages; i++)
       
   110       {
       
   111       TCannedImageData imageData = m_imgarray[i];
       
   112 
       
   113       // don't delete the error image now, it's life time is maintained by
       
   114       // ImageRenderer's ref-counting.
       
   115       if( i != EImageMissing )
       
   116           {
       
   117           delete imageData.m_img;
       
   118           delete imageData.m_msk;
       
   119           }
       
   120       }
       
   121 
       
   122     delete m_mbmfile;
       
   123     delete m_svgfile;
       
   124     }
       
   125 
       
   126 // -----------------------------------------------------------------------------
       
   127 // WebCannedImages::GetImage
       
   128 // Two-phased constructor.
       
   129 // -----------------------------------------------------------------------------
       
   130 //
       
   131 TCannedImageData& WebCannedImages::getImage( TInt imgid )
       
   132     {
       
   133 
       
   134   // load canned image on demond
       
   135   TCannedImageData& img = m_imgarray[imgid];
       
   136   if( img.m_img == NULL )
       
   137     {
       
   138 #ifndef __SCALABLE_ICONS
       
   139     TRAP_IGNORE( WebCannedImages::loadImageDirL(imgid, *m_mbmfile, img));
       
   140 #else
       
   141         switch (imgid)
       
   142             {
       
   143 #ifdef __BROWSER_SDK
       
   144             case EImageMissing:
       
   145                 loadSvg(EMbmWebkiticons_sdkQgn_indi_wml_image_not_shown,
       
   146                     KAknsIIDQgnIndiWmlImageNotShown, *m_svgfile, img);
       
   147                 break;
       
   148             case EImageObject:
       
   149                 loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_object,
       
   150                     KAknsIIDQgnPropWmlObject, *m_svgfile, img);
       
   151                 break;
       
   152             case EImageSelectArrow:
       
   153                 loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_selectarrow,
       
   154                     KAknsIIDQgnPropWmlSelectarrow, *m_svgfile, img);
       
   155                 break;
       
   156             case EImageSelectFile:
       
   157                 loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_selectfile,
       
   158                     KAknsIIDQgnPropWmlSelectfile, *m_svgfile, img);
       
   159                 break;
       
   160             case EImageRadioButtonOff:
       
   161                 loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_radiobutt_off,
       
   162                     KAknsIIDQgnPropWmlRadiobuttOff, *m_svgfile, img);
       
   163                 break;
       
   164             case EImageRadioButtonOn:
       
   165                 loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_radiobutt_on,
       
   166                     KAknsIIDQgnPropWmlRadiobuttOn, *m_svgfile, img);
       
   167                 break;
       
   168             case EImageCheckBoxOff:
       
   169                 loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_checkbox_off,
       
   170                     KAknsIIDQgnPropWmlCheckboxOff, *m_svgfile, img);
       
   171                 break;
       
   172             case EImageCheckBoxOn:
       
   173                 loadSvg(EMbmWebkiticons_sdkQgn_prop_wml_checkbox_on,
       
   174                     KAknsIIDQgnPropWmlCheckboxOn, *m_svgfile, img);
       
   175                 break;
       
   176             case EImageFingerBitmap:
       
   177                 loadSvg(EMbmWebkiticons_sdkQgn_indi_viewer_pointer_hand,
       
   178                     KAknsIIDDefault, *m_svgfile, img);
       
   179                 break;
       
   180             case EImageArrowBitmap:
       
   181                 loadSvg(EMbmWebkiticons_sdkQgn_indi_viewer_pointer,
       
   182                     KAknsIIDDefault, *m_svgfile, img);
       
   183                 break;
       
   184             case EImageWaitArrowBitmap:
       
   185                 loadSvg(EMbmWebkiticons_sdkQgn_indi_viewer_pointer_wait,
       
   186                     KAknsIIDDefault, *m_svgfile, img);
       
   187                 break;
       
   188             case EImageUrlCall:
       
   189                 loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_call,
       
   190                     KAknsIIDDefault, *m_svgfile, img);
       
   191                 break;
       
   192             case EImageUrlEmail:
       
   193                 loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_email,
       
   194                     KAknsIIDDefault, *m_svgfile, img);
       
   195                 break;
       
   196             case EImageUrlMm:
       
   197                 loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_mm,
       
   198                     KAknsIIDDefault, *m_svgfile, img);
       
   199                 break;
       
   200             case EImageUrlMms:
       
   201                 loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_mms,
       
   202                     KAknsIIDDefault, *m_svgfile, img);
       
   203                 break;
       
   204             case EImageUrlPage:
       
   205                 loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_page,
       
   206                     KAknsIIDDefault, *m_svgfile, img);
       
   207                 break;
       
   208             case EImageUrlVideo:
       
   209                 loadSvg(EMbmWebkiticons_sdkQgn_indi_browser_url_video,
       
   210                     KAknsIIDDefault, *m_svgfile, img);
       
   211                 break;
       
   212 #else
       
   213             case EImageMissing:
       
   214                 loadSvg(EMbmWebkiticonsQgn_indi_wml_image_not_shown,
       
   215                     KAknsIIDQgnIndiWmlImageNotShown, *m_svgfile, img);
       
   216                 break;
       
   217             case EImageObject:
       
   218                 loadSvg(EMbmWebkiticonsQgn_prop_wml_object,
       
   219                     KAknsIIDQgnPropWmlObject, *m_svgfile, img);
       
   220                 break;
       
   221             case EImageSelectArrow:
       
   222                 loadSvg(EMbmWebkiticonsQgn_prop_wml_selectarrow,
       
   223                     KAknsIIDQgnPropWmlSelectarrow, *m_svgfile, img);
       
   224                 break;
       
   225             case EImageSelectFile:
       
   226                 loadSvg(EMbmWebkiticonsQgn_prop_wml_selectfile,
       
   227                     KAknsIIDQgnPropWmlSelectfile, *m_svgfile, img);
       
   228                 break;
       
   229             case EImageRadioButtonOff:
       
   230                 loadSvg(EMbmWebkiticonsQgn_prop_wml_radiobutt_off,
       
   231                     KAknsIIDQgnPropWmlRadiobuttOff, *m_svgfile, img);
       
   232                 break;
       
   233             case EImageRadioButtonOn:
       
   234                 loadSvg(EMbmWebkiticonsQgn_prop_wml_radiobutt_on,
       
   235                     KAknsIIDQgnPropWmlRadiobuttOn, *m_svgfile, img);
       
   236                 break;
       
   237             case EImageCheckBoxOff:
       
   238                 loadSvg(EMbmWebkiticonsQgn_prop_wml_checkbox_off,
       
   239                     KAknsIIDQgnPropWmlCheckboxOff, *m_svgfile, img);
       
   240                 break;
       
   241             case EImageCheckBoxOn:
       
   242                 loadSvg(EMbmWebkiticonsQgn_prop_wml_checkbox_on,
       
   243                     KAknsIIDQgnPropWmlCheckboxOn, *m_svgfile, img);
       
   244                 break;
       
   245             case EImageFingerBitmap:
       
   246                 loadSvg(EMbmWebkiticonsQgn_indi_viewer_pointer_hand,
       
   247                     KAknsIIDDefault, *m_svgfile, img);
       
   248                 break;
       
   249             case EImageArrowBitmap:
       
   250                 loadSvg(EMbmWebkiticonsQgn_indi_viewer_pointer,
       
   251                     KAknsIIDDefault, *m_svgfile, img);
       
   252                 break;
       
   253             case EImageWaitArrowBitmap:
       
   254                 loadSvg(EMbmWebkiticonsQgn_indi_viewer_pointer_wait,
       
   255                     KAknsIIDDefault, *m_svgfile, img);
       
   256                 break;
       
   257             case EImageUrlCall:
       
   258                 loadSvg(EMbmWebkiticonsQgn_indi_browser_url_call,
       
   259                     KAknsIIDDefault, *m_svgfile, img);
       
   260                 break;
       
   261             case EImageUrlEmail:
       
   262                 loadSvg(EMbmWebkiticonsQgn_indi_browser_url_email,
       
   263                     KAknsIIDDefault, *m_svgfile, img);
       
   264                 break;
       
   265             case EImageUrlMm:
       
   266                 loadSvg(EMbmWebkiticonsQgn_indi_browser_url_mm,
       
   267                     KAknsIIDDefault, *m_svgfile, img);
       
   268                 break;
       
   269             case EImageUrlMms:
       
   270                 loadSvg(EMbmWebkiticonsQgn_indi_browser_url_mms,
       
   271                     KAknsIIDDefault, *m_svgfile, img);
       
   272                 break;
       
   273             case EImageUrlPage:
       
   274                 loadSvg(EMbmWebkiticonsQgn_indi_browser_url_page,
       
   275                     KAknsIIDDefault, *m_svgfile, img);
       
   276                 break;
       
   277             case EImageUrlVideo:
       
   278                 loadSvg(EMbmWebkiticonsQgn_indi_browser_url_video,
       
   279                     KAknsIIDDefault, *m_svgfile, img);
       
   280                 break;
       
   281 
       
   282 #endif
       
   283             case EImageSmartLinkPhone:
       
   284                 loadSvg(EMbmWebkiticonsQgn_prop_nrtyp_phone,
       
   285                     KAknsIIDDefault, *m_svgfile, img);
       
   286                 break;
       
   287             case EImageSmartLinkEmail:
       
   288                 loadSvg(EMbmWebkiticonsQgn_indi_ai_nt_message,
       
   289                     KAknsIIDDefault, *m_svgfile, img);
       
   290                 break;
       
   291             case EImageIBeam:
       
   292                 loadSvg(EMbmWebkiticonsQgn_indi_viewer_pointer_text,
       
   293                     KAknsIIDDefault, *m_svgfile, img);
       
   294                 break;
       
   295            case EImageEscFullScreen:
       
   296                 loadSvg(EMbmWebkiticonsQgn_indi_button_exit_fs,
       
   297                     KAknsIIDDefault, *m_svgfile, img);
       
   298                 break;
       
   299             case EImageSelectMulti:
       
   300                 TRAP_IGNORE(loadImageDirL(EMbmWebkitSelectmulti, *m_mbmfile, img ));
       
   301                 break;
       
   302             default:
       
   303                 TRAP_IGNORE(loadImageDirL(imgid, *m_mbmfile, img));
       
   304             }
       
   305 #endif // __SCALABLE_ICONS
       
   306     }
       
   307 
       
   308   return img;
       
   309 
       
   310     }
       
   311 
       
   312 // -----------------------------------------------------------------------------
       
   313 // WebCannedImages::GetCannedImageDirL
       
   314 // Gets the folder where the canned image is located
       
   315 // -----------------------------------------------------------------------------
       
   316 //
       
   317 HBufC* WebCannedImages::getImageDirL( )
       
   318     {
       
   319     TFileName mbmDrive;
       
   320     HBufC* mbmFile = NULL;
       
   321     TParse parse;
       
   322 
       
   323     // get the drive letter - MBM is on the same drive as this DLL
       
   324     Dll::FileName( mbmDrive );
       
   325     parse.Set( mbmDrive, NULL, NULL );
       
   326     mbmDrive = parse.Drive();
       
   327 
       
   328     // allocate memory for MBM file name
       
   329     mbmFile = HBufC::NewL( KMaxFileName );
       
   330 
       
   331     // assemble the MBM file name
       
   332     TPtr ptr( mbmFile->Des() );
       
   333     ptr.SetLength( 0 );
       
   334     ptr.Append( mbmDrive );
       
   335     ptr.Append( KDC_APP_BITMAP_DIR );
       
   336     return mbmFile;
       
   337     }
       
   338 
       
   339 // -----------------------------------------------------------------------------
       
   340 // WebCannedImages::loadImageDirL
       
   341 // Loads the canned image
       
   342 // -----------------------------------------------------------------------------
       
   343 //
       
   344 void WebCannedImages::loadImageDirL( TInt imgid, const TDesC& filename, TCannedImageData& image )
       
   345     {
       
   346     // allocate a bitmap object
       
   347     image.m_img = new (ELeave) CFbsBitmap();
       
   348 
       
   349     // load an image from the MBM file
       
   350     TInt error = image.m_img->Load( filename, imgid );
       
   351     if (error!=KErrNone)
       
   352         {
       
   353         // FIXME: to avoid crash in Mars
       
   354         //User::Leave(KBrsrOutOfMemory);
       
   355         }
       
   356 
       
   357     // load the mask
       
   358     image.m_msk = new (ELeave) CFbsBitmap();
       
   359 
       
   360     error = image.m_msk->Load( filename, imgid);
       
   361     if (error!=KErrNone)
       
   362         {
       
   363         //User::Leave(KBrsrOutOfMemory);
       
   364         }
       
   365     }
       
   366 
       
   367 // -----------------------------------------------------------------------------
       
   368 // WebCannedImages::loadSvg
       
   369 // Loads the canned image
       
   370 // -----------------------------------------------------------------------------
       
   371 //
       
   372 void WebCannedImages::loadSvg( TInt imgid, TAknsItemID aknsid, const TDesC& filename, TCannedImageData& image )
       
   373     {
       
   374     // This stuff is copied from Kimono
       
   375 
       
   376     // Check the device resolution
       
   377     CEikonEnv* eikEnv = CEikonEnv::Static();
       
   378     CWsScreenDevice& screenDev = *eikEnv->ScreenDevice();
       
   379 
       
   380     TUint dpi = screenDev.VerticalTwipsToPixels(KTwipsPerInch);
       
   381 
       
   382     // Initialize size to be 12 pixels
       
   383     TInt defaultPx = 10;
       
   384     TInt px = 10;
       
   385 
       
   386     // Since web designers assume a 96 pixel per inch (ppi) display use that as the reference point.
       
   387     // Thus the multiplier should be:
       
   388     // ppi/96
       
   389     // Below is a list of the density of commercially available LCD displays.
       
   390     // Density Multiplier:
       
   391     // 400 ppi  4.2
       
   392     // 210 ppi  2.2
       
   393     // 200 ppi  2.1
       
   394     // 120 ppi  1.3
       
   395     // 100 ppi  1.0
       
   396     // 96 ppi   1.0
       
   397     if ((200 > dpi) && (dpi >= 120))
       
   398         {
       
   399         defaultPx = (TInt)((float)defaultPx * 1.7);
       
   400         }
       
   401     else if ((210 > dpi) && (dpi >= 200))
       
   402         {
       
   403         defaultPx = (TInt)((float)defaultPx * 2.1);
       
   404         }
       
   405     else if ((400 > dpi) && (dpi >= 210))
       
   406         {
       
   407         defaultPx = (TInt)((float)defaultPx * 2.2);
       
   408         }
       
   409     else if (dpi >= 400)
       
   410         {
       
   411         defaultPx = (TInt)((float)defaultPx * 4.2);
       
   412         }
       
   413 
       
   414     MAknsSkinInstance* skin = AknsUtils::SkinInstance();
       
   415 
       
   416     TRAPD(error, AknsUtils::CreateIconL( skin,
       
   417                                    aknsid,
       
   418                                    image.m_img,
       
   419                                    image.m_msk,
       
   420                                    filename,
       
   421                                    imgid,
       
   422                                    imgid+1));
       
   423 
       
   424 
       
   425     if (error!=KErrNone)
       
   426         {
       
   427         return;
       
   428         }
       
   429 
       
   430 
       
   431     // adjust the size for the disc, circle, square, radio and checkbox icons to be
       
   432     // slightly smaller than the other canned icons in order to improve look and feel
       
   433     // radio and checkbox
       
   434 #ifdef __BROWSER_SDK
       
   435     if (imgid == EMbmWebkiticons_sdkQgn_prop_wml_selectfile ||
       
   436         imgid == EMbmWebkiticons_sdkQgn_prop_wml_selectarrow ||
       
   437         imgid == EMbmWebkiticons_sdkQgn_prop_wml_radiobutt_off ||
       
   438         imgid == EMbmWebkiticons_sdkQgn_prop_wml_radiobutt_on ||
       
   439         imgid == EMbmWebkiticons_sdkQgn_prop_wml_checkbox_off ||
       
   440         imgid == EMbmWebkiticons_sdkQgn_prop_wml_checkbox_on
       
   441         )
       
   442 #else
       
   443     if (imgid == EMbmWebkiticonsQgn_prop_wml_selectfile ||
       
   444         imgid == EMbmWebkiticonsQgn_prop_wml_selectarrow ||
       
   445         imgid == EMbmWebkiticonsQgn_prop_wml_radiobutt_off ||
       
   446         imgid == EMbmWebkiticonsQgn_prop_wml_radiobutt_on ||
       
   447         imgid == EMbmWebkiticonsQgn_prop_wml_checkbox_off ||
       
   448         imgid == EMbmWebkiticonsQgn_prop_wml_checkbox_on
       
   449         )
       
   450 #endif
       
   451         {
       
   452         px = (TInt)((float)defaultPx * .90);
       
   453         }
       
   454 #ifdef __BROWSER_SDK
       
   455     else if (imgid == EMbmWebkiticons_sdkQgn_indi_viewer_pointer ||
       
   456         imgid == EMbmWebkiticons_sdkQgn_indi_viewer_pointer_hand ||
       
   457         imgid == EMbmWebkiticons_sdkQgn_indi_viewer_pointer_wait)
       
   458 #else
       
   459     else if (imgid == EMbmWebkiticonsQgn_indi_viewer_pointer ||
       
   460         imgid == EMbmWebkiticonsQgn_indi_viewer_pointer_hand ||
       
   461         imgid == EMbmWebkiticonsQgn_indi_viewer_pointer_wait)
       
   462 #endif
       
   463         {
       
   464         // cursor
       
   465         if (dpi < 200)
       
   466             {
       
   467             px = (TInt)((float)defaultPx * 1.1);
       
   468             }
       
   469         else
       
   470             {
       
   471             px = (TInt)((float)defaultPx * 1.3);
       
   472             }
       
   473         }
       
   474     else if (imgid == EMbmWebkiticonsQgn_indi_button_exit_fs)
       
   475         {
       
   476         px = (TInt)((float)defaultPx * 2);
       
   477         }
       
   478     else
       
   479         {
       
   480         px = (TInt)((float)defaultPx * 1.2);
       
   481         }
       
   482 
       
   483     AknIconUtils::SetSize(image.m_img,TSize(px,px)); //rect.Rect().Size());
       
   484     AknIconUtils::SetSize(image.m_msk,TSize(px,px)); //rect.Rect().Size());
       
   485     }
       
   486 
       
   487 
       
   488 //  End of File