This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository enlightenment.

View the commit online.

commit 4e5c564f7c07f39365b67a7afa519677c1b3d185
Author: Alastair Poole <[email protected]>
AuthorDate: Sat Apr 18 10:10:06 2026 +0100

    e_comp: Add Roll Up shading transition with smooth vertical scroll effect
---
 src/bin/e_client.h                                 |  3 +-
 src/bin/e_comp_object.c                            | 46 ++++++++++++++++++++++
 src/bin/e_config.c                                 |  2 +-
 .../e_int_config_window_display.c                  |  4 ++
 4 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/src/bin/e_client.h b/src/bin/e_client.h
index 2130e9d67..1083eb7f6 100644
--- a/src/bin/e_client.h
+++ b/src/bin/e_client.h
@@ -31,7 +31,8 @@ typedef enum _E_Transition
    E_TRANSITION_DECELERATE_LOTS = 5,
    E_TRANSITION_SINUSOIDAL_LOTS = 6,
    E_TRANSITION_BOUNCE = 7,
-   E_TRANSITION_BOUNCE_LOTS = 8
+   E_TRANSITION_BOUNCE_LOTS = 8,
+   E_TRANSITION_ROLL_UP = 9
 } E_Transition;
 
 typedef enum _E_Stacking
diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c
index f812642b2..55e15a53e 100644
--- a/src/bin/e_comp_object.c
+++ b/src/bin/e_comp_object.c
@@ -1956,6 +1956,7 @@ static Eina_Bool
 _e_comp_object_shade_animator(void *data)
 {
    E_Comp_Object *cw = data;
+   Eina_Bool roll = EINA_FALSE;
    Eina_Bool move = EINA_FALSE;
    int x, y, w, h;
    double dt, val;
@@ -2024,6 +2025,13 @@ _e_comp_object_shade_animator(void *data)
           ecore_animator_pos_map(val, ECORE_POS_MAP_BOUNCE, 1.2, 5.0);
         if (!cw->ec->shaded) cw->shade.val = 1.0 - cw->shade.val;
      }
+   else if (e_config->border_shade_transition == E_TRANSITION_ROLL_UP)
+     {
+        cw->shade.val =
+          ecore_animator_pos_map(val, ECORE_POS_MAP_LINEAR, 0.0, 0.0);
+        if (!cw->ec->shaded) cw->shade.val = 1.0 - cw->shade.val;
+        roll = EINA_TRUE;
+     }
    else
      {
         cw->shade.val =
@@ -2056,11 +2064,49 @@ _e_comp_object_shade_animator(void *data)
 
    if (move) evas_object_move(cw->smart_obj, x, y);
    evas_object_resize(cw->smart_obj, w, h);
+   if (roll &&
+       ((cw->shade.dir == E_DIRECTION_UP) || (cw->shade.dir == E_DIRECTION_DOWN)))
+     {
+        Evas_Map *m;
+        int ow, oh;
+        int vish;
+        double offset;
+        double p;
+
+        evas_object_geometry_get(cw->obj, NULL, NULL, &ow, &oh);
+        if ((ow > 0) && (oh > 0))
+          {
+             p = cw->shade.val;
+             if (p < 0.0) p = 0.0;
+             else if (p > 1.0) p = 1.0;
+             /* lock UV scroll to the exact visible shaded height to avoid jitter */
+             vish = MAX(1, h - cw->client_inset.t);
+             if (vish > cw->ec->client.h) vish = cw->ec->client.h;
+             offset = (double)(cw->ec->client.h - vish);
+
+             m = evas_map_new(4);
+             evas_map_util_points_populate_from_object(m, cw->obj);
+             /* Keep geometry unchanged and shift only texture sampling upward. */
+             evas_map_point_image_uv_set(m, 0, 0, offset);
+             evas_map_point_image_uv_set(m, 1, ow, offset);
+             evas_map_point_image_uv_set(m, 2, ow, oh + offset);
+             evas_map_point_image_uv_set(m, 3, 0, oh + offset);
+             evas_map_smooth_set(m, EINA_TRUE);
+             evas_object_map_set(cw->obj, m);
+             evas_object_map_enable_set(cw->obj, EINA_TRUE);
+             evas_map_free(m);
+          }
+        else
+          evas_object_map_enable_set(cw->obj, EINA_FALSE);
+     }
+   else
+     evas_object_map_enable_set(cw->obj, EINA_FALSE);
 
    /* we're done */
    if (EINA_DBL_EQ(val, 1))
      {
         cw->shade.anim = NULL;
+        evas_object_map_enable_set(cw->obj, EINA_FALSE);
 
         evas_object_smart_callback_call(cw->smart_obj, "shade_done", NULL);
         if (cw->ec->shaded)
diff --git a/src/bin/e_config.c b/src/bin/e_config.c
index 1f73878c5..fb87f8c8f 100644
--- a/src/bin/e_config.c
+++ b/src/bin/e_config.c
@@ -1830,7 +1830,7 @@ e_config_load(void)
    E_CONFIG_LIMIT(e_config->window_maximize_transition, 0, E_EFX_EFFECT_SPEED_SINUSOIDAL);
    E_CONFIG_LIMIT(e_config->window_maximize_time, 0.0, 1.0);
    E_CONFIG_LIMIT(e_config->border_shade_animate, 0, 1);
-   E_CONFIG_LIMIT(e_config->border_shade_transition, 0, 8);
+   E_CONFIG_LIMIT(e_config->border_shade_transition, 0, 9);
    E_CONFIG_LIMIT(e_config->border_shade_speed, 1.0, 20000.0);
    E_CONFIG_LIMIT(e_config->priority, 0, 19);
    E_CONFIG_LIMIT(e_config->zone_desks_x_count, 1, 64);
diff --git a/src/modules/conf_window_manipulation/e_int_config_window_display.c b/src/modules/conf_window_manipulation/e_int_config_window_display.c
index 4daf61847..61fd336f8 100644
--- a/src/modules/conf_window_manipulation/e_int_config_window_display.c
+++ b/src/modules/conf_window_manipulation/e_int_config_window_display.c
@@ -248,6 +248,10 @@ _basic_create(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, E_Config_Dialog_Data
    e_widget_check_widget_disable_on_unchecked_add(oc, ow);
    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
 
+   ow = e_widget_radio_add(evas, _("Roll up"), E_TRANSITION_ROLL_UP, rg);
+   e_widget_check_widget_disable_on_unchecked_add(oc, ow);
+   e_widget_list_object_append(ol, ow, 1, 1, 0.5);
+
    e_widget_toolbook_page_append(otb, NULL, _("Shading"), ol,
                                  1, 1, 1, 0, 0.0, 0.0);
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to