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 } |