lib/graphic/widget/menu/icontext_menu.h¶
Icon-text menu widget for scrollable menu display. More...
Classes¶
| Name | |
|---|---|
| struct | CFBD_IconTextMenuItem |
| struct | _CFBD_IconTextMenuOps Operation table for icon-text menu. |
| struct | _CFBD_IconTextMenu |
Detailed Description¶
Icon-text menu widget for scrollable menu display.
Provides a horizontal scrollable menu widget optimized for small displays, featuring icon+text menu items with smooth scrolling animation and gesture-based navigation.
Source code¶
#pragma once
#include <stddef.h>
#include <stdint.h>
#include "base/point.h"
#include "base/rectangle.h"
#include "base/size.h"
#include "cfbd_define.h"
#include "cfbd_graphic_define.h"
#include "menu_item.h"
#include "widget/animation/animation.h"
#include "widget/base_support/image.h"
#include "widget/text.h"
typedef struct _CFBD_IconTextMenu CFBD_IconTextMenu;
#define CFBD_ICONTEXT_MENU_DEFAULT_ITEM_WIDTH (60)
#define CFBD_ICONTEXT_MENU_DEFAULT_ITEM_HEIGHT (80)
#define CFBD_ICONTEXT_MENU_ICON_SIZE (48)
#define CFBD_ICONTEXT_MENU_ICON_TEXT_GAP (4)
#define CFBD_ICONTEXT_MENU_TEXT_SIZE ASCII_6x8
#define CFBD_ICONTEXT_MENU_ANIMATION_DURATION_MS (300)
#define CFBD_ICONTEXT_MENU_VISIBLE_ITEMS (3)
typedef enum
{
CFBD_ICONTEXT_ITEM_NORMAL = 0,
CFBD_ICONTEXT_ITEM_FOCUSED = 1,
CFBD_ICONTEXT_ITEM_PRESSED = 2,
CFBD_ICONTEXT_ITEM_DISABLED = 3
} CFBD_IconTextMenuItemState;
typedef enum
{
CFBD_ICONTEXT_SCROLL_LEFT = -1,
CFBD_ICONTEXT_SCROLL_RIGHT = 1,
CFBD_ICONTEXT_SCROLL_NONE = 0
} CFBD_IconTextScrollDirection;
typedef struct
{
const char* label;
uint8_t* icon_bitmap;
CFBDGraphicSize icon_size;
CFBD_IconTextMenuItemState state;
CFBD_MenuItemCallbackPack callback;
CFBDGraphic_Point render_position;
CCGraphic_Image icon_widget;
CFBDGraphic_Text text_widget;
void* user_data;
} CFBD_IconTextMenuItem;
typedef struct _CFBD_IconTextMenuOps
{
CFBD_Bool (*add_item)(CFBD_IconTextMenu* pMenu,
const char* label,
uint8_t* icon_bitmap,
CFBDGraphicSize* icon_size,
CFBD_MenuItemCallbackPack* callback);
void (*scroll)(CFBD_IconTextMenu* pMenu, CFBD_IconTextScrollDirection direction);
CFBD_Bool (*select_index)(CFBD_IconTextMenu* pMenu, int index);
void (*activate_current)(CFBD_IconTextMenu* pMenu);
void (*immediate_draw)(CFBD_IconTextMenu* pMenu);
CFBD_Bool (*update)(CFBD_IconTextMenu* pMenu, uint32_t delta_ms);
void (*set_appearance)(CFBD_IconTextMenu* pMenu,
uint32_t bg_color,
uint32_t highlight_color,
uint32_t text_color);
void (*set_dimensions)(CFBD_IconTextMenu* pMenu,
SizeBaseType width,
SizeBaseType height,
uint16_t spacing);
CFBD_IconTextMenuItem* (*get_selected_item)(CFBD_IconTextMenu* pMenu);
CFBD_IconTextMenuItem* (*get_item)(CFBD_IconTextMenu* pMenu, int index);
void (*set_circular)(CFBD_IconTextMenu* pMenu, CFBD_Bool is_circular);
void (*animate_scroll)(CFBD_IconTextMenu* pMenu, CFBD_IconTextScrollDirection direction);
void (*set_selection_border)(CFBD_IconTextMenu* pMenu, uint16_t width);
} CFBD_IconTextMenuOps;
typedef struct _CFBD_IconTextMenu
{
CFBD_IconTextMenuOps* operations;
CFBD_IconTextMenuItem* items;
size_t item_count;
size_t capacity;
CFBD_GraphicDevice* device;
CFBDGraphicRect viewport;
int selected_index;
int first_visible_index;
int16_t scroll_offset;
int16_t target_scroll_offset;
CFBD_IconTextScrollDirection scroll_direction;
CFBD_BaseAnimation scroll_animation;
SizeBaseType item_width;
SizeBaseType item_height;
uint16_t item_spacing;
CFBD_Bool is_circular;
CFBD_Bool is_animating;
int16_t animation_start_offset;
uint32_t animation_elapsed_ms;
int16_t prev_scroll_offset;
uint8_t anim_current_frame;
uint16_t selection_border_width;
} CFBD_IconTextMenu;
void CFBD_InitIconTextMenu(CFBD_IconTextMenu* pMenu,
CFBD_GraphicDevice* device,
CFBDGraphicRect* viewport,
CFBD_IconTextMenuItem* items_buffer,
size_t capacity);
Updated on 2026-02-03 at 13:21:55 +0000