Border module
authorZbigniew Kosinski <z.kosinski@samsung.com>
Thu, 11 Sep 2014 14:57:48 +0000 (16:57 +0200)
committerZbigniew Kosinski <z.kosinski@samsung.com>
Thu, 11 Sep 2014 14:57:48 +0000 (16:57 +0200)
include/border.h [new file with mode: 0644]
src/border.c [new file with mode: 0644]
src/etest.c

diff --git a/include/border.h b/include/border.h
new file mode 100644 (file)
index 0000000..321f443
--- /dev/null
@@ -0,0 +1,7 @@
+#include <Elementary.h>
+#include <atspi/atspi.h>
+
+Eina_Bool border_init(void);
+void border_shutdown(void);
+Eina_Bool border_set(AtspiAccessible  *widget);
+void border_set_on_event(const char *event);
diff --git a/src/border.c b/src/border.c
new file mode 100644 (file)
index 0000000..7f73d56
--- /dev/null
@@ -0,0 +1,149 @@
+#include <string.h>
+#include "border.h"
+
+#define BOUNDS_CHANGED "object:bounds-changed"
+#define WIDTH 720
+#define HEIGHT 1280
+
+static Evas* evas = NULL;
+static Evas_Object *r1 = NULL;
+static Evas_Object *r2 = NULL;
+static Evas_Object *r3 = NULL;
+static Evas_Object *r4 = NULL;
+static Evas_Object *win = NULL;
+static AtspiAccessible *source = NULL;
+static AtspiEventListener *listener = NULL;
+static AtspiEventListener *listener2 = NULL;
+static const char *registered_event = NULL;
+static Eina_Bool initialized = EINA_FALSE;
+
+static Eina_Bool draw_border(AtspiAccessible *w)
+{
+   if(!w)
+      return EINA_FALSE;
+
+   GError *error = NULL;
+   AtspiComponent *comp = atspi_accessible_get_component(w);
+   AtspiRect *r = atspi_component_get_extents(comp, ATSPI_COORD_TYPE_SCREEN, &error);
+
+   if(error)
+      return EINA_FALSE;
+
+   evas_object_line_xy_set(r1, r->x, r->y, r->x+r->width, r->y);
+   evas_object_line_xy_set(r2, r->x + r->width, r->y, r->x + r->width, r->y + r->height);
+   evas_object_line_xy_set(r3, r->x + r->width, r->y + r->height, r->x, r->y + r->height);
+   evas_object_line_xy_set(r4, r->x, r->y + r->height, r->x, r->y);
+
+   return EINA_TRUE;
+}
+
+static void _bounds_changed(const AtspiEvent *event, void *user_data)
+{
+   if(source == event->source)
+      draw_border(event->source);
+}
+
+Eina_Bool border_init(void)
+{
+   GError *error = NULL;
+   if(initialized)
+      return EINA_TRUE;
+
+   win = elm_win_add(NULL, "highlight", ELM_WIN_BASIC);
+   elm_win_alpha_set(win, EINA_TRUE);
+   evas_object_resize(win, WIDTH, HEIGHT);
+   evas_object_move(win, 0, 0);
+   evas_object_layer_set(win, 6);
+   Evas *evas = evas_object_evas_get(win);
+   r1 = evas_object_line_add(evas);
+   r2 = evas_object_line_add(evas);
+   r3 = evas_object_line_add(evas);
+   r4 = evas_object_line_add(evas);
+   evas_object_color_set(r1, 255, 255, 0, 255);
+   evas_object_color_set(r2, 255, 255, 0, 255);
+   evas_object_color_set(r3, 255, 255, 0, 255);
+   evas_object_color_set(r4, 255, 255, 0, 255);
+   evas_object_show(r1);
+   evas_object_show(r2);
+   evas_object_show(r3);
+   evas_object_show(r4);
+   evas_object_show(win);
+
+   listener = atspi_event_listener_new (_bounds_changed, NULL, NULL);
+   atspi_event_listener_register (listener, BOUNDS_CHANGED, &error);
+
+   if(error)
+      return EINA_FALSE;
+
+   initialized = EINA_TRUE;
+   return EINA_TRUE;
+}
+
+void border_shutdown(void)
+{
+   if(!initialized)
+      return;
+
+   if(listener)
+      atspi_event_listener_deregister (listener, BOUNDS_CHANGED, NULL);
+
+   if(r1) {
+      evas_object_del(r1);
+      r1 = NULL;
+   }
+   if(r2) {
+      evas_object_del(r2);
+      r2 = NULL;
+   }
+   if(r3) {
+      evas_object_del(r3);
+      r3 = NULL;
+   }
+   if(r4) {
+      evas_object_del(r4);
+      r4 = NULL;
+   }
+   if(win) {
+      evas_object_del(win);
+      win = NULL;
+   }
+
+   initialized = EINA_FALSE;
+}
+
+Eina_Bool border_set(AtspiAccessible *widget)
+{
+   if(!initialized)
+      return EINA_FALSE;
+
+   if(!widget)
+      return EINA_FALSE;
+
+   if(source != widget)
+      source = widget;
+
+   draw_border(widget);
+
+   return EINA_TRUE;
+}
+
+static void _on_event(const AtspiEvent *event, void *user_data)
+{
+   border_set(event->source);
+}
+
+void border_set_on_event(const char *event)
+{
+   if(registered_event) {
+      atspi_event_listener_deregister (listener2, registered_event, NULL);
+      free(registered_event);
+      registered_event = NULL;
+   }
+
+   if(!event)
+      return;
+
+   registered_event = strdup(event);
+   listener2 = atspi_event_listener_new (_on_event, NULL, NULL);
+   atspi_event_listener_register (listener2, registered_event, NULL);
+}
index 9e98e67..48d1a69 100755 (executable)
@@ -7,10 +7,12 @@
 #include <Eina.h>
 #include <eldbus-1/Eldbus.h>
 #include "detector.h"
+#include "border.h"
 #include <glib.h>
 
 #define GESTURES_GET "GetSupportedGestures"
 #define GESTURE_DETECTED "GestureDetected"
+#define FOCUS_EVENT "object:state-changed:focused"
 
 #define BUS "com.samsung.e17"
 #define INTERFACE "com.samsung.e17"
@@ -163,7 +165,8 @@ static bool create_dbus_connection(void *data)
     eldbus_proxy_signal_handler_add(proxy, GESTURE_DETECTED, gesture_detected_signal_handler, NULL);
 
     _detector_initialize();
-
+    border_init();
+    border_set_on_event(FOCUS_EVENT);
     return 1;
 }
 
@@ -178,7 +181,7 @@ static int _terminate_app(void *data)
     connection = NULL;
     proxy = NULL;
     eldbus_shutdown();
-
+    border_shutdown();
     return 0;
 }