JSplitter v4.2.1 / 3.9.1 [21.09.2026]

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

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

  • 12

Сообщение #1 LUR » 21.03.2018, 05:06

Плагин представляет собой панель, совмещающую функциональность сплиттера (контейнера для панелей других плагинов) и хоста скриптов JavaScript.

Особенности функционала:

1. Панели добавляются в сплиттер в произвольном порядке, где с ними можно работать как с обычными окнами Windows, а именно: перемещать, изменять их размер, сворачивать, разворачивать, закрывать. Т.е. при работе с плагином foobar2000 превращается в приложение с MDI интерфейсом (Multi Document Interface). Для точного позиционирования панелей предусмотрено отображение координат и их редактирование "на лету" в заголовке окна панели (полезно при дизайне интерфейса сборки). Также имеется возможность настраивать цвета и шрифт заголовка окон панелей.
Функциональность сплиттера работает как в DUI, так и в CUI.

1.PNG


2. Поддерживается режим редактирования разметки как в DUI так и в CUI в традиционной для них манере. Поддерживается также управление размещением панелей в сплиттере через стандартный "размещатель" Columns UI.
3. В основе хоста скриптов лежит Spider Monkey Panel от TheQwertiest, соответственно имеет все возможности данной панели + дополнительные расширения API, касающиеся сплиттера. Также в проект активно вносятся изменения из "мода" Spider Monkey Panel за авторством marc2k3
4. Поддерживается управление панелями в сплиттере из скриптов. Возможно программно перемещать, скрывать, изменять размер панелей.
5. Имеется специальное API для быстрого создания кнопок в корне панели и обработки их нажатия.

ПРИМЕЧАНИЕ О ВЕРСИЯХ
Ввиду того, что последней ESR (Extended Support Release) версией движка JavaScript SpiderMonkey, поддерживающей Windows 7, является 102.15.1esr, решено сделать форк основной версии JSplitter и сделать из него ветку 3.x. Все изменения, вносимые в последнюю версию JSplitter (кроме движка), будут добавляться и туда. Единственная разница между веткой 4.x и 3.x в движке JavaScript: В 3.x будет всегда один и тот же движок 102.15.1esr, а в 4.x - самый свежий ESR.

СКАЧАТЬ
АНГЛИЙСКАЯ ВЕРСИЯ
РУССКАЯ ВЕРСИЯ
ЗЕРКАЛО
АНГЛИЙСКАЯ ВЕРСИЯ
РУССКАЯ ВЕРСИЯ
GITHUB
АНГЛИЙСКАЯ ВЕРСИЯ

Версия 3.9.1 (для пользователей Windows 7)
АНГЛИЙСКАЯ ВЕРСИЯ
РУССКАЯ ВЕРСИЯ
ЗЕРКАЛО
АНГЛИЙСКАЯ ВЕРСИЯ
РУССКАЯ ВЕРСИЯ
GITHUB
АНГЛИЙСКАЯ ВЕРСИЯ

Краткое руководство
Для добавления панелей в сплиттер можно воспользоваться следующими способами:

1. С помощью контекстного меню панели плагина:

2.PNG


2. С помощью стандартного размещателя Columns UI:

4.PNG


3. С помощью списка панелей, вызываемого из контекстного меню плагина:

10.png


либо окна редактирования скрипта (см. скриншот). Список панелей можно также использовать для добавления, удаления, переупорядочивания панелей, а также изменения их положения и размеров вручную (двойной щелчок по соответствующему полю):

Снимок.PNG


4. В стандартном режиме редактирования разметки (Default UI / Columns UI)

9.png


Все добавляемые панели можно вручную перемещать, изменять их размер, сворачивать, разворачивать, закрывать. У каждого окна в заголовке имеется меню для настройки некоторых опций:

3.PNG


ВНИМАНИЕ! Порядок размещения панелей в сплиттере зависит от глубины их визуального расположения. Самое верхнее окно будет последним в списке. Если вы активируете мышкой какую-либо панель, она переместится в конец списка. Учитывайте это при использовании функции GetPanelByIndex (см. ниже). Чтобы случайных перемещений по списку не происходило, вы можете заблокировать панель (см. ниже)

Show caption - включает/отключает отображение рамки (бордюра) окна панели
Locked - заблокировать панель. С установленной галочкой окно не реагирует на попытки переместить/изменить/закрыть окно.
Show coords - отобразить координаты. В заголовке окна будут отображены координаты окна, которые будут обновляться по мере перемещения/изменения размера окна.
Support pseudo transparency - некоторым окнам необходима поддержка "прозрачности". С включенной опцией плагин будет заменять фон окна панели на содержимое корневого окна плагина. Т.е. например все, что нарисовано в скрипте с помощью on_paint(gr) будет скопировано в окно.

В режиме отображения координат можно вводить необходимые координаты вручную кликнув по нужной координате или изменить название панели:

7.PNG


Настройки внешнего вида окон панелей расположены здесь:

8.png


Show tools menu for panels' caption - включает/отключает меню для заголовка окон панелей.
Move panels with middle button - позволяет перемещать панели при помощи средней кнопки мыши. Полезно когда бордюр окна скрыт (меню Show caption).
Align panels to edges of each other when dragging - выравнивать панели по краям друг друга при перетаскивании окошек. Полезно при построении интерфейса сборки, где панели должны быть расположены плотно друг к другу.
Show scrollbars for out-of-view panels - экспериментальная функция показа полос прокрутки, если панели выходят из зоны видимости. Прокручиваются только панели, содержимое отрисованного окна не меняется и не скроллится.
Hide panels on close - скрывать окна вместо их закрытия. Полезно для временного скрытия панели с помощью кнопки закрытия окна. Вернуть обратно окна можно в размещателе Columns UI сняв галочку Hidden с панели (или из "списка панелей" см. выше):

6.PNG



Программный интерфейс
Базовое API всегда зависит от плагина, на котором основана текущая версия JSplitter. Документация к плагину прилагается. Плюс к этому доступны следующие дополнения для объекта window:

window.GetPanel(caption) - получить объект для доступа к панели по тексту заголовка. Будет возвращена первая панель, совпавшая по тексту с аргументом. Текст панели указывается в заголовке. По умолчанию он имеет значение имени плагина панели, но его можно изменить как напрямую в заголовке окна (Show coords -> Click in caption text), так и в размещателе Columns UI (Use custom title)
window.GetPanelByIndex(index) - получить объект для доступа к панели по индексу. Вообще порядок изначально тот, в котором добавляются панели, но так же порядок можно увидеть в размещателе Columns UI, там же его и изменить.
window.CreateButton(x, y, images, hover_images) - создать кнопку в сплиттере. Кнопка будет создана в корне окна и будет размещена по координатам (x, y). Также функции передаются изображения для задания внешнего вида кнопки. Собственно от количества изображений images, переданных функции, будет зависеть количество состояний, которые может принимать кнопка. hover_images - изображения кнопки, отображающиеся при наведении курсора мыши. Функция достаточно гибкая для создания различного вида кнопок, например:
var path = fb.FoobarPath + "themes\\lur\\black\\bio.png";
var hpath = fb.FoobarPath + "themes\\lur\\black\\bio_on.png";
var a = window.CreateButton(0, 0, path, hpath); - создает обычную кнопку с картинкой bio.png, которая меняется на bio_on.png при наведении курсора мыши
var b = window.CreateButton(0, 0, [path, hpath], null); - создает чекбокс-кнопку. Обычное состояние - bio.png, нажатое (галочка установлена) - bio_on.png. Обратите внимание, что изображения для наведения курсора отсутствуют. Обычно чекбоксам они и не нужны, но можно их установить при желании.
var c = window.CreateButton(0, 0, [path1, path2, path3], [path1_on, path2_on, path3_on]); - можно создать кнопку с тремя (и более) состояниями. Они будут циклически переключаться при нажатии. Текущее состояние кнопки можно будет получить с помощью свойства кнопки State (см. ниже).
Также можно создать группу радио-кнопок (взаимоисключающих) с помощью следующей функции:
window.RadioButtons(buttons) - создает группу радио-кнопок. Принимает в качестве аргумента массив кнопок. Каждая кнопка должна иметь не менее двух состояний, иначе функция свалится. Пример:
var a = window.CreateButton(0, 0, [path, hpath], null);
var b = window.CreateButton(30, 0, [path, hpath], null);
window.RadioButtons([a, b]);
Теперь при нажатии на одну кнопку (состояние 1), другая будет "отключаться" (переходить в состояние 0) и наоборот.
window.GetButton(id) - получить кнопку по значению ее идентификатора (Button.ID)
window.RemoveButton(button) - удаляет кнопку
window.HandOnButtons - переключает курсор мыши для всех кнопок либо на руку, либо на стрелку. Данное свойство также действует на все создаваемые впоследствии кнопки. У каждой кнопки это свойство можно менять индивидуально (см. ниже).

Введены вспомогательные методы для управления главным окном плеера.
window.FoobarWindowX - возвращает и устанавливает положение главного окна foobar2000 по оси X.
window.FoobarWindowY - возвращает и устанавливает положение главного окна foobar2000 по оси Y.
window.FoobarWindowWidth - возвращает и устанавливает ширину главного окна foobar2000.
window.FoobarWindowHeight - возвращает и устанавливает высоту главного окна foobar2000.

Так как JSplitter не получает никакой информации о передвижении мыши над панелями самих плагинов, но иногда это требуется, то введено API для получения данных событий. Перед использованием данного API его необходимо явно разрешить в настройках JSplitter (опция "Track mouse over panels (for on_panel_mouse_*)"/"Отслеживать мышь над панелями (для on_panel_mouse_*)").
window.TrackMouseEnterLeaveOnPanels = true; - включает отслеживание входа/выхода курсора мыши из области панелей. По умолчанию false. Для обработки событий используются следующие функции:
on_panel_mouse_enter(name) - событие входа курсора в область панели, name - имя панели
on_panel_mouse_leave(name) - событие выхода курсора из области панели, name - имя панели
window.TrackMouseMoveOnPanels = true; - включает отслеживание позиции курсора мыши в пределах области панели. По умолчанию false. Для обработки события используется следующая функция:
on_panel_mouse_move(name, x, y, mask) - событие перемещения курсора в пределах области панели, name - имя панели, x,y - координаты точки на панели

Объекты, получаемые при помощи функций, указанных выше, имеют следующие свойства и методы:

ПАНЕЛИ (GetPanel, GetPanelByIndex)
Свойства:
(readonly) String Name;
(read, write) String Text;
(read, write) boolean Hidden;
(read, write) boolean Locked;
(read, write) boolean ShowCaption;
(read, write) boolean SupportPseudoTransparency;
(read, write) int X;
(read, write) int Y;
(read, write) int Width;
(read, write) int Height;
(read, write) boolean TopMost;
(read, write) boolean EraseBackground;
Методы:
void Show(show = true);
void Move(x, y, width, height, repaintParent = false);

КНОПКИ (CreateButton, GetButton)
Свойства:
(readonly) ushort ID;
(read, write) int X;
(read, write) int Y;
(read, write) int Width;
(read, write) int Height;
(read, write) boolean Hidden;
(read, write) boolean HandOnHover;
(read, write) Function Click;
(read, write) uint State;
Методы:
void Show(show = true);
void Move(x, y);
void Resize(width, height);

Назначение свойств и методов объектов довольно прозрачно. При назначении ширины или высоты кнопки в ноль, ширина и высота автоматически высчитываются (как и просто при создании кнопки) из максимальной ширины и высоты изображений. Отдельного упоминания заслуживает обработка нажатий кнопок. Она осуществляется 2-мя
путями:

1. При помощи задания свойства Click объекта кнопки:
var a = window.CreateButton(0, 0, [path, hpath], null);
a.Click = function() { do_something(); }

2. При помощи специального callback'a, который вызывается при нажатии ВСЕХ кнопок, созданных с помощью window.CreateButton:
function on_button_click(id) - принимает идентификатор кнопки, который можно получить через свойство кнопки ID.
switch(id) {
case a.ID:
do_something();
break;
}


ПРИМЕЧАНИЕ: В отличие от панелей, существующих вне зависимости от скрипта, кнопки создаются только программно с помощью скрипта и всегда уничтожаются при выгрузке скрипта.


ДОКУМЕНТАЦИЯ
https://dima-lur.github.io/jsplitter/

Пример конфигурации
Распаковать в папку с чистым портативным фубаром.
СКАЧАТЬ

Пример от zeremy

История версий
Версия 4.2.1 [21.09.2026]
  • [НОВОЕ] Добавлен API BroadcastChannel для асинхронного обмена данными между панелями JSplitter и Worker. Экземпляры с одинаковым именем канала могут обмениваться сообщениями с использованием structured clone, не разделяя между realm живые JavaScript-значения. Для нового кода BroadcastChannel рекомендуется вместо устаревшего синхронного механизма window.NotifyOthers; существующий API сохранён для совместимости.
  • [НОВОЕ] Добавлен utils.IsOS64Bit для определения того, является ли сама Windows 64-битной, независимо от архитектуры запущенного процесса foobar2000.
  • [НОВОЕ] Добавлен utils.SystemInfo, возвращающий снимок системной информации: название и номер сборки Windows, архитектуру ОС, общий и доступный объём физической памяти, использование private working set процессом foobar2000, а также информацию о dedicated/local video memory графического адаптера, наиболее активно используемого процессом foobar2000. Информация о VRAM включает имя выбранного адаптера, объём выделенной видеопамяти, текущий video-memory budget Windows для процесса и текущее использование local video memory процессом.
  • [НОВОЕ] Добавлены API с повторно используемыми PCM-буферами для обработки аудио в реальном времени. FbAudioChunk.CopyDataTo копирует аудиосэмплы в предоставленный вызывающей стороной Float32Array, а fb.GetAudioChunkTo записывает данные визуализации непосредственно в повторно используемый Float32Array, не создавая промежуточный FbAudioChunk или JavaScript-массив сэмплов. Поведение существующих fb.GetAudioChunk и FbAudioChunk.Data не изменено для сохранения совместимости. Новые API значительно уменьшают количество временных аллокаций и нагрузку на сборщик мусора в постоянно работающих визуализаторах, например анализаторах спектра.
  • [НОВОЕ] Добавлен utils.GetWaveformAsync для асинхронного декодирования аудиотрека в амплитудную огибающую фиксированного размера. Можно анализировать как весь трек, так и заданный временной диапазон. Метод возвращает линейные значения амплитуды 0.0..1.0 в виде Float32Array и доступен как в панели, так и в Worker. Точки waveform вычисляются из усреднённых локальных пиков сэмплов без нормализации результата относительно самого громкого участка трека.
  • [ИСПРАВЛЕНО] Переработан backend таймеров с удалением синхронных ожиданий при координации timer thread. Такие ожидания могли без необходимости блокировать выполнение и в некоторых случаях приводить к заметным задержкам или зависаниям во время инициализации панели, завершения её работы и других операций, связанных с таймерами. Планирование и остановка таймеров теперь выполняются без блокировки вызывающего потока.
  • [ИСПРАВЛЕНО] Исправлен учёт выделений памяти, используемый сборщиком мусора. Восстановлен триггер GC по количеству аллокаций и добавлен запас безопасности при приближении к лимиту heap, уменьшающий риск резкого превышения заданного максимального размера heap до того, как сборщик мусора успеет отработать.
  • [ИСПРАВЛЕНО] Исправлена обработка параметров по умолчанию при создании объектов D2DStrokeStyle. Явное создание теперь использует те же значения по умолчанию, что и сокращённая форма задания stroke style.
  • [ОБНОВЛЕНИЕ] Команды Open component folder и Open documentation в скрытом разделе JSplitter главного меню теперь всегда доступны, даже если в данный момент ни одна панель JSplitter не имеет клавиатурного фокуса.

Версия 4.2.0 [16.09.2026]
  • [НОВОЕ] Добавлен API Worker для выполнения JavaScript в фоновых потоках. Worker'ы поддерживают обмен сообщениями, существующие API JSplitter там, где это применимо, внеэкранный рендеринг GDI/Direct2D, structured clone и передачу владения объектами, загрузку внешних файлов скриптов и include. Чтобы эффективно использовать новый API, настоятельно рекомендуется внимательно ознакомиться с документацией.
  • [ОБНОВЛЕНИЕ] НЕСОВМЕСТИМОЕ ИЗМЕНЕНИЕ! Полностью переработан window.JsMemoryStats: введена новая модель статистики памяти, переименованы поля и добавлена информация об использовании памяти Worker'ами текущей панели.
  • [ОБНОВЛЕНИЕ] Переработаны настройки сборки мусора в разделе Advanced > Performance > GC. Автоматическая настройка в зависимости от доступной системной памяти удалена; теперь лимиты heap и параметры GC задаются явно и имеют фиксированные значения по умолчанию: Main thread maximum heap size1024 MB, Worker maximum heap size256 MB на каждый Worker, Heap growth before GC64 MB, External memory growth before GC256 MB. Благодаря этому ограничения памяти и поведение GC становятся предсказуемыми, а при необходимости каждый параметр можно настраивать независимо. Параметры роста heap и external memory применяются как к главному потоку, так и отдельно к каждому Worker.
  • [НОВОЕ] Добавлена опция Use high-resolution timers в разделе Advanced > Performance, по умолчанию отключённая. При её включении короткие задержки setTimeout и setInterval могут планироваться значительно ближе к запрошенным значениям вместо ограничения стандартной гранулярностью таймеров Windows. Это может улучшить плавность анимаций на мониторах с высокой частотой обновления и работу другого кода, чувствительного к точности таймингов. При этом существующие скрипты, неявно рассчитывающие на более грубую гранулярность таймеров, могут вести себя иначе после включения этой опции, поскольку callback-и способны выполняться заметно чаще, чем раньше. Например, анимация или другое состояние, изменяемое на каждом callback-е, а не на основе реально прошедшего времени, может начать развиваться быстрее, а нагрузка на CPU — увеличиться. Поэтому при высокой нагрузке поток рендеринга (main thread) может испытывать заметные задержки, и существующему коду может потребоваться адаптация под этот backend таймеров. Поддерживается только начиная с Windows 10 версии 1803.
  • [НОВОЕ] Добавлено read-only свойство utils.HighResolutionTimersEnabled, доступное как в panel, так и в Worker realm. Оно позволяет скриптам определить, действительно ли активен backend высокоточных таймеров, и при необходимости адаптировать стратегию планирования и yield. Значение основано на настройке Advanced Preferences > Performance > Use high-resolution timers, но отражает фактическое состояние во время выполнения, а не только состояние флажка: свойство возвращает true только если опция включена и текущая версия Windows поддерживает high-resolution waitable timers; во всех остальных случаях возвращается false.
  • [НОВОЕ] on_paint расширен фактическим прямоугольником обновления: on_paint(gr, x, y, width, height). Существующие обработчики on_paint(gr) остаются полностью совместимыми. Это особенно полезно для панелей с единым host'ом, содержащих несколько неперекрывающихся областей интерфейса: скрипт может не отрисовывать части панели, которые не пересекаются с текущим прямоугольником обновления.
  • [НОВОЕ] В главное меню добавлен скрытый раздел JSplitter, доступный через Shift+Click по меню File. Раздел содержит почти все команды из контекстного меню JSplitter и действует на панель JSplitter, которая в данный момент имеет клавиатурный фокус. Поскольку это обычные команды главного меню, им также можно назначать произвольные горячие клавиши в настройках foobar2000.
  • [НОВОЕ] Добавлен window.ShowPanelList для открытия списка дочерних панелей текущей панели.
  • [НОВОЕ] Добавлен window.IsFocused, позволяющий определить, имеет ли текущая панель JSplitter клавиатурный фокус.
  • [НОВОЕ] Добавлено свойство utils.Is64Bit для определения архитектуры текущего процесса — x86 или x64.
  • [ИСПРАВЛЕНИЕ] Исправлено отсутствие визуального бейджа на JSplitter при импорте темы в DUI.
  • [ИСПРАВЛЕНИЕ] Регрессия из v4.1.15: скрытые панели DUI не получали уведомление о необходимости обновить своё содержимое.
  • [ИСПРАВЛЕНИЕ] Из документации удалено описание API плагина UIHacks (foo_ui_hacks), поскольку этот API не является частью API JSplitter.
  • [ОБНОВЛЕНИЕ] Удалено сообщение D2D initialization SUCCESS из консоли.
  • [ОБНОВЛЕНИЕ] Улучшен пример complete/musicbrainz: добавлено ручное обновление, более надёжное кэширование MusicBrainz и обработка асинхронных запросов, ограничение частоты запросов, а также более устойчивый разбор релизов и ссылок.
  • [НОВОЕ] Добавлена поддержка переиспользуемых стилей линий Direct2D с настройкой концов линий, соединений сегментов, типа штриха, miter limit, смещения штриха и пользовательских штриховых шаблонов. Все существующие методы рисования Direct2D, ранее принимавшие стиль линии, теперь могут использовать общий объект D2DStrokeStyle. Документация обновлена и добавлен новый наглядный пример.
  • [ОБНОВЛЕНИЕ] JavaScript-движок обновлён до SpiderMonkey 140.16.0esr.

Версия 4.1.17 [03.09.2026]
  • [ОШИБКА] Исправлена работа вложенных gdi.PushClip/PopClip и d2d.PushClip/PopClip. Состояния clipping теперь хранятся в стеке и корректно восстанавливаются при вложении нескольких областей отсечения.
  • [[url=http://]ФУНКЦИЯ[/url]] Добавлены GdiBitmap.GetThemeColourSchemeJSON и D2DBitmap.GetThemeColourSchemeJSON. Метод анализирует цвета bitmap с помощью взвешенного K-means++ в OKLab и возвращает согласованную цветовую схему интерфейса из пяти ролей: фон, текст, фон/акцент воспроизводимого трека, рамка фокуса и фон выделения. Размер палитры может быть задан вызывающей стороной.
  • [[url=http://]ОБНОВЛЕНИЕ[/url]] Переработан API performance для более точного соответствия поведению Web Performance / User Timing / Performance Timeline. Добавлены стандартные формы и опции mark и measure, поддержка повторяющихся mark/measure entries, упорядоченные запросы к timeline, улучшено поведение PerformanceObserver и добавлено статическое свойство PerformanceObserver.supportedEntryTypes, при этом существующие расширения JSplitter сохранены для совместимости. Добавлен пример использования Performance API.
  • [ФУНКЦИЯ] Добавлены нативные функции для работы с файловой системой (с примером):
  • [ФУНКЦИЯ] Добавлен fb.GetLibraryRoots, возвращающий уникальные корневые пути Media Library, определённые по текущему содержимому библиотеки, без необходимости реконструировать их в JavaScript.
  • [ОБНОВЛЕНИЕ] Расширен пример utils.ShowHtmlDialog: теперь он демонстрирует передачу данных и callback-функций между JavaScript панели и HTML-диалогом, включая использование window.external.dialogWindow для корректного назначения владельца нативным диалогам, открываемым из HTML.
  • [ОБНОВЛЕНИЕ] Улучшена генерируемая документация API: добавлено постоянное сворачиваемое дерево навигации по членам API и глобальный поиск по API.
  • [ОБНОВЛЕНИЕ] JS-движок обновлён до SpiderMonkey 140.15.0esr

Версия 4.1.16 [30.08.2026]
  • [ОШИБКА] Исправлено падение при вычислении статистических полей JSplitter (например, %jsplitter_rating%) в параллельном title formatting. Причиной была гонка при ленивой инициализации внутреннего объекта title format.
  • [ФУНКЦИЯ] Добавлен необязательный параметр window_id для указания нативного окна-владельца (HWND) в:
    • plman.ShowPlaylistLockUI(playlistIndex[, window_id])
    • utils.FilePicker(title, default_path, filter, mode[, window_id])
    • utils.FolderPicker(title, default_path[, window_id])
    • utils.MessageBox(msg, title, buttons, icon, default_button, help_text[, window_id])
  • [ФУНКЦИЯ] Добавлены FbMetadbHandleList.Reverse и FbMetadbHandleList.Shuffle для разворота и случайного перемешивания списка дескрипторов на месте.

Версия 4.1.15 [27.08.2026]
  • [ОШИБКА] ВАЖНОЕ ИЗМЕНЕНИЕ!!! plman.MovePlaylistSelection и plman.MovePlaylistSelectionV2 больше не создают резервную копию для отмены действия. Скрипты, требующие поддержки отмены, должны явно вызывать plman.UndoBackup перед перемещением элементов плейлиста, что соответствует другим действиям изменения содержимого плейлиста.
  • [ФУНКЦИЯ] Добавлен plman.ReorderPlaylistItems (см. документацию)
  • [ФУНКЦИЯ] Добавлены gdi.PushClip/PopClip и d2d.PushClip/PopClip (см. документацию)
  • [ФУНКЦИЯ] Диалог utils.ColourPicker расширен дополнительными элементами управления:
    • HEX: значение цвета RRGGBB
    • Alpha: альфа-компонент
    • Copy ARGB: кнопка для копирования текущего значения цвета в формате 0xAARRGGBB
  • [ФУНКЦИЯ] Добавлен window.external.dialogWindow для HTML-диалогов, созданных с помощью utils.ShowHtmlDialog (см. документацию), что позволяет использовать собственный хэндл окна диалога с вложенными модальными диалогами.
  • [ФУНКЦИЯ] Обновлена ​​обработка владения модальными диалогами для utils.ColourPicker, utils.FontPicker, utils.InputBox и utils.ShowHtmlDialog. Параметр window_id теперь используется в качестве собственного хэндла окна-владельца (HWND) вместо игнорирования, что позволяет диалоговым окнам, открытым из utils.ShowHtmlDialog, корректно принадлежать HTML-диалогу через window.external.dialogWindow.
  • [ФУНКЦИЯ] Добавлен utils.RecyclePath для перемещения файлов и каталогов в корзину (см. документацию)
  • [ФУНКЦИЯ] Переход на новый генератор документации и публикация API онлайн .

Версия 4.1.14 [21.08.2026]
  • [ОШИБКА] СЕРЬЕЗНЫЕ ИЗМЕНЕНИЯ!!! Переименованы переменные %smp_*% в %jspliter_*% (как в самом компоненте, так и в примерах), чтобы избежать конфликта со Spider Monkey Panel, а именно:
    smp_playcountjsplitter_playcount
    smp_lovedjsplitter_loved
    smp_first_playedjsplitter_first_played
    smp_last_playedjsplitter_last_played
    smp_ratingjsplitter_rating
  • [ОШИБКА] Документация: исправлена ​​функция vol2pos в Helpers.js
  • [ОШИБКА] Документация: уточнено поведение активного устройства fb.GetOutputDevices
  • [ОБНОВЛЕНИЕ] Обновлен движок JS до SpiderMonkey 140.14.0esr
  • [ОБНОВЛЕНИЕ] Обновлен редактор исходного кода до Scintilla 5.6.6

Версия 4.1.13 [07.08.2026]
  • [ФУНКЦИЯ] utils.Glob: теперь подстановочные знаки в шаблоне пути применяются не только к имени файла, но и к промежуточным каталогам. Например, utils.Glob(fb.ProfilePath + 'image*\\album?\\*.jpg')
  • [ОБНОВЛЕНИЕ] Обновлен движок JS до SpiderMonkey 140.13.0esr
  • [ОБНОВЛЕНИЕ] Обновлен редактор исходного кода до Scintilla 5.6.5

Версия 4.1.12 [13.07.2026]
  • [ОШИБКА] Функции on_colours_changed и on_font_changed не срабатывали в CUI при установке отдельных цветов и шрифтов для плагина JSplitter (не общих)
  • [ОБНОВЛЕНИЕ] Обновлен движок редактора исходного кода до Scintilla 5.6.4

Версия 4.1.11 [27.06.2026]
  • [BUG] Исправлена ​​ошибка, из-за которой текст не отображался шрифтом с цветными глифами в режиме Direct2D

Версия 4.1.10 [26.06.2026]
  • [ОШИБКА] Исправлено отсутствие имен исходных файлов в стеке вызовов при сбое скрипта
  • [ФУНКЦИЯ] Добавлен ​​utils.GetCountryFlag (см. документацию)
  • [ОБНОВЛЕНИЕ] Обновлен набор инструментов Visual C++ до версии 145 (14.51.36231)

Версия 4.1.9 [17.06.2026]
  • [ОШИБКА] utils.RunCmdAsync
    • Больше не блокирует общую асинхронную очередь при ожидании внешних процессов
    • Исправлена ​​обработка параллельных команд, так что несвязанные команды могут завершиться, пока другая команда все еще ожидает или истекает время ожидания
    • Исправлены унаследованные дескрипторы каналов, которые могли задерживать завершение stdout/stderr
    • Сбои запуска и пустые пути к приложениям теперь сообщаются через рапортуются в коллбэке
  • [ОШИБКА] utils.RunCmdAsync: исправлена ​​документация и добавлен samples\basic\RunCmdAsync.js
  • [ОШИБКА] utils.Run: исправлена ​​документация и добавлен samples\basic\Run.js
  • [ОШИБКА] Несколько исправлений в документации (index.html)
  • [ОБНОВЛЕНИЕ] Обновлен движок JS до SpiderMonkey 140.12.0esr

Версия 4.1.8 [09.06.2026]
  • [ОШИБКА] Исправлен utils.MovePlaylistSelectionV2: теперь весь пакет треков вставляется точно в указанную позицию (если это возможно)
  • [ФУНКЦИЯ] utils.Run: теперь метод принимает параметр args не только в виде массива, но также и в виде необработанной строки (см. документацию)
  • [ФУНКЦИЯ] Добавлен utils.RunCmdAsync (см. документацию)
  • [ОБНОВЛЕНИЕ] Обновлен движок редактора исходного кода до Scintilla 5.6.3

Версия 4.1.7 [04.06.2026]
  • [ОШИБКА] Исправлена ​​ошибка window.GetProperties: метод возвращал внутреннюю коллекцию свойств, а не коллекцию, содержащуюся в сохраненной конфигурации
  • [ФУНКЦИЯ] ЛОМАЮЩЕЕ ИЗМЕНЕНИЕ! window.ImportProperties: теперь метод имеет необязательный параметр reloadPanel, значение которого по умолчанию равно false
  • [ФУНКЦИЯ] Добавлен window.SetProperties (см. документацию)
  • [ФУНКЦИЯ] Добавлен utils.Run (см. документацию)
  • [ФУНКЦИЯ] Добавлен utils.ParseHtml (см. документацию и пример)
  • [ФУНКЦИЯ] Добавлены следующие методы в пространство имен plman (см. документацию):
    • GetPlaylistSelectedIndexes
    • InvertSelection
    • MovePlaylistSelectionV2 (пока экспериментально)
    • ReplacePlaylistItem
    • SelectQueryItems
    • ShowPlaylistLockUI

Версия 4.1.6 [31.05.2026]
  • [ФУНКЦИЯ] Добавлен window.ClearProperties (см. документацию)
  • [ФУНКЦИЯ] Добавлен fb.GetActiveDSPs (см. документацию)
  • [ФУНКЦИЯ] Добавлен метод fb.EnableAdvancedLogging (сейчас это просто "пустышка" для будущего использования и совместимости со скриптами JSP3)
  • [ФУНКЦИЯ] Добавлен fb.EnumerateMainMenuCommands (см. документацию)
  • [ФУНКЦИЯ] Добавлен fb.IsLibraryInitialised (см. документацию)
  • [ФУНКЦИЯ] Добавлен gdi.LoadSVG и d2d.LoadSVG (см. документацию)
  • [ФУНКЦИЯ] Теперь FbMetadbHandleList.AttachImage возвращает логическое значение (см. документацию)
  • [ФУНКЦИЯ] Добавлен FbMetadbHandleList.AttachImage2 для встраивания существующих GdiBitmap или D2DBitmap. Поддерживаются кодеки JPEG, WEBP и PNG (см. документацию)
  • [ФУНКЦИЯ] Добавлен FbMetadbHandleList.GetOtherInfo (см. документацию)

Версия 4.1.5 [28.05.2026]
  • [ФУНКЦИЯ] Добавлен fb.ShowPlaylistSearchUI
  • [ФУНКЦИЯ] Добавлены window.ExportProperties и window.ImportProperties (см. документацию)
  • [ФУНКЦИЯ] Добавлен window.GetProperties (см. документацию)
  • [ФУНКЦИЯ] Добавлен необязательный параметр clearProperties в window.Reload (см. документацию)

Версия 4.1.4 [25.05.2026]
  • [ОШИБКА] Плеер иногда падает при закрытии: событие из очереди может быть получено во время закрытия панели, даже если оно уже удалено из списка контроллера задач.
  • [ОШИБКА] Исправлены файлы сэмплов by regor

Версия 4.1.3 [22.05.2026]
  • [ОШИБКА] Исправлена ​​тёмная тема для описания пакетов SMP, а также для меню и полос прокрутки в редакторе кода
  • [ОШИБКА] fb.DoDragDrop: теперь свойство custom_image параметра options используется в качестве запасного варианта, если обложка трека не найдена или параметр use_album_art имеет значение false.
  • [ОШИБКА] fb.DoDragDrop: плеер аварийно завершал работу, когда свойство custom_image параметра options равно null, несмотря на то, что в документации указано, что это аргумент допускает значение null.
  • [ФУНКЦИЯ] Добавлен utils.MessageBox для отображения диалогового окна системных сообщений с поддержкой темной темы (см. документацию и базовый пример "MessageBox.js")
  • [ФУНКЦИЯ] Добавлен необязательный параметр help_text в utils.TextBox для отображения кнопки справки в диалоговом окне (см. документацию)
  • [ФУНКЦИЯ] Добавлены функции обратного вызова on_console_refresh и console.GetLines. Также добавлена ​​опция console.ClearBacklog с небольшим ограничением для foobar2000 < 2.0 (см. документацию)
  • [ФУНКЦИЯ] Добавлен необязательный параметр show в fb.ShowConsole для закрытия консоли, если установлено значение false
  • [ФУНКЦИЯ] Добавлен необязательный четвертый параметр к gdi.Brush и d2d.Brush для WrapMode (как для битмапных кистей). Ранее для созданных кистей (не битмапного типа) после их создания это устанавливалось только через свойство WrapMode (см. документацию).
  • [ОБНОВЛЕНИЕ] Обновлен движок JavaScript до SpiderMonkey 140.11.0esr

Версия 4.1.2 [06.05.2026]
  • [ФУНКЦИЯ] Добавлены gdi.Brush и d2d.Brush для создания объектов GdiBrush и D2DBrush соответственно (см. документацию и пример "Brushes.js")
  • [ФУНКЦИЯ] Все методы Draw*/Fill* теперь поддерживают не только цвет, но и пользовательскую кисть
  • [ФУНКЦИЯ] В GdiGraphics добавлены реализации матричных преобразований из D2DGraphics (Translate, Rotate, Scale, и т. д.)

Версия 4.1.1 [01.05.2026]
  • [ФУНКЦИЯ] Добавлены utils.FolderPicker и utils.FilePicker (см. документацию)

Версия 4.1.0 beta 1 [19.02.2026]
● В качестве альтернативы стандартному режиму рисования GDI+ добавлен бэкенд Direct2D. Чтобы использовать его, добавьте следующий код в качестве самой первой строки вашего основного скрипта:
window.DrawMode = 1; // 0 - режим GDI+ по умолчанию.
Все доступные методы для рисования в режиме GDI+ реализованы, поэтому существующие скрипты совместимы с созданием объектов и вызовами методов. Например, вызов gdi.Font создаст объект D2DFont вместо GdiFont, если window.DrawMode равен 1 на момент вызова, а также объект D2DGraphics будет передан в функцию обратного вызова on_paint вместо GdiGraphics. Несмотря на это, "правильное" пространство имен все же было добавлено. Если вы хотите напрямую вызывать версии методов Direct2D, следует использовать d2d.* вместо gdi.*, особенно с учетом того, что в пространство имен d2d были добавлены новые методы, а также в список автодополнения редактора для параметра gr функции обратного вызова on_paint(gr) в виде dgr. Добавлена ​​документация по новому API: она довольно похожа на API GDI+ с некоторыми расширениями. См. пространство имен d2d, объекты: D2DGraphics, D2DBitmap, D2DFont, D2DEffect и модуль Effects (определения эффектов будут будут дополнены в будущем).
● Добавлено свойство window.EraseOnRepaint, определяющее, следует ли очищать панель JSplitter цветом фона перед вызовом коллбэка on_paint (по умолчанию true).
● Добавлен новый API для бенчмаркинга в стиле WebAPI. См. документацию по пространству имен performance и классуPerformanceObserver.
● Добавлены некоторые улучшения в редактор кода:
  • Переключение комментариев для блоков кода с помощью горячей клавиши Ctrl+/. Если выделение отсутствует, переключается вся строка, где находится курсор. Поддерживаются как одиночные, так и множественные (Ctrl+MLB) выделения.
  • Боксы рядом со свернутыми блоками кода [...] теперь кликабельны.
● Обновлен движок JavaScript до SpiderMonkey 140.7.1esr
● Теперь все диалоговые окна JSplitter поддерживают темную тему плеера.
● [БАГ] GdiGraphics.EstimateLineWrap зависал при передаче отрицательного значения max_width.
● [ОБНОВЛЕНО] Обновлены примеры JSplaylist от Brett, чтобы прекратить использование тега %MOOD%.
● Добавлены новые методы в пространство имен utils:
  • ConvertToAscii — Преобразует строку из UTF-8 в ASCII
  • CopyFile — Копирует файл
  • CopyFolder — Копирует папку
  • CreateFolder — Создает папку
  • GetLastModified — Получает атрибут «последнее изменение» для файла (в секундах по UNIX-времени)
  • ListFonts — Получает массив системной коллекции шрифтов, заполненный именами семейств шрифтов. Поддерживает семейства шрифтов GDI+ и DirectWrite
  • ReadUTF8 — Читает файл UTF8 с меткой BOM или без нее
  • RemovePath — Удаляет файл или папку
  • RenamePath — Переименовывает файл или папку
  • ReplaceIllegalChars — Заменяет «недопустимые» символы в строке. Использует те же современные замены символов Unicode, что и конвертер/операции с файлами foobar2000

Версия 4.0.0 [18.05.2025]
● Обновлен движок JS до SpiderMonkey 128.9.0esr
● Обновлен движок редактора кода до Scintilla 5.5.6
● Исправлены настройки работы с памятью движка JS, вследствие чего ликвидированы ошибки при запуске и работе скриптов
● Скорректирована загрузка скриптов и исправлен вывод трассировки стека
● Для режима редактирования разметки в DUI добавлено стандартное контекстное меню JSplitter (в CUI добавление своего меню в режиме редактирования разметки не поддерживается).
● В окно "Список панелей" добавлен столбец "Псевдопрозрачность" для быстрого доступа к опции "Поддерживать псевдопрозрачность", доступная ранее только в контекстном меню рамки панели.

... УДАЛЕНО ИЗ-ЗА ОГРАНИЧЕНИЯ НА РАЗМЕР ПОСТА

Версия 1.0 [20.03.2018]
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев


Сообщение #481 yeyo » 23.04.2026, 13:36

@LUR
Enable D2D mode and it is easy to crash when switching the main window layout (View-Layout-Quick Settings-Main Window Layout).
Switching the main window layout in GDI mode with the same layout file will not cause a crash.
A crash report is attached:
Вложения
crash reports.rar
(84.19 КБ) Скачиваний: 68
yeyo
Репутация: 1
С нами: 4 года

Сообщение #482 LUR » 23.04.2026, 16:54

yeyo:View-Layout-Quick Settings-Main Window Layout
I have no such menu entry. Please give me exact instructions to reproduce the bug. If necessary, send me your entire configuration
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев

Сообщение #483 yeyo » 24.04.2026, 06:06

LUR:I have no such menu entry.
menu.png


LUR:Please give me exact instructions to reproduce the bug. If necessary, send me your entire configuration
I packaged a minimized version:
https://drive.google.com/file/d/12nQ4bjnlTOAV5VS-eJvcX40v8zGJLumC/view?usp=sharing

and when I quickly switched between A.Test1 and A.Test2
Quick Setting.png

it crashed with the crash log in:“foobar2000\profile\crash reports“

The crash log when switching in other complex layouts is as follows:
crash reports.rar
(690.75 КБ) Скачиваний: 74


These crashes seem to be related to the script getting the track cover image, but switching the main window layout doesn't crash every time, it seems to trigger under certain conditions

Добавлено спустя 7 часов 11 минут:
@LUR
I used DrawEffect to write a cover fade effect and turned on the pseudo-transparency of the panel. After updating to JSplitter v4.1.0 beta 12, the panel flickered seriously when switching audio tracks and changing the cover. I returned to JSplitter v4.1.0 beta 10 and it worked very well. I don’t know whether b12 destroyed DrawEffect or pseudo-transparency. Please see the video comparison effect:
https://drive.google.com/file/d/1G-nbCjs3AnRAnxJgzvGqaeO6neptHSxy/view?usp=sharing

Добавлено спустя 11 минут 2 секунды:
yeyo:sed DrawEffect and Effects to write a cover fade effect and turned on the pseudo-transparency of the panel. After updating to JSplitter v4.1.0 beta 12, the panel flickered seriously when switching audio tracks and changing the cover. I returned to JSplitter v4.1.0 beta 10 and it worked very well. I don’t know whether b12 destroyed DrawEffect and Effects or pseudo-transparency. Please see the video compariso
yeyo
Репутация: 1
С нами: 4 года

Сообщение #484 LUR » 24.04.2026, 20:42

yeyo:and when I quickly switched between A.Test1 and A.Test2
No matter how quickly I switched, the player never crashed. I'll send you a special version in a private message. Check again for crashes and flickering with your DrawEffect.
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев

Сообщение #485 yeyo » 25.04.2026, 03:29

LUR:No matter how quickly I switched, the player never crashed.
I have found the cause of the crash problem, which is caused by the processing timing issue when obtaining the cover. I have solved it by modifying the code.
PS: D2D may have stricter requirements, but it will not happen under GDI.

LUR:I'll send you a special version in a private message. Check again for crashes and flickering with your DrawEffect.
I have received your private message about my Beta 13 version and the flickering issue with DrawEffect has been fixed and is now working properly.

Feedback is always responded to quickly, thanks LUR!
yeyo
Репутация: 1
С нами: 4 года

Сообщение #486 LUR » 25.04.2026, 03:48

yeyo:I have found the cause of the crash problem, which is caused by the processing timing issue when obtaining the cover. I have solved it by modifying the code.
PS: D2D may have stricter requirements, but it will not happen under GDI.
Then be sure to tell me how you solved the problem. Because the player shouldn't crash due to the plugin at all, at most a script crash. Maybe I can find the problem with your help. And please, you haven't answered the question: does the player crash for you with Alpha 13? This is as important to me as fixing the plugin so there are no crashes at all.
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев

Сообщение #487 yeyo » 25.04.2026, 05:17

LUR:Then be sure to tell me how you solved the problem. Because the player shouldn't crash due to the plugin at all, at most a script crash. Maybe I can find the problem with your help. And please, you haven't answered the question: does the player crash for you with Alpha 13? This is as important to me as fixing the plugin so there are no crashes at all.
I sent you a private message with a minimal portable package that can reproduce the problem (based on Alpha 13). You only need to add the music directory to the playlist and do not play it. Then when switching between A.Test1 and A.Test2, the crash will occur. The problem lies in the code of the Properties panel. In addition, I have also attached the fixed Properties.js - Fix file.
yeyo
Репутация: 1
С нами: 4 года

Сообщение #488 dreamawake » 26.04.2026, 16:06

A D2D render mode bug:
execute of fb.DoDragDrop function will cause crash of the panel, due to the custom_image option.

02.png


01.png
dreamawake
Репутация: 3
С нами: 3 года 4 месяца

Сообщение #489 LUR » 26.04.2026, 17:10

dreamawake:A D2D render mode bug:
execute of fb.DoDragDrop function will cause crash of the panel, due to the custom_image option.
Unfortunately, if an image was created in GDI mode, it won't work for drawing on a panel in D2D mode. Look at where and how the image is created.
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев

Сообщение #490 dreamawake » 26.04.2026, 18:08

Unfortunately, if an image was created in GDI mode, it won't work for drawing on a panel in D2D mode. Look at where and how the image is created.
It is created in the function within same panel (D2D mode enabled). Should it be created with D2D method also?

02.png
dreamawake
Репутация: 3
С нами: 3 года 4 месяца

Сообщение #491 LUR » 26.04.2026, 19:40

dreamawake:Should it be created with D2D method also?
This is not necessary if at the time of the call of gdi.CreateImage window.DrawMode == 1. Looks like I found a bug, thanks for reporting it.
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев

Сообщение #492 LUR » 29.04.2026, 17:09

Версия 4.1.0 beta 12 [23.04.2026]

  • [БАГ] Исправлен первый вызов d2d.CreateImage
  • [БАГ] Исправлена ​​ошибка в D2DGraphics.DrawImage, теперь он проверяет значения параметров src* на конечное значение.
  • [БАГ] Исправлены случайные падения плеера при переключении режимов рисования

Версия 4.1.0 beta 13 [25.04.2026]

  • [БАГ] Исправлена ​​ошибка utils.FontPicker в режиме D2D: переданный (и действительный для D2D) default_font не всегда находился в диалоговом окне
  • [БАГ] Исправлена ​​ошибка в utils.FontPicker: диалоговое окно возвращало не указанный в пикселях размер, а размер, рассчитанный на основе размера в пунктах, что иногда приводило к расхождениям из-за округления. Теперь возвращается именно тот, который был указан в поле "px".
  • [БАГ] Исправлена ​​ошибка в utils.FontPicker: бесполезный выбор цвета удален из диалогового окна.
  • [БАГ] Во внутренней реализации window.Repaint добавлен флаг для перерисовки всех дочерних элементов JSplitter в случае, если необязательный параметр force установлен в значение true.

Версия 4.1.0 beta 14 [29.04.2026]

  • [БАГ] Исправлено свойство D2DFont.Style: ранее оно возвращало только стиль D2D (обычный и курсивный), теперь оно также возвращает жирность, подчеркивание и зачеркивание, как в GdiFont
  • [БАГ] Исправлены utils.FontPicker и gdi.Font: Теперь, если стиль установлен на «обычный», толщина шрифта корректируется в соответствии с существующей толщиной шрифта, а не просто задает 400. Если толщина не соответствует существующей толщине шрифта в пикере, шрифт по умолчанию отображаться не будет. К сожалению, если толщина шрифта искусственно увеличивается (например, gdi.Font("Segoe UI Light", 96, 1)), такой шрифт также не будет отображаться в списке выбора.
  • [БАГ] Исправлен utils.FontPicker: удалены вертикальные и растровые шрифты (GDI+ и D2D работают только со шрифтами TTF/OTF) из списка; ввод шрифта, которого нет в списке, запрещен.
  • [БАГ] Исправлены все асинхронные методы загрузки изображений, которые могли получить доступ к больше не существующему устройству D2D
  • [БАГ] Исправлена ​​ошибка fb.DoDragDrop: свойство custom_image не работало в режиме D2D
  • [ФУНКЦИЯ] Улучшен поиск шрифтов для D2D
  • [ОБНОВЛЕНИЕ] Обновлен файл list.js в примерах (включает похожих исполнителей и лучшие треки) от Gabriel Schwartz
  • [ОБНОВЛЕНИЕ] Обновлен движок JavaScript до SpiderMonkey 140.10.1esr
  • [ОБНОВЛЕНИЕ] Обновлен движок редактора исходного кода до Scintilla 5.6.2
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев

Сообщение #493 LUR » 01.05.2026, 08:08

Версия 4.1.0 beta 15 [30.04.2026]

  • [ФУНКЦИЯ] Добавлен метод window.SetShortcutFilter для условного подавления сочетаний клавиш панели (см. документацию)
  • [ОШИБКА] Исправлена ​​ошибка: системное сочетание клавиш Alt+F4 никогда не работало для панели JSplitter, находящейся в фокусе
  • [ФУНКЦИЯ] Добавлены utils.MD5, utils.CRC32 и utils.SHA1 для вычисления хешей строк
  • [ФУНКЦИЯ] Добавлено utils.MD5FromFile, utils.CRC32FromFile и utils.SHA1FromFile для вычисления хешей файлов
  • [ЭКСПЕРИМЕНТАЛЬНО] Добавлено свойство Handles для параметра action колбэка on_drag_drop: если перетаскиваемые данные могут быть интерпретированы как FbMetadbHandleList, оно содержит его, в противном случае значение равно null. Если данные поступили извне проигрывателя, то Handles всегда будет равен null.

Версия 4.1.1 [01.05.2026]

  • [ФУНКЦИЯ] Добавлены utils.FolderPicker и utils.FilePicker (см. документацию)
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев

Сообщение #494 LUR » 06.05.2026, 16:48

Версия 4.1.2 [06.05.2026]

● [ФУНКЦИЯ] Добавлены gdi.Brush и d2d.Brush для создания объектов GdiBrush и D2DBrush соответственно (см. документацию и пример "Brushes.js")
● [ФУНКЦИЯ] Все методы Draw*/Fill* теперь поддерживают не только цвет, но и пользовательскую кисть
● [ФУНКЦИЯ] В GdiGraphics добавлены реализации матричных преобразований из D2DGraphics (Translate, Rotate, Scale, и т. д.)
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев

Сообщение #495 Marakobes » 12.05.2026, 18:03

Привет. При использовании скрипта properties - в том случае, если в файле вшита лирика, на вкладке текст песен лезет на все остальные данные

Изображение
Marakobes
Репутация: 1
С нами: 14 лет 1 месяц

Сообщение #496 LUR » 13.05.2026, 03:40

Marakobes:При использовании скрипта properties - в том случае, если в файле вшита лирика, на вкладке текст песен лезет на все остальные данные
Я видел это мракобесие. Не разбирался, скрипты примеров не мои (они мне достались со старых разработок JScript панели), самое интересное, когда переключаюсь в Direct2D режим, то эти строки куда-то деваются. Таки разные движки вывода текста и до сих пор полного однообразия не добился, но в большинстве случаев, оно рисует одинаково. Ну я к тому, что скрипты примеров не идеальны, я не раз это замечал, их надо дорабатывать, но времени и желания у меня нет, занимаюсь только самим плагином. Ребята с гидрогена порой их исправляют и присылают мне, я включаю их исправления в пакет.
Запись 2026-05-13 034146.mp4
(5.58 МБ) Скачиваний: 84
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев

Сообщение #497 Marakobes » 13.05.2026, 10:23

LUR, понятно, я хоть в ту тему написал на гидрогене-то? Она как будто не очень живая

если не сложно - как чисто скрыть лирику из панели? И очень крупный заголовок самой панели - как изменить шрифт? Так-то все устраивает
Marakobes
Репутация: 1
С нами: 14 лет 1 месяц

Сообщение #498 LUR » 13.05.2026, 12:03

Marakobes:Она как будто не очень живая
Очень даже живая. Весь фидбэк идет именно оттуда, это здесь в основном молчание.
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев

Сообщение #499 LUR » 22.05.2026, 02:49

Версия 4.1.3 [22.05.2026]

  • [ОШИБКА] Исправлена ​​тёмная тема для описания пакетов SMP, а также для меню и полос прокрутки в редакторе кода
  • [ОШИБКА] fb.DoDragDrop: теперь свойство custom_image параметра options используется в качестве запасного варианта, если обложка трека не найдена или опция use_album_art имеет значение false.
  • [ОШИБКА] fb.DoDragDrop: плеер аварийно завершал работу, когда свойство custom_image параметра options равно null, несмотря на то, что в документации указано, что это аргумент допускает значение null.
  • [ФУНКЦИЯ] Добавлен utils.MessageBox для отображения диалогового окна системных сообщений с поддержкой темной темы (см. документацию и базовый пример "MessageBox.js")
  • [ФУНКЦИЯ] Добавлен необязательный параметр help_text в utils.TextBox для отображения кнопки справки в диалоговом окне (см. документацию)
  • [ФУНКЦИЯ] Добавлены функция обратного вызова on_console_refresh и console.GetLines. Также добавлена ​​опция console.ClearBacklog с небольшим ограничением для foobar2000 < 2.0 (см. документацию)
  • [ФУНКЦИЯ] Добавлен необязательный параметр show в fb.ShowConsole для закрытия консоли, если установлено значение false
  • [ФУНКЦИЯ] Добавлен необязательный четвертый параметр к gdi.Brush и d2d.Brush для WrapMode (как для битмапных кистей). Ранее для созданных кистей (не битмапного типа) после их создания это устанавливалось только через свойство WrapMode (см. документацию).
  • [ОБНОВЛЕНИЕ] Обновлен движок JavaScript до SpiderMonkey 140.11.0esr
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев

Сообщение #500 LUR » 25.05.2026, 05:09

Версия 4.1.4 [25.05.2026]

  • [ОШИБКА] Плеер иногда падает при закрытии: событие из очереди может быть получено во время закрытия панели, даже если оно уже удалено из списка контроллера задач.
  • [ОШИБКА] Исправлены файлы сэмплов by regor
LUR M Онлайн
Автор темы, Модератор
Аватар
Откуда: Минск
Репутация: 435
С нами: 13 лет 9 месяцев