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

git pushed a commit to branch animated-tasks-bar
in repository efl.

View the commit online.

commit 351eac0043aebbd7ede0c119e0f696b1daa29121
Author: [email protected] <[email protected]>
AuthorDate: Sat Mar 7 17:11:11 2026 -0700

    feat: add text scrolling animation to taskbar items on hover
    
    The taskbar (tasks module) displays window titles with ellipsis (...) when
    text is too long to fit. This adds a smooth scrolling animation triggered
    by mouse hover, revealing the full window title by animating left and right
    across a sinusoidal 2-second loop. The effect matches the existing connman
    gadget's WiFi SSID scroll behavior for UI consistency.
    
    Additionally, the icon dims to 25% opacity during hover, drawing user
    attention to the scrolling title and improving visual hierarchy.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 data/elementary/themes/edc/tasks.edc | 157 ++++++++++++++++++++++++++++++++++-
 1 file changed, 156 insertions(+), 1 deletion(-)

diff --git a/data/elementary/themes/edc/tasks.edc b/data/elementary/themes/edc/tasks.edc
index 1ceae93a91..1411d108d4 100644
--- a/data/elementary/themes/edc/tasks.edc
+++ b/data/elementary/themes/edc/tasks.edc
@@ -88,6 +88,15 @@ group { name:"e/modules/tasks/item";
             visible: 1;
          }
       }
+      part { name: "icon_dim"; type: RECT; mouse_events: 0;
+         clip_to: "icon_clip";
+         description { state: "default" 0.0;
+            color: 255 255 255 255; // no cc
+         }
+         description { state: "visible" 0.0;
+            color: 255 255 255 64; // no cc
+         }
+      }
       part { name: "normal_clip"; type: RECT; mouse_events: 0;
          clip_to: "label_clip";
          description { state: "default" 0.0;
@@ -122,6 +131,38 @@ group { name:"e/modules/tasks/item";
             inherit: "default" 0.0;
             color_class: "/fg/pressed/gadgets/tasks/text/normal";
          }
+         description { state: "scroll_left" 0.0;
+            color_class: "/fg/normal/gadgets/tasks/text/normal";
+            offscale;
+            rel1.relative: 0.0 0.0;
+            rel1.offset: 4 4;
+            rel2.relative: 0.0 1.0;
+            rel2.offset: 4 -5;
+            align: 1.0 0.5;
+            fixed: 1 1;
+            text { font: FN; size: 10;
+               min: 1 1;
+               align: 0.5 0.5;
+               ellipsis: -1;
+               text_class: "tasks_text";
+            }
+         }
+         description { state: "scroll_right" 0.0;
+            color_class: "/fg/normal/gadgets/tasks/text/normal";
+            offscale;
+            rel1.relative: 1.0 0.0;
+            rel1.offset: -5 4;
+            rel2.relative: 1.0 1.0;
+            rel2.offset: -5 -5;
+            align: 0.0 0.5;
+            fixed: 1 1;
+            text { font: FN; size: 10;
+               min: 1 1;
+               align: 0.5 0.5;
+               ellipsis: -1;
+               text_class: "tasks_text";
+            }
+         }
       }
       part { name: "focused_clip"; type: RECT; mouse_events: 0;
          clip_to: "label_clip";
@@ -158,6 +199,40 @@ group { name:"e/modules/tasks/item";
             inherit: "default" 0.0;
             color_class: "/fg/pressed/gadgets/tasks/text/focused";
          }
+         description { state: "scroll_left" 0.0;
+            color_class: "/fg/normal/gadgets/tasks/text/focused";
+            offscale;
+            rel1.relative: 0.0 0.0;
+            rel1.offset: 4 4;
+            rel2.relative: 0.0 1.0;
+            rel2.offset: 4 -5;
+            align: 1.0 0.5;
+            fixed: 1 1;
+            text { font: FNBD; size: 10;
+               min: 1 1;
+               align: 0.5 0.5;
+               ellipsis: -1;
+               text_class: "tasks_text";
+               text_source: "e.text.label";
+            }
+         }
+         description { state: "scroll_right" 0.0;
+            color_class: "/fg/normal/gadgets/tasks/text/focused";
+            offscale;
+            rel1.relative: 1.0 0.0;
+            rel1.offset: -5 4;
+            rel2.relative: 1.0 1.0;
+            rel2.offset: -5 -5;
+            align: 0.0 0.5;
+            fixed: 1 1;
+            text { font: FNBD; size: 10;
+               min: 1 1;
+               align: 0.5 0.5;
+               ellipsis: -1;
+               text_class: "tasks_text";
+               text_source: "e.text.label";
+            }
+         }
       }
       part { name: "iconic_clip"; type: RECT; mouse_events: 0;
          clip_to: "label_clip";
@@ -194,6 +269,40 @@ group { name:"e/modules/tasks/item";
             inherit: "default" 0.0;
             color_class: "/fg/pressed/gadgets/tasks/text/iconified";
          }
+         description { state: "scroll_left" 0.0;
+            color_class: "/fg/normal/gadgets/tasks/text/iconified";
+            offscale;
+            rel1.relative: 0.0 0.0;
+            rel1.offset: 4 4;
+            rel2.relative: 0.0 1.0;
+            rel2.offset: 4 -5;
+            align: 1.0 0.5;
+            fixed: 1 1;
+            text { font: FN; size: 10;
+               min: 1 1;
+               align: 0.5 0.5;
+               ellipsis: -1;
+               text_class: "tasks_text";
+               text_source: "e.text.label";
+            }
+         }
+         description { state: "scroll_right" 0.0;
+            color_class: "/fg/normal/gadgets/tasks/text/iconified";
+            offscale;
+            rel1.relative: 1.0 0.0;
+            rel1.offset: -5 4;
+            rel2.relative: 1.0 1.0;
+            rel2.offset: -5 -5;
+            align: 0.0 0.5;
+            fixed: 1 1;
+            text { font: FN; size: 10;
+               min: 1 1;
+               align: 0.5 0.5;
+               ellipsis: -1;
+               text_class: "tasks_text";
+               text_source: "e.text.label";
+            }
+         }
       }
       part { name: "icon"; type: SPACER;
          scale: 1;
@@ -257,7 +366,7 @@ group { name:"e/modules/tasks/item";
          }
       }
       part { name: "e.swallow.icon"; type: SWALLOW; mouse_events: 0;
-         clip_to: "icon_clip";
+         clip_to: "icon_dim";
          description { state: "default" 0.0;
             aspect: 1.0 1.0; aspect_preference: VERTICAL;
             rel.to: "icon2";
@@ -419,6 +528,52 @@ group { name:"e/modules/tasks/item";
          target: "icon_clip";
          target: "label_clip";
       }
+
+      program { name: "scroll_start"; signal: "mouse,in"; source: "event";
+         action: STATE_SET "visible" 0.0;
+         transition: DECELERATE 0.25;
+         target: "icon_dim";
+         after: "scroll_init";
+      }
+      program { name: "scroll_init";
+         action: STATE_SET "scroll_right" 0.0;
+         target: "e.text.label";
+         target: "label_focused";
+         target: "label_iconic";
+         after: "scroll_l";
+      }
+      program { name: "scroll_l";
+         action: STATE_SET "scroll_left" 0.0;
+         transition: SINUSOIDAL 2.0;
+         target: "e.text.label";
+         target: "label_focused";
+         target: "label_iconic";
+         after: "scroll_r";
+      }
+      program { name: "scroll_r";
+         action: STATE_SET "scroll_right" 0.0;
+         transition: SINUSOIDAL 2.0;
+         target: "e.text.label";
+         target: "label_focused";
+         target: "label_iconic";
+         after: "scroll_l";
+      }
+      program { name: "scroll_stop"; signal: "mouse,out"; source: "event";
+         action: ACTION_STOP;
+         target: "scroll_start";
+         target: "scroll_init";
+         target: "scroll_l";
+         target: "scroll_r";
+         after: "scroll_reset";
+      }
+      program { name: "scroll_reset";
+         action: STATE_SET "default" 0.0;
+         transition: DECELERATE 0.5;
+         target: "e.text.label";
+         target: "label_focused";
+         target: "label_iconic";
+         target: "icon_dim";
+      }
    }
 }
 

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

Reply via email to