Мартин Грэслин (Martin Graesslin), один из ключевых разработчиков оконного менеджера KWin, представил новое достижение на поприще интеграции поддержки JavaScript: визуальные эффекты для KWin теперь можно создавать на языке JavaScript, а не только на C++.
C точки зрения производительности, эффекты на JavaScript ничем не отличаются от эффектов на C++. Система наложения эффектов в KWin разделена на две стадии: реагирование на изменение в оконном менеджере (например, закрытие окна) и рендеринг. Скриптовый API взаимодействует только с оконным менеджером и не касается отрисовки, все операции рендеринга как и раньше производятся низкоуровневыми подпрограммами на C++.
Для распространения эффектов предлагается использовать уже существующую структуру Plasma Package. API для разработки эффектов максимально приближено к API для разработки скриптов-дополнений к KWin. Для создания анимационных эффектов предлагается использовать API, базирующийся на появившемся в Qt 4.8 элементе AnimationEffect. Для примера, Грэслин представил реализацию на JavaScript известного эффекта затухания (Fade), вариант на C++ которого занимает более 200 строк, а на JavaScript укладывается в 7 строк:
var duration = 250; effects.windowAdded.connect(function(w) { effect.animate(w, Effect.Opacity, duration, 1.0); }); effects.windowClosed.connect(function(w) { effect.animate(w, Effect.Opacity, duration, 0.0, 1.0); });
Кроме упрощения разработки эффектов, использование JavaScript также приведёт к упрощению их последующей поддержки. В настоящее время разработчики испытывают большие проблемы с поддержанием в актуальном виде накопленной коллекции дополнений на C++, особенно в ситуации внесения изменений в API и непостоянности ABI. Дополнения на JavaScript можно будет вынести из основного дерева исходных текстов KWin и поставлять в виде отдельных пакетов.
В настоящее время JavaScript API находится на начальной стадии развития, но будет развиваться в рамках текущего цикла подготовки релиза KDE 4.9. Как уже упоминалось выше скрипты не могут участвовать в операциях рендеринга, но ситуация может измениться после появления биндинга для WebGL, что позволит, например, организовать загрузку собственных шейдеров. Пока реализация поддержки WebGL не входит в планы, по крайней мере в рамках цикла подготовки KDE 4.9.