46 #ifndef LEGATO_RADIALMENU_H 47 #define LEGATO_RADIALMENU_H 51 #if LE_RADIALMENU_WIDGET_ENABLED == 1 62 typedef struct leRadialMenuWidget leRadialMenuWidget;
64 typedef void (* leRadialMenuWidget_ItemProminenceChangedEvent)(leRadialMenuWidget*,
leWidget*, int32_t);
75 typedef enum leRadialMenuWidgetState
78 LE_RADIAL_MENU_INPUT_READY,
79 LE_RADIAL_MENU_HANDLE_USER_MOVE_REQUEST,
80 LE_RADIAL_MENU_RESET_TO_INPUT_POS
81 } leRadialMenuWidgetState;
87 typedef enum leRadialMenuWidgetInterpolationMode
89 LE_RADIAL_MENU_INTERPOLATE_OFF,
90 LE_RADIAL_MENU_INTERPOLATE_GRADUAL,
91 LE_RADIAL_MENU_INTERPOLATE_PROMINENT
92 } leRadialMenuWidgetInterpolationMode;
94 typedef struct leRadialMenuWidget leRadialMenuWidget;
100 #define LE_RADIALMENUWIDGET_VTABLE(THIS_TYPE) \ 101 LE_WIDGET_VTABLE(THIS_TYPE) \ 103 leBool (*isProminent)(const THIS_TYPE* _this, const leWidget* widget); \ 104 leWidget* (*getProminent)(const THIS_TYPE* _this); \ 105 leResult (*setProminent)(THIS_TYPE* _this, const leWidget* widget); \ 106 int32_t (*getProminentIndex)(const THIS_TYPE* _this); \ 107 leResult (*setProminentIndex)(THIS_TYPE* _this, int32_t index); \ 108 leResult (*setNumberOfItemsShown)(THIS_TYPE* _this, uint32_t cnt); \ 109 leResult (*setHighlightProminent)(THIS_TYPE* _this, leBool hl); \ 110 int32_t (*getMajorAxis)(const THIS_TYPE* _this); \ 111 leResult (*setMajorAxis)(THIS_TYPE* _this, int32_t a); \ 112 int32_t (*getMinorAxis)(const THIS_TYPE* _this); \ 113 leResult (*setMinorAxis)(THIS_TYPE* _this, int32_t b); \ 114 int32_t (*getTheta)(const THIS_TYPE* _this); \ 115 leResult (*setTheta)(THIS_TYPE* _this, int32_t tht); \ 116 leResult (*setScaleMode)(THIS_TYPE* _this, leRadialMenuWidgetInterpolationMode mode); \ 117 leResult (*setScaleRange)(THIS_TYPE* _this, int32_t min, int32_t max); \ 118 leResult (*setBlendMode)(THIS_TYPE* _this, leRadialMenuWidgetInterpolationMode mode); \ 119 leResult (*setBlendRange)(THIS_TYPE* _this, int32_t min, int32_t max); \ 120 leResult (*setTouchArea)(THIS_TYPE* _this, int32_t x, int32_t y, int32_t width, int32_t height); \ 121 leResult (*setDrawEllipse)(THIS_TYPE* _this, leBool b); \ 122 leRadialMenuWidget_ItemProminenceChangedEvent (*getItemProminenceChangedEventCallback)(const THIS_TYPE* _this); \ 123 leResult (*setItemProminenceChangedEventCallback)(THIS_TYPE* _this, leRadialMenuWidget_ItemProminenceChangedEvent cb); 125 typedef struct leRadialMenuWidgetVTable
127 LE_RADIALMENUWIDGET_VTABLE(leRadialMenuWidget)
128 } leRadialMenuWidgetVTable;
135 enum leRadialMenuItemState
138 LE_RMI_WAITING_FOR_SORT,
147 typedef struct leRadialMenuItemNode
153 int32_t adjustedAngle;
158 uint32_t origAlphaAmount;
160 enum leRadialMenuItemState state;
162 } leRadialMenuItemNode;
173 typedef struct leRadialMenuWidget
177 const leRadialMenuWidgetVTable* fn;
179 leRadialMenuWidgetState state;
181 int32_t prominentIndex;
184 leBool highlightProminent;
199 int32_t firstVisibleItem;
204 int32_t rotationDegrees;
207 leRadialMenuWidgetInterpolationMode scaleMode;
209 int32_t maxSizePercent;
210 int32_t minSizePercent;
215 uint32_t touchHeight;
219 int32_t minFlickDelta;
224 int32_t momentumFalloff;
226 int32_t rotationCounter;
227 int32_t rotationTick;
231 int32_t snapMagnitude;
233 leRadialMenuWidgetInterpolationMode blendMode;
235 int32_t maxAlphaAmount;
236 int32_t minAlphaAmount;
242 leRadialMenuWidget_ItemProminenceChangedEvent itemProminenceChangedEvent;
243 } leRadialMenuWidget;
263 leRadialMenuWidget* leRadialMenuWidget_New(
void);
275 void leRadialMenuWidget_Constructor(leRadialMenuWidget* wgt);
278 #define THIS_TYPE struct leWidget 355 virtual leResult setProminent(leRadialMenuWidget* _this,
388 virtual int32_t getProminentIndex(
const leRadialMenuWidget* _this);
423 virtual leResult setProminentIndex(leRadialMenuWidget* _this,
481 virtual leResult setHighlightProminent(leRadialMenuWidget* _this,
513 virtual int32_t getTheta(
const leRadialMenuWidget* _this);
548 virtual leResult setTheta(leRadialMenuWidget* _this,
584 virtual leResult setEllipseType(leRadialMenuWidget* _this,
585 leRadialMenuEllipseType type);
620 virtual leResult addWidget(leRadialMenuWidget* _this,
656 virtual leResult removeWidget(leRadialMenuWidget* _this,
691 virtual leWidget* getWidgetAtIndex(
const leRadialMenuWidget* _this,
730 virtual leResult setWidgetAtIndex(leRadialMenuWidget* _this,
764 virtual leResult removeAllWidgets(leRadialMenuWidget* _this);
799 virtual leResult setScaleMode(leRadialMenuWidget* _this,
800 leRadialMenuWidgetInterpolationMode mode);
838 virtual leResult setScaleRange(leRadialMenuWidget* _this,
876 virtual leResult setBlendMode(leRadialMenuWidget* _this,
877 leRadialMenuWidgetInterpolationMode mode);
916 virtual leResult setBlendRange(leRadialMenuWidget* _this,
961 virtual leResult setTouchArea(leRadialMenuWidget* _this,
1000 virtual leResult setDrawEllipse(leRadialMenuWidget* _this,
1013 virtual leRadialMenuWidget_ItemSelectedEvent getItemSelectedEventCallback(
const leRadialMenuWidget* _this)
1028 virtual leResult setItemSelectedEventCallback(leRadialMenuWidget* _this,
1029 leRadialMenuWidget_ItemSelectedEvent cb);
1041 virtual leRadialMenuWidget_ItemProminenceChangedEvent getItemProminenceChangedEventCallback
1042 (
const leRadialMenuWidget* _this)
1057 virtual leResult setItemProminenceChangedEventCallback(leRadialMenuWidget* _this,
1058 leRadialMenuWidget_ItemProminenceChangedEvent cb)
1067 #endif // LE_RADIALMENU_WIDGET_ENABLED Common macros and definitions used by Legato.
leResult
This enum represents function call results.
Definition: legato_common.h:123
This struct represents a rectangle.
Definition: legato_common.h:394
This struct represents a list.
Definition: legato_list.h:94
A linked list implementation.
This structure represents a integer Cartesian point.
Definition: legato_common.h:346
leBool
This enum represents booleans.
Definition: legato_common.h:146
Fixed string functions and definitions.