Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Помогите со скриптом для Plymouth  (Прочитано 1808 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Fantiney

  • Автор темы
  • Участник
  • *
  • Сообщений: 137
    • Просмотр профиля
Помогите со скриптом для Plymouth
« : 27 Июля 2013, 17:22:58 »
Всем привет!

Написал скрипт для Plymouth. Вот он:

Код: (С) [Выделить]
# This is a simple testing script for Plymouth daemon.

Window.SetBackgroundTopColor (0.16, 0.00, 0.12);   
Window.SetBackgroundBottomColor (0.16, 0.00, 0.12); 
logo.image = Image (ubuntu_logo16.png); //выбираем изображение логотипа

logo.sprite = Sprite (); //создаем новый спрайт
logo.sprite.SetImage (logo.image);

logo.width = logo.image.GetWidth ();
logo.height = logo.image.GetHeight ();
logo.x = Window.GetX () + Window.GetWidth () / 2 - logo.width  / 2;
logo.y = Window.GetY () + Window.GetHeight () / 2 - logo.height;
logo.z = 10; //зачем вообще нужен "Z"?

logo.sprite.SetX (logo.x); //задаём координаты логотипа
logo.sprite.SetY (logo.y);
logo.sprite.SetZ (logo.z);

logo.sprite.SetOpacity (1);

Фон отображается, а логотип нет. Ткните носом, где ошибка?
« Последнее редактирование: 27 Июля 2013, 18:25:25 от Fantiney »

Оффлайн Grigory Smirnov

  • Старожил
  • *
  • Сообщений: 1339
  • Дайте мне исходники, и я переверну Землю.
    • Просмотр профиля
    • Дафтер
Re: Помогите со скриптом для Plymouth
« Ответ #1 : 01 Августа 2013, 22:57:42 »
Язык не знаю, поэтому скажу только свою догадку.

В начале у вас есть
Window.SetBackgroundTopColor
(0.16, 0.00, 0.12);
Window.SetBackgroundBottomColor
(0.16, 0.00, 0.12);

Как понимаю, установили фон. А логотип надо устанавливать таким же способом? Повторюсь, только догадки.


Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
Re: Помогите со скриптом для Plymouth
« Ответ #2 : 01 Августа 2013, 23:23:24 »
попробуйте изменить 1 на что-то др:
logo.sprite.SetOpacity (0.9);

я так понимаю код выставляет прозрачность
« Последнее редактирование: 01 Августа 2013, 23:25:51 от Чистый »
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн Fantiney

  • Автор темы
  • Участник
  • *
  • Сообщений: 137
    • Просмотр профиля
Re: Помогите со скриптом для Plymouth
« Ответ #3 : 12 Августа 2013, 23:06:46 »
Спасибо за ответы, ошибка была в строчке объявления файла:
logo.image = Image (ubuntu_logo16.png);Нужно имя в кавычках писать. :)

Пользователь решил продолжить мысль 12 Августа 2013, 23:10:09:
Апгрейд скрипта:
# This is a simple testing script for Plymouth daemon.

Window.SetBackgroundTopColor (0.16, 0.00, 0.12);   
Window.SetBackgroundBottomColor (0.16, 0.00, 0.12); 
logo.image = Image ("ubuntu_logo16.png"); //выбираем изображение логотипа

logo.sprite = Sprite (); //создаем новый спрайт
logo.sprite.SetImage (logo.image);

logo.width = logo.image.GetWidth ();
logo.height = logo.image.GetHeight ();
logo.x = Window.GetX () + Window.GetWidth () / 2 - logo.width  / 2;
logo.y = Window.GetY () + Window.GetHeight () / 2 - logo.height;
logo.z = 1000;

logo.sprite.SetX (logo.x); //задаём координаты логотипа
logo.sprite.SetY (logo.y);
logo.sprite.SetZ (logo.z);

logo.sprite.SetOpacity (1);


light.image = Image ("light.png");

light.sprit = Sprite (light.image);

light.width = light.image.GetWidth ();
light.height = light.image.GetHeight ();
llight.x = Window.GetX () + Window.GetWidth () / 2 - llight.width  / 2;
light.y = Window.GetY () + Window.GetHeight () / 2 - light.height;
light.z = 100;

light.sprite.SetX (light.x);
light.sprite.SetY (light.y);
light.sprite.SetZ (light.z);

#light.sprite.SetOpacity (1);

fun pulse ()
 {
  int flag;
  float counter;
  if (flag = 0)
{if (counter < 1)
{
counter = counter + 0.02;
light.sprite.SetOpacity (counter);
}
else
flag = 1;
}
else
{if (counter > 0)
{
counter = counter - 0.02;
light.sprite.SetOpacity (counter);
}
else
flag = 0;
}
 }

Plymouth.SetRefreshFunction (pulse);

Функция должна динамично менять прозрачность у второго изображения. Однако не работает. Подскажите, в чём ошибка?
« Последнее редактирование: 12 Августа 2013, 23:10:09 от Fantiney »

Оффлайн BrainROM

  • Активист
  • *
  • Сообщений: 351
    • Просмотр профиля
Re: Помогите со скриптом для Plymouth
« Ответ #4 : 13 Августа 2013, 08:59:46 »
Может не по теме, но тоже планирую что-нить нарисовать для загрузки. Только вот не знаю как предпросмотр делать. plymount show-splash не работает. Подскажите
CD тихо не DVD меня до истерики и не USB мне мозги

Оффлайн Grigory Smirnov

  • Старожил
  • *
  • Сообщений: 1339
  • Дайте мне исходники, и я переверну Землю.
    • Просмотр профиля
    • Дафтер
Re: Помогите со скриптом для Plymouth
« Ответ #5 : 13 Августа 2013, 10:09:09 »
Ilya21, новую тему создавайте.

Оффлайн Fantiney

  • Автор темы
  • Участник
  • *
  • Сообщений: 137
    • Просмотр профиля
Re: Помогите со скриптом для Plymouth
« Ответ #6 : 14 Августа 2013, 20:42:17 »
Может не по теме, но тоже планирую что-нить нарисовать для загрузки. Только вот не знаю как предпросмотр делать. plymount show-splash не работает. Подскажите
Вот здесь есть хороший подробный материал об этом.

Насколько я понял, чтобы просмотреть тему загрузки прямо на рабочем столе нужен пакет plymouth-x11
Для этого выполняем:
sudo apt-get install plymouth-x11Далее в терминале запускаем Plymouth:
sudo plymouthd --debug --tty=`tty` --no-daemonИ уже после открываем новую вкладку и вводим:
sudo plymouth show-splash
У меня в отдельном окне показывает. Для остановки: sudo plymouth --quit

Оффлайн BrainROM

  • Активист
  • *
  • Сообщений: 351
    • Просмотр профиля
Re: Помогите со скриптом для Plymouth
« Ответ #7 : 15 Августа 2013, 07:39:44 »
Спасибо. Все работает. Начну делать свою тему
CD тихо не DVD меня до истерики и не USB мне мозги

Оффлайн Fantiney

  • Автор темы
  • Участник
  • *
  • Сообщений: 137
    • Просмотр профиля
Re: Помогите со скриптом для Plymouth
« Ответ #8 : 19 Августа 2013, 23:02:54 »
ааа... кто ж мне со скриптом поможет..  :) красивая бы тема получилась, не хочу бросать, а куда дальше пилить не знаю...
у плюмоута даже дебаггинга нормального нет. как я понял, чтобы он работал нужно целую секцию в скрипте темы написать.

Оффлайн Grigory Smirnov

  • Старожил
  • *
  • Сообщений: 1339
  • Дайте мне исходники, и я переверну Землю.
    • Просмотр профиля
    • Дафтер
Re: Помогите со скриптом для Plymouth
« Ответ #9 : 20 Августа 2013, 12:46:36 »
Fantiney, у вас опять проблемы?

Оффлайн Fantiney

  • Автор темы
  • Участник
  • *
  • Сообщений: 137
    • Просмотр профиля
Re: Помогите со скриптом для Plymouth
« Ответ #10 : 27 Августа 2013, 15:48:29 »
Fantiney, у вас опять проблемы?

Спасибо за ответ, да проблемы были с цикличным увеличением яркости. Частично решил. Яркость второй картинки должна плавно увеличиваться, а затем уменьшатся так же плавно. Первая часть замысла реализована, яркость возрастает, но почему-то не уменьшается, как я хотел, а просто сбрасывается на ноль. Почему? Не понимаю.

flag = 0;
counter = 0;

fun pulse ()
 {
if (counter == 1)
flag = 1;
if (counter == 0)
flag = 0;
if (flag == 0) {
counter = counter + 0.02;
light.sprite.SetOpacity (counter);
}
if (flag == 1) {
counter = counter - 0.02;
light.sprite.SetOpacity (counter);
}
 }

Plymouth.SetRefreshFunction (pulse);

Ну т.е. пока переменная flag равно нулю, яркость увеличивается, пока не достигнет 1. Когда достигает, переменной flag тоже присваивается 1 и яркость уменьшается. В теории всё верно, а вот на практике..
« Последнее редактирование: 29 Августа 2013, 17:10:04 от Fantiney »

Оффлайн Fantiney

  • Автор темы
  • Участник
  • *
  • Сообщений: 137
    • Просмотр профиля
Re: Помогите со скриптом для Plymouth
« Ответ #11 : 29 Августа 2013, 18:21:50 »
Ура!! Оно заработало!    ;D

Вся соль была в том, что строгое сравнение слишком строго для этой операции )
Вот конечный вариант:

flag = 0;
counter = 1;

fun pulse ()
 {

if (counter < 0.05)
flag = 1;
if (counter > 0.95)
flag = 0;

if (flag == 0) {
counter = counter - 0.02;
light.sprite.SetOpacity (counter);
}
if (flag == 1) {
counter = counter + 0.02;
light.sprite.SetOpacity (counter);
}
 }

Plymouth.SetRefreshFunction (pulse);


А вот результат! :)

Оффлайн Grigory Smirnov

  • Старожил
  • *
  • Сообщений: 1339
  • Дайте мне исходники, и я переверну Землю.
    • Просмотр профиля
    • Дафтер
Re: Помогите со скриптом для Plymouth
« Ответ #12 : 29 Августа 2013, 18:24:31 »
Fantiney, вот видишь, все получилось, главное не отчаиваться!

 

Страница сгенерирована за 0.086 секунд. Запросов: 25.