# Bananarchy Linux Plymouth Theme Script # Central crossed bananas ("A") remain stationary while the outer banana circle rotates. Window.SetBackgroundTopColor(0, 0, 0); Window.SetBackgroundBottomColor(0, 0, 0); center_image = Image("center.png"); ring_image = Image("ring.png"); error_image = Image("error.png"); title_image = Image("title.png"); win_w = Window.GetWidth(); win_h = Window.GetHeight(); target_size = Math.Min(win_w * 0.72, win_h * 0.56); if (target_size > 164 && target_size < 176) { scale_ratio = 1.0; } else { scale_ratio = target_size / center_image.GetWidth(); center_image = center_image.Scale( center_image.GetWidth() * scale_ratio, center_image.GetHeight() * scale_ratio ); ring_image = ring_image.Scale( ring_image.GetWidth() * scale_ratio, ring_image.GetHeight() * scale_ratio ); error_image = error_image.Scale( error_image.GetWidth() * scale_ratio, error_image.GetHeight() * scale_ratio ); title_image = title_image.Scale( title_image.GetWidth() * scale_ratio, title_image.GetHeight() * scale_ratio ); } global.message_font = "Sans 10"; logo_x = Window.GetX() + win_w / 2 - center_image.GetWidth() / 2; logo_y = Window.GetY() + win_h / 2 - center_image.GetHeight() / 2 - 16; title_x = Window.GetX() + win_w / 2 - title_image.GetWidth() / 2; title_y = logo_y + center_image.GetHeight() + 12; ring_sprite = Sprite(ring_image); ring_sprite.SetPosition(logo_x, logo_y, 10); ring_sprite.SetOpacity(1); center_sprite = Sprite(center_image); center_sprite.SetPosition(logo_x, logo_y, 20); center_sprite.SetOpacity(1); title_sprite = Sprite(title_image); title_sprite.SetPosition(title_x, title_y, 20); title_sprite.SetOpacity(1); error_sprite = Sprite(error_image); error_sprite.SetPosition(logo_x, logo_y, 30); error_sprite.SetOpacity(0); global.angle = 0.0; global.two_pi = 6.283185307; global.status = "normal"; fun refresh_callback() { if (status == "error") { ring_sprite.SetOpacity(0); center_sprite.SetOpacity(0); error_sprite.SetOpacity(1); return; } error_sprite.SetOpacity(0); ring_sprite.SetOpacity(1); center_sprite.SetOpacity(1); angle = angle + 0.055; if (angle >= two_pi) { angle = angle - two_pi; } ring_sprite.SetImage(ring_image.Rotate(angle)); } Plymouth.SetRefreshFunction(refresh_callback); message_sprite = Sprite(); message_sprite.SetPosition(10, 10, 10000); fun display_message_callback(text) { if (status == "error") text_image = Image.Text(text, 1, 0.3, 0.2, 1, message_font, "center"); else if (status == "warning") text_image = Image.Text(text, 1, 0.84, 0.04, 1, message_font, "center"); else text_image = Image.Text(text, 0.8, 0.8, 0.8, 0.9, message_font, "center"); message_sprite.SetImage(text_image); message_x = Window.GetX() + win_w / 2 - text_image.GetWidth() / 2; message_y = Window.GetY() + win_h - text_image.GetHeight() - 12; message_sprite.SetPosition(message_x, message_y, 10000); } fun hide_message_callback(text) { message_sprite = Sprite(); message_sprite.SetPosition(10, 10, 10000); status = "normal"; } Plymouth.SetDisplayMessageFunction(display_message_callback); Plymouth.SetHideMessageFunction(hide_message_callback); fun update_status_callback(new_status) { if (new_status == "warning" || new_status == "error") global.status = new_status; else global.status = "normal"; } Plymouth.SetUpdateStatusFunction(update_status_callback); fun quit_callback() { ring_sprite.SetOpacity(1); center_sprite.SetOpacity(1); } Plymouth.SetQuitFunction(quit_callback);