蜂窝菜单 (Menu cellular)
蜂窝菜单控件以蜂窝形状显示一组图标。
用法
创建蜂窝菜单控件
使用 gui_menu_cellular_create()
函数创建蜂窝菜单控件,用户需要提供代表图标集的图像文件数组。
添加点击回调事件
使用 gui_menu_cellular_on_click()
函数添加点击图标的回调事件。
设置偏移
使用 gui_menu_cellular_offset()
函数可以调整水平和垂直偏移以获得更好的显示效果。
开发示例
蜂窝菜单控件的开发示例如下,首先使用画布控件绘制一组纯色图标,再将这些图标传递给蜂窝菜单控件进行显示:
#include "guidef.h"
#include "gui_img.h"
#include "gui_win.h"
#include "gui_obj.h"
#include "gui_canvas.h"
#include "gui_menu_cellular.h"
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
#include "gui_server.h"
#include "gui_components_init.h"
#define ICON_NUM 56
#define ICON_SIZE gui_get_screen_width() / 4
static size_t buffer_size = 0;
NVGcolor color[] =
{
{1.0f, 1.0f, 1.0f, 1.0f}, //white
{1.0f, 0, 0, 1.0f}, //red
{0, 1.0f, 0, 1.0f}, //green
{0, 0, 1.0f, 1.0f}, //blue
};
static uint8_t color_index = 0;
static void draw_circle_cb(NVGcontext *vg)
{
nvgBeginPath(vg);
nvgCircle(vg, ICON_SIZE / 2.0f, ICON_SIZE / 2.0f, ICON_SIZE / 2.0f);
nvgFillColor(vg, color[color_index++]);
nvgFill(vg);
color_index %= 4;
}
static int app_init(void)
{
uint32_t *img_data_array[ICON_NUM] = {0};
for (int i = 0; i < ICON_NUM; i++)
{
int image_h = ICON_SIZE;
int image_w = ICON_SIZE;
int pixel_bytes = 4;
buffer_size = image_h * image_w * pixel_bytes + sizeof(gui_rgb_data_head_t);
img_data_array[i] = gui_lower_malloc(buffer_size);
memset(img_data_array[i], 0, buffer_size);
gui_canvas_render_to_image_buffer(GUI_CANVAS_OUTPUT_RGBA, 0, image_w, image_h, draw_circle_cb,
(uint8_t *)img_data_array[i]);
}
int array_size = sizeof(img_data_array) / sizeof(img_data_array[0]);
gui_menu_cellular_t *menu = gui_menu_cellular_create(gui_obj_get_root(), ICON_SIZE, img_data_array,
array_size);
return 0;
}
GUI_INIT_APP_EXPORT(app_init);

API
Functions
-
gui_menu_cellular_t *gui_menu_cellular_create(void *parent, int icon_size, uint32_t *icon_array[], int array_size)
-
Create a menu_cellular widget.
- 参数:
parent – The father widget it nested in.
icon_size – Size of icon.
icon_array – The icons’ image data address array.
array_size – Size of array.
- 返回:
-
The menu_cellular pointer.
-
void gui_menu_cellular_offset(gui_menu_cellular_t *menu_cellular, int offset_x, int offset_y)
-
Config offset.
- 参数:
menu_cellular – The menu_cellular pointer.
offset_x – The X-axis offset.
offset_y – The Y-axis offset.
-
void gui_menu_cellular_on_click(gui_menu_cellular_t *menu_cellular, struct gui_menu_cellular_gesture_parameter *para_array, int array_length)
-
Add click events on images based on the cellular menu.
- 参数:
menu_cellular – The menu_cellular pointer.
para_array – Array of gesture parameters corresponding to the click event.
array_length – Length of the gesture parameters array.
-
struct gui_menu_cellular_t
-
Menu_cellular structure.
-
struct gui_menu_cellular_gesture_parameter