diff --git a/README b/README index bc009321d..6408e4842 100644 --- a/README +++ b/README @@ -9,3 +9,17 @@ of its own (recommended) like: ./configure --prefix=/usr/local/e17 You will, as usual need to add the subsequent bin dir to your $PATH etc. + +NOTES: + +* do NOT use -mfpmath=sse in CFLAGS - we are not sure, but it may have bugds +and screws up things in edje, evas and e17. if your gcc uses this by default +(which apparently gcc4.x does on amd64), turn it off with a -fpmath=387 in +your CFLAGS. + +* your freetype2 version must be > 2.1.7 + +* i remember hearing of bugs with later versions of freetype on some +distributions (2.1.9 and 2.1.10) with certain patches or missing certain +patches. be aware of this as a possible font problem. + diff --git a/data/themes/default_pointer.edc b/data/themes/default_pointer.edc index 97d843cb7..aa0bcd8fc 100644 --- a/data/themes/default_pointer.edc +++ b/data/themes/default_pointer.edc @@ -1,123 +1,124 @@ images { - image: "pointer.png" COMP; - image: "pointer_mono.png" COMP; + image: "e17_pointer.png" COMP; + image: "e17_pointer_mono.png" COMP; } - group { - name: "pointer/enlightenment/default"; - parts { - part { - name: "pointer"; - type: IMAGE; - mouse_events: 0; - description { - state: "default" 0.0; - rel1 { - relative: 0.0 0.0; - offset: 0 0; - } - rel2 { - relative: 0.68750 1.0; - offset: -1 -1; - } - image { - normal: "pointer.png"; - } +group { + name: "pointer/enlightenment/default/color"; + parts { + part { + name: "pointer"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + offset: 0 0; } - description { - state: "test" 0.0; - aspect: 0.75 1.0; - rel1 { - relative: 0.0 0.0; - offset: 8 8; - } - rel2 { - relative: 0.0 0.0; - offset: 24 32; - } - image { - normal: "pointer_mono.png"; - } + rel2 { + relative: 0.68750 1.0; + offset: -1 -1; + } + image { + normal: "e17_pointer.png"; } } - part { - name: "hotspot"; - type: SWALLOW; - mouse_events: 0; - description { - state: "default" 0.0; - visible: 0; - rel1 { - relative: 0.0 0.0; - offset: 1 2; - } - rel2 { - relative: 0.0 0.0; - offset: 2 3; - } + description { + state: "test" 0.0; + aspect: 0.75 1.0; + rel1 { + relative: 0.0 0.0; + offset: 8 8; } - description { - state: "test" 0.0; - visible: 0; - rel1 { - relative: 0.0 0.0; - offset: 8 8; - } - rel2 { - relative: 0.0 0.0; - offset: 9 9; - } + rel2 { + relative: 0.0 0.0; + offset: 24 32; + } + image { + normal: "e17_pointer_mono.png"; } } } - programs { - program { - name: "test_hot"; - signal: "test"; - source: ""; - action: STATE_SET "test" 0.0; - target: "hotspot"; - } - program { - name: "test_pointer"; - signal: "test"; - source: ""; - action: STATE_SET "test" 0.0; - target: "pointer"; - } - } - } - group { - name: "pointer/enlightenment/mono"; - parts { - part { - name: "pointer"; - type: IMAGE; - mouse_events: 0; - description { - state: "default" 0.0; - aspect: 0.75 1.0; - image { - normal: "pointer_mono.png"; - } + part { + name: "hotspot"; + type: SWALLOW; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + rel1 { + relative: 0.0 0.0; + offset: 1 2; + } + rel2 { + relative: 0.0 0.0; + offset: 1 2; } } - part { - name: "hotspot"; - type: SWALLOW; - mouse_events: 0; - description { - state: "default" 0.0; - visible: 0; - rel1 { - relative: 0.0 0.0; - offset: 0 0; - } - rel2 { - relative: 0.0 0.0; - offset: 1 1; - } + description { + state: "test" 0.0; + visible: 0; + rel1 { + relative: 0.0 0.0; + offset: 8 8; + } + rel2 { + relative: 0.0 0.0; + offset: 8 8; } } } } + programs { + program { + name: "test_hot"; + signal: "test"; + source: ""; + action: STATE_SET "test" 0.0; + target: "hotspot"; + } + program { + name: "test_pointer"; + signal: "test"; + source: ""; + action: STATE_SET "test" 0.0; + target: "pointer"; + } + } +} + +group { + name: "pointer/enlightenment/default/mono"; + parts { + part { + name: "pointer"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + aspect: 0.75 1.0; + image { + normal: "e17_pointer_mono.png"; + } + } + } + part { + name: "hotspot"; + type: SWALLOW; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + rel1 { + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + relative: 0.0 0.0; + offset: 0 0; + } + } + } + } +} diff --git a/data/themes/images/Makefile.am b/data/themes/images/Makefile.am index e5f21edde..3e4aca3ba 100644 --- a/data/themes/images/Makefile.am +++ b/data/themes/images/Makefile.am @@ -306,6 +306,6 @@ e17_icon_run.png \ e17_icon_theme_0.png \ e17_icon_theme_glow_0.png \ e17_icon_windows.png \ -e17_icon_lost_windows.png - - +e17_icon_lost_windows.png \ +e17_pointer.png \ +e17_pointer_mono.png diff --git a/data/themes/images/pointer.png b/data/themes/images/e17_pointer.png similarity index 75% rename from data/themes/images/pointer.png rename to data/themes/images/e17_pointer.png index 3682632f5..634323053 100644 Binary files a/data/themes/images/pointer.png and b/data/themes/images/e17_pointer.png differ diff --git a/data/themes/images/e17_pointer_mono.png b/data/themes/images/e17_pointer_mono.png new file mode 100644 index 000000000..207685601 Binary files /dev/null and b/data/themes/images/e17_pointer_mono.png differ diff --git a/data/themes/images/pointer_mono.png b/data/themes/images/pointer_mono.png deleted file mode 100644 index 3e3d24d36..000000000 Binary files a/data/themes/images/pointer_mono.png and /dev/null differ diff --git a/src/bin/e_container.c b/src/bin/e_container.c index 97af8e581..beccf4237 100644 --- a/src/bin/e_container.c +++ b/src/bin/e_container.c @@ -123,7 +123,6 @@ e_container_new(E_Manager *man) evas_object_show(o); con->pointer.root = e_pointer_window_set(con->manager->root); - con->pointer.win = e_pointer_window_set(con->win); con->num = container_num; container_num++; @@ -892,7 +891,6 @@ _e_container_free(E_Container *con) int i; if (con->pointer.root) e_object_del(E_OBJECT(con->pointer.root)); - if (con->pointer.win) e_object_del(E_OBJECT(con->pointer.win)); ecore_x_window_del(con->event_win); if (con->gadman) e_object_del(E_OBJECT(con->gadman)); diff --git a/src/bin/e_container.h b/src/bin/e_container.h index 58557c0c8..817b51751 100644 --- a/src/bin/e_container.h +++ b/src/bin/e_container.h @@ -57,7 +57,6 @@ struct _E_Container struct { E_Pointer *root; - E_Pointer *win; } pointer; }; diff --git a/src/bin/e_error.c b/src/bin/e_error.c index 0b7fcd3fd..952da108f 100644 --- a/src/bin/e_error.c +++ b/src/bin/e_error.c @@ -61,7 +61,6 @@ e_error_message_manager_show(E_Manager *man, char *title, char *txt) Evas_Coord maxw, maxh; E_Container *con; Ecore_X_Window win; - E_Pointer *p; int x, y; char *s; @@ -94,8 +93,6 @@ e_error_message_manager_show(E_Manager *man, char *title, char *txt) ecore_evas_title_set(ee, "Enlightenment: Low Level Dialog"); // ecore_evas_avoid_damage_set(ee, 1); e = ecore_evas_get(ee); - p = e_pointer_window_set(win); - ecore_evas_data_set(ee, "pointer", p); o = edje_object_add(e); if (!e_theme_edje_object_set(o, "base/theme/error", "error/main")) @@ -423,17 +420,12 @@ _e_error_cb_job_ecore_evas_free(void *data) { Ecore_Evas *ee; Evas_List *shapelist, *l; - E_Pointer *p; ee = data; shapelist = ecore_evas_data_get(ee, "shapes"); - for (l = shapelist; l; l = l->next) - e_object_del(E_OBJECT(l->data)); + for (l = shapelist; l; l = l->next) e_object_del(E_OBJECT(l->data)); evas_list_free(shapelist); - p = ecore_evas_data_get(ee, "pointer"); - e_object_del(E_OBJECT(p)); - e_canvas_del(ee); ecore_evas_free(ee); } diff --git a/src/bin/e_pointer.c b/src/bin/e_pointer.c index 46735fddc..8bbacf52f 100644 --- a/src/bin/e_pointer.c +++ b/src/bin/e_pointer.c @@ -56,28 +56,19 @@ e_pointer_window_set(Ecore_X_Window win) { if (!e_theme_edje_object_set(o, "base/theme/pointer", - "pointer/enlightenment/default")) - { - /* error */ - printf("ERROR: No default theme for pointer!\n"); - if (!e_theme_edje_object_set(o, - "base/theme/pointer", - "pointer/enlightenment/mono")) - { - /* error */ - printf("ERROR: No mono theme for pointer!\n"); - } - } + "pointer/enlightenment/default/color")) + e_theme_edje_object_set(o, + "base/theme/pointer", + "pointer/enlightenment/default/mono"); } else { if (!e_theme_edje_object_set(o, "base/theme/pointer", - "pointer/enlightenment/mono")) - { - /* error */ - printf("ERROR: No mono theme for pointer!\n"); - } + "pointer/enlightenment/default/mono")) + e_theme_edje_object_set(o, + "base/theme/pointer", + "pointer/enlightenment/default/color"); } /* Create the hotspot object */ @@ -109,15 +100,15 @@ e_pointer_idler_before(void) p = l->data; updates = evas_render_updates(p->evas); - if (updates) + if ((updates) || (p->hot.update)) { Ecore_X_Cursor cur; cur = ecore_x_cursor_new(p->win, p->pixels, p->w, p->h, p->hot.x, p->hot.y); ecore_x_window_cursor_set(p->win, cur); ecore_x_cursor_free(cur); - evas_render_updates_free(updates); + p->hot.update = 0; } } } @@ -131,8 +122,12 @@ _e_pointer_cb_move(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event p = data; evas_object_geometry_get(p->hot_object, &x, &y, NULL, NULL); - p->hot.x = x; - p->hot.y = y; + if ((p->hot.x != x) || (p->hot.y != y)) + { + p->hot.x = x; + p->hot.y = y; + p->hot.update = 1; + } } static void diff --git a/src/bin/e_pointer.h b/src/bin/e_pointer.h index 2ddfa400f..7c96cfaa2 100644 --- a/src/bin/e_pointer.h +++ b/src/bin/e_pointer.h @@ -13,20 +13,18 @@ typedef struct _E_Pointer E_Pointer; struct _E_Pointer { - E_Object e_obj_inherit; - - Evas *evas; - Evas_Object *pointer_object; - Evas_Object *hot_object; - int *pixels; - - Ecore_X_Window win; - - int w, h; - - struct { - int x, y; - } hot; + E_Object e_obj_inherit; + + Evas *evas; + Evas_Object *pointer_object; + Evas_Object *hot_object; + int *pixels; + Ecore_X_Window win; + int w, h; + struct { + int x, y; + unsigned char update : 1; + } hot; }; EAPI E_Pointer *e_pointer_window_set(Ecore_X_Window win);