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

相关文章

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注