MTK中的gui_show_fixed_icontext_menuitem()函数

2023-10-28 05:08

本文主要是介绍MTK中的gui_show_fixed_icontext_menuitem()函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一个目前可用的flag标记宏判断,!(flags & UI_MENUITEM_DISABLE_TEXT_DISPLAY)

设置字体,字体位置,

gui_set_font(&MMI_small_font);

 

        gui_measure_string(_text, &sw, &sh);
        if (flags & UI_MENUITEM_CENTER_TEXT_X)
        {
            old_text_x = m->text_x;
            m->text_x = (m->width >> 1) - (sw >> 1);

           
            if (m->text_x < 0)
            {
                m->text_x = 0;
            }     

 

 

            if (flags & UI_MENUITEM_CENTER_TEXT_Y)
        {
            old_text_y = m->text_y;
            m->text_y = (m->height >> 1) - (sh >> 1);
        } 

  old_text_x 保存原来的文本位置, m->text_x可设置为中间对齐.

 

    if (_icon != UI_NULL_IMAGE)
    {
        gui_measure_image(_icon, &icon_width, &icon_height);

        if (flags & UI_MENUITEM_CENTER_ICON_X)
        {
            old_icon_x = m->icon_x;
            m->icon_x = (m->width >> 1) - (icon_width >> 1);
        }
        if (flags & UI_MENUITEM_CENTER_ICON_Y)
        {
            old_icon_y = m->icon_y;
            m->icon_y = (m->height >> 1) - (icon_height >> 1);
        }
    }
设置图标的位置。

 

    text_x = m->text_x;
    text_y = m->text_y;
将m->text_x赋予text_x,以后就对text_x操作。


 if ((flags & UI_MENUITEM_STATE_FOCUSSED) && !(flags & UI_MENUITEM_DISABLE_HIGHLIGHT))
    {
        if (!(flags & UI_MENUITEM_DISABLE_BACKGROUND_ALWAYS))
        {
            f = m->focussed_filler;
        }
设置背景


        {
            text_color = m->focussed_text_color;
        }
设置字体颜色

 

  gui_push_clip();
进入剪裁区

 

 gui_set_clip(x1, y1, x2, y2);
设置剪裁区为menuitem区

 

   set_start_position_and_item_parameters_for_list_highlighter_effect(item, common_item_data, x1, y1);

 gui_draw_list_filled_area(x1, y1, x2, y2, f);
画背景

 


    if (_icon != UI_NULL_IMAGE && !((m->ext_flags & UI_MENUITEM_EXT_SHOW_IN_MARQUEE) &&

animation_flag))
    {
        if (mi->item_icon_handle != GDI_ERROR_HANDLE)
        {
            gdi_image_stop_animation(mi->item_icon_handle);
            mi->item_icon_handle = GDI_ERROR_HANDLE;
        }
        if (animation_flag)
        {
            if (MMI_current_menu_type == MATRIX_MENU || (MMI_current_menu_type ==

MATRIX_PAGE_MENU))
            {
                if (MMI_fixed_matrix_menu.flags & UI_MATRIX_MENU_FOR_MAINMENU)
                {  
                    if (!gui_main_menu_matrix_slide_is_under_control())
                    {
                        gui_show_animation_with_background_image(
                            x1 + m->icon_x,
                            y1 + m->icon_y,
                            MMI_mm_animation,
                            current_MMI_theme->matrix_main_menu_highlight_image,
                            (gdi_handle*)&mi->item_icon_handle);
                    }
                }
                else
                {               
                    gdi_image_draw_animation(
                        x1 + m->icon_x,
                        y1 + m->icon_y,
                        mi->item_icon,
                        (gdi_handle*)&mi->item_icon_handle);
                }               
            }
这块代码是显示动画的,可以先放放

 

       else if (MMI_current_menu_type == LIST_MENU)
        {
            S32 x_clip = 0, y_clip = 0;

            gui_push_clip();
            if (m->icon_x > 0)
            {
                x_clip = m->icon_x;
            }
            if (m->icon_y > 0)
            {
                y_clip = m->icon_y;
            }

            if (!r2lMMIFlag)
            {
                gui_set_clip(x1 + x_clip, y1 + y_clip, x1 + m->text_x - 2, y1 + m->height - 1);

                gdi_image_draw_animation_single_frame(x1 + m->icon_x, y1 + m->icon_y, (U8*) _icon, 0);
            }
            else
            {
               
                gui_set_clip(x2 - m->text_x + 2, y1 + y_clip, x2 - x_clip, y1 + m->height - 1);

                gdi_image_draw_animation_single_frame(x2 - m->icon_x - icon_width + 1, y1 + m->icon_y, (U8*) _icon, 0);
            }

            gui_pop_clip();

针对的是无动画的情形,设置画图标的区域,


    if (!(flags & UI_MENUITEM_DISABLE_TEXT_DISPLAY))
    {
        gui_push_text_clip();

                        if (f && (f->flags & UI_FILLED_AREA_BORDER))
                        {
                           
                            gui_set_text_clip(x1 + m->text_x, y1, x2 - 2 - time_w, y2);
                        }
                        else
                        {
                            gui_set_text_clip(x1 + m->text_x, y1, x2 - time_w, y2);
                        }
设置文本剪裁区,注意,使用的是gui_set_text_clip()函数。time_w为零,意义不明

 


                    max_text_width = x2 - (x1 + m->text_x) + 1;

                    gui_menuitem_adjust_text_clip_for_right_gap(m);               
                    if (MMI_current_menu_type == LIST_MENU)
                    {
                        max_text_width -= GUI_MENUITEM_TEXT_RIGHT_GAP;
                    }
设置文本显示区域的宽度。


           gui_move_text_cursor(x1 + text_x, y1 + text_y);


 gui_set_line_height(sh);
设置行高

 

       gui_set_text_color(text_color);
设置文本的颜色

 

                gui_list_show_text(m, mi, x1 + text_x, y1 + text_y, max_text_width - 1);
显示文本,用的是gui_list_show_text函数,可以考虑换一下

 

      gui_pop_text_clip();
跳出文本剪裁区

 

    gui_pop_clip();
跳出menuitem剪裁区

 

          gui_display_pop_up_description(x, y, m->width, m->height);


    g_mmi_frm_cntx.dump_screen_info.hightlight_type = MMI_SCREEN_HIGHLIGHT_NONE;
不懂

 

    if (!(flags & UI_MENUITEM_DISABLE_TEXT_DISPLAY))
    {
        if (flags & UI_MENUITEM_CENTER_TEXT_X)
        {
            m->text_x = old_text_x;
        }
        if (flags & UI_MENUITEM_CENTER_TEXT_Y)
        {
            m->text_y = old_text_y;
        }
    }
   
   
    if (_icon != UI_NULL_IMAGE)
    {
        if (flags & UI_MENUITEM_CENTER_ICON_X)
        {
            m->icon_x = old_icon_x;
        }
        if (flags & UI_MENUITEM_CENTER_ICON_Y)
        {
            m->icon_y = old_icon_y;
        }
    }
还原相应的坐标

这篇关于MTK中的gui_show_fixed_icontext_menuitem()函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/290899

相关文章

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分