Опубликован: 22.12.2015 | Уровень: для всех | Доступ: платный
Лекция 13:

Перехват касаний мыши

< Лекция 12 || Лекция 13 || Лекция 14 >
Ключевые слова: файл, API, вызов функции

Запрос событий контейнера 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 >
Тимур Имашев
Тимур Имашев
Россия, Кемерово, КемГИК
Александр Бураков
Александр Бураков
Россия, г.Тюмень, Тюменская область