summaryrefslogtreecommitdiffstats
path: root/friendfinder/vkbd
diff options
context:
space:
mode:
authorPatrick Hornecker2009-12-21 16:07:36 +0100
committerPatrick Hornecker2009-12-21 16:07:36 +0100
commit3cefadd098bb72a087406ecc09c1c04f1dca0ab5 (patch)
treebbec3ea006ac2abc6bdf52f00ca2b970f27274d9 /friendfinder/vkbd
parentfew changes (diff)
downloadfriendfinder-3cefadd098bb72a087406ecc09c1c04f1dca0ab5.tar.gz
friendfinder-3cefadd098bb72a087406ecc09c1c04f1dca0ab5.tar.xz
friendfinder-3cefadd098bb72a087406ecc09c1c04f1dca0ab5.zip
file locations reorderd, map in gui...build problems on local machine
Diffstat (limited to 'friendfinder/vkbd')
-rw-r--r--friendfinder/vkbd/Makefile6
-rw-r--r--friendfinder/vkbd/VeraBd.ttfbin0 -> 58716 bytes
-rw-r--r--friendfinder/vkbd/arrow_down.pngbin0 -> 1577 bytes
-rw-r--r--friendfinder/vkbd/background.pngbin0 -> 2939 bytes
-rw-r--r--friendfinder/vkbd/backspace.pngbin0 -> 1213 bytes
-rw-r--r--friendfinder/vkbd/bt_basew.pngbin0 -> 1527 bytes
-rw-r--r--friendfinder/vkbd/bt_glow.pngbin0 -> 734 bytes
-rw-r--r--friendfinder/vkbd/ilist_1.pngbin0 -> 1281 bytes
-rw-r--r--friendfinder/vkbd/vkbd-key.edc137
-rw-r--r--friendfinder/vkbd/vkbd-main.edc219
-rw-r--r--friendfinder/vkbd/vkbd-shift.edc97
-rw-r--r--friendfinder/vkbd/vkbd.c260
-rw-r--r--friendfinder/vkbd/vkbd.edc188
-rw-r--r--friendfinder/vkbd/vkbd.edjbin0 -> 88763 bytes
-rw-r--r--friendfinder/vkbd/vkbd.h6
15 files changed, 913 insertions, 0 deletions
diff --git a/friendfinder/vkbd/Makefile b/friendfinder/vkbd/Makefile
new file mode 100644
index 0000000..4b59c8a
--- /dev/null
+++ b/friendfinder/vkbd/Makefile
@@ -0,0 +1,6 @@
+
+all:
+ edje_cc vkbd.edc
+
+clean:
+ rm -rf vkbd.edj
diff --git a/friendfinder/vkbd/VeraBd.ttf b/friendfinder/vkbd/VeraBd.ttf
new file mode 100644
index 0000000..51d6111
--- /dev/null
+++ b/friendfinder/vkbd/VeraBd.ttf
Binary files differ
diff --git a/friendfinder/vkbd/arrow_down.png b/friendfinder/vkbd/arrow_down.png
new file mode 100644
index 0000000..db81aac
--- /dev/null
+++ b/friendfinder/vkbd/arrow_down.png
Binary files differ
diff --git a/friendfinder/vkbd/background.png b/friendfinder/vkbd/background.png
new file mode 100644
index 0000000..1850e67
--- /dev/null
+++ b/friendfinder/vkbd/background.png
Binary files differ
diff --git a/friendfinder/vkbd/backspace.png b/friendfinder/vkbd/backspace.png
new file mode 100644
index 0000000..a0aae47
--- /dev/null
+++ b/friendfinder/vkbd/backspace.png
Binary files differ
diff --git a/friendfinder/vkbd/bt_basew.png b/friendfinder/vkbd/bt_basew.png
new file mode 100644
index 0000000..8d787dd
--- /dev/null
+++ b/friendfinder/vkbd/bt_basew.png
Binary files differ
diff --git a/friendfinder/vkbd/bt_glow.png b/friendfinder/vkbd/bt_glow.png
new file mode 100644
index 0000000..b8ed187
--- /dev/null
+++ b/friendfinder/vkbd/bt_glow.png
Binary files differ
diff --git a/friendfinder/vkbd/ilist_1.png b/friendfinder/vkbd/ilist_1.png
new file mode 100644
index 0000000..40a3238
--- /dev/null
+++ b/friendfinder/vkbd/ilist_1.png
Binary files differ
diff --git a/friendfinder/vkbd/vkbd-key.edc b/friendfinder/vkbd/vkbd-key.edc
new file mode 100644
index 0000000..2eb7d1b
--- /dev/null
+++ b/friendfinder/vkbd/vkbd-key.edc
@@ -0,0 +1,137 @@
+#define _KEY_BG(key_name, x, y, w, h) \
+ part { \
+ name: "key-bg-"key_name; \
+ type: IMAGE; \
+ pointer_mode: NOGRAB; \
+ description { \
+ state: "default" 0.0; \
+ min: w h; \
+ max: w h; \
+ rel1 { \
+ relative: 0.0 0.0; \
+ offset: (x + w/2) (y + h/2); \
+ } \
+ rel2 { \
+ relative: 0.0 0.0; \
+ offset: (x + w/2) (y + h/2); \
+ } \
+ image.normal: "bt_basew.png"; \
+ } \
+ } \
+ part { \
+ name: "key-bg2-"key_name; \
+ type: IMAGE; \
+ mouse_events: 0; \
+ description { \
+ state: "default" 0.0; \
+ min: (w-2) (h-2); \
+ max: (w-2) (h-2); \
+ rel1 { \
+ relative: 0.0 0.0; \
+ offset: (x + w/2 + 2) (y + h/2 + 2); \
+ } \
+ rel2 { \
+ relative: 0.0 0.0; \
+ offset: (x + w/2 -2) (y + h/2 - 2); \
+ } \
+ image.normal: "bt_glow.png"; \
+ } \
+ }
+
+
+#define _KEY_LABEL(key_text, key_name, lbl_dx, lbl_dy) \
+part { \
+ name: "key-lbl-"key_name; \
+ type: TEXT; \
+ mouse_events: 0; \
+ effect: OUTLINE; \
+ description { \
+ state: "default" 0.0; \
+ color: 0 0 0 255; \
+ color2: 255 255 255 255; \
+ color3: 255 255 255 255; \
+ rel1 { \
+ to: "key-bg-"key_name; \
+ relative: 0.0 0.0; \
+ offset: (2 + lbl_dx) (1 + lbl_dy); \
+ } \
+ rel2 { \
+ to: "key-bg-"key_name; \
+ relative: 1.0 0.0; \
+ offset: -1 30; \
+ } \
+ text { \
+ font: "key"; \
+ size: 15; \
+ text: key_text; \
+ } \
+ } \
+ description { \
+ state: "down" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define KEY_IMG(key_img, key_name, x, y, w, h) \
+ _KEY_BG(key_name, x, y, w, h) \
+ part { \
+ name: "key-img-"key_name; \
+ type: IMAGE; \
+ mouse_events: 0; \
+ description { \
+ state: "default" 0.0; \
+ min: w h; \
+ max: w h; \
+ rel1 { \
+ relative: 0.0 0.0; \
+ offset: (x + w/2) (y + h/2); \
+ } \
+ rel2 { \
+ relative: 0.0 0.0; \
+ offset: (x + w/2) (y + h/2);\
+ }\
+ image.normal: key_img;\
+ }\
+ }\
+
+
+#define KEY_IMG2(key_img, key_name, x, y, w, h, iw, ih) \
+ _KEY_BG(key_name, x, y, w, h) \
+ part { \
+ name: "key-img-"key_name; \
+ type: IMAGE; \
+ mouse_events: 0; \
+ description { \
+ state: "default" 0.0; \
+ min: iw ih; \
+ max: iw ih; \
+ rel1 { \
+ relative: 0.0 0.0; \
+ offset: (x + w/2) (y+h/2); \
+ } \
+ rel2 { \
+ relative: 0.0 0.0; \
+ offset: (x + w/2) (y+h/2);\
+ }\
+ image.normal: key_img;\
+ }\
+ }\
+
+
+#define SKEY_FULL(key_text, key_name, x, y, w, h, lbl_dx, lbl_dy) \
+ _KEY_BG(key_name, x, y, w, h) \
+ _KEY_LABEL(key_text, key_name, lbl_dx, lbl_dy) \
+
+#define KEY_SIZE 30
+#define KEY_FULL(v, x, y, lbl_dx, lbl_dy) SKEY_FULL(v, v, x, y, KEY_SIZE, KEY_SIZE, lbl_dx, lbl_dy)
+#define SKEY(name, text, x, y) SKEY_FULL(name, text, x, y, KEY_SIZE, KEY_SIZE, 0, 0)
+#define KEY(v, x, y) SKEY(v, v, x, y)
+#define SKEY_WIDE(name, lbl, x, y, w) \
+ _KEY_BG(name, x, y, w, KEY_SIZE) \
+ _KEY_LABEL(lbl, name, 0, 0) \
+
+#define KEY_WIDE(v, x, y, w) SKEY_WIDE(v, v, x, y, w)
+#define KEY_HPOS(index) KEY_SIZE * index
+#define KEY_VPOS(index) KEY_SIZE * index
+
diff --git a/friendfinder/vkbd/vkbd-main.edc b/friendfinder/vkbd/vkbd-main.edc
new file mode 100644
index 0000000..201bc95
--- /dev/null
+++ b/friendfinder/vkbd/vkbd-main.edc
@@ -0,0 +1,219 @@
+#define GROUP_DEFAULTS \
+ description { \
+ state: "default" 0.0; \
+ min: 240 150; \
+ max: 240 150; \
+ fixed: 1 1; \
+ rel1 { \
+ to: "background"; \
+ relative: 0.0 0.0; \
+ offset: 0 50; \
+ }\
+ }\
+ description { \
+ state: "hidden" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ } \
+
+
+group {
+ name: "main";
+
+ min: 240 200;
+ parts {
+
+ part {
+ name: "background";
+ type: IMAGE;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ min: 240 240;
+ max: 240 240;
+
+ rel1 {
+ relative: 1.0 1.0;
+ offset: -240 -240;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ image {
+ normal: "ilist_1.png";
+ }
+ }
+ }
+
+
+ part {
+ name: "field_bg";
+ mouse_events: 0;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 5;
+ rel1 {
+ relative: 0.0 1.0;
+ offset: 4 -240;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ offset: -4 -182;
+ }
+ }
+ }
+
+ part {
+ name: "field";
+ mouse_events: 0;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ color: 30 30 30 255;
+ rel1 {
+ to: "field_bg";
+ relative: 0 0;
+ offset: 4 4;
+ }
+ rel2 {
+ to: "field_bg";
+ relative: 1 1;
+ offset: -5 -5;
+ }
+ text {
+ text: "";
+ style: "field_style";
+ }
+ }
+ }
+
+ part {
+ name: "alpha";
+ type: GROUP;
+ source: "alpha";
+ mouse_events: 1;
+ repeat_events: 1;
+ GROUP_DEFAULTS
+ }
+
+ part {
+ name: "special-1";
+ type: GROUP;
+ source: "special-1";
+ mouse_events: 1;
+ repeat_events: 1;
+ GROUP_DEFAULTS
+ }
+ part {
+ name: "special-2";
+ type: GROUP;
+ source: "special-2";
+ mouse_events: 1;
+ repeat_events: 1;
+ GROUP_DEFAULTS
+ }
+}
+
+ programs {
+ program {
+ name: "show-alpha";
+ signal: "show-alpha";
+ action: STATE_SET "default" 0.0;
+ target: "alpha";
+ }
+ program {
+ name: "hide-alpha";
+ signal: "hide-alpha";
+ action: STATE_SET "hidden" 0.0;
+ target: "alpha";
+ }
+
+ program {
+ name: "hide-special-1";
+ signal: "hide-special-1";
+ action: STATE_SET "hidden" 0.0;
+ target: "special-1";
+ }
+ program {
+ name: "show-special-1";
+ signal: "show-special-1";
+ action: STATE_SET "default" 0.0;
+ target: "special-1";
+ }
+
+ program {
+ name: "hide-special-2";
+ signal: "hide-special-2";
+ action: STATE_SET "hidden" 0.0;
+ target: "special-2";
+ }
+ program {
+ name: "show-special-2";
+ signal: "show-special-2";
+ action: STATE_SET "default" 0.0;
+ target: "special-2";
+ }
+
+ program {
+ name: "hide-signal";
+ signal: "kbd-hide";
+ action: SIGNAL_EMIT "kbd" "hide";
+ }
+
+ program {
+ name: "toggle-alpha";
+ signal: "toggle-alpha";
+ after: "hide-special-1";
+ after: "hide-special-2";
+ after: "show-alpha";
+ }
+
+ program {
+ name: "toggle-special-1";
+ signal: "toggle-special-1";
+ after: "hide-alpha";
+ after: "hide-special-2";
+ after: "show-special-1";
+ }
+
+ program {
+ name: "toggle-special-2";
+ signal: "toggle-special-2";
+ after: "hide-alpha";
+ after: "hide-special-1";
+ after: "show-special-2";
+ }
+ program {
+ name: ".@123_clicked";
+ signal: "mouse,clicked,1";
+ source: "*:key-bg-.@123";
+ after: "toggle-special-1";
+ }
+ program {
+ name: "ABC_clicked";
+ signal: "mouse,clicked,1";
+ source: "*:key-bg-ABC";
+ after: "toggle-alpha";
+ }
+ program {
+ name: "symb_clicked";
+ signal: "mouse,clicked,1";
+ source: "special-1:key-bg-symb";
+ after: "toggle-special-2";
+ }
+
+ program {
+ name: "hide_clicked";
+ signal: "mouse,clicked,1";
+ source: "*:key-bg-hide";
+ after: "hide-signal";
+ }
+
+ program {
+ name: "init";
+ signal: "show";
+ after: "toggle-alpha";
+ }
+ }
+ }
diff --git a/friendfinder/vkbd/vkbd-shift.edc b/friendfinder/vkbd/vkbd-shift.edc
new file mode 100644
index 0000000..c05f618
--- /dev/null
+++ b/friendfinder/vkbd/vkbd-shift.edc
@@ -0,0 +1,97 @@
+part {
+ name: "key-bg-shift";
+ type: RECT;
+ pointer_mode: NOGRAB;
+ description {
+ state: "default" 0.0;
+ min: 32 32;
+ max: 32 32;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: (44) (THIRD_ROW + 27);
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: (44) (THIRD_ROW + 27);
+ }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "key-img-shift";
+ type: IMAGE;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ min: 87 54;
+ max: 87 54;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: (44) (THIRD_ROW + 27);
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: (44) (THIRD_ROW + 27);
+ }
+ image {
+ normal: "key-special.png";
+ border: 9 9 9 9;
+ }
+ }
+ description {
+ state: "down" 0.0;
+ inherit: "default" 0.0;
+ image {
+ normal: "key-special-selected.png";
+ border: 9 9 9 9;
+ }
+ }
+ }
+ part {
+ name: "key-lbl-shift";
+ type: IMAGE;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ max: 32 32;
+ min: 32 32;
+ rel1 {
+ to: "key-bg-shift";
+ relative: 0.5 0.5;
+ }
+ rel2 {
+ to: "key-bg-shift";
+ relative: 0.5 0.5;
+ }
+ image.normal: "shift.png";
+ }
+ description {
+ state: "down" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "shift-selected.png";
+ }
+ }
+ programs {
+ program {
+ name: "key-down-shift";
+ signal: "mouse,clicked,1";
+ source: "key-bg-shift";
+ action: SIGNAL_EMIT "key_down" "shift";
+ }
+ program {
+ name: "key-down-shift-enter";
+ signal: "press_shift";
+ action: STATE_SET "down" 0.0;
+ transition: LINEAR 0.1;
+ target: "key-img-shift";
+ target: "key-lbl-shift";
+ }
+ program {
+ name: "key-down-shift-revert";
+ signal: "release_shift";
+ action: STATE_SET "default" 0.0;
+ transition: LINEAR 0.1;
+ target: "key-img-shift";
+ target: "key-lbl-shift";
+ }
+ }
diff --git a/friendfinder/vkbd/vkbd.c b/friendfinder/vkbd/vkbd.c
new file mode 100644
index 0000000..de7d093
--- /dev/null
+++ b/friendfinder/vkbd/vkbd.c
@@ -0,0 +1,260 @@
+#include <stdio.h>
+#include <string.h>
+
+#include <Evas.h>
+#include <Edje.h>
+#include <Edje_Edit.h>
+#include "vkbd.h"
+
+static Evas_Smart *get_smart();
+
+static void _kbd_object_add(Evas_Object *o);
+static void _kbd_object_del(Evas_Object *o);
+static void _kbd_object_move(Evas_Object *o, Evas_Coord x, Evas_Coord y);
+static void _kbd_object_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h);
+static void _kbd_object_show(Evas_Object *o);
+static void _kbd_object_hide(Evas_Object *o);
+static void _kbd_object_color_set(Evas_Object *o, int r, int g, int b, int a);
+static void _kbd_object_clip_set(Evas_Object *o, Evas_Object *clip);
+static void _kbd_object_clip_unset(Evas_Object *o);
+
+#define SMART_KBD_NAME "e_smart_kbd"
+#define INPUT_MAX 512
+struct smart_data
+{
+ Evas_Object *obj;
+ Evas_Coord x, y, w, h;
+
+ Evas_Object *clip;
+ Evas_Object *edje;
+ char input[INPUT_MAX];
+ int input_len;
+ void (*kbd_cb)(char *);
+};
+
+
+static void
+mouse_down(void *data, Evas_Object *o, const char *emission, const char *source)
+{
+ int i;
+ const char *key;
+ struct smart_data *smart = (struct smart_data *)data;
+ if(!smart || smart->input_len >= INPUT_MAX - 1)
+ return;
+
+ int len = strlen(source);
+ for(i = len - 2; i >= 0; i--)
+ {
+ if(source[i] == '-')
+ break;
+ }
+ key = source + i+1;
+ if(strlen(key) == 1)
+ {
+ smart->input[smart->input_len++] = key[0];
+ smart->input[smart->input_len] = '\0';
+ }
+ else if (strlen(key) == 2 && (key[0] & 0xff) == 0xc3)
+ {
+ smart->input[smart->input_len++] = key[0];
+ smart->input[smart->input_len++] = key[1];
+ smart->input[smart->input_len] = '\0';
+ }
+ else
+ {
+ int len;
+ char *val = edje_edit_data_value_get (o, key);
+ if(!val)
+ return;
+ len = INPUT_MAX - smart->input_len - 2;
+ len = (strlen(val) > len) ? len : strlen(val);
+ strncat(smart->input + smart->input_len, val, len);
+ smart->input_len += len;
+ }
+ edje_object_part_text_set(o, "field", smart->input);
+}
+
+static void
+kbd_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
+ struct smart_data *smart;
+ Evas_Object *kbd = (Evas_Object *)data;
+ if(!kbd)
+ return;
+ smart = evas_object_smart_data_get(kbd);
+ if(strcmp(source, "hide") == 0)
+ {
+ if(smart->kbd_cb)
+ smart->kbd_cb(strdup(smart->input));
+ smart->input[0] = 0;
+ smart->input_len = 0;
+ smart->kbd_cb = NULL;
+ }
+ printf("kbd_cb source: %s, emission %s\n", source, emission);
+ evas_object_hide(kbd);
+}
+
+Evas_Object *vkbd_add(Evas *e)
+{
+ Evas_Object *o;
+ struct smart_data *smart;
+ Evas_Object *kbd;
+
+ o = evas_object_smart_add(e, get_smart());
+ smart = evas_object_smart_data_get(o);
+ if(smart == NULL)
+ {
+ evas_object_del(o);
+ return NULL;
+ }
+
+ kbd = edje_object_add(e);
+ if(!edje_object_file_set(kbd, "vkbd/vkbd.edj", "main"))
+ {
+ printf("failed loading kbd\n");
+ evas_object_del(kbd);
+ evas_object_del(o);
+ return NULL;
+ }
+ evas_object_clip_set(kbd, smart->clip);
+ edje_object_signal_callback_add(kbd, "mouse,down,1", "*key-bg*", mouse_down, smart);
+ edje_object_signal_callback_add(kbd, "kbd", "*", kbd_cb, o);
+ evas_object_show(kbd);
+
+ smart->input[0] = '\0';
+ smart->input_len = 0;
+ smart->kbd_cb = NULL;
+
+ smart->edje = kbd;
+ return o;
+}
+
+void vkbd_show(Evas_Object *o, Evas_Coord w, Evas_Coord h, void (*cb)(char *))
+{
+ struct smart_data *smart;
+ smart = evas_object_smart_data_get(o);
+ smart->kbd_cb = cb;
+ evas_object_resize(o, w, h);
+ evas_object_show(o);
+}
+
+static void _kbd_object_add(Evas_Object *o)
+{
+ struct smart_data *smart;
+
+ smart = calloc(1, sizeof(struct smart_data));
+ if (smart == NULL)
+ return;
+
+ smart->obj = o;
+ smart->x = 0;
+ smart->y = 0;
+ smart->w = 0;
+ smart->h = 0;
+
+ smart->clip = evas_object_rectangle_add(evas_object_evas_get(o));
+ evas_object_smart_member_add(smart->clip, o);
+ evas_object_color_set(smart->clip, 255, 255, 255, 255);
+ evas_object_move(smart->clip, smart->x, smart->y);
+ evas_object_resize(smart->clip, smart->w, smart->h);
+
+ evas_object_smart_data_set(o, smart);
+}
+
+static void _kbd_object_del(Evas_Object *o)
+{
+ struct smart_data *smart;
+ smart = evas_object_smart_data_get(o);
+
+ evas_object_del(smart->clip);
+ evas_object_del(smart->edje);
+ free(smart);
+}
+
+static void _kbd_object_move(Evas_Object *o, Evas_Coord x, Evas_Coord y)
+{
+ struct smart_data *smart;
+ smart = evas_object_smart_data_get(o);
+
+ smart->x = x;
+ smart->y = y;
+
+ evas_object_move(smart->clip, x, y);
+ evas_object_move(smart->edje, x, y);
+}
+
+static void _kbd_object_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h)
+{
+ struct smart_data *smart;
+ smart = evas_object_smart_data_get(o);
+
+ smart->w = w;
+ smart->h = h;
+ evas_object_resize(smart->clip, w, h);
+ evas_object_resize(smart->edje, w, h);
+}
+
+static void _kbd_object_show(Evas_Object *o)
+{
+ struct smart_data *smart;
+ smart = evas_object_smart_data_get(o);
+
+ evas_object_show(smart->clip);
+}
+
+static void _kbd_object_hide(Evas_Object *o)
+{
+ struct smart_data *smart;
+ smart = evas_object_smart_data_get(o);
+ evas_object_hide(smart->clip);
+}
+
+static void _kbd_object_color_set(Evas_Object *o, int r, int g, int b, int a)
+{
+ struct smart_data *smart;
+ smart = evas_object_smart_data_get(o);
+ evas_object_color_set(smart->clip, r, g, b, a);
+}
+
+static void _kbd_object_clip_set(Evas_Object *o, Evas_Object *clip)
+{
+ struct smart_data *smart;
+ smart = evas_object_smart_data_get(o);
+
+ evas_object_clip_set(smart->clip, clip);
+}
+
+static void _kbd_object_clip_unset(Evas_Object *o)
+{
+ struct smart_data *smart;
+ smart = evas_object_smart_data_get(o);
+
+ evas_object_clip_unset(smart->clip);
+}
+
+static Evas_Smart *get_smart()
+{
+ static Evas_Smart *e_smart_kbd = NULL;
+
+ if(e_smart_kbd != NULL)
+ return e_smart_kbd;
+
+ e_smart_kbd = evas_smart_new(SMART_KBD_NAME,
+ _kbd_object_add,
+ _kbd_object_del,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ _kbd_object_move,
+ _kbd_object_resize,
+ _kbd_object_show,
+ _kbd_object_hide,
+ _kbd_object_color_set,
+ _kbd_object_clip_set,
+ _kbd_object_clip_unset,
+ NULL);
+ return e_smart_kbd;
+}
+
diff --git a/friendfinder/vkbd/vkbd.edc b/friendfinder/vkbd/vkbd.edc
new file mode 100644
index 0000000..bbd6828
--- /dev/null
+++ b/friendfinder/vkbd/vkbd.edc
@@ -0,0 +1,188 @@
+fonts {
+ font: "VeraBd.ttf" "key";
+}
+
+data {
+ item: "dash" "-";
+ item: "slash" "/";
+ item: "colon" ":";
+ item: "semi_colon" ";";
+ item: "open_par" "(";
+ item: "close_par" ")";
+ item: "dot" ".";
+ item: "comma" ",";
+ item: "question" "?";
+ item: "exclamation" "!";
+ item: "back_quote" "`";
+ item: "single_quote" "'";
+ item: "double_quote" "\"";
+ item: "at" "@";
+ item: "dollar" "$";
+ item: "amp" "&amp;";
+ item: "underline" "_";
+ item: "star" "*";
+ item: "hash" "#";
+ item: "enter" "<br>";
+ item: "plus" "+";
+ item: "equal" "=";
+ item: "percent" "%";
+ item: "tilde" "~";
+ item: "circumflex" "^";
+ item: "backslash" "\\";
+ item: "vert_bar" "|";
+ item: "less" "&lt;";
+ item: "greater" "&gt;";
+ item: "open_bracket" "[";
+ item: "close_bracket" "]";
+ item: "open_brace" "}";
+ item: "close_brace" "{";
+ item: "space" " ";
+}
+
+images {
+ image: "background.png" COMP;
+ image: "backspace.png" COMP;
+ image: "bt_basew.png" COMP;
+ image: "bt_glow.png" COMP;
+ image: "ilist_1.png" COMP;
+ image: "arrow_down.png" COMP;
+}
+
+styles {
+ style {
+ name: "field_style";
+ base: "font=key font_size=15 align=left valign=top color=#000 wrap=char";
+ tag: "br" " \n";
+ }
+}
+
+collections {
+#include "vkbd-main.edc"
+#include "vkbd-key.edc"
+
+ group {
+ name: "alpha";
+
+ parts {
+ KEY_FULL("A", KEY_HPOS(0), KEY_VPOS(0), -6, 0)
+ KEY_FULL("B", KEY_HPOS(1), KEY_VPOS(0), -2, 0)
+ KEY_FULL("C", KEY_HPOS(2), KEY_VPOS(0), -4, 0)
+ KEY_FULL("D", KEY_HPOS(3), KEY_VPOS(0), 0, 0)
+ KEY_FULL("E", KEY_HPOS(4), KEY_VPOS(0), 0, 0)
+ KEY_FULL("F", KEY_HPOS(5), KEY_VPOS(0), 0, 0)
+ KEY_FULL("G", KEY_HPOS(6), KEY_VPOS(0), -2, 2)
+ KEY_FULL("H", KEY_HPOS(7), KEY_VPOS(0), 2, 0)
+
+ KEY_FULL("I", KEY_HPOS(0), KEY_VPOS(1), 2, 0)
+ KEY_FULL("J", KEY_HPOS(1), KEY_VPOS(1), -6, 0)
+ KEY_FULL("K", KEY_HPOS(2), KEY_VPOS(1), 0, 0)
+ KEY_FULL("L", KEY_HPOS(3), KEY_VPOS(1), 0, 0)
+ KEY_FULL("M", KEY_HPOS(4), KEY_VPOS(1), 0, 0)
+ KEY_FULL("N", KEY_HPOS(5), KEY_VPOS(1), 2, 0)
+ KEY_FULL("O", KEY_HPOS(6), KEY_VPOS(1), -2, 0)
+ KEY_FULL("P", KEY_HPOS(7), KEY_VPOS(1), 0, 0)
+
+ KEY_FULL("Q", KEY_HPOS(0), KEY_VPOS(2), -2, 0)
+ KEY_FULL("R", KEY_HPOS(1), KEY_VPOS(2), 0, 0)
+ KEY_FULL("S", KEY_HPOS(2), KEY_VPOS(2), 0, 0)
+ KEY_FULL("T", KEY_HPOS(3), KEY_VPOS(2), -4, 0)
+ KEY_FULL("U", KEY_HPOS(4), KEY_VPOS(2), 0, 0)
+ KEY_FULL("V", KEY_HPOS(5), KEY_VPOS(2), -6, 0)
+ KEY_FULL("W", KEY_HPOS(6), KEY_VPOS(2), -5, 0)
+ KEY_FULL("X", KEY_HPOS(7), KEY_VPOS(2), -4, 0)
+
+ KEY_FULL("Y", KEY_HPOS(0), KEY_VPOS(3), -4, 0)
+ KEY_FULL("Z", KEY_HPOS(1), KEY_VPOS(3), -6, 0)
+ KEY_FULL("Ä", KEY_HPOS(2), KEY_VPOS(3), 0, 0)
+ KEY_FULL("Ö", KEY_HPOS(3), KEY_VPOS(3), 0, 0)
+ KEY_FULL("Ü", KEY_HPOS(4), KEY_VPOS(3), 0, 0)
+ KEY_WIDE("enter", KEY_HPOS(5), KEY_VPOS(3), 2*KEY_SIZE)
+ KEY_IMG("backspace.png", "backspace", KEY_HPOS(7), KEY_VPOS(3),
+ KEY_SIZE, KEY_SIZE)
+
+ KEY_WIDE("shift", KEY_HPOS(0), KEY_VPOS(4), 2*KEY_SIZE)
+ KEY_WIDE("space", KEY_HPOS(2), KEY_VPOS(4), 4*KEY_SIZE)
+ KEY_WIDE(".@123", KEY_HPOS(6), KEY_VPOS(4), 2*KEY_SIZE)
+ KEY_IMG2("arrow_down.png", "hide", KEY_HPOS(0), KEY_VPOS(5),
+ 8*KEY_SIZE, 20, 45, 20);
+ }
+ }
+
+#define FIRST_ROW KEY_VPOS(0)
+#define SECOND_ROW KEY_VPOS(1)
+#define THIRD_ROW KEY_VPOS(2)
+
+ group {
+ name: "special-1";
+ parts {
+ KEY("0", KEY_HPOS(0), FIRST_ROW)
+ KEY("1", KEY_HPOS(1), FIRST_ROW)
+ KEY("2", KEY_HPOS(2), FIRST_ROW)
+ KEY("3", KEY_HPOS(3), FIRST_ROW)
+ KEY("4", KEY_HPOS(4), FIRST_ROW)
+ KEY("5", KEY_HPOS(5), FIRST_ROW)
+ KEY("6", KEY_HPOS(6), FIRST_ROW)
+ KEY("7", KEY_HPOS(7), FIRST_ROW)
+
+ KEY("8", KEY_HPOS(0), SECOND_ROW)
+ KEY("9", KEY_HPOS(1), SECOND_ROW)
+ SKEY("-", "dash", KEY_HPOS(2), SECOND_ROW)
+ SKEY("/", "slash", KEY_HPOS(3), SECOND_ROW)
+ SKEY(":", "colon", KEY_HPOS(4), SECOND_ROW)
+ SKEY(";", "semi_colon", KEY_HPOS(5), SECOND_ROW)
+ SKEY("(", "open_par", KEY_HPOS(6), SECOND_ROW)
+ SKEY(")", "close_par", KEY_HPOS(7), SECOND_ROW)
+
+ SKEY(".", "dot", KEY_HPOS(0), THIRD_ROW)
+ SKEY(",", "comma", KEY_HPOS(1), THIRD_ROW)
+ SKEY("?", "question", KEY_HPOS(2), THIRD_ROW)
+ SKEY("!", "exclamation", KEY_HPOS(3), THIRD_ROW)
+ SKEY("`", "back_quote", KEY_HPOS(4), THIRD_ROW)
+ SKEY("'", "single_quote", KEY_HPOS(5), THIRD_ROW)
+ SKEY("\"", "double_quote", KEY_HPOS(6), THIRD_ROW)
+ SKEY("@", "at", KEY_HPOS(7), THIRD_ROW)
+
+ SKEY("$", "dollar", KEY_HPOS(0), KEY_VPOS(3))
+ SKEY("&", "amp", KEY_HPOS(1), KEY_VPOS(3))
+ SKEY("_", "underline", KEY_HPOS(2), KEY_VPOS(3))
+ SKEY("*", "star", KEY_HPOS(3), KEY_VPOS(3))
+ SKEY("#", "hash", KEY_HPOS(4), KEY_VPOS(3))
+ KEY_WIDE("enter", KEY_HPOS(5), KEY_VPOS(3), 2*KEY_SIZE)
+ KEY_IMG("backspace.png", "backspace", KEY_HPOS(7), KEY_VPOS(3), KEY_SIZE, KEY_SIZE)
+
+ KEY_WIDE("ABC", KEY_HPOS(0), KEY_VPOS(4), 2*KEY_SIZE)
+ KEY_WIDE("space", KEY_HPOS(2), KEY_VPOS(4), 4*KEY_SIZE)
+ SKEY_WIDE("symb", "[]{}", KEY_HPOS(6), KEY_VPOS(4), 2*KEY_SIZE)
+
+ KEY_IMG2("arrow_down.png", "hide", KEY_HPOS(0), KEY_VPOS(5),
+ 8*KEY_SIZE, 20, 45, 20);
+ }
+ }
+
+ group {
+ name: "special-2";
+ parts {
+ SKEY("+", "plus", KEY_HPOS(0), FIRST_ROW)
+ SKEY("=", "equal", KEY_HPOS(1), FIRST_ROW)
+ SKEY("%", "percent", KEY_HPOS(2), FIRST_ROW)
+ SKEY("~", "tilde", KEY_HPOS(3), FIRST_ROW)
+ SKEY("^", "circumflex", KEY_HPOS(4), FIRST_ROW)
+ SKEY("\\", "backslash", KEY_HPOS(5), FIRST_ROW)
+ SKEY("|", "vert_bar", KEY_HPOS(6), FIRST_ROW)
+ SKEY("<", "less", KEY_HPOS(7), FIRST_ROW)
+
+ SKEY(">", "greater", KEY_HPOS(0), SECOND_ROW)
+ SKEY("[", "open_bracket", KEY_HPOS(1), SECOND_ROW)
+ SKEY("]", "close_bracket", KEY_HPOS(2), SECOND_ROW)
+ SKEY("{", "open_brace", KEY_HPOS(3), SECOND_ROW)
+ SKEY("}", "close_brace", KEY_HPOS(4), SECOND_ROW)
+
+ KEY_WIDE("enter", KEY_HPOS(5), KEY_VPOS(3), 2*KEY_SIZE)
+ KEY_IMG("backspace.png", "backspace", KEY_HPOS(7), KEY_VPOS(3), KEY_SIZE, KEY_SIZE)
+ KEY_WIDE("ABC", KEY_HPOS(0), KEY_VPOS(4), 2*KEY_SIZE)
+ KEY_WIDE("space", KEY_HPOS(2), KEY_VPOS(4), 4*KEY_SIZE)
+ KEY_WIDE(".@123", KEY_HPOS(6), KEY_VPOS(4), 2*KEY_SIZE)
+
+ }
+ }
+}
diff --git a/friendfinder/vkbd/vkbd.edj b/friendfinder/vkbd/vkbd.edj
new file mode 100644
index 0000000..0ba78e5
--- /dev/null
+++ b/friendfinder/vkbd/vkbd.edj
Binary files differ
diff --git a/friendfinder/vkbd/vkbd.h b/friendfinder/vkbd/vkbd.h
new file mode 100644
index 0000000..7d3cfd3
--- /dev/null
+++ b/friendfinder/vkbd/vkbd.h
@@ -0,0 +1,6 @@
+#ifndef VKBD_H
+#define VKBD_H
+
+Evas_Object *vkbd_add(Evas *e);
+
+#endif