be able to build without x - so it should work on the fb.. and it does... at

leats my mouse and keyboard do - and windows are fullscreen of course... and
really you have a technical limit of 1 window... but hey! that's the fb!



SVN revision: 38077
This commit is contained in:
Carsten Haitzler 2008-12-10 06:33:24 +00:00
parent abed93c48e
commit 2a41db988e
10 changed files with 196 additions and 25 deletions

View File

@ -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)

View File

@ -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@

View File

@ -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

View File

@ -45,7 +45,6 @@
#include <Eet.h>
#include <Evas.h>
#include <Ecore.h>
#include <Ecore_X.h>
#include <Ecore_Evas.h>
#include <Ecore_Job.h>
#include <Ecore_Txt.h>

View File

@ -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

View File

@ -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
}

View File

@ -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;

View File

@ -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);

View File

@ -3,6 +3,12 @@
#include "elementary_config.h"
#ifdef HAVE_ELEMENTARY_X
#include <Ecore_X.h>
#endif
#ifdef HAVE_ELEMENTARY_FB
#include <Ecore_Fb.h>
#endif
#ifdef HAVE_ALLOCA_H
#include <alloca.h>
#endif

View File

@ -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