Опубликован: 22.12.2015 | Доступ: свободный | Студентов: 312 / 99 | Длительность: 14:40:00
Лекция 13:
Перехват касаний мыши
< Лекция 12 || Лекция 13 || Лекция 14 >
Запрос событий контейнера Touch
При разработки таких приложений, как например, просмотрщик изображений, нужно дать возможность пользователю перетаскивать изображения. При создании виртуальных музыкальных инструментов нужно дать возможность пользователю нажимать на клавиши и так далее. В данном примере мы поговорим о перехвате сенсорных событий.
Создайте новый проект ‘MouseTouchEventSample’. Откройте файл исходного кода и внесите следующие изменения в функцию create_base_gui().
/* Label*/ ad->label = elm_label_add(ad->conform); elm_object_text_set(ad->label, "Using of Mouse Touch Events"); evas_object_size_hint_weight_set(ad->label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_object_content_set(ad->conform, ad->label); evas_object_show(ad>label); /* Mouse Touch event callback */ evas_object_event_callback_add( ad->conform, EVAS_CALLBACK_MOUSE_DOWN, on_mouse_down , ad); evas_object_event_callback_add( ad->conform, EVAS_CALLBACK_MOUSE_MOVE, on_mouse_move , ad); evas_object_event_callback_add( ad->conform, EVAS_CALLBACK_MOUSE_UP, on_mouse_up , ad); /* Show window after base gui is set up */ evas_object_show(ad->win);
evas_object_event_callback_add() - это API, который задает вызов функции для события объекта evas. Добавьте три функции выше функции create_base_gui().
static void on_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) { appdata_s *ad = data; Evas_Event_Mouse_Down *ev = event_info; char buf[100]; sprintf(buf, "Win Mouse down:%d,%d", ev->canvas.x, ev->canvas.y); elm_object_text_set(ad->label, buf); } static void on_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info) { appdata_s *ad = data; Evas_Event_Mouse_Move *ev = event_info; char buf[100]; sprintf(buf, "Win Mouse move:%d,%d/%d,%d", ev->prev.canvas.x, ev->prev.canvas.y, ev->cur.canvas.x, ev->cur.canvas.y); elm_object_text_set(ad->label, buf); } static void on_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info) { appdata_s *ad = data; Evas_Event_Mouse_Up *ev = event_info; char buf[100]; sprintf(buf, "Win Mouse up:%d,%d", ev->canvas.x, ev->canvas.y); elm_object_text_set(ad->label, buf); }
Запустите проект
Запрос нескольких сенсорных событий
Добавьте код в функцию create_base_gui().
/* Mouse Touch event callback */ evas_object_event_callback_add( ad->conform, EVAS_CALLBACK_MOUSE_DOWN, on_mouse_down , ad); evas_object_event_callback_add( ad->conform, EVAS_CALLBACK_MOUSE_MOVE, on_mouse_move , ad); evas_object_event_callback_add( ad->conform, EVAS_CALLBACK_MOUSE_UP, on_mouse_up , ad); /* Multi Touch event callback */ evas_object_event_callback_add(ad->conform, EVAS_CALLBACK_MULTI_DOWN, multi_down_cb, ad); evas_object_event_callback_add(ad->conform, EVAS_CALLBACK_MULTI_MOVE, multi_move_cb, ad); /* Show window after base gui is set up */ evas_object_show(ad->win);
Добавьте две функции к функции create_base_gui().
static void multi_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { appdata_s *ad = data; Evas_Event_Multi_Down *ev = (Evas_Event_Multi_Down*)event_info; char buf[100]; sprintf(buf, "Multi down : %d - %d,%d", ev->device, ev->canvas.x, ev->canvas.y); elm_object_text_set(ad->label, buf); } static void multi_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { appdata_s *ad = data; Evas_Event_Multi_Move *ev = (Evas_Event_Multi_Move*)event_info; char buf[100]; sprintf(buf, "Multi move : %d - %d,%d", ev->device, ev->cur.canvas.x, ev->cur.canvas.y); elm_object_text_set(ad->label, buf); }
Запустите пример.
< Лекция 12 || Лекция 13 || Лекция 14 >