plxmms_view.c

来自「mtk wap和mms代码。。适应mtk 25。26平台」· C语言 代码 · 共 2,345 行 · 第 1/5 页

C
2,345
字号
    SetKeyHandler(PlayMessage_PreviousFrame, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
	SetKeyHandler(PlayMessage_NextFrame, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
	SetKeyHandler(cms_view_message_down_handler, KEY_DOWN_ARROW, KEY_EVENT_DOWN);
	SetKeyHandler(cms_view_message_up_handler, KEY_UP_ARROW, KEY_EVENT_DOWN);
	SetKeyHandler(Exit2ScrIdle, KEY_END, KEY_EVENT_DOWN);
*/
    SetKeyHandler(OnPrevKey, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
	SetKeyHandler(OnNextKey, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
    SetKeyHandler(OnDownKey, KEY_DOWN_ARROW, KEY_EVENT_DOWN);
	SetKeyHandler(OnUpKey, KEY_UP_ARROW, KEY_EVENT_DOWN);
//	SetRightSoftkeyFunction(cms_stop_playing_message_handler, KEY_EVENT_UP);

    gdi_layer_lock_frame_buffer();
	gdi_layer_push_clip();
	gdi_layer_push_text_clip();

	gdi_layer_set_clip(0, MMS_CLIENT_TOP + 1, MMS_CLIENT_WIDTH - 1, MMS_CLIENT_BOTTOM - 2);
	gdi_layer_set_text_clip(0, MMS_CLIENT_TOP + 1, MMS_CLIENT_WIDTH-1, MMS_CLIENT_BOTTOM - 2);

    pixtel_UI_fill_rectangle(0, MMS_CLIENT_TOP + 1, 
        MMS_CLIENT_WIDTH, MMS_CLIENT_BOTTOM - 1, 
        pixtel_UI_color(255,255,255));
	pixtel_UI_set_clip(0, MMS_CLIENT_TOP + 1, MMS_CLIENT_WIDTH - 1, 
		MMS_CLIENT_BOTTOM - 2);
    
    ///////////////////////////////////////////////
    //draw text
#ifdef MMS_DEBUG
    PlxTrace("will draw text\r\n");
#endif

    if(g_view_data.bHasText &&
       g_view_data.slide_info+g_view_data.cur_slide-1 &&
       g_view_data.slide_info[g_view_data.cur_slide-1].text &&
       g_view_data.slide_info[g_view_data.cur_slide-1].line_pos)
    {
        i = 0;//g_view_data.start_line;
        pos_x = g_view_data.text_left;
        pos_y = g_view_data.text_top;

        while(i < g_view_data.slide_info[g_view_data.cur_slide-1].line_count)
        {
            if(i < g_view_data.slide_info[g_view_data.cur_slide-1].line_count-1 && 
                pos_y <= MMS_CLIENT_BOTTOM/*-2*/ &&
                (pos_y/*-3*/ + /*LINE_HEIGHT)*/g_view_data.line_height) >= MMS_CLIENT_TOP
              )
            {
                DrawOneTextLine(
                    (U8*)g_view_data.slide_info[g_view_data.cur_slide-1].text+
                    g_view_data.slide_info[g_view_data.cur_slide-1].line_pos[i] * 2, //start
                    (g_view_data.slide_info[g_view_data.cur_slide-1].line_pos[i+1]-
                    g_view_data.slide_info[g_view_data.cur_slide-1].line_pos[i]),    //len
                    pos_x, pos_y);
                i++;
                pos_y += g_view_data.line_height;//LINE_HEIGHT; //-1;
            }
            else if(i == g_view_data.slide_info[g_view_data.cur_slide-1].line_count-1 &&  //the last line
                    pos_y <= MMS_CLIENT_BOTTOM/*-2*/                    &&
                    (pos_y/*-3*/ + g_view_data.line_height/*LINE_HEIGHT*/) >= MMS_CLIENT_TOP
                   )
            {
                int totle_len = pfnUnicodeStrlen(
                    (S8*)g_view_data.slide_info[g_view_data.cur_slide-1].text);
                DrawOneTextLine(
                    (U8*)g_view_data.slide_info[g_view_data.cur_slide-1].text+
                    g_view_data.slide_info[g_view_data.cur_slide-1].line_pos[i] * 2,   //start
                    totle_len - g_view_data.slide_info[g_view_data.cur_slide-1].line_pos[i], //len
                    pos_x, pos_y);
                i++;
                pos_y += g_view_data.line_height;//LINE_HEIGHT; //-1;
            }
            else if((pos_y/*-3*/+g_view_data.line_height/*LINE_HEIGHT*/) < MMS_CLIENT_TOP)
            {
                i++;
                pos_y += g_view_data.line_height;//LINE_HEIGHT; //-1;
            }
            else if(pos_y > MMS_CLIENT_BOTTOM /*- 2*/)
            {
                i++;
            }
        }
    }

    ///////////////////////////////////////////////
    //draw image
#ifdef MMS_DEBUG
    PlxTrace("will draw image\r\n");
#endif

    if(g_view_data.image)
    {
#ifdef MMS_DEBUG
    PlxTrace("has image data\r\n");
#endif
        switch(g_view_data.image_type)
        {
        case MMS_OBJ_BMP:
#ifdef MMS_DEBUG
    PlxTrace("bmp\r\n");
#endif
            if(g_view_data.image_width != g_view_data.image_width_show ||
               g_view_data.image_height != g_view_data.image_height_show)
            {
#ifdef MMS_DEBUG
    PlxTrace("resize draw\r\n");
#endif
#ifdef MMS_DRAWCOMIMG
                gdi_image_bmp_draw_resized_c(g_view_data.image_left,
                    g_view_data.image_top,
                    g_view_data.image_width_show,
                    g_view_data.image_height_show,
                    g_view_data.image, g_view_data.image_len);
#else
                gdi_image_bmp_draw_resized(g_view_data.image_left,
                    g_view_data.image_top,
                    g_view_data.image_width_show,
                    g_view_data.image_height_show,
                    g_view_data.image, g_view_data.image_len);
#endif
            }
            else
            {
#ifdef MMS_DEBUG
    PlxTrace("draw\r\n");
#endif
#ifdef MMS_DRAWCOMIMG
                gdi_image_bmp_draw_c(g_view_data.image_left,
                    g_view_data.image_top,
                    g_view_data.image, g_view_data.image_len);
#else
                gdi_image_bmp_draw(g_view_data.image_left,
                    g_view_data.image_top,
                    g_view_data.image, g_view_data.image_len);
#endif
            }
            break;
        case MMS_OBJ_WBMP:
#ifdef MMS_DEBUG
    PlxTrace("wbmp\r\n");
#endif
            if(g_view_data.image_width != g_view_data.image_width_show ||
               g_view_data.image_height != g_view_data.image_height_show)
            {
#ifdef MMS_DEBUG
    PlxTrace("resize draw\r\n");
#endif
                gdi_image_wbmp_draw_resized(g_view_data.image_left,
                    g_view_data.image_top,
                    g_view_data.image_width_show,
                    g_view_data.image_height_show,
                    g_view_data.image, g_view_data.image_len);
            }
            else
            {
#ifdef MMS_DEBUG
    PlxTrace("draw\r\n");
#endif
                gdi_image_wbmp_draw(g_view_data.image_left,
                    g_view_data.image_top,
                    g_view_data.image, g_view_data.image_len);
            }
            break;
        case MMS_OBJ_GIF:
#ifdef MMS_DEBUG
    PlxTrace("gif\r\n");
#endif
            gdi_image_gif_get_frame_count(g_view_data.image+8, 
                g_view_data.image_len, &fcount);
            if(fcount == 1)
            {
#ifdef MMS_DEBUG
    PlxTrace("static gif\r\n");
#endif
                if(g_view_data.image_width != g_view_data.image_width_show ||
                   g_view_data.image_height != g_view_data.image_height_show)
                {
#ifdef MMS_DEBUG
    PlxTrace("resize draw\r\n");
#endif
                   gdi_image_gif_draw_resized(g_view_data.image_left,
                       g_view_data.image_top,
                       g_view_data.image_width_show,
                       g_view_data.image_height_show,
                       g_view_data.image+8,
                       g_view_data.image_len,
                       (U16)fcount);
                }
                else
                {
#ifdef MMS_DEBUG
    PlxTrace("draw\r\n");
#endif
/*                    gdi_image_gif_draw(g_view_data.image_left, 
                        g_view_data.image_top, 
                        g_view_data.image+8, g_view_data.image_len, (U16)fcount);
*/
                    gdi_image_gif_draw_resized(g_view_data.image_left,
                       g_view_data.image_top,
                       g_view_data.image_width_show,
                       g_view_data.image_height_show,
                       g_view_data.image+8,
                       g_view_data.image_len,
                       (U16)fcount);
                }
            }
            else
            {
#ifdef MMS_DEBUG
    PlxTrace("animation\r\n");
#endif
                if(g_view_data.image_width != g_view_data.image_width_show ||
                   g_view_data.image_height != g_view_data.image_height_show)
                {
#ifdef MMS_DEBUG
    PlxTrace("resize draw\r\n");
#endif
                    //gdi_image_draw_animation_resized(g_view_data.image_left,
#ifdef gdi_anim_draw_mem_resized
					plx_gdi_image_draw_animation_resized(g_view_data.image_left,
                       g_view_data.image_top,
                       g_view_data.image_width_show,
                       g_view_data.image_height_show,
                       g_view_data.image+8, 
					   GDI_IMAGE_TYPE_GIF, g_view_data.image_len-8, NULL);
#else
                    plx_gdi_image_draw_animation_resized(g_view_data.image_left,
                       g_view_data.image_top,
                       g_view_data.image_width_show,
                       g_view_data.image_height_show,
                       g_view_data.image/*+8*/, NULL);
#endif
                }
                else
                {
#ifdef MMS_DEBUG
    PlxTrace("draw\r\n");
#endif
/*                    gdi_image_draw_animation(g_view_data.image_left, 
                        g_view_data.image_top, 
                        g_view_data.image, NULL);
*/
#ifdef gdi_anim_draw_mem_resized
					plx_gdi_image_draw_animation_resized(g_view_data.image_left,
                       g_view_data.image_top,
                       g_view_data.image_width_show,
                       g_view_data.image_height_show,
                       g_view_data.image+8, 
					   GDI_IMAGE_TYPE_GIF, g_view_data.image_len-8, NULL);
#else
                    plx_gdi_image_draw_animation_resized(g_view_data.image_left,
                       g_view_data.image_top,
                       g_view_data.image_width_show,
                       g_view_data.image_height_show,
                       g_view_data.image/*+8*/, NULL);
#endif
                }
            }
            break;

#ifndef MMI_ON_WIN32
        case MMS_OBJ_JPG:
            if(g_view_data.image_width != g_view_data.image_width_show ||
               g_view_data.image_height != g_view_data.image_height_show)
            {
                gdi_image_jpeg_draw_resized(g_view_data.image_left, 
                        g_view_data.image_top, 
                        g_view_data.image_width_show,
                        g_view_data.image_height_show, 
                        g_view_data.image,
                        g_view_data.image_len);
            }
            else
            {
                gdi_image_jpeg_draw(g_view_data.image_left, 
                        g_view_data.image_top, 
                        g_view_data.image,
                        g_view_data.image_len);
            }
            break;
#endif
        }
    }

    gdi_layer_pop_text_clip();
	gdi_layer_pop_clip();

#ifdef MMS_SCROLLVIEW
    RedrawVScroll();
#endif

	gdi_layer_unlock_frame_buffer();
	gdi_layer_blt_base_layer( 0, 0, UI_device_width-1, UI_device_height-1);
}

void DrawOneTextLine(U8* string, int n, int x, int y)
{
    pixtel_UI_reset_text_clip();
	pixtel_UI_set_font((UI_font_type)&MMI_medium_font);
	
	pixtel_UI_set_clip(0, MMS_CLIENT_TOP + 1, MMS_CLIENT_WIDTH - 1, 
		MMS_CLIENT_BOTTOM - 2);
	pixtel_UI_set_text_clip(0, MMS_CLIENT_TOP + 1, MMS_CLIENT_WIDTH, 
		MMS_CLIENT_BOTTOM - 2);
	pixtel_UI_set_text_color(pixtel_UI_color(0,0,0));
				
	pixtel_UI_move_text_cursor(x,y);
	pixtel_UI_print_text_n((UI_string_type)string, n);
}

/***************************************************************************
* Function	InitMmsContent
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
BOOL InitMmsContent(void)
{
#ifdef MMS_DEBUG
    PlxTrace("InitMmsContent\r\n");
#endif

    if(!g_view_data.message)
        return FALSE;

    MMS_Memset((void*)g_view_data.slide_info, 0, 
        sizeof(SlideInfo)*mmsmsg_GetSlideCount(g_view_data.message));//MAX_MMS_SLIDE_COUNT);

    mmsmsg_SetCurSlide(g_view_data.message, 1);

#ifdef MMS_DEBUG
    PlxTrace("will DealSlide\r\n");
#endif

#ifdef MMS_SCROLLVIEW
    g_view_data.rcVScroll.right     = MMS_CLIENT_WIDTH;
	g_view_data.rcVScroll.top       = MMS_CLIENT_TOP;
	g_view_data.rcVScroll.bottom    = MMS_CLIENT_BOTTOM;
	g_view_data.rcVScroll.left      = g_view_data.rcVScroll.right - 
                                            current_MMI_theme->scrollbar_size; //VSCROLL_WIDTH;
#endif

    if(!DealSlide())
    {
#ifdef MMS_DEBUG
    PlxTrace("DealSlide failed\r\n");
#endif
        return FALSE;
    }
#ifdef MMS_DEBUG
    PlxTrace("DealSlide end\r\n");
#endif

    return TRUE;
}

/***************************************************************************
* Function	DealSlide
* Purpose	
* Params	
* Return	
* Remarks	
\**************************************************************************/
BOOL DealSlide(void)
{
#ifdef MMS_DEBUG
    PlxTrace("DealSlide\r\n");
#endif

    if(!g_view_data.message)
        return FALSE;
    if(g_view_data.bSlideShifting ||
       g_view_data.bInactived ||
       g_view_data.bClosing)
       return FALSE;
    g_view_data.bSlideShifting = TRUE;

#ifdef MMS_DEBUG
    PlxTrace("will update contents\r\n");
#endif
    //init objects data
    g_view_data.bHasText = UpdateText();
    g_view_data.bHasImage = UpdateImage();
    g_view_data.bHasSound = UpdateSound();

#ifdef MMS_DEBUG
    PlxTrace("will arrange image and text\r\n");
#endif

    //image and text arrangement
    if(mmsmsg_IsImageFirst(g_view_data.message)) //image first or only a image
    {
#ifdef MMS_DEBUG
    PlxTrace("image first\r\n");
#endif
        if(g_view_data.bHasImage)
        {
#ifdef MMS_DEBUG
    PlxTrace("has image\r\n");
#endif
            g_view_data.image_left = 
                (MMS_CLIENT_WIDTH - g_view_data.image_width_show) / 2;
            g_view_data.image_top = MMS_CLIENT_TOP+1;
        }
        else
        {
#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;
        }

        if(g_view_data.bHasText)
        {
#ifdef MMS_DEBUG
    PlxTrace("has text\r\n");
#endif
            g_view_data.text_left = 2;
            g_view_data.text_top = 
                g_view_data.image_top + g_view_data.image_height_show + g_view_data.line_height;//LINE_HEIGHT;
        }
        else
        {
#ifdef MMS_DEBUG
    PlxTrace("no text\r\n");
#endif
            g_view_data.text_left = 2;
            g_view_data.text_top = MMS_CLIENT_TOP+1;
            g_view_data.text_height = 0;
        }
    }
    else //text first or only a text
    {
#ifdef MMS_DEBUG
    PlxTrace("text first\r\n");
#endif
        if(g_view_data.bHasText)
        {
#ifdef MMS_DEBUG
    PlxTrace("has text\r\n");
#endif
            g_view_data.text_left = 2;
            g_view_data.text_top = MMS_CLIENT_TOP+1;
        }
        else
        {
#ifdef MMS_DEBUG
    PlxTrace("no text\r\n");
#endif
            g_view_data.text_left = 2;
            g_view_data.text_top = MMS_CLIENT_TOP+1;
            g_view_data.text_height = 0;
        }

        if(g_view_data.bHasImage)
        {
#ifdef MMS_DEBUG
    PlxTrace("has image\r\n");
#endif
            g_view_data.image_left = 
                (MMS_CLIENT_WIDTH - g_view_data.image_width_show) / 2;
            g_view_data.image_top = g_view_data.text_top + 
                g_view_data.text_height + g_view_data.line_height;//LINE_HEIGHT;
        }
        else
        {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?