# This is an example plymouth plugin script

bits_per_pixel = Window.GetBitsPerPixel ();
if (bits_per_pixel == 4) {
    Window.SetBackgroundColor (0, 0, 0);
    logo.image = Image("trisquel_logo16.png");
} else {
    logo.image = Image("special://logo");

    bg_image = Image("background.png");
    bg_sprite = Sprite(bg_image);

    customlogo.image = Image("custom.png");
    customlogo.sprite = Sprite(customlogo.image);
    customlogo.sprite.SetX (0);
    customlogo.sprite.SetY (0);
    customlogo.sprite.SetOpacity (1);

    screen_width = Window.GetWidth();
    screen_height = Window.GetHeight();
    resized_bg_image = bg_image.Scale(screen_width, screen_height);
    bg_sprite.SetImage(resized_bg_image);
}


logo.sprite = Sprite(logo.image);
logo.opacity_angle = 0;
logo.sprite.SetX (Window.GetX() + Window.GetWidth()  / 2 - logo.image.GetWidth()  / 2);
logo.sprite.SetY (Window.GetY() + (Window.GetHeight() / 3) * 2 - logo.image.GetHeight() / 2);
logo.sprite.SetOpacity (1);

fun refresh_callback ()
  {
    if ((status == "normal") && (bits_per_pixel != 4))
      {
        logo.opacity_angle += ((2 * 3.14) / 50) * 0.25;  # 0.25 HZ
        min_opacity = 0.3;
        opacity = (Math.Cos(logo.opacity_angle) + 1) / 2;
        opacity *= 1 - min_opacity;
        opacity += min_opacity;
        logo.sprite.SetOpacity (opacity);
      }
  }
  
Plymouth.SetRefreshFunction (refresh_callback);

#----------------------------------------- Dialogue --------------------------------

status = "normal";

fun dialog_setup()
  {
    local.box;
    local.lock;
    local.entry;
    
    box.image = Image("box.png");
    lock.image = Image("lock.png");
    entry.image = Image("entry.png");
    
    box.sprite = Sprite(box.image);
    box.x = Window.GetX() + Window.GetWidth()  / 2 - box.image.GetWidth ()/2;
    box.y = Window.GetY() + Window.GetHeight() / 2 - box.image.GetHeight()/2;
    box.z = 10000;
    box.sprite.SetPosition(box.x, box.y, box.z);
    
    lock.sprite = Sprite(lock.image);
    lock.x = box.x + box.image.GetWidth()/2 - (lock.image.GetWidth() + entry.image.GetWidth()) / 2;
    lock.y = box.y + box.image.GetHeight()/2 - lock.image.GetHeight()/2;
    lock.z = box.z + 1;
    lock.sprite.SetPosition(lock.x, lock.y, lock.z);
    
    entry.sprite = Sprite(entry.image);
    entry.x = lock.x + lock.image.GetWidth();
    entry.y = box.y + box.image.GetHeight()/2 - entry.image.GetHeight()/2;
    entry.z = box.z + 1;
    entry.sprite.SetPosition(entry.x, entry.y, entry.z);
    
    global.dialog.box = box;
    global.dialog.lock = lock;
    global.dialog.entry = entry;
    global.dialog.bullet_image = Image("bullet.png");
    dialog_opacity (1);
  }
    
fun dialog_opacity(opacity)
  {
    dialog.box.sprite.SetOpacity (opacity);
    dialog.lock.sprite.SetOpacity (opacity);
    dialog.entry.sprite.SetOpacity (opacity);
    for (index = 0; dialog.bullet[index]; index++)
      {
        dialog.bullet[index].sprite.SetOpacity(opacity);
      }
  }

fun display_normal_callback ()
  {
    global.status = "normal";
    if (global.dialog)
      dialog_opacity (0);
  }

fun display_password_callback (prompt, bullets)
  {
    global.status = "password";
    if (!global.dialog)
	dialog_setup();
    else
	dialog_opacity(1);
    for (index = 0; dialog.bullet[index] || index < bullets; index++)
      {
        if (!dialog.bullet[index])
          {
            dialog.bullet[index].sprite = Sprite(dialog.bullet_image);
            dialog.bullet[index].x = dialog.entry.x + index * dialog.bullet_image.GetWidth();
            dialog.bullet[index].y = dialog.entry.y + dialog.entry.image.GetHeight() / 2 - dialog.bullet_image.GetHeight() / 2;
            dialog.bullet[index].z = dialog.entry.z + 1;
            dialog.bullet[index].sprite.SetPosition(dialog.bullet[index].x, dialog.bullet[index].y, dialog.bullet[index].z);
          }
        if (index < bullets)
          dialog.bullet[index].sprite.SetOpacity(1);
        else
          dialog.bullet[index].sprite.SetOpacity(0);
      }
  }

Plymouth.SetDisplayNormalFunction(display_normal_callback);
Plymouth.SetDisplayPasswordFunction(display_password_callback);

#----------------------------------------- Quit --------------------------------

fun quit_callback ()
{
  logo.sprite.SetOpacity (1);
}

Plymouth.SetQuitFunction(quit_callback);

#----------------------------------------- Message --------------------------------

message_sprite = Sprite();
message_sprite.SetPosition(10, 10, 10000);

fun message_callback (text)
{
  my_image = Image.Text(text, 1, 1, 1);
  message_sprite.SetImage(my_image);
}

Plymouth.SetMessageFunction(message_callback);
