# SAIKYO OS Boot Plymouth Theme # Simple and reliable boot splash # Set dark background Window.SetBackgroundTopColor(0.02, 0.02, 0.02); Window.SetBackgroundBottomColor(0.02, 0.02, 0.02); # Screen dimensions screen_width = Window.GetWidth(); screen_height = Window.GetHeight(); center_x = screen_width / 2; center_y = screen_height / 2; # Create logo text "SAIKYO OS" in green logo_image = Image.Text("SAIKYO OS", 0.0, 1.0, 0.4); logo_sprite = Sprite(logo_image); logo_sprite.SetX(center_x - logo_image.GetWidth() / 2); logo_sprite.SetY(center_y - 80); # Create subtitle subtitle_image = Image.Text("Загрузка системы...", 1.0, 1.0, 1.0); subtitle_sprite = Sprite(subtitle_image); subtitle_sprite.SetX(center_x - subtitle_image.GetWidth() / 2); subtitle_sprite.SetY(center_y - 20); # Progress bar dimensions bar_width = 400; bar_height = 8; bar_x = center_x - bar_width / 2; bar_y = center_y + 60; # Create progress bar background (dark gray) bar_bg_image = Image(bar_width, bar_height); for (x = 0; x < bar_width; x++) { for (y = 0; y < bar_height; y++) { bar_bg_image.SetPixel(x, y, 0.15, 0.15, 0.15, 1.0); } } bar_bg_sprite = Sprite(bar_bg_image); bar_bg_sprite.SetX(bar_x); bar_bg_sprite.SetY(bar_y); # Create progress bar fill (green) bar_fill_sprite = Sprite(); bar_fill_sprite.SetX(bar_x); bar_fill_sprite.SetY(bar_y); # Version text version_image = Image.Text("v1.0", 0.5, 0.5, 0.5); version_sprite = Sprite(version_image); version_sprite.SetX(center_x - version_image.GetWidth() / 2); version_sprite.SetY(screen_height - 50); # Progress value progress_val = 0; # Update progress bar fun update_progress(p) { global.progress_val = p; if (p < 0) p = 0; if (p > 1) p = 1; fill_w = Math.Int(bar_width * p); if (fill_w < 1) fill_w = 1; fill_image = Image(fill_w, bar_height); for (x = 0; x < fill_w; x++) { for (y = 0; y < bar_height; y++) { fill_image.SetPixel(x, y, 0.0, 1.0, 0.4, 1.0); } } bar_fill_sprite.SetImage(fill_image); } # Callbacks fun refresh_callback() { update_progress(global.progress_val); } fun boot_progress_callback(time, progress) { global.progress_val = progress; update_progress(progress); } fun display_normal_callback() { } fun display_password_callback(prompt, bullets) { pass_image = Image.Text(prompt, 1.0, 1.0, 1.0); pass_sprite = Sprite(pass_image); pass_sprite.SetX(center_x - pass_image.GetWidth() / 2); pass_sprite.SetY(center_y + 120); } fun display_message_callback(text) { msg_image = Image.Text(text, 0.8, 0.8, 0.8); msg_sprite = Sprite(msg_image); msg_sprite.SetX(center_x - msg_image.GetWidth() / 2); msg_sprite.SetY(center_y + 150); } fun quit_callback() { } # Register callbacks Plymouth.SetRefreshFunction(refresh_callback); Plymouth.SetBootProgressFunction(boot_progress_callback); Plymouth.SetDisplayNormalFunction(display_normal_callback); Plymouth.SetDisplayPasswordFunction(display_password_callback); Plymouth.SetMessageFunction(display_message_callback); Plymouth.SetQuitFunction(quit_callback); # Initial draw update_progress(0);