contentstorage/caclient/s60/src/cabitmapadapter.cpp
changeset 96 5d243a69bdda
parent 92 782e3408c2ab
child 107 b34d53f6acdf
equal deleted inserted replaced
95:c739008478cc 96:5d243a69bdda
    29 #include <XQConversions>
    29 #include <XQConversions>
    30 
    30 
    31 #include "cadef.h"
    31 #include "cadef.h"
    32 #include "cabitmapadapter.h"
    32 #include "cabitmapadapter.h"
    33 
    33 
    34 static QImage::Format TDisplayMode2Format(TDisplayMode mode)
       
    35 {
       
    36     QImage::Format format;
       
    37     switch (mode) {
       
    38     case EGray2:
       
    39         format = QImage::Format_MonoLSB;
       
    40         break;
       
    41     case EColor256:
       
    42     case EGray256:
       
    43         format = QImage::Format_Indexed8;
       
    44         break;
       
    45     case EColor4K:
       
    46         format = QImage::Format_RGB444;
       
    47         break;
       
    48     case EColor64K:
       
    49         format = QImage::Format_RGB16;
       
    50         break;
       
    51     case EColor16M:
       
    52         format = QImage::Format_RGB888;
       
    53         break;
       
    54     case EColor16MU:
       
    55         format = QImage::Format_RGB32;
       
    56         break;
       
    57     case EColor16MA:
       
    58         format = QImage::Format_ARGB32;
       
    59         break;
       
    60     case EColor16MAP:
       
    61         format = QImage::Format_ARGB32_Premultiplied;
       
    62         break;
       
    63     default:
       
    64         format = QImage::Format_Invalid;
       
    65         break;
       
    66     }
       
    67     return format;
       
    68 }
       
    69 
       
    70 QPixmap CaBitmapAdapter::fromSymbianCFbsBitmap(CFbsBitmap *aBitmap)
       
    71 {
       
    72     aBitmap->BeginDataAccess();
       
    73     uchar *data = (uchar *)aBitmap->DataAddress();
       
    74     TSize size = aBitmap->SizeInPixels();
       
    75     TDisplayMode displayMode = aBitmap->DisplayMode();
       
    76 
       
    77     // QImage format must match to bitmap format
       
    78     QImage image(data, size.iWidth, size.iHeight, TDisplayMode2Format(
       
    79         displayMode));
       
    80     aBitmap->EndDataAccess();
       
    81 
       
    82     // No data copying happens because
       
    83     // image format matches native OpenVG format.
       
    84     // So QPixmap actually points to CFbsBitmap data.
       
    85     return QPixmap::fromImage(image);
       
    86 }
       
    87 
       
    88 // -----------------------------------------------------------------------------
    34 // -----------------------------------------------------------------------------
    89 // copying compressed bitmap
    35 // copying compressed bitmap
    90 //----------------------------------------------------------------------------
    36 //----------------------------------------------------------------------------
    91 CFbsBitmap *CaBitmapAdapter::copyBitmapLC(CFbsBitmap *input)
    37 CFbsBitmap *CaBitmapAdapter::copyBitmapLC(CFbsBitmap *input)
    92 {
    38 {
   106 
    52 
   107 void CaBitmapAdapter::fromBitmapAndMaskToPixmapL(CFbsBitmap* fbsBitmap,
    53 void CaBitmapAdapter::fromBitmapAndMaskToPixmapL(CFbsBitmap* fbsBitmap,
   108         CFbsBitmap* fbsMask, QPixmap& pixmap)
    54         CFbsBitmap* fbsMask, QPixmap& pixmap)
   109 {
    55 {
   110     if (fbsBitmap->Header().iCompression == ENoBitmapCompression) {
    56     if (fbsBitmap->Header().iCompression == ENoBitmapCompression) {
   111         pixmap = CaBitmapAdapter::fromSymbianCFbsBitmap(fbsBitmap);
    57         pixmap = pixmap.fromSymbianCFbsBitmap(fbsBitmap);
   112         QPixmap mask = CaBitmapAdapter::fromSymbianCFbsBitmap(fbsMask);
    58         QPixmap mask;
       
    59         mask = mask.fromSymbianCFbsBitmap(fbsMask);
   113         pixmap.setAlphaChannel(mask);
    60         pixmap.setAlphaChannel(mask);
   114     } else { // we need special handling for icons in 9.2 (NGA)
    61     } else { // we need special handling for icons in 9.2 (NGA)
   115         // let's hope that in future it will be in QT code
    62         // let's hope that in future it will be in QT code
   116         CFbsBitmap *temp(NULL);
    63         CFbsBitmap *temp(NULL);
   117         temp = CaBitmapAdapter::copyBitmapLC(fbsBitmap);
    64         temp = CaBitmapAdapter::copyBitmapLC(fbsBitmap);
   118         pixmap = CaBitmapAdapter::fromSymbianCFbsBitmap(temp);
    65         pixmap = pixmap.fromSymbianCFbsBitmap(temp);
   119         CleanupStack::PopAndDestroy();
    66         CleanupStack::PopAndDestroy();
   120         temp = CaBitmapAdapter::copyBitmapLC(fbsMask);
    67         temp = CaBitmapAdapter::copyBitmapLC(fbsMask);
   121         QPixmap mask = CaBitmapAdapter::fromSymbianCFbsBitmap(temp);
    68         QPixmap mask;
       
    69         mask = mask.fromSymbianCFbsBitmap(temp);
   122         CleanupStack::PopAndDestroy();
    70         CleanupStack::PopAndDestroy();
   123         pixmap.setAlphaChannel(mask);
    71         pixmap.setAlphaChannel(mask);
   124     }
    72     }
   125 }
    73 }