diff --git a/legacy/elementary/configure.in b/legacy/elementary/configure.in index 17ec80cf03..b82117602e 100644 --- a/legacy/elementary/configure.in +++ b/legacy/elementary/configure.in @@ -35,7 +35,6 @@ PKG_CHECK_MODULES([ELEMENTARY], [ eet evas ecore - ecore-x ecore-evas ecore-job ecore-txt @@ -44,6 +43,22 @@ PKG_CHECK_MODULES([ELEMENTARY], [ edbus ]) +have_elementary_x="no" +PKG_CHECK_MODULES([ELEMENTARY_X], [ecore-x], [ + AC_DEFINE(HAVE_ELEMENTARY_X, 1, [X11 support for Elementary]) + have_elementary_x="yes" + ], [ + have_elementary_x="no" + ]) + +have_elementary_fb="no" +PKG_CHECK_MODULES([ELEMENTARY_FB], [ecore-fb], [ + AC_DEFINE(HAVE_ELEMENTARY_FB, 1, [FB support for Elementary]) + have_elementary_fb="yes" + ], [ + have_elementary_fb="no" + ]) + my_libs="-lm" AC_SUBST(my_libs) diff --git a/legacy/elementary/elementary.pc.in b/legacy/elementary/elementary.pc.in index bfd814ee05..6ee3ecce28 100644 --- a/legacy/elementary/elementary.pc.in +++ b/legacy/elementary/elementary.pc.in @@ -8,5 +8,5 @@ Description: Mobile device touchscreen widget library Requires: evas ecore ecore-x ecore-evas ecore-job ecore-txt ecore-file eet edje Version: @VERSION@ Libs: -L${libdir} -lelementary -Libs.private: @my_libs@ @ELEMENTARY_LIBS@ -Cflags: -I${includedir} -I${includedir}/elementary +Libs.private: @my_libs@ @ELEMENTARY_LIBS@ @ELEMENTARY_X_LIBS@ @ELEMENTARY_FB_LIBS@ +Cflags: -I${includedir} -I${includedir}/elementary @ELEMENTARY_CFLAGS@ @ELEMENTARY_X_CFLAGS@ @ELEMENTARY_FB_CFLAGS@ diff --git a/legacy/elementary/src/bin/Makefile.am b/legacy/elementary/src/bin/Makefile.am index db3e761d61..5cd5c395c2 100644 --- a/legacy/elementary/src/bin/Makefile.am +++ b/legacy/elementary/src/bin/Makefile.am @@ -7,7 +7,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib \ -I$(top_srcdir)/src/bin \ -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ -@ELEMENTARY_CFLAGS@ +@ELEMENTARY_CFLAGS@ @ELEMENTARY_X_CFLAGS@ @ELEMENTARY_FB_CFLAGS@ bin_PROGRAMS = elementary_test diff --git a/legacy/elementary/src/lib/Elementary.h b/legacy/elementary/src/lib/Elementary.h index 3d1fc1bba4..53b8805c83 100644 --- a/legacy/elementary/src/lib/Elementary.h +++ b/legacy/elementary/src/lib/Elementary.h @@ -45,7 +45,6 @@ #include #include #include -#include #include #include #include diff --git a/legacy/elementary/src/lib/Makefile.am b/legacy/elementary/src/lib/Makefile.am index e3a8e730c7..7f50e0896c 100644 --- a/legacy/elementary/src/lib/Makefile.am +++ b/legacy/elementary/src/lib/Makefile.am @@ -7,7 +7,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib \ -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ -@ELEMENTARY_CFLAGS@ +@ELEMENTARY_CFLAGS@ @ELEMENTARY_X_CFLAGS@ @ELEMENTARY_FB_CFLAGS@ lib_LTLIBRARIES = libelementary.la @@ -54,7 +54,7 @@ els_icon.h libelementary_la_CFLAGS = -libelementary_la_LIBADD = @my_libs@ @ELEMENTARY_LIBS@ +libelementary_la_LIBADD = @my_libs@ @ELEMENTARY_LIBS@ @ELEMENTARY_X_LIBS@ @ELEMENTARY_FB_LIBS@ libelementary_la_LDFLAGS = -version-info @version_info@ libelementary_la_DEPENDENCIES = $(top_builddir)/elementary_config.h diff --git a/legacy/elementary/src/lib/elc_hoversel.c b/legacy/elementary/src/lib/elc_hoversel.c index 5cca67f370..60923fef8b 100644 --- a/legacy/elementary/src/lib/elc_hoversel.c +++ b/legacy/elementary/src/lib/elc_hoversel.c @@ -5,7 +5,7 @@ typedef struct _Widget_Data Widget_Data; struct _Widget_Data { - Evas_Object *pop, *hover; + Evas_Object *btn, *hover; Evas_Object *hover_parent; const char *hover_style; }; @@ -37,6 +37,8 @@ _sizing_eval(Evas_Object *obj) Widget_Data *wd = elm_widget_data_get(obj); Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1; + evas_object_size_hint_min_get(wd->btn, &minw, &minh); + evas_object_size_hint_max_get(wd->btn, &maxw, &maxh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_size_hint_max_set(obj, maxw, maxh); } @@ -53,6 +55,39 @@ _hover_clicked(void *data, Evas_Object *obj, void *event_info) elm_hoversel_hover_end(data); } +static void +_button_clicked(void *data, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(data); + Evas_Object *bt, *bx, *ic; + wd->hover = elm_hover_add(data); + elm_hover_style_set(wd->hover, "hoversel_vertical"); + evas_object_smart_callback_add(wd->hover, "clicked", _hover_clicked, data); + elm_hover_parent_set(wd->hover, wd->hover_parent); + elm_hover_target_set(wd->hover, wd->btn); + + bx = elm_box_add(wd->hover); + elm_box_homogenous_set(bx, 1); + + bt = elm_button_add(wd->hover); + elm_button_style_set(bt, "hoversel_vertical_entry"); + elm_button_label_set(bt, "Forward"); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + // FIXME: fill. + + elm_hover_content_set + (wd->hover, + elm_hover_best_content_location_get(wd->hover, ELM_HOVER_AXIS_VERTICAL), + bx); + evas_object_show(bx); + + evas_object_show(wd->hover); +} + static void _parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info) { @@ -74,12 +109,12 @@ elm_hoversel_add(Evas_Object *parent) elm_widget_del_pre_hook_set(obj, _del_pre_hook); elm_widget_del_hook_set(obj, _del_hook); -// wd->scroller = elm_scroller_add(parent); -// elm_widget_resize_object_set(obj, wd->scroller); - -// evas_object_event_callback_add(wd->entry, EVAS_CALLBACK_CHANGED_SIZE_HINTS, -// _changed_size_hints, obj); - + wd->btn = elm_button_add(parent); + elm_button_style_set(wd->btn, "hoversel_vertical"); + elm_widget_resize_object_set(obj, wd->btn); + evas_object_event_callback_add(wd->btn, EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _changed_size_hints, obj); + evas_object_smart_callback_add(wd->btn, "clicked", _button_clicked, obj); _sizing_eval(obj); return obj; } @@ -96,20 +131,42 @@ elm_hoversel_hover_parent_set(Evas_Object *obj, Evas_Object *parent) } EAPI void -elm_hoversel_hover_style_set(Evas_Object *obj, const char *style) +elm_hoversel_label_set(Evas_Object *obj, const char *label) { Widget_Data *wd = elm_widget_data_get(obj); - if (wd->hover_style) eina_stringshare_del(wd->hover_style); - wd->hover_style = NULL; - if (style) wd->hover_style = eina_stringshare_add(style); -} + elm_button_label_set(wd->btn, label); +} + +EAPI void +elm_hoversel_icon_set(Evas_Object *obj, Evas_Object *icon) +{ + Widget_Data *wd = elm_widget_data_get(obj); + elm_button_icon_set(wd->btn, icon); +} EAPI void elm_hoversel_hover_end(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); if (wd->hover) evas_object_del(wd->hover); - if (wd->pop) evas_object_del(wd->pop); wd->hover = NULL; - wd->pop = NULL; +} + +EAPI void * // FIXME: return some sort of handle other than void * +elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file, int icon_type, void (*func) (void *data, Evas_Object *obj, void *event_into), const void *data) +{ + Widget_Data *wd = elm_widget_data_get(obj); + // FIXME: implement +} + +EAPI void +elm_hoversel_item_del(void *item) +{ + // FIXME: implement +} + +EAPI void +elm_hoversel_item_enabled_set(void *item, Evas_Bool enabled) +{ + // FIXME: implement } diff --git a/legacy/elementary/src/lib/elm_entry.c b/legacy/elementary/src/lib/elm_entry.c index 174cb1fe13..9f596b90e7 100644 --- a/legacy/elementary/src/lib/elm_entry.c +++ b/legacy/elementary/src/lib/elm_entry.c @@ -42,8 +42,10 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); entries = eina_list_remove(entries, obj); +#ifdef HAVE_ELEMENTARY_X ecore_event_handler_del(wd->sel_notify_handler); ecore_event_handler_del(wd->sel_clear_handler); +#endif if (wd->cut_sel) eina_stringshare_del(wd->cut_sel); if (wd->deferred_recalc_job) ecore_job_del(wd->deferred_recalc_job); free(wd); @@ -548,6 +550,7 @@ _signal_key_enter(void *data, Evas_Object *obj, const char *emission, const char evas_object_smart_callback_call(data, "activated", NULL); } +#ifdef HAVE_ELEMENTARY_X static int _event_selection_notify(void *data, int type, void *event) { @@ -590,6 +593,7 @@ _event_selection_clear(void *data, int type, void *event) } return 1; } +#endif EAPI Evas_Object * elm_entry_add(Evas_Object *parent) @@ -632,6 +636,7 @@ elm_entry_add(Evas_Object *parent) elm_widget_resize_object_set(obj, wd->ent); _sizing_eval(obj); +#ifdef HAVE_ELEMENTARY_X if (elm_win_xwindow_get(elm_widget_top_get(parent)) != 0) { wd->sel_notify_handler = @@ -641,6 +646,7 @@ elm_entry_add(Evas_Object *parent) ecore_event_handler_add(ECORE_X_EVENT_SELECTION_CLEAR, _event_selection_clear, obj); } +#endif entries = eina_list_prepend(entries, obj); return obj; diff --git a/legacy/elementary/src/lib/elm_main.c b/legacy/elementary/src/lib/elm_main.c index 0975471242..a90ee04266 100644 --- a/legacy/elementary/src/lib/elm_main.c +++ b/legacy/elementary/src/lib/elm_main.c @@ -2,7 +2,9 @@ #include "elm_priv.h" static int _elm_signal_exit(void *data, int ev_type, void *ev); +#ifdef HAVE_ELEMENTARY_X static int _elm_window_property_change(void *data, int ev_type, void *ev); +#endif static void _elm_rescale(void); char *_elm_appname = NULL; @@ -17,6 +19,7 @@ _elm_signal_exit(void *data, int ev_type, void *ev) return 1; } +#ifdef HAVE_ELEMENTARY_X static int _elm_window_property_change(void *data, int ev_type, void *ev) { @@ -42,6 +45,7 @@ _elm_window_property_change(void *data, int ev_type, void *ev) } return 1; } +#endif static void _elm_rescale(void) @@ -55,6 +59,7 @@ EAPI void elm_init(int argc, char **argv) { int i; + const char *elm_engine, *elm_scale; eet_init(); ecore_init(); @@ -68,14 +73,46 @@ elm_init(int argc, char **argv) _elm_appname = strdup(ecore_file_file_get(argv[0])); + elm_engine = getenv("ELM_ENGINE"); + elm_scale = getenv("ELM_SCALE"); + // FIXME: actually load config _elm_config = ELM_NEW(Elm_Config); _elm_config->engine = ELM_SOFTWARE_X11; + if (elm_engine) + { + if ((!strcasecmp(elm_engine, "x11")) || + (!strcasecmp(elm_engine, "x")) || + (!strcasecmp(elm_engine, "software-x11")) || + (!strcasecmp(elm_engine, "software_x11"))) + _elm_config->engine = ELM_SOFTWARE_X11; + else if ((!strcasecmp(elm_engine, "x11-16")) || + (!strcasecmp(elm_engine, "x16")) || + (!strcasecmp(elm_engine, "software-16-x11")) || + (!strcasecmp(elm_engine, "software_16_x11"))) + _elm_config->engine = ELM_SOFTWARE_16_X11; + else if ((!strcasecmp(elm_engine, "xrender")) || + (!strcasecmp(elm_engine, "xr")) || + (!strcasecmp(elm_engine, "xrender-x11")) || + (!strcasecmp(elm_engine, "xrender_x11"))) + _elm_config->engine = ELM_XRENDER_X11; + else if ((!strcasecmp(elm_engine, "fb")) || + (!strcasecmp(elm_engine, "software-fb")) || + (!strcasecmp(elm_engine, "software_fb"))) + _elm_config->engine = ELM_SOFTWARE_FB; + else if ((!strcasecmp(elm_engine, "opengl")) || + (!strcasecmp(elm_engine, "gl")) || + (!strcasecmp(elm_engine, "opengl-x11")) || + (!strcasecmp(elm_engine, "opengl_x11"))) + _elm_config->engine = ELM_OPENGL_X11; + } + _elm_config->thumbscroll_enable = 1; _elm_config->thumbscroll_threshhold = 24; _elm_config->thumbscroll_momentum_threshhold = 100.0; _elm_config->thumbscroll_friction = 1.0; _elm_config->scale = 1.0; + _elm_config->bgpixmap = 0; _elm_config->compositing = 1; @@ -84,6 +121,7 @@ elm_init(int argc, char **argv) (_elm_config->engine == ELM_XRENDER_X11) || (_elm_config->engine == ELM_OPENGL_X11)) { +#ifdef HAVE_ELEMENTARY_X int val = 1000; ecore_x_init(NULL); @@ -100,14 +138,31 @@ elm_init(int argc, char **argv) } if (!ecore_x_screen_is_composited(0)) _elm_config->compositing = 0; +#endif } - + + if (elm_scale) + { + _elm_config->scale = atof(elm_scale); + } } EAPI void elm_shutdown(void) { _elm_win_shutdown(); + + if ((_elm_config->engine == ELM_SOFTWARE_X11) || + (_elm_config->engine == ELM_SOFTWARE_16_X11) || + (_elm_config->engine == ELM_XRENDER_X11) || + (_elm_config->engine == ELM_OPENGL_X11)) + { +#ifdef HAVE_ELEMENTARY_X + ecore_event_handler_del(_elm_event_property_change); + _elm_event_property_change = NULL; + ecore_x_shutdown(); +#endif + } free(_elm_config); free(_elm_appname); diff --git a/legacy/elementary/src/lib/elm_priv.h b/legacy/elementary/src/lib/elm_priv.h index 566e89a3ed..fe38b76d65 100644 --- a/legacy/elementary/src/lib/elm_priv.h +++ b/legacy/elementary/src/lib/elm_priv.h @@ -3,6 +3,12 @@ #include "elementary_config.h" +#ifdef HAVE_ELEMENTARY_X +#include +#endif +#ifdef HAVE_ELEMENTARY_FB +#include +#endif #ifdef HAVE_ALLOCA_H #include #endif diff --git a/legacy/elementary/src/lib/elm_win.c b/legacy/elementary/src/lib/elm_win.c index 2d55aa57ff..8a3801c384 100644 --- a/legacy/elementary/src/lib/elm_win.c +++ b/legacy/elementary/src/lib/elm_win.c @@ -10,7 +10,9 @@ struct _Elm_Win Evas_Object *parent; Evas_Object *win_obj; Eina_List *subobjs; +#ifdef HAVE_ELEMENTARY_X Ecore_X_Window xwin; +#endif Ecore_Job *deferred_resize_job; Ecore_Job *deferred_child_eval_job; @@ -34,7 +36,9 @@ static void _elm_win_obj_callback_del(void *data, Evas *e, Evas_Object *obj, voi static void _elm_win_obj_callback_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _elm_win_delete_request(Ecore_Evas *ee); static void _elm_win_resize_job(void *data); +#ifdef HAVE_ELEMENTARY_X static void _elm_win_xwin_update(Elm_Win *win); +#endif static void _elm_win_eval_subobjs(Evas_Object *obj); static void _elm_win_subobj_callback_del(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _elm_win_subobj_callback_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info); @@ -78,7 +82,19 @@ static void _elm_win_obj_intercept_resize(void *data, Evas_Object *obj, Evas_Coord w, Evas_Coord h) { Elm_Win *win = data; - ecore_evas_resize(win->ee, w, h); + switch (_elm_config->engine) + { + case ELM_SOFTWARE_FB: + break; + case ELM_SOFTWARE_X11: + case ELM_SOFTWARE_16_X11: + case ELM_XRENDER_X11: + case ELM_OPENGL_X11: + ecore_evas_resize(win->ee, w, h); + break; + default: + break; + } } static void @@ -249,6 +265,7 @@ _elm_win_xwindow_get(Elm_Win *win) static void _elm_win_xwin_update(Elm_Win *win) { +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); if (win->parent) { @@ -281,6 +298,7 @@ _elm_win_xwin_update(Elm_Win *win) if (win->xwin) ecore_x_e_virtual_keyboard_state_set (win->xwin, (Ecore_X_Virtual_Keyboard_State)win->kbdmode); +#endif } static void @@ -367,7 +385,6 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type) break; case ELM_SOFTWARE_FB: win->ee = ecore_evas_fb_new(NULL, 0, 1, 1); - ecore_evas_fullscreen_set(win->ee, 1); break; case ELM_SOFTWARE_16_X11: win->ee = ecore_evas_software_x11_16_new(NULL, 0, 0, 0, 1, 1); @@ -430,13 +447,25 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type) // evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_NONE); // evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_AUTO); // evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_BYTECODE); - edje_frametime_set(1.0 / 30.0); + edje_frametime_set(1.0 / 60.0); edje_scale_set(_elm_config->scale); _elm_win_xwin_update(win); _elm_win_list = eina_list_append(_elm_win_list, win->win_obj); + switch (_elm_config->engine) + { + case ELM_SOFTWARE_FB: + ecore_evas_fullscreen_set(win->ee, 1); + break; + case ELM_SOFTWARE_X11: + case ELM_SOFTWARE_16_X11: + case ELM_XRENDER_X11: + case ELM_OPENGL_X11: + default: + break; + } return win->win_obj; } @@ -545,9 +574,11 @@ elm_win_keyboard_mode_set(Evas_Object *obj, Elm_Win_Keyboard_Mode mode) if (mode == win->kbdmode) return; _elm_win_xwindow_get(win); win->kbdmode = mode; +#ifdef HAVE_ELEMENTARY_X if (win->xwin) ecore_x_e_virtual_keyboard_state_set (win->xwin, (Ecore_X_Virtual_Keyboard_State)win->kbdmode); +#endif } EAPI void @@ -556,9 +587,11 @@ elm_win_keyboard_win_set(Evas_Object *obj, Evas_Bool is_keyboard) Elm_Win *win = evas_object_data_get(obj, "__Elm"); if (!win) return; _elm_win_xwindow_get(win); +#ifdef HAVE_ELEMENTARY_X if (win->xwin) ecore_x_e_virtual_keyboard_set (win->xwin, is_keyboard); +#endif } EAPI Ecore_X_Window