plxmms_view.c
来自「mtk wap和mms代码。。适应mtk 25。26平台」· C语言 代码 · 共 2,345 行 · 第 1/5 页
C
2,345 行
#ifdef MMS_DEBUG
PlxTrace("no image\r\n");
#endif
g_view_data.image_left = 0;
g_view_data.image_top = MMS_CLIENT_TOP+1;
g_view_data.image_height_show = 0;
g_view_data.image_height = 0;
}
}
#ifdef MMS_DEBUG
PlxTrace("image left=%d, top=%d, width=%d, height=%d\r\n",
g_view_data.image_left,
g_view_data.image_top,
g_view_data.image_width_show,
g_view_data.image_height_show);
PlxTrace("text left=%d, top=%d, width=%d, height=%d\r\n",
g_view_data.text_left,
g_view_data.text_top,
g_view_data.text_width,
g_view_data.text_height);
#endif
// StartPlaySound();
g_view_data.scr_total = (g_view_data.image_height_show + g_view_data.text_height) / g_view_data.line_height + 2;//LINE_HEIGHT+1;
g_view_data.scr_page = MMS_CLIENT_HEIGHT / g_view_data.line_height;//LINE_HEIGHT;
g_view_data.scr_cur = 0;
g_view_data.bSlideShifting = FALSE;
return TRUE;
}
/***************************************************************************
* Function UpdateText
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL UpdateText(void)
{
U8* utfText = NULL;
U8* uniText = NULL;
long utfLen;
long uniLen;
int uniCharCount;
int* line_pos = NULL;
int line_count;
SlideInfo* info;
UI_font_type pFont = &MMI_medium_font;
#ifdef MMS_DEBUG
PlxTrace("UpdateText\r\n");
#endif
if(!g_view_data.message)
{
#ifdef MMS_DEBUG
PlxTrace("!g_view_data.message\r\n");
#endif
return FALSE;
}
if(g_view_data.bNoSmil)
goto no_smil_text;
if(!mmsmsg_HasText(g_view_data.message))
{
#ifdef MMS_DEBUG
PlxTrace("!mmsmsg_HasText\r\n");
#endif
return FALSE;
}
#ifdef MMS_DEBUG
PlxTrace("will format text\r\n");
#endif
no_smil_text:
// if(!g_view_data.slide_info+g_view_data.cur_slide-1)// ||
if(!g_view_data.slide_info[g_view_data.cur_slide-1].text)
{
#ifdef MMS_DEBUG
PlxTrace("formating text\r\n");
#endif
info = g_view_data.slide_info+g_view_data.cur_slide-1;
if(g_view_data.bNoSmil)
{
utfText = (U8*)mmsmsg_GetGivenContentData(g_view_data.message,
g_view_data.no_smil_content, &utfLen);
}
else
{
//get text data
utfText = (U8*)mmsmsg_GetContentData(g_view_data.message,
MMS_TEXT, &utfLen);
}
if(!utfText)
{
#ifdef MMS_DEBUG
PlxTrace("!utfText\r\n");
#endif
// MMS_Free((void*)info);
return FALSE;
}
utfText[utfLen] = 0;
//utf8 to unicode
uniLen = (utfLen+1)*2;
uniText = (U8*)MMS_Malloc(uniLen);
if(!uniText)
{
#ifdef MMS_DEBUG
PlxTrace("!uniText\r\n");
#endif
MMS_Free((void*)utfText);
// MMS_Free((void*)info);
return FALSE;
}
MMS_Memset((void*)uniText, 0, uniLen);
uniCharCount = PlxMmsUTF8ToWideChar((const char*)utfText, utfLen, (char*)uniText, uniLen);
uniText[uniCharCount] = 0;
uniText[uniCharCount+1] = 0;
uniCharCount = uniCharCount / 2;
//format
if(uniCharCount > 4)
{
line_count = uniCharCount / 4;
line_pos = (int*)MMS_Malloc( sizeof(int) * (uniCharCount+1));
}
else
{
line_count = uniCharCount;
line_pos = (int*)MMS_Malloc( sizeof(int) * (uniCharCount+1));
}
if(!line_pos)
{
#ifdef MMS_DEBUG
PlxTrace("!line_pos\r\n");
#endif
MMS_Free((void*)utfText);
MMS_Free((void*)uniText);
// MMS_Free((void*)info);
return FALSE;
}
line_count = FormatWString(uniText, uniLen, line_pos);
info->line_pos = (int*)MMS_Malloc(sizeof(int) * line_count);
if(!info->line_pos)
{
#ifdef MMS_DEBUG
PlxTrace("!info->line_pos\r\n");
#endif
MMS_Free((void*)utfText);
MMS_Free((void*)uniText);
MMS_Free((void*)line_pos);
// MMS_Free((void*)info);
return FALSE;
}
MMS_Memcpy((void*)info->line_pos, (void*)line_pos, sizeof(int)*line_count);
info->text = uniText;
info->line_count = line_count;
// g_view_data.slide_info[g_view_data.cur_slide-1] = info;
MMS_Free((void*)line_pos);
MMS_Free((void*)utfText);
pixtel_UI_set_font(pFont);
//get text size
g_view_data.start_line = 0;
g_view_data.text_left = 2;
g_view_data.text_width = MMS_CLIENT_WIDTH - 4;
g_view_data.text_height = g_view_data.line_height/*LINE_HEIGHT*/ * info->line_count;
// g_view_data.slide_info[g_view_data.cur_slide-1].line_count;
#ifdef MMS_DEBUG
PlxTrace("format end\r\n");
#endif
return TRUE;
}
else //has text //if(g_view_data.slide_info[g_view_data.cur_slide-1])
{
#ifdef MMS_DEBUG
PlxTrace("get text size\r\n");
#endif
pixtel_UI_set_font(pFont);
//get text size
g_view_data.start_line = 0;
g_view_data.text_left = 2;
g_view_data.text_width = MMS_CLIENT_WIDTH - 4;
g_view_data.text_height = g_view_data.line_height/*LINE_HEIGHT*/ *
g_view_data.slide_info[g_view_data.cur_slide-1].line_count;
return TRUE;
}
#ifdef MMS_DEBUG
PlxTrace("no text\r\n");
#endif
return FALSE;
}
/***************************************************************************
* Function UpdateImage
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL UpdateImage(void)
{
U8* image;
long image_len;
int width, height;
int width_show, height_show;
int x, y;
#ifdef MMS_DEBUG
PlxTrace("UpdateImage\r\n");
#endif
gdi_image_stop_animation_all();
if(!g_view_data.message)
{
#ifdef MMS_DEBUG
PlxTrace("!g_view_data.message\r\n");
#endif
return FALSE;
}
if(g_view_data.image)
{
MMS_Free((void*)g_view_data.image);
g_view_data.image = NULL;
g_view_data.image_width = 0;
g_view_data.image_height = 0;
}
if(g_view_data.bNoSmil)
{
image = mmsmsg_GetGivenContentData(g_view_data.message,
g_view_data.no_smil_content, &image_len);
}
else
{
//get image data
image = mmsmsg_GetContentData(g_view_data.message, MMS_IMAGE, &image_len);
}
if(!image)
{
#ifdef MMS_DEBUG
PlxTrace("!image\r\n");
#endif
g_view_data.image_width = 0;
g_view_data.image_height = 0;
return FALSE;
}
//get image size
switch((g_view_data.image_type = GetImageType(image)))
{
case MMS_OBJ_BMP:
if(gdi_image_bmp_get_dimension(image, &width, &height) < 0)
{
#ifdef MMS_DEBUG
PlxTrace("get bmp size failed\r\n");
#endif
MMS_Free((void*)image);
g_view_data.image_width = 0;
g_view_data.image_height = 0;
return FALSE;
}
break;
case MMS_OBJ_WBMP:
if(gdi_image_wbmp_get_dimension(image, &width, &height) < 0)
{
#ifdef MMS_DEBUG
PlxTrace("get wbmp size failed\r\n");
#endif
MMS_Free((void*)image);
g_view_data.image_width = 0;
g_view_data.image_height = 0;
return FALSE;
}
break;
// case MMS_OBJ_PNG:
// break;
case MMS_OBJ_GIF:
MMS_Memmove((void*)(image+8),
(void*)image, image_len);
image[0]=IMAGE_TYPE_GIF;
image[1]=0;
image[2] = (U8) ((image_len) & 0x000000ff);
image[3] = (U8) ((image_len >> 8) & 0x000000ff);
image[4] = (U8) ((image_len >> 16) & 0x000000ff);
image[5] = (U8) ((image_len >> 24) & 0x000000ff);
image[6]=0;
image[7]=0;
image_len += 8;
if(gdi_image_gif_get_dimension(image+8, &width, &height) < 0)
{
#ifdef MMS_DEBUG
PlxTrace("get gif size failed\r\n");
#endif
MMS_Free((void*)image);
g_view_data.image_width = 0;
g_view_data.image_height = 0;
return FALSE;
}
break;
#ifndef MMI_ON_WIN32
case MMS_OBJ_JPG:
if(gdi_image_jpeg_get_dimension(image, image_len, &width, &height) < 0)
{
MMS_Free((void*)image);
g_view_data.image_width = 0;
g_view_data.image_height = 0;
return FALSE;
}
break;
#endif
default:
#ifdef MMS_DEBUG
PlxTrace("in default, unknown image type\r\n");
#endif
MMS_Free((void*)image);
g_view_data.image_width = 0;
g_view_data.image_height = 0;
return FALSE;
}
g_view_data.image = image;
g_view_data.image_len = image_len;
g_view_data.image_width = width;
g_view_data.image_height = height;
if(width > MMS_CLIENT_WIDTH || height > MMS_CLIENT_HEIGHT)
{
gdi_image_util_fit_bbox(MMS_CLIENT_WIDTH, MMS_CLIENT_HEIGHT,
width, height, &x, &y,
&width_show, &height_show);
g_view_data.image_width_show = width_show;
g_view_data.image_height_show = height_show;
}
else
{
g_view_data.image_width_show = width;
g_view_data.image_height_show = height;
}
#ifdef MMS_DEBUG
PlxTrace("UpdateImage ok\r\n");
#endif
return TRUE;
}
/***************************************************************************
* Function GetImageType
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
U8 GetImageType(unsigned char* data)
{
MMSESLIDEINFO info;
MMSECONTENT* content = NULL;
// char* type;
#ifdef MMS_DEBUG
PlxTrace("GetImageType\r\n");
#endif
if(g_view_data.bNoSmil)
{
if(!g_view_data.no_smil_content)
return MMS_OBJ_UNKNOWN;
if(!g_view_data.no_smil_content->type)
return MMS_OBJ_UNKNOWN;
return GetObjType(g_view_data.no_smil_content->type, data);
}
if(MMSE_GetSlideInfo(g_view_data.mmse, g_view_data.message->msg, &info) < 0)
{
#ifdef MMS_DEBUG
PlxTrace("get slide info failed\r\n");
#endif
return MMS_OBJ_UNKNOWN;
}
content = info.pImageContent;
if(!content)
{
#ifdef MMS_DEBUG
PlxTrace("!content\r\n");
#endif
return MMS_OBJ_UNKNOWN;
}
if(!content->type)
{
#ifdef MMS_DEBUG
PlxTrace("!content->type\r\n");
#endif
return MMS_OBJ_UNKNOWN;
}
#ifdef MMS_DEBUG
PlxTrace("type = %s\r\n", content->type);
#endif
// type = content->type;
return GetObjType(content->type, data);
}
/***************************************************************************
* Function GetSoundType
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
U8 GetSoundType(void)
{
MMSESLIDEINFO info;
MMSECONTENT* content = NULL;
// char* type;
#ifdef MMS_DEBUG
PlxTrace("GetSoundType\r\n");
#endif
if(g_view_data.bNoSmil)
{
if(!g_view_data.no_smil_content)
return MMS_OBJ_UNKNOWN;
if(!g_view_data.no_smil_content->type)
return MMS_OBJ_UNKNOWN;
return GetObjType(g_view_data.no_smil_content->type, NULL);
}
if(MMSE_GetSlideInfo(g_view_data.mmse, g_view_data.message->msg, &info) < 0)
{
#ifdef MMS_DEBUG
PlxTrace("get slide info failed\r\n");
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?