From: Johannes Holmberg <johan...@update.uu.se>

- More logical relationship between volume level and bar length
- No unnecessary drawing
- Volume bar shrinks properly even when volume is lowered very quickly
---
 wmix/ui_x.c | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/wmix/ui_x.c b/wmix/ui_x.c
index 2ab337e..ef034c5 100644
--- a/wmix/ui_x.c
+++ b/wmix/ui_x.c
@@ -417,16 +417,20 @@ void update_osd(float volume, bool up)
     static int bar;
 
     if (config.osd) {
-       foo =
-           (((dockapp.osd_width / 100) * (volume * 100)) / 20) + 1;
-
-       if ((foo != bar) || up) {
-           XClearArea(display, dockapp.osd, ((bar - 1) * 20), 30,
-                      (foo * 20), 25, 1);
-           for (i = 1; i < foo; i++)
-               XFillRectangle(display, dockapp.osd, dockapp.osd_gc,
-                              i * 20, 30, 5, 25);
-       }
+       foo = (dockapp.osd_width - 20) * volume / 20.0;
+
+        if (up) {
+            for (i = 1; i <= foo; i++)
+                XFillRectangle(display, dockapp.osd, dockapp.osd_gc,
+                               i * 20, 30, 5, 25);
+        } else if (foo < bar) {
+            XClearArea(display, dockapp.osd, ((foo+1) * 20), 30,
+                       ((bar-foo) * 20), 25, 1);
+        } else if (foo > bar) {
+            for (i = (bar > 0 ? bar : 1); i <= foo; i++)
+                XFillRectangle(display, dockapp.osd, dockapp.osd_gc,
+                               i * 20, 30, 5, 25);
+        }
        bar = foo;
     }
 }
-- 
2.1.4


-- 
To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.

Reply via email to