foo_uie_wsh_panel_mod

Список разделов foobar2000 Плагины

Описание: Все о плагинах, компонентах, расширениях

Сообщение #21 Devilc » 04.11.2009, 00:41

Не поможешь в ещё одной проблемке?
Сейчас обрисую ситуёвину. В этой сборке не удобно регулируется громкость. На скрине
Изображение
показано положение ползунка при нулевой громкости. Т.е. интервал регулирования сам видите какой мизерный. Можно сделать регулировку более плавной, т.е. 0 - это начало ползунка, а максимум - конец его.
Devilc M
Аватара
Репутация: 1
С нами: 17 лет 3 месяца

Сообщение #22 Izotop » 04.11.2009, 00:51

2Devilc
Это вопрос в тему WSH Panel.
Я себе переделал так::::
Splitter Settings --> Volume --> Configure
Код: Выделить всё
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }

// gdi.Font is changed, the last paramter is style flags
// FontStyleRegular = 0,
// FontStyleBold = 1,
// FontStyleItalic = 2,
// FontStyleBoldItalic = 3,
// FontStyleUnderline = 4,
// FontStyleStrikeout = 8
// Here is 0, means FontStyleRegular
var g_font = gdi.Font("Tahoma", 8, 0);
var g_drag = 0;

function on_paint(gr){
   gr.SetTextRenderingHint(5);
   var ww = window.Width;
   var wh = window.Height;
   var volume = fb.Volume;
   var pos = window.Width * ((30+volume)/30);
   var txt = (Math.ceil(volume)) + "dB";
   gr.FillGradRect(  0, 0,    pos, wh, 90, RGB(220,220,225), RGB(90,90,95));
   gr.FillGradRect(pos, 0, ww-pos, wh, 90, RGB(90,90,90), RGB(40,40,40));
//   gr.DrawString(txt, g_font, RGB(64,64,128), 0, 0, ww, wh, 0x11005000);
   gr.DrawRect(0,0, ww-1, wh-1, 1.0, RGB(20,20,20));
}

function on_mouse_lbtn_down(x,y){
   g_drag = 1;
}

function on_mouse_lbtn_up(x,y){
   on_mouse_move(x,y);
   g_drag = 0;
}

function on_mouse_move(x,y){
   if(g_drag){
      var v = x / window.Width;
      v = (v<0) ? 0 : (v<1) ? v : 1;
      v = -30 * (1-v);
      if(fb.Volume != v)
         fb.Volume = v;
   }
}

function on_mouse_wheel(delta){
   if(delta>0)
      fb.VolumeUp();
   else
      fb.VolumeDown();
}

function on_volume_change(val){
   window.Repaint();
}
//EOF
Но он не с нуля регулирует Volume ;)
Мне НОЛЬ громкости не нужен вовсе...
Но если нужно с НУЛЯ регулировать --- то необходима логарифмическая шкала регулировки *пыво*
Izotop M
Аватара
Откуда: Зеленоград - Харьков
Репутация: 69
С нами: 15 лет 5 месяцев

Сообщение #23 Devilc » 04.11.2009, 01:33

Именно то, что нужно! В который раз спасибо *пыво*
П.с.: извините, что последний вопрос не по теме, но не хотелось отрывать его от сборки....
Devilc M
Аватара
Репутация: 1
С нами: 17 лет 3 месяца

Сообщение #24 Izotop » 04.11.2009, 02:03

2Devlic
Строка 19::::
var pos = window.Width * ((30+volume)/30);
И
Строка 40::::
function on_mouse_move(x,y){
if(g_drag){
var v = x / window.Width;
v = (v<0) ? 0 : (v<1) ? v : 1;
v = -30 * (1-v);


Эти строки редактируем на свой вкус!
(параметры для редактирования выделены синим *пыво*)
Izotop M
Аватара
Откуда: Зеленоград - Харьков
Репутация: 69
С нами: 15 лет 5 месяцев

Сообщение #25 Devilc » 04.11.2009, 02:07

Это, я так понимаю и есть логарифмическая шкала? Спасибки, попробую и этот вариант, хотя думаю, что всё же остановлюсь на первом варианте *пыво*
Devilc M
Аватара
Репутация: 1
С нами: 17 лет 3 месяца

Сообщение #26 Izotop » 04.11.2009, 02:26

2Devilc
Не.
Логарифмическая шкала строится СОВСЕМ ПО ДРУГОМУ (правилу ;))
У неё свой закон управления уровнем громкости.
Рекомендую погуглить об этих (линейная и логарифмическая шкала) методах управления громкостью звука.
Izotop M
Аватара
Откуда: Зеленоград - Харьков
Репутация: 69
С нами: 15 лет 5 месяцев

Сообщение #27 LuSP » 04.11.2009, 11:11

Логарифмическая шкала строится СОВСЕМ ПО ДРУГОМУ
Да, только как она строится, так и не понял. Что такое логарифмическая шкала вкурсе, но как её прикрутить в WSH Panel Mod, чтобы было как в стандартном фубаре? Не впишешь ведь туда логарифм.
LuSP
Репутация: 0
С нами: 14 лет 8 месяцев

Сообщение #28 Izotop » 04.11.2009, 12:07

2LuSP
А почему бы и не логарифм? ;)

Попробуйте сделать так:::
Находим функцию:
function on_paint(gr){
в этой функции заменим строку: var pos = на значение: Math.round(ww*(Math.pow(10,volume/20)-0.01)/0.99);
Код: Выделить всё
var pos = Math.round(ww*(Math.pow(10,volume/20)-0.01)/0.99);
И
Находим функцию:
function on_mouse_move(x,y){
в этой функции находим последнюю инициализацию переменной: v = и меняем её на 20*Math.log(0.99*v+0.01)/Math.LN10;
Код: Выделить всё
v = 20*Math.log(0.99*v+0.01)/Math.LN10;

Далее експерементируем с цифрами, которые выделены выше синим цветом *пыво*
Izotop M
Аватара
Откуда: Зеленоград - Харьков
Репутация: 69
С нами: 15 лет 5 месяцев

Сообщение #29 LuSP » 04.11.2009, 13:12

2Izotop

Вот мой скрипт:
Код: Выделить всё
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
var img = gdi.image(fb.FoobarPath + "components\\bitmaps\\indicatorvol_normal.png");
var g_drag = 0;
var hofset = 0;

function on_paint(gr){
   var ww = window.Width;
   var wh = window.Height;
   var volume = fb.Volume;
   var pos = Math.round(ww*(Math.pow(20,volume/30)-0.01)/0.99);
   //var pos = window.Width * 10 * lg(volume)/100
   gr.DrawImage(img, hofset+pos-8, wh-10, 16, 10, 0, 0,16, 10);
}

function on_mouse_lbtn_down(x,y){
   g_drag = 1;
   img = gdi.image(fb.FoobarPath + "components\\bitmaps\\indicatorvol_normal.png");
}

function on_mouse_lbtn_up(x,y){
   on_mouse_move(x,y);
   g_drag = 0;
   img = gdi.image(fb.FoobarPath + "components\\bitmaps\\indicatorvol_normal.png");
}

function on_mouse_move(x,y){
   if(g_drag){
      var v = 30*Math.log(0.99*v+0.01)/Math.LN10;
      v = (v<0) ? 0 : (v<1) ? v : 1;
      v = -30 * (1-v);
      if(fb.Volume != v)
         fb.Volume = v;
   }
   img = gdi.image(fb.FoobarPath + "components\\bitmaps\\indicatorvol_normal.png");
}

function on_mouse_wheel(delta){
   if(delta>0)
      fb.VolumeUp();
   else
      fb.VolumeDown();
}

function on_volume_change(val){
   window.Repaint();
}

Проблема в том, что громкость регулируется только скроллом, а по клику бегунок уходит в крайнее правое положение. Как исправить function on_mouse_lbtn_down(x,y), function on_mouse_lbtn_up(x,y)?
Последний раз редактировалось LuSP 04.11.2009, 13:15, всего редактировалось 1 раз.
LuSP
Репутация: 0
С нами: 14 лет 8 месяцев

Сообщение #30 Izotop » 04.11.2009, 13:29

2LuSP
Я на пост выше писал::::
Izotop:И
Находим функцию:
function on_mouse_move(x,y){
в этой функции находим последнюю инициализацию переменной: v = и меняем её на 20*Math.log(0.99*v+0.01)/Math.LN10; Код:

v = 20*Math.log(0.99*v+0.01)/Math.LN10;
А у Вас переменная: v = равна -30 * (1-v);.
Видите ошибку?
Смените её на :::: v = 20*Math.log(0.99*v+0.01)/Math.LN10;
Izotop M
Аватара
Откуда: Зеленоград - Харьков
Репутация: 69
С нами: 15 лет 5 месяцев

Сообщение #31 LuSP » 04.11.2009, 17:18

2Izotop
Заменил v, вернул прежнее значение var v - всё заработало, только криво :(. Что-то не так в строчках:
Код: Выделить всё
var hofset = 0;
Код: Выделить всё
var ww = window.Width;
Код: Выделить всё
var pos = Math.round(ww*(Math.pow(20,volume/30)-0.01)/0.99);
и
Код: Выделить всё
gr.DrawImage(img, hofset+pos-8, wh-10, 16, 10, 0, 0,16, 10);

Спасибо за помощь. Надеюсь, всё-таки допилю регулятор громкости с прогресс-баром :)
LuSP
Репутация: 0
С нами: 14 лет 8 месяцев

Сообщение #32 Izotop » 04.11.2009, 17:55

LuSP:всё заработало, только криво
В чем проявляется КРИВизна его работы? ;)
Опишите конкретнее :)
Izotop M
Аватара
Откуда: Зеленоград - Харьков
Репутация: 69
С нами: 15 лет 5 месяцев

Сообщение #33 LuSP » 04.11.2009, 18:46

1) Бегунок выходит за границы регулятора, но главное  то, что отклонение различно: слева совсем немного, справа - значительно. Получается, что-то не так с var pos?
2) По клику центр бегунка должен оказываться под курсором, а он всё время не там. Отклонение зависит от того, в каком месте регулятора кликнуть.

P.S. Бегунок 16x10.
LuSP
Репутация: 0
С нами: 14 лет 8 месяцев

Сообщение #34 Izotop » 04.11.2009, 20:36

2LuSP
Вы не могли бы дать Ваш "бегунок" из components\bitmaps\indicatorvol_normal.png
indicatorvol_normal.png --- этот файлик.
А лучше всю Вашу сборку плеера --- чтоб было удобнее разбираться что в ней не так работает ;)
Izotop M
Аватара
Откуда: Зеленоград - Харьков
Репутация: 69
С нами: 15 лет 5 месяцев

Сообщение #35 Izotop » 05.11.2009, 00:31

2LuSP
Регулятор громкости:
2) Бегунок выходит за границы регулятора, но главное  то, что отклонение различно: слева совсем немного, справа - значительно. Получается, что-то не так с var pos?
3) По клику центр бегунка должен оказываться под курсором, а он всё время не там. Отклонение зависит от того, в каком месте регулятора кликнуть.
Громкость переделываем вот так::::
Код: Выделить всё
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
var img = gdi.image(fb.FoobarPath + "components\\bitmaps\\indicatorvol_normal.png");
var g_drag = 0;
var hofset = 0;

function on_paint(gr){
   var ww = window.Width-16;
   var wh = window.Height;
   var volume = fb.Volume;
   var pos = Math.round(ww*(Math.pow(10,volume/50)-0.01)/0.99);
   gr.DrawImage(img, pos, 0, 16, 10, 0, 0,16, 10);
}

function on_mouse_lbtn_down(x,y){
   g_drag = 1;
   //img = gdi.image(fb.FoobarPath + "components\\bitmaps\\indicatorvol_normal.png");
}

function on_mouse_lbtn_up(x,y){
   on_mouse_move(x,y);
   g_drag = 0;
   //img = gdi.image(fb.FoobarPath + "components\\bitmaps\\indicatorvol_normal.png");
}

function on_mouse_move(x,y){
   if(g_drag){
      var v = x / window.Width;
      v = (v<0) ? 0 : (v<1) ? v : 1;
      v = 50*Math.log(0.99*v+0.01)/Math.LN10;
      if(fb.Volume != v)
         fb.Volume = v;
   }
   window.Repaint();
   //img = gdi.image(fb.FoobarPath + "components\\bitmaps\\indicatorvol_normal.png");
}
function on_mouse_leave(){
   window.Repaint();
}
function on_mouse_wheel(delta){
   if(delta>0)
      fb.VolumeUp();
   else
      fb.VolumeDown();
}

function on_volume_change(val){
   window.Repaint();
}
*пыво*
Последний раз редактировалось Izotop 07.11.2009, 13:22, всего редактировалось 1 раз.
Izotop M
Аватара
Откуда: Зеленоград - Харьков
Репутация: 69
С нами: 15 лет 5 месяцев

Сообщение #36 LuSP » 05.11.2009, 15:42

2Izotop
Прогресс-бар:
Бегунок "подсвечивается" при наведении курсора на него и при последующем перемещении курсора вдоль прогресс-бара:
1) Изображение
2) Изображение
3) Изображение

Громкость:
Получается, что по клику центр бегунка попадает не под курсор, а куда-то рядом:

Изображение Изображение

Если скажем, сделать такую "нормировку"
gr.DrawImage(img, pos*100/78-8, 0, 16, 10, 0, 0,16, 10);
то получится:

Изображение Изображение
Но при этом бегунок уходит за границы на 8 пикселей.  :(
Последний раз редактировалось LuSP 05.11.2009, 19:11, всего редактировалось 1 раз.
LuSP
Репутация: 0
С нами: 14 лет 8 месяцев

Сообщение #37 K-GEN » 07.11.2009, 09:47

2LuSP, это все сделано на wsh_panel_mod (громкость и сикбар)? Тоже хочу что-то подобное, если не жалко поделитесь скриптами  :) Заранее большое спасибо)
2ALL Еще такой вопрос - возможно ли реализация "полноценных" кнопок с изменением при нажатии и под курсором? Если да, то можно небольшой скрипт, просто я полный нуб в этом деле  %)
Последний раз редактировалось K-GEN 07.11.2009, 10:11, всего редактировалось 1 раз.
K-GEN
Репутация: 0
С нами: 17 лет 7 месяцев

Сообщение #38 LuSP » 07.11.2009, 12:47

2K-GEN
Когда нормально заработает, обязательно поделюсь.
K-GEN:я полный нуб в этом деле  %)
аналогично...
LuSP
Репутация: 0
С нами: 14 лет 8 месяцев

Сообщение #39 K-GEN » 07.11.2009, 12:58

LuSP:2K-GEN
Когда нормально заработает, обязательно поделюсь.
K-GEN:я полный нуб в этом деле  %)
аналогично...

Оки, буду ждать  :-)
Последний раз редактировалось K-GEN 07.11.2009, 12:59, всего редактировалось 1 раз.
K-GEN
Репутация: 0
С нами: 17 лет 7 месяцев

Сообщение #40 angry_dog » 25.11.2009, 16:33

Помогите пожалуйста разобраться. Есть Wsh Panel показывающая продолжительность трека. На ней правой кнопкой мыши Panels -> Wsh Panel Mod. На этой Wsh Panel Mod стоит галка. Снимаю галку, исчезает seekbar - появляется Wsh Panel громкости с настройками по-умолчанию. Скрипт использовал by meDveD из ответа №15 (07 июля 2009, 12:29) /index.php/topic,1878.msg26770.html
Можно ли сделать две Wsh Panelи на громкость и трек? Подскажите пожалуйста как.
angry_dog M
Аватара
Откуда: Россия
Репутация: 4
С нами: 17 лет 6 месяцев

Пред.След.

Вернуться в Плагины