From 8557fe818f6ac033f582dc4865235aa3176d7447 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Mon, 25 Sep 2017 18:47:49 +0900 Subject: [PATCH] input: Move pointer props to Canvas efl_input_pointer_position is defined by two classes... bad! Fixes T6066 --- src/lib/efl/interfaces/efl_canvas.eo | 59 ++++++++++++++++++++++ src/lib/elementary/efl_ui_win.c | 8 +-- src/lib/elementary/efl_ui_win.eo | 6 +-- src/lib/evas/canvas/efl_input_interface.eo | 52 ------------------- src/tests/elementary/elm_test_win.c | 10 +++- 5 files changed, 74 insertions(+), 61 deletions(-) diff --git a/src/lib/efl/interfaces/efl_canvas.eo b/src/lib/efl/interfaces/efl_canvas.eo index 10776b7bd6..6655dabd4a 100644 --- a/src/lib/efl/interfaces/efl_canvas.eo +++ b/src/lib/efl/interfaces/efl_canvas.eo @@ -180,6 +180,65 @@ interface Efl.Canvas () seat: Efl.Input.Device; [[The seat or $null if not found.]] } } + @property pointer_position { + get { + [[This function returns the current known pointer coordinates + + This function returns the current position of the main input + pointer (mouse, pen, etc...). + ]] + } + /* FIXME: missing keys { seat } */ + values { + pos: Eina.Position2D; [[The pointer position in pixels.]] + } + } + @property pointer_inside { + get { + [[Returns whether the mouse pointer is logically inside the + canvas. + + When this function is called it will return a value of either + $false or $true, depending on whether a pointer,in or pointer,out + event has been called previously. + + A return value of $true indicates the mouse is logically + inside the canvas, and $false implies it is logically + outside the canvas. + + A canvas begins with the mouse being assumed outside ($false). + ]] + } + /* FIXME: missing keys { seat } */ + values { + inside: bool; [[$true if the mouse pointer is inside the canvas, + $false otherwise]] + } + } + /* FIXME: maybe not necessary if gesture supports this */ + pointer_iterate @const { + [[Returns an iterator over the current known pointer positions. + + This is used to iterate over the current known multi-touch positions, + including the first finger. Each pointer position is represented by + an object of type @Efl.Input.Pointer. + + Each finger in a multi touch environment can then be identified + by the @Efl.Input.Pointer.tool property. The order of the pointers + in this iterator is not defined. + + Note: If the input surface supports hovering input, some pointers + may not be in a "down" state. To retrieve the list of such pointers, + set the $hover value to $true. Remember though that most devices + currently don't support this. + ]] + params { + /* FIXME: missing seat. hover is not useful */ + hover: bool @optional; [[$false by default, $true means to include + fingers that are currently hovering.]] + } + return: iterator; [[Iterator to pointer positions]] + } } events { focus,in: Efl.Input.Focus; [[Called when canvas got focus]] diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 06607a6ed6..bdf94c1e36 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -2423,7 +2423,7 @@ _efl_ui_win_efl_gfx_visible_set(Eo *obj, Efl_Ui_Win_Data *sd, Eina_Bool vis) } EOLIAN static Eina_Position2D -_efl_ui_win_efl_input_interface_pointer_position_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd) +_efl_ui_win_efl_canvas_pointer_position_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd) { Eina_Position2D pos; evas_pointer_canvas_xy_get(sd->evas, &pos.x, &pos.y); @@ -2431,7 +2431,7 @@ _efl_ui_win_efl_input_interface_pointer_position_get(Eo *obj EINA_UNUSED, Efl_Ui } EOLIAN static Eina_Bool -_efl_ui_win_efl_input_interface_pointer_inside_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd) +_efl_ui_win_efl_canvas_pointer_inside_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd) { return evas_pointer_inside_get(sd->evas); } @@ -2467,8 +2467,8 @@ _input_pointer_iterator_free(Input_Pointer_Iterator *it) } EOLIAN static Eina_Iterator * -_efl_ui_win_efl_input_interface_pointer_iterate(const Eo *obj, Efl_Ui_Win_Data *sd, - Eina_Bool hover EINA_UNUSED) +_efl_ui_win_efl_canvas_pointer_iterate(const Eo *obj, Efl_Ui_Win_Data *sd, + Eina_Bool hover EINA_UNUSED) { Input_Pointer_Iterator *it; Eina_List *list = NULL; diff --git a/src/lib/elementary/efl_ui_win.eo b/src/lib/elementary/efl_ui_win.eo index 9a640f088e..f65f549932 100644 --- a/src/lib/elementary/efl_ui_win.eo +++ b/src/lib/elementary/efl_ui_win.eo @@ -849,9 +849,9 @@ class Efl.Ui.Win (Elm.Widget, Efl.Canvas, Efl.Access.Window, Efl.Gfx.Size.Hint.hint_aspect { set; } Efl.Gfx.Size.Hint.hint_max { set; } Efl.Text.text { get; set; } - Efl.Input.Interface.pointer_position { get; } - Efl.Input.Interface.pointer_inside { get; } - Efl.Input.Interface.pointer_iterate; + Efl.Canvas.pointer_position { get; } + Efl.Canvas.pointer_inside { get; } + Efl.Canvas.pointer_iterate; Efl.Canvas.image_max_size { get; } Efl.Canvas.smart_objects_calculate; Efl.Canvas.objects_at_xy_get; diff --git a/src/lib/evas/canvas/efl_input_interface.eo b/src/lib/evas/canvas/efl_input_interface.eo index 2db729c84b..68408a3281 100644 --- a/src/lib/evas/canvas/efl_input_interface.eo +++ b/src/lib/evas/canvas/efl_input_interface.eo @@ -26,58 +26,6 @@ interface Efl.Input.Interface () eo_prefix: efl_input; event_prefix: efl; methods { - @property pointer_position { - get { - [[This function returns the current known pointer coordinates - - This function returns the current position of the main input - pointer (mouse, pen, etc...). - ]] - } - values { - pos: Eina.Position2D; [[The pointer position in pixels.]] - } - } - @property pointer_inside { - get { - [[Returns whether the mouse pointer is logically inside the - canvas. - - When this function is called it will return a value of either - $false or $true, depending on whether a pointer,in or pointer,out - event has been called previously. - - A return value of $true indicates the mouse is logically - inside the canvas, and $false implies it is logically - outside the canvas. - - A canvas begins with the mouse being assumed outside ($false). - ]] - return: bool; [[$true if the mouse pointer is inside the canvas, $false otherwise]] - } - } - pointer_iterate @const { - [[Returns an iterator over the current known pointer positions. - - This is used to iterate over the current known multi-touch positions, - including the first finger. Each pointer position is represented by - an object of type @Efl.Input.Pointer. - - Each finger in a multi touch environment can then be identified - by the @Efl.Input.Pointer.tool property. The order of the pointers - in this iterator is not defined. - - Note: If the input surface supports hovering input, some pointers - may not be in a "down" state. To retrieve the list of such pointers, - set the $hover value to $true. Remember though that most devices - currently don't support this. - ]] - params { - hover: bool @optional; [[$false by default, $true means to include - fingers that are currently hovering.]] - } - return: iterator; [[Iterator to pointer positions]] - } @property seat_event_filter { set { [[Add or remove a given seat to the filter list. If the filter list is empty this object diff --git a/src/tests/elementary/elm_test_win.c b/src/tests/elementary/elm_test_win.c index ea469e1107..b8524b323f 100644 --- a/src/tests/elementary/elm_test_win.c +++ b/src/tests/elementary/elm_test_win.c @@ -256,7 +256,7 @@ _inputs_timer2_cb(void *data) size_t cnt = 0; int i = 0; - it = efl_input_pointer_iterate(win, 0); + it = efl_canvas_pointer_iterate(win, 0); EINA_ITERATOR_FOREACH(it, ptr) { double x, y; @@ -313,12 +313,13 @@ static Eina_Bool _inputs_timer3_cb(void *data) { Efl_Input_Pointer *ptr; + Eina_Position2D pos; Eina_Iterator *it; Eo *win = data; size_t cnt = 0; int i = 0; - it = efl_input_pointer_iterate(win, 0); + it = efl_canvas_pointer_iterate(win, 0); EINA_ITERATOR_FOREACH(it, ptr) { int tool, ok = 0; @@ -348,6 +349,11 @@ _inputs_timer3_cb(void *data) eina_iterator_free(it); fail_if(cnt != 2); // 2 moves (in the list), 2 ups (gone) + fail_if(!efl_canvas_pointer_inside_get(win)); + pos = efl_canvas_pointer_position_get(win); + ck_assert_int_eq(pos.x, points[1][0].x); + ck_assert_int_eq(pos.y, points[1][0].y); + elm_exit(); return ECORE_CALLBACK_DONE;