From: Johannes Holmberg <[email protected]>
- 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 [email protected].