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 + -
显示快捷键?