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