良思俊旭 发表于 2015-8-8 21:42:02

grep长点击实现事件的方法

grep长点击实现事件的方法
// ---- long click implementation
static const char* _klongtimer = "_long_timer";
static long _long_click_time = 1; // 1 sec default
static Eina_Bool _long_press_cb(void *data)
{
    Evas_Object *obj = data;
        if (data == NULL) return ECORE_CALLBACK_CANCEL;
        evas_object_smart_callback_call(obj, "longclick", NULL);

        return ECORE_CALLBACK_CANCEL;
}
static void _mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
        Ecore_Timer *timer = evas_object_data_get(obj, _klongtimer);
        if (timer != NULL) {
                ecore_timer_del(timer);
                evas_object_data_del(obj, _klongtimer);
        }
        if (timer == NULL) {
                timer = ecore_timer_add(_long_click_time, _long_press_cb, obj);
                evas_object_data_set(obj, _klongtimer, timer);
        }
}
static void _mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
        Ecore_Timer *timer = evas_object_data_get(obj, _klongtimer);
        if (timer != NULL) {
                ecore_timer_del(timer);
                evas_object_data_del(obj, _klongtimer);
        }
}
static void _mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
        Ecore_Timer *timer = evas_object_data_get(obj, _klongtimer);
        Evas_Event_Mouse_Move *ev = event_info;
        if ((ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) && timer) {
                ecore_timer_del(timer);
                evas_object_data_del(obj, _klongtimer);
        }
}
void pius_object_longclick_time_set(double time)
{
        _long_click_time = time;
}
double pius_object_longclick_time_get()
{
        return _long_click_time;
}
void pius_object_longclick_add(Evas_Object *obj, Evas_Smart_Cb func, const void *data)
{
        evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, NULL);
        evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP, _mouse_up, NULL);
        evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move, NULL);
        evas_object_smart_callback_add(obj, "longclick", func, data);
}
// ----





// Usage
static void longclick(void *data, Evas_Object *obj, void *event_info)
{
    LOGI("long click!!");
}

Evas_Object *img = elm_image_add(ad->conform);
elm_image_file_set(img, path, NULL);
evas_object_size_hint_weight_set(img, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_content_set(ad->conform, img);
evas_object_show(img);

pius_object_longclick_add(img, longclick, NULL);
页: [1]
查看完整版本: grep长点击实现事件的方法