Hi guys
On adding a gadcon client to EFM toolbar, its width used hardcoded value
regardless of gadcon client type. Here is patchset allowing to define
default (preferred) width for each type of EFM toolbar client.
- edje changed so a collections.group of .edc collection file can have
"prefer" value.
- on creating a new, unconfigured gadcon client, it uses preferred size
of underlying Evas object as its width.
- appropriate sizes applied to EFM modules
Hope you'll find it useful.
Sincerely, Victor.
On creating new gadcon client, make it honors size preferences of container Evas_Object. On loading scrollframe content from a file, apply preferred size of contained object as preferred size to scrollframe itself.
e_gadcon.c | 54 +++++++++++++++++++++++++++++++++++-------------------
e_scrollframe.c | 7 +++++++
2 files changed, 42 insertions(+), 19 deletions(-)
Index: e17-svn/src/bin/e_gadcon.c
===================================================================
--- e17-svn/src/bin/e_gadcon.c (revision 42565)
+++ e17-svn/src/bin/e_gadcon.c (working copy)
@@ -398,6 +398,36 @@
/* FIXME: delete container obj, re-pack all clients */
}
+static void
+_e_gadcon_client_adjust_size(E_Gadcon_Client *gcc, E_Config_Gadcon_Client *cf_gcc)
+{
+ Evas_Coord w = 0;
+ Evas_Object *obj = NULL;
+
+ cf_gcc->geom.res = 800;
+ if (gcc->o_frame)
+ obj = gcc->o_frame;
+ else if (gcc->o_base)
+ obj = gcc->o_base;
+ if (0 == cf_gcc->geom.size)
+ {
+ /* this gadcon client don't configured yet */
+ if (obj)
+ evas_object_size_hint_request_get(obj, &w, NULL);
+ if (0 == w)
+ /* evas object don't provide size hint, use default */
+ cf_gcc->geom.size = 80;
+ else
+ /* use evas object size hint */
+ cf_gcc->geom.size = w;
+ }
+ gcc->config.pos = cf_gcc->geom.pos;
+ gcc->config.size = cf_gcc->geom.size;
+ gcc->config.res = cf_gcc->geom.res;
+ if (obj)
+ e_gadcon_layout_pack_options_set(obj, gcc);
+}
+
EAPI void
e_gadcon_populate(E_Gadcon *gc)
{
@@ -437,16 +467,9 @@
{
gcc->cf = cf_gcc;
gcc->client_class = cc;
- gcc->config.pos = cf_gcc->geom.pos;
- gcc->config.size = cf_gcc->geom.size;
- gcc->config.res = cf_gcc->geom.res;
gcc->state_info.seq = cf_gcc->state_info.seq;
gcc->state_info.flags = cf_gcc->state_info.flags;
- if (gcc->o_frame)
- e_gadcon_layout_pack_options_set(gcc->o_frame, gcc);
- else if (gcc->o_base)
- e_gadcon_layout_pack_options_set(gcc->o_base, gcc);
-
+ _e_gadcon_client_adjust_size(gcc, cf_gcc);
e_gadcon_client_autoscroll_set(gcc, cf_gcc->autoscroll);
e_gadcon_client_resizable_set(gcc, cf_gcc->resizable);
if (gcc->client_class->func.orient)
@@ -510,16 +533,9 @@
{
gcc->cf = cf_gcc;
gcc->client_class = cc;
- gcc->config.pos = cf_gcc->geom.pos;
- gcc->config.size = cf_gcc->geom.size;
- gcc->config.res = cf_gcc->geom.res;
gcc->state_info.seq = cf_gcc->state_info.seq;
gcc->state_info.flags = cf_gcc->state_info.flags;
- if (gcc->o_frame)
- e_gadcon_layout_pack_options_set(gcc->o_frame, gcc);
- else if (gcc->o_base)
- e_gadcon_layout_pack_options_set(gcc->o_base, gcc);
-
+ _e_gadcon_client_adjust_size(gcc, cf_gcc);
e_gadcon_client_autoscroll_set(gcc, cf_gcc->autoscroll);
e_gadcon_client_resizable_set(gcc, cf_gcc->resizable);
if (gcc->client_class->func.orient)
@@ -794,9 +810,9 @@
if (!cf_gcc) return NULL;
cf_gcc->name = eina_stringshare_add(name);
cf_gcc->id = eina_stringshare_add(cc->func.id_new(cc));
- cf_gcc->geom.res = 800;
- cf_gcc->geom.size = 80;
- cf_gcc->geom.pos = cf_gcc->geom.res - cf_gcc->geom.size;
+ cf_gcc->geom.res = 0;
+ cf_gcc->geom.size = 0;
+ cf_gcc->geom.pos = 0;
cf_gcc->style = NULL;
cf_gcc->autoscroll = 0;
cf_gcc->resizable = 0;
Index: e17-svn/src/bin/e_scrollframe.c
===================================================================
--- e17-svn/src/bin/e_scrollframe.c (revision 42565)
+++ e17-svn/src/bin/e_scrollframe.c (working copy)
@@ -215,8 +215,15 @@
e_scrollframe_custom_edje_file_set(Evas_Object *obj, char *file, char *group)
{
API_ENTRY return 0;
+ Evas_Coord w = 0, h = 0;
if (!edje_object_file_set(sd->edje_obj, file, group)) return 0;
+
+ /* use same size hints for container object */
+ evas_object_size_hint_request_get(sd->edje_obj, &w, &h);
+ if (0 != w || 0 != h)
+ evas_object_size_hint_request_set(obj, w, h);
+
if (sd->pan_obj)
edje_object_part_swallow(sd->edje_obj, "e.swallow.content", sd->pan_obj);
sd->vbar_visible = !sd->vbar_visible;
Adds "prefer" keyword support to collections.group of .edc files.
bin/edje_cc_handlers.c | 25 +++++++++++++++++++++++++
lib/edje_data.c | 2 ++
lib/edje_load.c | 3 ++-
lib/edje_private.h | 2 +-
4 files changed, 30 insertions(+), 2 deletions(-)
Index: edje-svn/src/lib/edje_data.c
===================================================================
--- edje-svn/src/lib/edje_data.c (revision 42565)
+++ edje-svn/src/lib/edje_data.c (working copy)
@@ -394,6 +394,8 @@
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.min.h", prop.min.h, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.max.w", prop.max.w, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.max.h", prop.max.h, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.prefer.w", prop.prefer.w, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.prefer.h", prop.prefer.h, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "id", id, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "script_only", script_only, EET_T_UCHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "lua_script_only", lua_script_only, EET_T_UCHAR);
Index: edje-svn/src/lib/edje_load.c
===================================================================
--- edje-svn/src/lib/edje_load.c (revision 42565)
+++ edje-svn/src/lib/edje_load.c (working copy)
@@ -718,7 +718,8 @@
eina_stringshare_del(name);
}
}
-
+ if (0 != ed->collection->prop.prefer.w || 0 != ed->collection->prop.prefer.h)
+ evas_object_size_hint_request_set(obj, ed->collection->prop.prefer.w, ed->collection->prop.prefer.h);
_edje_recalc(ed);
_edje_thaw(ed);
_edje_unblock(ed);
Index: edje-svn/src/lib/edje_private.h
===================================================================
--- edje-svn/src/lib/edje_private.h (revision 42565)
+++ edje-svn/src/lib/edje_private.h (working copy)
@@ -395,7 +395,7 @@
int id; /* the collection id */
struct {
- Edje_Size min, max;
+ Edje_Size min, prefer, max;
} prop;
int references;
Index: edje-svn/src/bin/edje_cc_handlers.c
===================================================================
--- edje-svn/src/bin/edje_cc_handlers.c (revision 42565)
+++ edje-svn/src/bin/edje_cc_handlers.c (working copy)
@@ -82,6 +82,7 @@
static void st_collections_group_alias(void);
static void st_collections_group_min(void);
static void st_collections_group_max(void);
+static void st_collections_group_prefer(void);
static void st_collections_group_data_item(void);
static void ob_collections_group_script(void);
@@ -244,6 +245,7 @@
{"collections.group.alias", st_collections_group_alias},
{"collections.group.min", st_collections_group_min},
{"collections.group.max", st_collections_group_max},
+ {"collections.group.prefer", st_collections_group_prefer},
{"collections.group.data.item", st_collections_group_data_item},
{"collections.group.image", st_images_image}, /* dup */
{"collections.group.images.image", st_images_image}, /* dup */
@@ -1470,6 +1472,29 @@
/**
@page edcref
+ @property
+ prefer
+ @parameters
+ [width] [height]
+ @effect
+ Sets the preferred size hints for the container defined by the totality of the
+ parts.
+ @endproperty
+*/
+static void
+st_collections_group_prefer(void)
+{
+ Edje_Part_Collection *pc;
+
+ check_arg_count(2);
+
+ pc = eina_list_data_get(eina_list_last(edje_collections));
+ pc->prop.prefer.w = parse_int_range(0, 0, 0x7fffffff);
+ pc->prop.prefer.h = parse_int_range(1, 0, 0x7fffffff);
+}
+
+/**
+ @page edcref
@block
script
@context
Add preferred size to EFM toolbar gadcon clients.
efm_nav/e-module-efm_nav.edc | 3 +++
efm_path/e-module-efm_path.edc | 1 +
efm_pathbar/e-module-efm_pathbar.edc | 1 +
3 files changed, 5 insertions(+)
Index: modules-svn/efm_path/e-module-efm_path.edc
===================================================================
--- modules-svn/efm_path/e-module-efm_path.edc (revision 42565)
+++ modules-svn/efm_path/e-module-efm_path.edc (working copy)
@@ -35,6 +35,7 @@
group
{
name: "modules/efm_path/main";
+ prefer: 200 0;
parts
{
part
Index: modules-svn/efm_pathbar/e-module-efm_pathbar.edc
===================================================================
--- modules-svn/efm_pathbar/e-module-efm_pathbar.edc (revision 42565)
+++ modules-svn/efm_pathbar/e-module-efm_pathbar.edc (working copy)
@@ -28,6 +28,7 @@
group {
name: "modules/efm_pathbar/main";
+ prefer: 200 0;
parts {
part {
name: "base";
Index: modules-svn/efm_nav/e-module-efm_nav.edc
===================================================================
--- modules-svn/efm_nav/e-module-efm_nav.edc (revision 42565)
+++ modules-svn/efm_nav/e-module-efm_nav.edc (working copy)
@@ -221,6 +221,9 @@
group
{
name: "modules/efm_nav/main";
+ prefer: 140 0;
+ min: 140 0;
+ max: 140 0;
parts
{
part
------------------------------------------------------------------------------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9-12, 2009. Register now!
http://p.sf.net/sfu/devconf
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel