lite的代码写的很清晰,当然具体的实现我并没有一行行的代码看。
最重要的就是下面的结构体了,在每个控件的类型定义第一个总是它,当然第一也是有原因的。
/* @brief LiteBox structure
* The LiteBox is the most common data structure in the LiTE framework.
* It is used to build more complex widgets and compound structures.
* Important event handling such as mouse and keyboard event handling
* is handled in the various callbacks belonging to LiteBox.
*/
typedef struct _LiteBox {
struct _LiteBox *parent; /**< Parent of the LiteBox */
int n_children; /**< Num children in the child array */
struct _LiteBox **children; /**< Child array */
LiteBoxType type; /**< Type of LiteBox */
DFBRectangle rect; /**< Rectangle of the LiteBox */
IDirectFBSurface *surface; /**< LiteBox surface */
DFBColor *background;
void *user_data; /**< User-provided data */
int is_focused; /**< Indicates if the LiteBox is focused or not */
int is_visible; /**< Indicates if the LiteBox is visible or not */
int is_active; /**< Indicates if the LiteBox receives input or not */
int catches_all_events;/**< Indicates if the LiteBox prevents events from being handled by its children */
int handle_keys; /**< Indicate if the LiteBox handles keyboard events */
int (*OnFocusIn) (struct _LiteBox *self); /**< Focus-in callback */
int (*OnFocusOut) (struct _LiteBox *self); /**< Focus-out callback */
int (*OnEnter) (struct _LiteBox *self, int x, int y); /**< Enter callback */
int (*OnLeave) (struct _LiteBox *self, int x, int y); /**< Leave callback */
int (*OnMotion) (struct _LiteBox *self, int x, int y, /**< Motion callback */
DFBInputDeviceButtonMask buttons);
int (*OnButtonDown)(struct _LiteBox *self, int x, int y,
DFBInputDeviceButtonIdentifier button); /**< Button down callback */
int (*OnButtonUp) (struct _LiteBox *self, int x, int y, /**< Button up callback */
DFBInputDeviceButtonIdentifier button);
int (*OnKeyDown) (struct _LiteBox *self, DFBWindowEvent *evt); /**< Key down callback */
int (*OnKeyUp) (struct _LiteBox *self, DFBWindowEvent *evt); /**< Key up callback */
int (*OnWheel) (struct _LiteBox *self, DFBWindowEvent *evt); /**< Scroll wheel callback*/
DFBResult (*Draw) (struct _LiteBox *self, const DFBRegion *region, DFBBoolean clear); /**< Draw callback */
DFBResult (*DrawAfter) (struct _LiteBox *self, const DFBRegion *region); /**< DrawAfter callback */
DFBResult (*Destroy) (struct _LiteBox *self); /**< Destroy callback */
} LiteBox;
也就是我们可以把任何一种控件的数据类型强制转换为LiteBox.
好了,最后就写到这里吧。说明比较少写,我想应该能看懂的。