Branch update for mygnokii2002_03_17_19_29nl
[gnokii.git] / common / gsm-bitmaps.c
index 3dae76c..7614272 100644 (file)
@@ -70,6 +70,27 @@ void GSM_ClearBitmap(GSM_Bitmap *bmp)
   for (i=0;i<bmp->size;i++) bmp->bitmap[i]=0;
 }
 
+int GSM_GetBitmapSize(GSM_Bitmap *bitmap)
+{
+  switch (bitmap->type) {
+    case GSM_StartupLogo     : /*size 84*48*/
+    case GSM_OperatorLogo    : /*size 72*14*/
+    case GSM_CallerLogo      : /*size 72*14*/
+    case GSM_PictureImage    : /*size 72*28*/
+      return bitmap->height*bitmap->width/8;
+
+    case GSM_7110OperatorLogo: /*size 78*21*/
+      return (bitmap->width*bitmap->height + 7)/8;
+
+    case GSM_7110StartupLogo: /*size 96*65*/
+    case GSM_6210StartupLogo: /*size 96*60*/
+      return (bitmap->height+7)/8*bitmap->width;
+
+    default:
+      return 0;
+  }
+}
+
 GSM_Error GSM_ReadBitmap(GSM_SMSMessage *message, GSM_Bitmap *bitmap)
 {
   int offset = 1;
@@ -103,7 +124,7 @@ GSM_Error GSM_ReadBitmap(GSM_SMSMessage *message, GSM_Bitmap *bitmap)
   
   if (bitmap->width!=72 || bitmap->height!=14) return GE_INVALIDIMAGESIZE;
   
-  bitmap->size = (bitmap->width * bitmap->height) / 8;
+  bitmap->size = GSM_GetBitmapSize(bitmap);
   memcpy(bitmap->bitmap, message->MessageText + offset + 3, bitmap->size);
 
 #ifdef DEBUG
@@ -145,7 +166,7 @@ void GSM_ResizeBitmap(GSM_Bitmap *bitmap, GSM_Bitmap_Types target)
     bitmap->height=21;
   }
   bitmap->type=target;
-  bitmap->size=(bitmap->width*bitmap->height + 7)/8;
+  bitmap->size=GSM_GetBitmapSize(bitmap);
   
   width=backup.width;
   if (bitmap->width<width) {
@@ -281,3 +302,4 @@ int GSM_SaveBitmapToSMS(GSM_MultiSMSMessage *SMS, GSM_Bitmap *bitmap,
 
   return 0;
 }
+