This is for key up/down events' info.
lib/evas/canvas/efl_canvas_surface_wayland.eo \
lib/evas/canvas/evas_filter.eo \
lib/evas/canvas/evas_smart_clipped.eo \
+ lib/evas/canvas/efl_event_input.eo \
+ lib/evas/canvas/efl_event_key.eo \
lib/evas/canvas/efl_event_pointer.eo \
$(NULL)
lib/evas/canvas/efl_canvas_surface_tbm.c \
lib/evas/canvas/efl_canvas_surface_x11.c \
lib/evas/canvas/efl_canvas_surface_wayland.c \
+lib/evas/canvas/efl_event_input.c \
+lib/evas/canvas/efl_event_key.c \
lib/evas/canvas/efl_event_pointer.c \
$(NULL)
#include <Efl.h>
typedef struct _Efl_Event_Pointer_Data Efl_Event_Pointer_Data;
+typedef struct _Efl_Event_Key_Data Efl_Event_Key_Data;
typedef struct _Efl_Input_Device_Data Efl_Input_Device_Data;
-typedef struct _Efl_Input_State_Data Efl_Input_State_Data;
#ifndef _EVAS_TYPES_EOT_H_
typedef struct _Evas_Modifier Evas_Modifier;
Eina_Bool evas_done; /* set by evas */
};
+struct _Efl_Event_Key_Data
+{
+ Eo *eo;
+ unsigned int timestamp; /* FIXME: store as double? */
+
+ Eina_Bool pressed; /* 1 = pressed/down, 0 = released/up */
+ Eina_Stringshare *keyname;
+ Eina_Stringshare *key;
+ Eina_Stringshare *string;
+ Eina_Stringshare *compose;
+ unsigned int keycode;
+
+ void *data;
+ Evas_Modifier *modifiers;
+ Evas_Lock *locks;
+ Efl_Event_Flags event_flags;
+ Efl_Input_Device *device;
+ void *legacy; /* DO NOT TOUCH (may contain the legacy event_info) */
+ Eina_Bool evas_done; /* set by evas */
+};
+
struct _Efl_Input_Device_Data
{
Eo *eo;
#include "canvas/efl_vg_gradient_linear.eo.h"
#include "canvas/efl_vg_gradient_radial.eo.h"
+#include "canvas/efl_event_input.eo.h"
#include "canvas/efl_event_pointer.eo.h"
+#include "canvas/efl_event_key.eo.h"
--- /dev/null
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Evas.h>
+
+#define EFL_INTERNAL_UNSTABLE
+#include "interfaces/efl_common_internal.h"
+
+#define MY_CLASS EFL_EVENT_INPUT_CLASS
+
+#include "efl_event_input.eo.c"
--- /dev/null
+import efl_event_types;
+
+interface Efl.Event.Input (Efl.Event)
+{
+ eo_prefix: efl_event;
+ methods {
+ @property device {
+ [[Input device that originated this event.]]
+ values {
+ dev: Efl.Input.Device;
+ }
+ }
+ @property event_flags {
+ [[Extra flags for this event, may be changed by the user.]]
+ values {
+ flags: Efl.Event.Flags;
+ }
+ }
+ @property on_hold {
+ [[$true if @.event_flags indicates the event is on hold.]]
+ values {
+ val: bool;
+ }
+ }
+ @property on_scroll {
+ [[$true if @.event_flags indicates the event happened while scrolling.]]
+ values {
+ val: bool;
+ }
+ }
+ }
+}
--- /dev/null
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Evas.h>
+
+#define EFL_INTERNAL_UNSTABLE
+#include "interfaces/efl_common_internal.h"
+
+#define MY_CLASS EFL_EVENT_KEY_CLASS
+
+EOLIAN static Eo_Base *
+_efl_event_key_eo_base_constructor(Eo *obj, Efl_Event_Key_Data *pd EINA_UNUSED)
+{
+ obj = eo_constructor(eo_super(obj, MY_CLASS));
+ efl_event_reset(obj);
+ return obj;
+}
+
+EOLIAN static void
+_efl_event_key_pressed_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, Eina_Bool val)
+{
+ pd->pressed = !!val;
+}
+
+EOLIAN static Eina_Bool
+_efl_event_key_pressed_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ return pd->pressed;
+}
+
+EOLIAN static void
+_efl_event_key_key_name_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, const char *val)
+{
+ eina_stringshare_replace(&pd->keyname, val);
+}
+
+EOLIAN static const char *
+_efl_event_key_key_name_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ return pd->keyname;
+}
+
+EOLIAN static void
+_efl_event_key_key_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, const char *val)
+{
+ eina_stringshare_replace(&pd->key, val);
+}
+
+EOLIAN static const char *
+_efl_event_key_key_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ return pd->key;
+}
+
+EOLIAN static void
+_efl_event_key_string_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, const char *val)
+{
+ eina_stringshare_replace(&pd->string, val);
+}
+
+EOLIAN static const char *
+_efl_event_key_string_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ return pd->string;
+}
+
+EOLIAN static void
+_efl_event_key_compose_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, const char *val)
+{
+ eina_stringshare_replace(&pd->compose, val);
+}
+
+EOLIAN static const char *
+_efl_event_key_compose_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ return pd->compose;
+}
+
+EOLIAN static void
+_efl_event_key_key_code_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, int val)
+{
+ pd->keycode = val;
+}
+
+EOLIAN static int
+_efl_event_key_key_code_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ return pd->keycode;
+}
+
+EOLIAN static void
+_efl_event_key_efl_event_reset(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ eina_stringshare_del(pd->key);
+ eina_stringshare_del(pd->keyname);
+ eina_stringshare_del(pd->string);
+ eina_stringshare_del(pd->compose);
+ memset(pd, 0, sizeof(*pd));
+ pd->eo = obj;
+}
+
+EOLIAN static Efl_Event *
+_efl_event_key_efl_event_dup(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ Efl_Event_Key_Data *pd2;
+ Efl_Event *ev;
+
+ ev = eo_add(MY_CLASS, NULL); // no parent
+ pd2 = eo_data_scope_get(ev, MY_CLASS);
+ if (pd2)
+ {
+ memcpy(pd2, pd, sizeof(*pd));
+ pd2->eo = ev;
+ pd2->key = eina_stringshare_add(pd->key);
+ pd2->keyname = eina_stringshare_add(pd->keyname);
+ pd2->string = eina_stringshare_add(pd->string);
+ pd2->compose = eina_stringshare_add(pd->compose);
+ pd2->legacy = NULL;
+ pd2->evas_done = 0;
+ }
+
+ return ev;
+}
+
+EOLIAN static void
+_efl_event_key_efl_event_timestamp_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, double ms)
+{
+ pd->timestamp = ms;
+}
+
+EOLIAN static double
+_efl_event_key_efl_event_timestamp_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ return pd->timestamp;
+}
+
+EOLIAN static void
+_efl_event_key_efl_event_input_event_flags_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, Efl_Event_Flags flags)
+{
+ pd->event_flags = flags;
+}
+
+EOLIAN static Efl_Event_Flags
+_efl_event_key_efl_event_input_event_flags_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ return pd->event_flags;
+}
+
+EOLIAN static void
+_efl_event_key_efl_event_input_on_hold_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, Eina_Bool val)
+{
+ if (val)
+ pd->event_flags |= EFL_EVENT_FLAGS_ON_HOLD;
+ else
+ pd->event_flags &= ~EFL_EVENT_FLAGS_ON_HOLD;
+}
+
+EOLIAN static Eina_Bool
+_efl_event_key_efl_event_input_on_hold_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ return !!(pd->event_flags & EFL_EVENT_FLAGS_ON_HOLD);
+}
+
+EOLIAN static void
+_efl_event_key_efl_event_input_on_scroll_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, Eina_Bool val)
+{
+ if (val)
+ pd->event_flags |= EFL_EVENT_FLAGS_ON_SCROLL;
+ else
+ pd->event_flags &= ~EFL_EVENT_FLAGS_ON_SCROLL;
+}
+
+EOLIAN static Eina_Bool
+_efl_event_key_efl_event_input_on_scroll_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ return !!(pd->event_flags & EFL_EVENT_FLAGS_ON_SCROLL);
+}
+
+EOLIAN static void
+_efl_event_key_efl_event_input_device_set(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, Efl_Input_Device *dev)
+{
+ pd->device = dev;
+}
+
+EOLIAN static Efl_Input_Device *
+_efl_event_key_efl_event_input_device_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd)
+{
+ return pd->device;
+}
+
+EOLIAN static Eina_Bool
+_efl_event_key_efl_input_state_modifier_enabled_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, const char * name)
+{
+ if (!pd->modifiers) return EINA_FALSE;
+ return evas_key_modifier_is_set(pd->modifiers, name);
+}
+
+EOLIAN static Eina_Bool
+_efl_event_key_efl_input_state_lock_enabled_get(Eo *obj EINA_UNUSED, Efl_Event_Key_Data *pd, const char * name)
+{
+ if (!pd->locks) return EINA_FALSE;
+ return evas_key_lock_is_set(pd->locks, name);
+}
+
+#include "efl_event_key.eo.c"
--- /dev/null
+class Efl.Event.Key (Eo.Base, Efl.Event, Efl.Input.State, Efl.Event.Input)
+{
+ [[Represents a single key event from a keyboard or similar device.
+
+ @since 1.18
+ ]]
+ methods {
+ @property pressed {
+ [[$true if the key is down, $false if it is released.]]
+ values {
+ val: bool;
+ }
+ }
+ @property key_name {
+ [[Name string of the key.]]
+ values {
+ val: string;
+ }
+ }
+ @property key {
+ [[Logical key.
+
+ Eg. Shift + 1 = exclamation
+ ]]
+ values {
+ val: string;
+ }
+ }
+ @property string {
+ [[A UTF8 string if this keystroke has produced a visible string to be
+ added.
+ ]]
+ values {
+ val: string;
+ }
+ }
+ @property compose {
+ [[A UTF8 string if this keystroke has modified a string in the middle
+ of being composed.
+
+ Note: This string replaces the previous one
+ ]]
+ values {
+ val: string;
+ }
+ }
+ @property key_code {
+ [[Key scan code numeric value.]]
+ values {
+ val: int;
+ }
+ }
+ }
+ implements {
+ Eo.Base.constructor;
+ Efl.Event.reset;
+ Efl.Event.dup;
+ Efl.Event.timestamp.set;
+ Efl.Event.timestamp.get;
+ Efl.Event.Input.event_flags.set;
+ Efl.Event.Input.event_flags.get;
+ Efl.Event.Input.on_hold.set;
+ Efl.Event.Input.on_hold.get;
+ Efl.Event.Input.on_scroll.set;
+ Efl.Event.Input.on_scroll.get;
+ Efl.Event.Input.device.set;
+ Efl.Event.Input.device.get;
+ Efl.Input.State.modifier_enabled.get;
+ Efl.Input.State.lock_enabled.get;
+ }
+}
/* Pointer Event
*
* This is a storage class only, should not require ANY knowledge about
- * Ecore, Evas or anything else.
+ * Ecore, Evas or anything else. Note: locks & modifiers require evas. :(
*
* This is intended to replace Ecore and Evas structs for mouse events.
*
}
EOLIAN static void
-_efl_event_pointer_device_set(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd, Efl_Input_Device *dev)
+_efl_event_pointer_efl_event_input_device_set(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd, Efl_Input_Device *dev)
{
/* ref? */
pd->device = dev;
}
EOLIAN static Efl_Input_Device *
-_efl_event_pointer_device_get(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd)
+_efl_event_pointer_efl_event_input_device_get(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd)
{
return pd->device;
}
}
EOLIAN static void
-_efl_event_pointer_event_flags_set(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd, Efl_Event_Flags flags)
+_efl_event_pointer_efl_event_input_event_flags_set(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd, Efl_Event_Flags flags)
{
pd->event_flags = flags;
}
EOLIAN static Efl_Event_Flags
-_efl_event_pointer_event_flags_get(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd)
+_efl_event_pointer_efl_event_input_event_flags_get(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd)
{
return pd->event_flags;
}
}
EOLIAN static void
-_efl_event_pointer_on_hold_set(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd, Eina_Bool val)
+_efl_event_pointer_efl_event_input_on_hold_set(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd, Eina_Bool val)
{
if (val)
pd->event_flags |= EFL_EVENT_FLAGS_ON_HOLD;
}
EOLIAN static Eina_Bool
-_efl_event_pointer_on_hold_get(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd)
+_efl_event_pointer_efl_event_input_on_hold_get(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd)
{
return !!(pd->event_flags & EFL_EVENT_FLAGS_ON_HOLD);
}
EOLIAN static void
-_efl_event_pointer_on_scroll_set(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd, Eina_Bool val)
+_efl_event_pointer_efl_event_input_on_scroll_set(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd, Eina_Bool val)
{
if (val)
pd->event_flags |= EFL_EVENT_FLAGS_ON_SCROLL;
}
EOLIAN static Eina_Bool
-_efl_event_pointer_on_scroll_get(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd)
+_efl_event_pointer_efl_event_input_on_scroll_get(Eo *obj EINA_UNUSED, Efl_Event_Pointer_Data *pd)
{
return !!(pd->event_flags & EFL_EVENT_FLAGS_ON_SCROLL);
}
import efl_orientation;
import efl_event_types;
-class Efl.Event.Pointer (Eo.Base, Efl.Event, Efl.Input.State)
+class Efl.Event.Pointer (Eo.Base, Efl.Event, Efl.Input.State, Efl.Event.Input)
{
[[Event data carried over with any pointer event (mouse, touch, ...)
y: double;
}
}
- @property device {
- [[Pointing device that originated this event.]]
- values {
- dev: Efl.Input.Device;
- }
- }
@property finger {
[[Finger ID in case of a multi touch event.]]
values {
val: bool;
}
}
- @property event_flags {
- [[Extra flags for this event, may be changed by the user.]]
- values {
- flags: Efl.Event.Flags;
- }
- }
- @property on_hold {
- [[$true if @.event_flags indicates the event is on hold.]]
- values {
- val: bool;
- }
- }
- @property on_scroll {
- [[$true if @.event_flags indicates the event happened while scrolling.]]
- values {
- val: bool;
- }
- }
@property wheel_direction {
values {
dir: Efl.Orient; [[Horizontal or Vertical only.]]
Efl.Event.dup;
Efl.Event.timestamp.set;
Efl.Event.timestamp.get;
+ Efl.Event.Input.event_flags.set;
+ Efl.Event.Input.event_flags.get;
+ Efl.Event.Input.on_hold.set;
+ Efl.Event.Input.on_hold.get;
+ Efl.Event.Input.on_scroll.set;
+ Efl.Event.Input.on_scroll.get;
+ Efl.Event.Input.device.set;
+ Efl.Event.Input.device.get;
Efl.Input.State.modifier_enabled.get;
Efl.Input.State.lock_enabled.get;
}