lite源码阅读(五)最终的核心

来源:互联网 发布:手机淘宝店铺收藏地址 编辑:程序博客网 时间:2024/05/22 10:40

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.

好了,最后就写到这里吧。说明比较少写,我想应该能看懂的。

原创粉丝点击