示例#1
0
文件: button.c 项目: artfwo/rutabaga
static int
dispatch_click_event(struct rtb_button *self, const struct rtb_mouse_event *e)
{
	struct rtb_button_event event = *((struct rtb_button_event *) e);

	event.type = RTB_BUTTON_CLICK;
	event.cursor.x -= self->x;
	event.cursor.y -= self->y;

	return rtb_handle(RTB_ELEMENT(self), RTB_EVENT(&event));
}
示例#2
0
文件: window.c 项目: wrl/rutabaga
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);
}
示例#3
0
文件: button.c 项目: artfwo/rutabaga
static int
handle_key_press(struct rtb_button *self, const struct rtb_key_event *e)
{
	struct rtb_button_event event = {
		.type   = RTB_BUTTON_CLICK,
		.source = RTB_EVENT_SYNTHETIC
	};

	if ((e->keysym == RTB_KEY_NORMAL && e->character == ' ')
			|| (e->keysym == RTB_KEY_ENTER)) {
		rtb_handle(RTB_ELEMENT(self), RTB_EVENT(&event));
		return 1;
	}

	return 0;
}
示例#4
0
文件: element.c 项目: artfwo/rutabaga
int
rtb_elem_deliver_event(struct rtb_element *self, const struct rtb_event *e)
{
	int ret;

	/* elements should not receive events if they've not been attached
	 * into the tree yet. */
	if (self->state == RTB_STATE_UNATTACHED)
		return 0;

	ret = self->on_event(self, e);
	ret = rtb_handle(self, e) || ret;

	switch (e->type) {
	case RTB_MOUSE_ENTER:
		transition_mouse_enter(self, RTB_EVENT_AS(e, rtb_mouse_event));
		break;

	case RTB_MOUSE_LEAVE:
		transition_mouse_leave(self, RTB_EVENT_AS(e, rtb_mouse_event));
		break;

	case RTB_FOCUS:
		transition_focus(self);
		break;

	case RTB_UNFOCUS:
		transition_unfocus(self);
		break;

	case RTB_MOUSE_DOWN:
		transition_mouse_down(self, RTB_EVENT_AS(e, rtb_mouse_event));
		break;

	case RTB_MOUSE_UP:
	case RTB_DRAG_DROP:
		transition_mouse_up(self, RTB_EVENT_AS(e, rtb_mouse_event));
		break;
	}

	return ret;
}