static int on_event(struct rtb_element *elem, const struct rtb_event *e) { SELF_FROM(elem); switch (e->type) { case RTB_MOUSE_DOWN: case RTB_DRAG_START: return 1; case RTB_KEY_PRESS: if (handle_key_press(self, RTB_EVENT_AS(e, rtb_key_event))) return 1; break; case RTB_MOUSE_CLICK: if (RTB_EVENT_AS(e, rtb_mouse_event)->button != RTB_MOUSE_BUTTON1) return 0; return dispatch_click_event(self, RTB_EVENT_AS(e, rtb_mouse_event)); default: return super.on_event(elem, e); } return 0; }
static void attached(struct rtb_element *elem, struct rtb_element *parent, struct rtb_window *window) { SELF_FROM(elem); super.attached(elem, parent, window); self->type = rtb_type_ref(window, self->type, "net.illest.rutabaga.window"); rtb_style_resolve_list(self, self->style_list); self->restyle(RTB_ELEMENT(self)); }
static void attached(struct rtb_element *elem, struct rtb_element *parent, struct rtb_window *window) { SELF_FROM(elem); super.attached(elem, parent, window); self->type = rtb_type_ref(window, self->type, "net.illest.rutabaga.widgets.button"); self->outer_pad.x = self->label.outer_pad.x; self->outer_pad.y = self->label.outer_pad.y; }
static int reflow(struct rtb_element *elem, struct rtb_element *instigator, rtb_ev_direction_t direction) { SELF_FROM(elem); super.reflow(elem, instigator, direction); self->outer_pad.x = self->label.outer_pad.x; self->outer_pad.y = self->label.outer_pad.y; return 1; }
static int win_event(struct rtb_element *elem, const struct rtb_event *e) { SELF_FROM(elem); switch (e->type) { case RTB_WINDOW_CLOSE: if (!rtb_handle(elem, e)) rtb_event_loop_stop(self->rtb); return 1; case RTB_KEY_PRESS: case RTB_KEY_RELEASE: if (self->focus && self->focus != RTB_ELEMENT(self)) if (rtb_elem_deliver_event(self->focus, e)) return 1; if (rtb_handle(elem, e)) return 1; } return super.on_event(elem, e); }
static void mark_dirty(struct rtb_element *elem) { SELF_FROM(elem); self->dirty = 1; }