On Thu, 2009-04-30 at 18:26 -0300, Gustavo Sverzut Barbieri wrote:
> On Thu, Apr 30, 2009 at 6:13 PM, Viktor Kojouharov
> <vkojouha...@gmail.com> wrote:
> > On Thu, 2009-04-30 at 17:32 -0300, Gustavo Sverzut Barbieri wrote:
> >> On Wed, Apr 29, 2009 at 7:18 PM, Viktor Kojouharov
> >> <vkojouha...@gmail.com> wrote:
> >> > On Wed, 2009-04-29 at 18:58 -0300, Rafael Antognolli wrote:
> >> >> On Wed, Apr 29, 2009 at 4:31 PM, Viktor Kojouharov
> >> >> <vkojouha...@gmail.com> wrote:
> >> >> > Hi,
> >> >> >
> >> >> > I've been playing around with the making the bg_object pan on desk
> >> >> > switch, instead of using transitions. To illustrate what I'm talking
> >> >> > about, I made a rather crappy screencast (istanbul only seems to make
> >> >> > 10fps screencasts, anyone have an alternative program?):
> >> >> >
> >> >> > http://www.youtube.com/watch?v=glYLH3GSikE
> >> >> >
> >> >> > The idea is that the background slides depending on its size relative
> >> >> > to
> >> >> > the geometry of all desks, as well as a user specified factor. E.g.:
> >> >> > if
> >> >> > you have 2 horizontal desks of size 640x480, and a bg of size
> >> >> > 1280x480,
> >> >> > the background will slide at most by a half of its size. If the user
> >> >> > specifies a factor below 1.0, the offset of the bg is smaller,
> >> >> > creating
> >> >> > a parallax effect. If the bg size is smaller, the total offset will be
> >> >> > smaller, thus not causing the bg to scroll off boundary.
> >> >> >
> >> >> > I've currently implemented it with this patch. It is toggable by an
> >> >> > option in the virtual desks settings dialog, which will override any
> >> >> > preselected transition (since it doesn't use the same function). Speed
> >> >> > is not blazing fast, but I'm not sure if it can be faster with just
> >> >> > using the software engine (using the gl engine for the container is
> >> >> > flicker free though).
> >> >> >
> >> >> > So what do you guys think of this idea?
> >> >>
> >> >> Wow, very nice effect!
> >> >>
> >> >> Now I'm thinking if it would be possible to have a wallpaper with many
> >> >> layers, and some of them scroll more than others. This way you would
> >> >> have an effect as if the near mountains move faster than the far ones
> >> >> (giving an idea of depth)...
> >> >>
> >> > If there's any way to communicate the direction, duration and distance
> >> > to edje, then maybe it could be possible. Not sure how much info one
> >> > could give with an edje signal. And the performance might degrade.
> >>
> >> just use edje messages instead of signals, you can give it an array of
> >> floats. As for performance, yeah, it will suck with slower machines.
> >>
> >
> > Actually, another idea which might work even easier (though it would be
> > a bit more restricting), is to get all groups matching the
> > 'e/desktop/background/*' glob. these groups can represent additional
> > background elements, and they could have a data item, which specifies
> > the speed coefficient, relative to the 'e/desktop/background' element.
> >
> > E.g.: I could have an 'e/desktop/background/sun' group, which would
> > show a sun. It would have a data item 'data.item: "relative_speed_x"
> > "0.1" # (0.0 - inf). Then the sun would be offset by 0.1 of the
> > background offset in the X direction. This is easier for implementation
> > and easier for the themers to do, but it only offers movement relative
> > to the main background object (but it will achieve what Rafael is
> > suggestion, so I don't know whether more freedom is needed).
>
> i dislike as you'll need a special case. In the other way you just
> send some integers/floats that specify the overall state, for example:
>
> - this screen geometry (x, y, w, h)
> - the whole virtual size (w_all, h_all)
> - transition position (either -1.0..1.0, x_pos, y_pos...)
>
> then one can do all the fancy stuff, maybe gradient will change based
> on values, etc.
>
I've updated the patch with a few fixes and also with sending a message
with all the info that can be used to reproduce the animation (see line
249). The question is, how easy would be for a designer to use this info
and create the parallax effect in edje? I don't know embryo that much,
but I haven't seen a way to run a program and specify a transition for
it as well.
Index: src/bin/e_zone.c
===================================================================
--- src/bin/e_zone.c (revision 40414)
+++ src/bin/e_zone.c (working copy)
@@ -235,6 +235,8 @@ e_zone_move(E_Zone *zone, int x, int y)
zone->x = x;
zone->y = y;
evas_object_move(zone->bg_object, x, y);
+ if (zone->bg_scrollframe)
+ evas_object_move(zone->bg_scrollframe, x, y);
evas_object_move(zone->bg_event_object, x, y);
evas_object_move(zone->bg_clip_object, x, y);
@@ -287,6 +289,8 @@ e_zone_resize(E_Zone *zone, int w, int h)
zone->w = w;
zone->h = h;
evas_object_resize(zone->bg_object, w, h);
+ if (zone->bg_scrollframe)
+ evas_object_resize(zone->bg_scrollframe, w, h);
evas_object_resize(zone->bg_event_object, w, h);
evas_object_resize(zone->bg_clip_object, w, h);
@@ -345,9 +349,13 @@ e_zone_move_resize(E_Zone *zone, int x, int y, int
zone->h = h;
evas_object_move(zone->bg_object, x, y);
+ if (zone->bg_scrollframe)
+ evas_object_move(zone->bg_scrollframe, x, y);
evas_object_move(zone->bg_event_object, x, y);
evas_object_move(zone->bg_clip_object, x, y);
evas_object_resize(zone->bg_object, w, h);
+ if (zone->bg_scrollframe)
+ evas_object_resize(zone->bg_scrollframe, w, h);
evas_object_resize(zone->bg_event_object, w, h);
evas_object_resize(zone->bg_clip_object, w, h);
@@ -939,6 +947,8 @@ _e_zone_free(E_Zone *zone)
{
E_Container *con;
Eina_List *l;
+ Ecore_Animator *anim;
+ void *data;
int x, y;
/* Delete the edge windows if they exist */
@@ -988,9 +998,14 @@ _e_zone_free(E_Zone *zone)
con = zone->container;
if (zone->name) eina_stringshare_del(zone->name);
con->zones = eina_list_remove(con->zones, zone);
+ anim = evas_object_data_get(zone->bg_object, "switch_animator");
+ if (anim) ecore_animator_del(anim);
+ data = evas_object_data_get(zone->bg_object, "switch_animator_params");
+ if (data) E_FREE(data);
evas_object_del(zone->bg_event_object);
evas_object_del(zone->bg_clip_object);
evas_object_del(zone->bg_object);
+ evas_object_del(zone->bg_scrollframe);
if (zone->prev_bg_object) evas_object_del(zone->prev_bg_object);
if (zone->transition_object) evas_object_del(zone->transition_object);
Index: src/bin/e_zone.h
===================================================================
--- src/bin/e_zone.h (revision 40414)
+++ src/bin/e_zone.h (working copy)
@@ -48,6 +48,7 @@ struct _E_Zone
Evas_Object *bg_event_object;
Evas_Object *bg_clip_object;
Evas_Object *prev_bg_object;
+ Evas_Object *bg_scrollframe;
Evas_Object *transition_object;
int desk_x_count, desk_y_count;
Index: src/bin/e_config.c
===================================================================
--- src/bin/e_config.c (revision 40414)
+++ src/bin/e_config.c (working copy)
@@ -622,6 +622,9 @@ e_config_init(void)
E_CONFIG_VAL(D, T, desk_flip_animate_mode, INT);
E_CONFIG_VAL(D, T, desk_flip_animate_interpolation, INT);
E_CONFIG_VAL(D, T, desk_flip_animate_time, DOUBLE);
+ E_CONFIG_VAL(D, T, desk_flip_pan_bg, UCHAR);
+ E_CONFIG_VAL(D, T, desk_flip_pan_x_axis_factor, DOUBLE);
+ E_CONFIG_VAL(D, T, desk_flip_pan_y_axis_factor, DOUBLE);
E_CONFIG_VAL(D, T, wallpaper_import_last_dev, STR);
E_CONFIG_VAL(D, T, wallpaper_import_last_path, STR);
@@ -915,6 +918,12 @@ e_config_load(void)
e_config->screensaver_ask_presentation_timeout = 30.0;
IFCFGEND;
+ IFCFG(0x0133);
+ COPYVAL(desk_flip_pan_bg);
+ COPYVAL(desk_flip_pan_x_axis_factor);
+ COPYVAL(desk_flip_pan_y_axis_factor);
+ IFCFGEND;
+
e_config->config_version = E_CONFIG_FILE_VERSION;
_e_config_free(tcfg);
}
@@ -1017,6 +1026,9 @@ e_config_load(void)
E_CONFIG_LIMIT(e_config->desk_flip_wrap, 0, 1);
E_CONFIG_LIMIT(e_config->fullscreen_flip, 0, 1);
E_CONFIG_LIMIT(e_config->icon_theme_overrides, 0, 1);
+ E_CONFIG_LIMIT(e_config->desk_flip_pan_bg, 0, 1);
+ E_CONFIG_LIMIT(e_config->desk_flip_pan_x_axis_factor, 0.0, 1.0);
+ E_CONFIG_LIMIT(e_config->desk_flip_pan_y_axis_factor, 0.0, 1.0);
E_CONFIG_LIMIT(e_config->remember_internal_windows, 0, 1);
E_CONFIG_LIMIT(e_config->desk_auto_switch, 0, 1);
Index: src/bin/e_config.h
===================================================================
--- src/bin/e_config.h (revision 40414)
+++ src/bin/e_config.h (working copy)
@@ -35,7 +35,7 @@ typedef struct _E_Event_Config_Icon_Theme E_Even
/* increment this whenever a new set of config values are added but the users
* config doesn't need to be wiped - simply new values need to be put in
*/
-#define E_CONFIG_FILE_GENERATION 0x0132
+#define E_CONFIG_FILE_GENERATION 0x0133
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION)
#define E_EVAS_ENGINE_DEFAULT 0
@@ -272,6 +272,9 @@ struct _E_Config
int desk_flip_animate_mode; // GUI
int desk_flip_animate_interpolation; // GUI
double desk_flip_animate_time; // GUI
+ Eina_Bool desk_flip_pan_bg;
+ double desk_flip_pan_x_axis_factor;
+ double desk_flip_pan_y_axis_factor;
const char *wallpaper_import_last_dev; // INTERNAL
const char *wallpaper_import_last_path; // INTERNAL
Index: src/bin/e_bg.c
===================================================================
--- src/bin/e_bg.c (revision 40414)
+++ src/bin/e_bg.c (working copy)
@@ -6,11 +6,23 @@
/* local subsystem functions */
static void _e_bg_signal(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _e_bg_event_bg_update_free(void *data, void *event);
+static int _e_bg_slide_animator(void *data);
/* local subsystem globals */
EAPI int E_EVENT_BG_UPDATE = 0;
static E_Fm2_Mime_Handler *bg_hdl = NULL;
+typedef struct _E_Bg_Anim_Params E_Bg_Anim_Params;
+struct _E_Bg_Anim_Params
+{
+ E_Zone *zone;
+ double start_time;
+ int start_x;
+ int start_y;
+ int end_x;
+ int end_y;
+};
+
/* externally accessible functions */
EAPI int
e_bg_init(void)
@@ -263,6 +275,17 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition tra
evas_object_resize(o, zone->w, zone->h);
evas_object_layer_set(o, -1);
}
+ if (e_config->desk_flip_pan_bg)
+ {
+ Evas_Coord w, h, maxw, maxh;
+
+ edje_object_size_max_get(zone->bg_object, &w, &h);
+ maxw = zone->w * zone->desk_x_count;
+ maxh = zone->h * zone->desk_y_count;
+ if (!w) w = maxw;
+ if (!h) h = maxh;
+ evas_object_resize(zone->bg_object, w, h);
+ }
evas_object_clip_set(o, zone->bg_clip_object);
evas_object_show(o);
@@ -281,6 +304,77 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition tra
}
EAPI void
+e_bg_zone_slide(E_Zone *zone, int prev_x, int prev_y)
+{
+ Evas_Object *o;
+ E_Desk *desk;
+ Evas_Coord w, h, maxw, maxh, step_w, step_h;
+ Ecore_Animator *anim;
+ E_Bg_Anim_Params *params;
+ Evas_Coord vw, vh, px, py;
+ Edje_Message_Float_Set *msg;
+
+ desk = e_desk_current_get(zone);
+ edje_object_size_max_get(zone->bg_object, &w, &h);
+ maxw = zone->w * zone->desk_x_count;
+ maxh = zone->h * zone->desk_y_count;
+ if (!w) w = maxw;
+ if (!h) h = maxh;
+ evas_object_resize(zone->bg_object, w, h);
+ step_w = ((double) (w - zone->w)) / (zone->desk_x_count - 1);
+ step_h = ((double) (h - zone->h)) / (zone->desk_y_count - 1);
+
+ o = zone->bg_scrollframe;
+ if (!o)
+ {
+ o = e_scrollframe_add(zone->container->bg_evas);
+ zone->bg_scrollframe = o;
+ e_scrollframe_custom_theme_set(o, "base/theme/background",
+ "e/desktop/background/scrollframe");
+ e_scrollframe_policy_set(o, E_SCROLLFRAME_POLICY_OFF, E_SCROLLFRAME_POLICY_OFF);
+ e_scrollframe_child_set(o, zone->bg_object);
+ e_scrollframe_child_pos_set(o, 0, 0);
+ evas_object_show(o);
+ }
+ evas_object_move(o, zone->x, zone->y);
+ evas_object_resize(o, zone->w, zone->h);
+ evas_object_layer_set(o, -1);
+ evas_object_clip_set(o, zone->bg_clip_object);
+
+ e_scrollframe_child_viewport_size_get(o, &vw, &vh);
+ e_scrollframe_child_pos_get(o, &px, &py);
+ params = evas_object_data_get(zone->bg_object, "switch_animator_params");
+ if (!params)
+ params = E_NEW(E_Bg_Anim_Params, 1);
+ params->zone = zone;
+ params->start_x = px;
+ params->start_y = py;
+ params->end_x = desk->x * step_w * e_config->desk_flip_pan_x_axis_factor;
+ params->end_y = desk->y * step_h * e_config->desk_flip_pan_y_axis_factor;
+ params->start_time = 0.0;
+
+ anim = evas_object_data_get(zone->bg_object, "switch_animator");
+ if (anim) ecore_animator_del(anim);
+ anim = ecore_animator_add(_e_bg_slide_animator, params);
+ evas_object_data_set(zone->bg_object, "switch_animator", anim);
+ evas_object_data_set(zone->bg_object, "switch_animator_params", params);
+
+ msg = alloca(sizeof(Edje_Message_Float_Set) + (8 * sizeof(float)));
+ msg->count = 9;
+ msg->val[0] = params->start_x;
+ msg->val[1] = params->start_y;
+ msg->val[2] = params->end_x;
+ msg->val[3] = params->end_y;
+ msg->val[5] = step_w;
+ msg->val[6] = step_h;
+ msg->val[4] = e_config->desk_flip_animate_time;
+ msg->val[7] = e_config->desk_flip_pan_x_axis_factor;
+ msg->val[8] = e_config->desk_flip_pan_y_axis_factor;
+ edje_object_message_send(zone->bg_object, EDJE_MESSAGE_FLOAT_SET, 0, msg);
+
+}
+
+EAPI void
e_bg_default_set(char *file)
{
E_Event_Bg_Update *ev;
@@ -440,3 +534,54 @@ _e_bg_event_bg_update_free(void *data, void *event
{
free(event);
}
+
+static int
+_e_bg_slide_animator(void *data)
+{
+ E_Bg_Anim_Params *params;
+ E_Zone *zone;
+ Evas_Object *o;
+ E_Desk *desk;
+ double st;
+ double t, dt, spd;
+ Evas_Coord px, py;
+
+ params = data;
+ zone = params->zone;
+ desk = e_desk_current_get(zone);
+ t = ecore_loop_time_get();
+ dt = -1.0;
+ spd = e_config->desk_flip_animate_time;
+
+ o = zone->bg_scrollframe;
+ if (!params->start_time)
+ st = params->start_time = t;
+ else
+ st = params->start_time;
+
+ dt = (t - st) / spd;
+ if (dt > 1.0) dt = 1.0;
+ dt = 1.0 - dt;
+ dt *= dt; /* decelerate - could be a better hack */
+
+ if (params->end_x > params->start_x)
+ px = params->start_x + (params->end_x - params->start_x) * (1.0 - dt);
+ else
+ px = params->end_x + (params->start_x - params->end_x) * dt;
+
+ if (params->end_y > params->start_y)
+ py = params->start_y + (params->end_y - params->start_y) * (1.0 - dt);
+ else
+ py = params->end_y + (params->start_y - params->end_y) * dt;
+
+ e_scrollframe_child_pos_set(o, px, py);
+
+ if (dt <= 0.0)
+ {
+ evas_object_data_del(zone->bg_object, "switch_animator");
+ evas_object_data_del(zone->bg_object, "switch_animator_params");
+ E_FREE(params);
+ return 0;
+ }
+ return 1;
+}
Index: src/bin/e_bg.h
===================================================================
--- src/bin/e_bg.h (revision 40414)
+++ src/bin/e_bg.h (working copy)
@@ -32,6 +32,7 @@ EAPI int e_bg_shutdown(void);
EAPI const E_Config_Desktop_Background *e_bg_config_get(int container_num, int zone_num, int desk_x, int desk_y);
EAPI const char *e_bg_file_get(int container_num, int zone_num, int desk_x, int desk_y);
EAPI void e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition);
+EAPI void e_bg_zone_slide(E_Zone *zone, int prev_x, int prev_y);
EAPI void e_bg_add(int container, int zone, int desk_x, int desk_y, char *file);
EAPI void e_bg_del(int container, int zone, int desk_x, int desk_y);
EAPI void e_bg_default_set(char *file);
Index: src/bin/e_desk.c
===================================================================
--- src/bin/e_desk.c (revision 40414)
+++ src/bin/e_desk.c (working copy)
@@ -209,7 +209,7 @@ e_desk_show(E_Desk *desk)
E_Event_Desk_Before_Show *eev;
E_Event_Desk_After_Show *eeev;
Eina_List *l;
- int was_zone = 0, x, y, dx = 0, dy = 0;
+ int was_zone = 0, x, y, dx = 0, dy = 0, prev_x = 0, prev_y = 0;
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
@@ -232,6 +232,8 @@ e_desk_show(E_Desk *desk)
if (desk2->visible)
{
desk2->visible = 0;
+ prev_x = desk2->x;
+ prev_y = desk2->y;
dx = desk->x - desk2->x;
dy = desk->y - desk2->y;
if (e_config->desk_flip_animate_mode > 0)
@@ -272,7 +274,12 @@ e_desk_show(E_Desk *desk)
e_desk_last_focused_focus(desk);
if (was_zone)
- e_bg_zone_update(desk->zone, E_BG_TRANSITION_DESK);
+ {
+ if (e_config->desk_flip_pan_bg)
+ e_bg_zone_slide(desk->zone, prev_x, prev_y);
+ else
+ e_bg_zone_update(desk->zone, E_BG_TRANSITION_DESK);
+ }
else
e_bg_zone_update(desk->zone, E_BG_TRANSITION_START);
Index: src/modules/conf_desks/e_int_config_desks.c
===================================================================
--- src/modules/conf_desks/e_int_config_desks.c (revision 40455)
+++ src/modules/conf_desks/e_int_config_desks.c (working copy)
@@ -28,7 +28,10 @@ struct _E_Config_Dialog_Data
int flip_wrap;
int flip_mode;
int flip_interp;
+ int flip_pan_bg;
double flip_speed;
+ double x_axis_pan;
+ double y_axis_pan;
/*- GUI -*/
Evas_Object *preview;
@@ -73,7 +76,10 @@ _fill_data(E_Config_Dialog_Data *cfdata)
cfdata->flip_wrap = e_config->desk_flip_wrap;
cfdata->flip_mode = e_config->desk_flip_animate_mode;
cfdata->flip_interp = e_config->desk_flip_animate_interpolation;
+ cfdata->flip_pan_bg = e_config->desk_flip_pan_bg;
cfdata->flip_speed = e_config->desk_flip_animate_time;
+ cfdata->x_axis_pan = e_config->desk_flip_pan_x_axis_factor;
+ cfdata->y_axis_pan = e_config->desk_flip_pan_y_axis_factor;
}
static void *
@@ -181,7 +187,10 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Confi
e_config->desk_flip_animate_mode = cfdata->flip_mode;
e_config->desk_flip_animate_interpolation = cfdata->flip_interp;
+ e_config->desk_flip_pan_bg = cfdata->flip_pan_bg;
e_config->desk_flip_animate_time = cfdata->flip_speed;
+ e_config->desk_flip_pan_x_axis_factor = cfdata->x_axis_pan;
+ e_config->desk_flip_pan_y_axis_factor = cfdata->y_axis_pan;
e_config->edge_flip_dragging = cfdata->edge_flip_dragging;
e_config->desk_flip_wrap = cfdata->flip_wrap;
@@ -210,7 +219,10 @@ _advanced_check_changed(E_Config_Dialog *cfd, E_Co
return ((e_config->desk_flip_animate_mode != cfdata->flip_mode) ||
(e_config->desk_flip_animate_interpolation != cfdata->flip_interp) ||
+ (e_config->desk_flip_pan_bg != cfdata->flip_pan_bg) ||
(e_config->desk_flip_animate_time != cfdata->flip_speed) ||
+ (e_config->desk_flip_pan_x_axis_factor != cfdata->x_axis_pan) ||
+ (e_config->desk_flip_pan_y_axis_factor != cfdata->y_axis_pan) ||
(e_config->edge_flip_dragging != cfdata->edge_flip_dragging) ||
(e_config->desk_flip_wrap != cfdata->flip_wrap));
}
@@ -300,8 +312,21 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Eva
e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata);
ob = e_widget_slider_add(evas, 1, 0, _("%1.1f sec"), 0.0, 5.0, 0.05, 0, &(cfdata->flip_speed), NULL, 200);
e_widget_disabled_set(ob, !cfdata->flip_mode);
+ cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
e_widget_framelist_object_append(of, ob);
+ ob = e_widget_check_add(evas, _("Background panning"), &(cfdata->flip_pan_bg));
+ e_widget_disabled_set(ob, !cfdata->flip_mode);
cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
+ e_widget_framelist_object_append(of, ob);
+ ob = e_widget_slider_add(evas, 1, 0, _("%.2f X-axis pan factor"), 0.0, 1.0, 0.01, 0, &(cfdata->x_axis_pan), NULL, 200);
+ e_widget_disabled_set(ob, !cfdata->flip_mode);
+ cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
+ e_widget_framelist_object_append(of, ob);
+ ob = e_widget_slider_add(evas, 1, 0, _("%.2f Y-axis pan factor"), 0.0, 1.0, 0.01, 0, &(cfdata->y_axis_pan), NULL, 200);
+ e_widget_disabled_set(ob, !cfdata->flip_mode);
+ cfdata->flip_anim_list = eina_list_append(cfdata->flip_anim_list, ob);
+ e_widget_framelist_object_append(of, ob);
+
e_widget_table_object_append(ott, of, 1, 1, 1, 1, 1, 1, 1, 1);
e_widget_list_object_append(o, ott, 1, 1, 0.5);
Index: data/themes/default.edc
===================================================================
--- data/themes/default.edc (revision 40414)
+++ data/themes/default.edc (working copy)
@@ -127,6 +127,28 @@ collections { /* begin the collection of edje grou
}
}
+ group { name: "e/desktop/background/scrollframe";
+ parts {
+ part { name: "clipper";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ }
+ }
+ part { name: "e.swallow.content";
+ clip_to: "clipper";
+ type: SWALLOW;
+ description { state: "default" 0.0;
+ rel1.offset: 0 0;
+ rel2 {
+ relative: 0.0 0.0;
+ offset: -1 -1;
+ }
+ }
+ }
+ }
+ }
+
/////////////////////////////////////////////////////////////////////////////
/*** DEFAULT WINDOW BORDER ***/
group { name: "e/widgets/border/default/border";
------------------------------------------------------------------------------
Register Now & Save for Velocity, the Web Performance & Operations
Conference from O'Reilly Media. Velocity features a full day of
expert-led, hands-on workshops and two days of sessions from industry
leaders in dedicated Performance & Operations tracks. Use code vel09scf
and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel