美化MTK的拨号窗口

来源:互联网 发布:java分布式框架 编辑:程序博客网 时间:2024/05/17 03:38

除待机,主菜单,多媒体窗口外,拨号窗口也许是我们最经常为其动手术的一个窗口了。除了花里胡哨的界面,各种新技术新器件的应用外,最经常修改的大概是拨号窗口的字符显示。许多时候客户都会嫌弃字符过小,即使换成最大字体,有时照样有客户抱怨字符不够大。字库里的大号字已经满足不了有些客户的需求,客户有时需要更漂亮的字体,有时需要更大的字体,频繁的修改字库,有时既满足不了用户需求,客户的需求各不相同,为了满足单个客户的需求,这无疑是个很愚蠢的主意。于是有些人就想到了贴图,其实字在字库也是存储为小图片的点阵信息。这说明这个方法是完全可行的。其实写这篇文章是应一个同学的要求写的,由于一直很忙,没有写,总觉得的欠下一笔债,今天就一并还了。

原理其实是很简单的,要使用贴图替换MTK自己的输出字符函数,并对应用户的按键。首先要解决的问题是找到替换的地方,如果使用自己贴图,光标也要自己绘制。使用模拟器,可以很容易找到替换的地方。

gui_show_dialer_input_box_ext这个函数是MTK绘制拨号窗口EDIT控件的函数,也是我们今天主要动手术的函数。这里我使用宏(__MMI_DIALING_NUM_PICTURE__),首先找到这个函数中初始化字符的宽度的语句,替换, 

#if defined(__MMI_DIALING_NUM_PICTURE__)
 character_width=get_number_image_width();
 #else
    character_width = gui_get_character_width(0x31);
 #endif
然后找到高度

 #if defined(__MMI_DIALING_NUM_PICTURE__)
  character_height=get_number_image_hight();
 #else 
        #if( defined(__MMI_TOUCH_DIAL_SCREEN__))
         character_height = gui_get_character_height() + 1;
        #else
         character_height = gui_get_character_height() + 2;
        #endif
 #endif
找到输出字符的地方

    #if defined(__MMI_DIALING_NUM_PICTURE__)
    {
     U16 image_id;
          if(is_dial_number_big_pic())
     {
       image_id=get_image_id_by_char(current_character,FALSE);
      gdi_image_draw_id(text_x,text_y,image_id);
     }
     else
     {
       image_id=get_image_id_by_char(current_character,TRUE);
      gdi_image_draw_id(text_x,text_y,image_id);
     }
    }
    #else                        
                            gui_print_character(current_character);
    #endif
另一个地方也要替换

    #if defined(__MMI_DIALING_NUM_PICTURE__)
    {
     U16 image_id;
          if(is_dial_number_big_pic())
     {
       image_id=get_image_id_by_char(current_character,FALSE);
      gdi_image_draw_id(text_x,text_y,image_id);
     }
     else
     {
       image_id=get_image_id_by_char(current_character,TRUE);
      gdi_image_draw_id(text_x,text_y,image_id);
     }
     
    }      
                        #else
                            /* use this theme only after 07B*/
                            gui_set_text_color(*(current_MMI_theme->dialer_inputbox_text_color));
                            gui_set_text_border_color(*(current_MMI_theme->dialer_inputbox_text_border_color));
                            gui_print_bordered_character(current_character);
                        #endif
还有一个地方也要替换

  #if defined(__MMI_DIALING_NUM_PICTURE__)
   {
    U16 image_id;
       if(is_dial_number_big_pic())
    {
      image_id=get_image_id_by_char(current_character,FALSE);
     gdi_image_draw_id(text_x,text_y,image_id);
    }
    else
    {
      image_id=get_image_id_by_char(current_character,TRUE);
     gdi_image_draw_id(text_x,text_y,image_id);
    }

   }     
      #else
                        /* use this theme only after 07B*/
                        gui_set_text_color(*(current_MMI_theme->dialer_inputbox_text_color));
                        gui_set_text_border_color(*(current_MMI_theme->dialer_inputbox_text_border_color));
                        gui_print_bordered_character(current_character);
      #endif               
还有一个函数gui_dialer_input_box_next_line,里面字符的高度宽度也要改成我们自己的,在该函数中,找到字符高度宽度的地方,替换为我们自己的,

再有函数dialer_inputbox_next_line,函数gui_dialer_input_box_prev_line,函数dialer_inputbox_prev_line,同上操作,替为我们自己的。

最后一个函数dialer_input_box_change_callback,也要采有同上的方法修改替换。

大致改的就这些地方的,怎么计划,怎么设计,各人有各人的方法,怎么方便就怎么干,贴的代码是从工程里直接复制出来的,有些乱,懒的改了。呵呵