2023-05-06 21:33:20 +05:00
/ *
2023-05-12 18:40:45 +05:00
Theme Name : Melawy Lera Sugar
2023-05-06 21:33:20 +05:00
Version : 1.0
Description : My theme
Author : Valeria Fadeeva - https : //github.com/Valeria-Fadeeva
Date : 2023.04 . 04
License : GNU AFFERO GENERAL PUBLIC LICENSE , see < http : //www.gnu.org/licenses/>
* /
Window . GetMaxWidth = function ( ) {
i = 0 ;
width = 0 ;
while ( Window . GetWidth ( i ) ) {
width = Math . Max ( width , Window . GetWidth ( i ) ) ;
i ++ ;
}
return width ;
} ;
Window . GetMaxHeight = function ( ) {
i = 0 ;
height = 0 ;
while ( Window . GetHeight ( i ) ) {
height = Math . Max ( height , Window . GetHeight ( i ) ) ;
i ++ ;
}
return height ;
} ;
Percent = function ( perc , pixels ) {
result = Math . Int ( Math . Abs ( Math . Int ( pixels ) ) / 100 * Math . Abs ( Math . Int ( perc ) ) ) ;
return result ;
} ;
Limit = function ( width , height , perc ) {
local . this ;
this . width = width ;
this . height = height ;
this . perc = perc ;
this . GetWidth = function ( ) {
width = Percent ( this . perc , this . width ) ;
return width ;
} ;
this . GetHeight = function ( ) {
height = Percent ( this . perc , this . height ) ;
return height ;
} ;
return this ;
} ;
ScaleImage = function ( image1 , image2 ) {
img1 . width = image1 . GetWidth ( ) ;
img1 . height = image1 . GetHeight ( ) ;
img1 . ratio = img1 . width / img1 . height ;
img2 . width = image2 . GetWidth ( ) ;
img2 . height = image2 . GetHeight ( ) ;
img2 . ratio = img2 . width / img2 . height ;
if ( img1 . ratio == 1 || ( img1 . width < 200 && img1 . height < 200 ) ) {
img1 . scaled = image1 . Scale ( img2 . width , img2 . height ) ;
return img1 . scaled ;
}
if ( img1 . width == img2 . width && img1 . height == img2 . height ) {
return image1 ;
}
if ( img2 . ratio < img1 . ratio ) {
factor = img2 . height / img1 . height ;
} else {
factor = img2 . width / img1 . width ;
}
img1 . scaled = image1 . Scale ( img1 . width * factor , img1 . height * factor ) ;
return img1 . scaled ;
} ;
FitIntoDimensions = function ( image1 , image2 ) {
img1 . width = image1 . GetWidth ( ) ;
img1 . height = image1 . GetHeight ( ) ;
img2 . width = image2 . GetWidth ( ) ;
img2 . height = image2 . GetHeight ( ) ;
ma = Math . Max ( img1 . width , img2 . height ) ;
mi = Math . Min ( img1 . height , img2 . height ) ;
factor = ma / mi ;
img1 . fit = image1 . Scale ( Math . Int ( img1 . width / factor ) , Math . Int ( img1 . height / factor ) ) ;
} ;
SetSpriteImage = function ( asset , x , y , z ) {
local . sprite = Sprite ( ) ;
sprite . image = Image ( asset ) ;
sprite . width = sprite . image . GetWidth ( ) ;
sprite . height = sprite . image . GetHeight ( ) ;
sprite . SetImage ( sprite . image ) ;
sprite . SetPosition ( x , y , z ) ;
return sprite ;
} ;
// TEXT
ubuntufont = "Ubuntu Mono Regular 16" ;
perfont = "Ubuntu Mono Regular 16" ;
progressfont = "Ubuntu Mono Regular 16" ;
starting _text = "Starting up..." ;
bye _text = "System is shutting down" ;
progress _t = 0 ;
x0 = Window . GetX ( ) ;
y0 = Window . GetY ( ) ;
z0 = Window . GetZ ( ) ;
Window . SetBackgroundTopColor ( 0 , 0 , 0 ) ;
Window . SetBackgroundBottomColor ( 0 , 0 , 0 ) ;
screen . width = Window . GetMaxWidth ( ) ;
screen . height = Window . GetMaxHeight ( ) ;
// BACKGROUND
background . image = Image ( "BACKGROUND.png" ) ;
background . image = ScaleImage ( background . image , Limit ( screen . width , screen . height , 100 ) ) ;
background . width = background . image . GetWidth ( ) ;
background . height = background . image . GetHeight ( ) ;
background . x = x0 + screen . width / 2 - background . width / 2 ;
background . y = y0 + screen . height / 2 - background . height / 2 ;
//background.x = x0;
//background.y = y0;
background . sprite = SpriteNew ( ) ;
background . sprite . SetImage ( background . image ) ;
background . sprite . SetPosition ( background . x , background . y , 0 ) ;
background . sprite . SetOpacity ( 1 ) ;
// MESSAGE BACKGROUND
side _background . image = Image ( "SIDE_BACKGROUND2.png" ) ;
side _background . image = side _background . image . Scale ( Percent ( 25 , screen . width ) , Percent ( 100 , screen . height ) ) ;
side _background . width = side _background . image . GetWidth ( ) ;
side _background . height = side _background . image . GetHeight ( ) ;
side _background . x = x0 ;
side _background . y = y0 ;
side _background . sprite = Sprite ( side _background . image ) ;
2023-05-08 17:37:11 +05:00
side _background . sprite . SetPosition ( side _background . x , side _background . y , 1 ) ;
2023-05-06 21:33:20 +05:00
side _background . sprite . SetOpacity ( 1 ) ;
// Sise Logo
side _logo . image = Image ( "Melawy_Linux_640x320.png" ) ;
side _logo . image = ScaleImage ( side _logo . image , Limit ( screen . width , screen . height , 20 ) ) ;
// side_logo.image = side_logo.image.Scale(Percent(25, screen.width), Percent(25, screen.height));
side _logo . width = side _logo . image . GetWidth ( ) ;
side _logo . height = side _logo . image . GetHeight ( ) ;
side _logo . x = ( side _background . width - side _logo . width ) / 2 ;
side _logo . y = screen . height - screen . height * 0.25 ;
side _logo . sprite = Sprite ( side _logo . image ) ;
2023-05-08 17:37:11 +05:00
side _logo . sprite . SetPosition ( side _logo . x , side _logo . y , 2 ) ;
2023-05-06 21:33:20 +05:00
side _logo . sprite . SetOpacity ( 1 ) ;
// **************************************** //
project _link . image = Image . Text ( "https://github.com/Melawy" , 0.5 , 0.5 , 0.5 , 1 , perfont ) ;
project _link . width = project _link . image . GetWidth ( ) ;
project _link . height = project _link . image . GetHeight ( ) ;
project _link . sprite = Sprite ( project _link . image ) ;
project _link . x = ( side _background . width - project _link . width ) / 2 ;
project _link . y = side _logo . y + side _logo . height ;
2023-05-08 17:37:11 +05:00
project _link . sprite . SetPosition ( project _link . x , project _link . y , 2 ) ;
2023-05-06 21:33:20 +05:00
project _link . sprite . SetOpacity ( 1 ) ;
// **************************************** //
// LOGO
logo . image = Image ( "MAIN_LOGO.png" ) ;
logo . image = FitIntoDimensions ( logo . image , Limit ( screen . width , screen . height , 35 ) ) ;
logo . sprite = Sprite ( logo . image ) ;
logo . x = screen . width / 2 - logo . image . GetWidth ( ) / 2 ; // позиция логотипа X
logo . y = Percent ( 10 , screen . height ) ; // позиция логотипа Y
logo . sprite . SetPosition ( logo . x , logo . y , 2 ) ;
logo . sprite . SetOpacity ( 1 ) ;
2023-05-08 17:37:11 +05:00
// PROGRESS FORM
progress _form . image = Image ( "PROGRESS_FORM.png" ) ;
progress _form . image = progress _form . image . Scale ( Percent ( 20 , screen . width ) , Percent ( 10 , screen . height ) ) ;
2023-05-06 21:33:20 +05:00
2023-05-08 17:37:11 +05:00
progress _form . width = progress _form . image . GetWidth ( ) ;
progress _form . height = progress _form . image . GetHeight ( ) ;
2023-05-06 21:33:20 +05:00
2023-05-08 17:37:11 +05:00
progress _form . x = Percent ( 50 , side _background . width ) - progress _form . width / 2 ;
progress _form . y = Percent ( 75 , side _background . height ) - progress _form . height ;
2023-05-06 21:33:20 +05:00
2023-05-08 17:37:11 +05:00
progress _form . sprite = Sprite ( progress _form . image ) ;
progress _form . sprite . SetPosition ( progress _form . x , progress _form . y , 2 ) ;
2023-05-12 18:40:45 +05:00
progress _form . sprite . SetOpacity ( 1 ) ;
2023-05-06 21:33:20 +05:00
// SPINNER
spinner . image = Image ( "SPINNER.png" ) ;
spinner . image = spinner . image . Scale ( Percent ( 1 , screen . width ) , Percent ( 1 , screen . width ) ) ;
spinner . width = spinner . image . GetWidth ( ) ;
spinner . height = spinner . image . GetHeight ( ) ;
2023-05-08 17:37:11 +05:00
spinner . x = progress _form . x + progress _form . width - spinner . width ;
spinner . y = progress _form . y + spinner . height / 10 ;
2023-05-06 21:33:20 +05:00
spinner . sprite = Sprite ( spinner . image ) ;
2023-05-08 17:37:11 +05:00
spinner . sprite . SetPosition ( spinner . x , spinner . y , 3 ) ; // позиция за или перед
2023-05-06 21:33:20 +05:00
// PROGRESS TEXT
progress _text . image = Image . Text ( progress _t + "%" , 255 , 255 , 255 , 1 , progressfont ) ;
progress _text . width = progress _text . image . GetWidth ( ) ;
progress _text . height = progress _text . image . GetHeight ( ) ;
2023-05-14 03:42:04 +05:00
progress _text . x = progress _form . x ; // + progress_form.width - (4 * Percent(70, progress_text.height)); // позиция % по X
progress _text . y = progress _form . y ; // + progress_text.height; // позиция % по Y
2023-05-06 21:33:20 +05:00
progress _text . sprite = SpriteNew ( ) ;
2023-05-08 17:37:11 +05:00
progress _text . sprite . SetPosition ( progress _text . x , progress _text . y , 3 ) ;
2023-05-06 21:33:20 +05:00
// PROGRESS BOX
progress _box . image = Image ( "PROGRESS_BOX.png" ) ;
2023-05-08 17:37:11 +05:00
progress _box . image = progress _box . image . Scale ( Percent ( 90 , progress _form . width ) , Percent ( 15 , progress _form . height ) ) ;
2023-05-06 21:33:20 +05:00
progress _box . width = progress _box . image . GetWidth ( ) ;
progress _box . height = progress _box . image . GetHeight ( ) ;
2023-05-08 17:37:11 +05:00
progress _box . x = progress _form . x + ( progress _form . width - progress _box . width ) / 2 ;
progress _box . y = progress _form . y + ( progress _form . height - progress _box . height ) / 2 ;
2023-05-06 21:33:20 +05:00
progress _box . sprite = Sprite ( progress _box . image ) ;
2023-05-08 17:37:11 +05:00
progress _box . sprite . SetPosition ( progress _box . x , progress _box . y , 3 ) ;
2023-05-06 21:33:20 +05:00
// PROGRESS BAR
progress _bar . original _image = Image ( "PROGRESS_BAR.png" ) ;
2023-05-08 17:37:11 +05:00
progress _bar . original _image = progress _bar . original _image . Scale ( Percent ( 90 , progress _form . width ) , Percent ( 15 , progress _form . height ) ) ;
2023-05-06 21:33:20 +05:00
progress _bar . width = progress _bar . original _image . GetWidth ( ) ;
progress _bar . height = progress _bar . original _image . GetHeight ( ) ;
2023-05-08 17:37:11 +05:00
progress _bar . x = progress _form . x + ( progress _form . width - progress _bar . original _image . GetWidth ( ) ) / 2 ;
progress _bar . y = progress _form . y + ( progress _form . height - progress _bar . original _image . GetHeight ( ) ) / 2 ;
2023-05-06 21:33:20 +05:00
progress _bar . sprite = Sprite ( ) ;
2023-05-08 17:37:11 +05:00
progress _bar . sprite . SetPosition ( progress _bar . x , progress _bar . y , 4 ) ;
2023-05-06 21:33:20 +05:00
// PROGRESS FADE
progress _fade . image = Image ( "PROGRESS_FADE.png" ) ;
2023-05-08 17:37:11 +05:00
progress _fade . image = progress _fade . image . Scale ( Percent ( 10 , progress _form . width ) , Percent ( 15 , progress _form . height ) ) ;
2023-05-06 21:33:20 +05:00
progress _fade . width = progress _fade . image . GetWidth ( ) ;
progress _fade . height = progress _fade . image . GetHeight ( ) ;
progress _fade . sprite = Sprite ( progress _fade . image ) ;
fade _dir = 0 ; // 0 = right, 1 = left
counter = 0 ;
max _counter = progress _box . width - progress _fade . width ;
function progress _callback ( duration , progress ) {
if ( progress _bar . image . GetWidth ( ) != Math . Int ( progress _bar . original _image . GetWidth ( ) * progress ) ) {
progress _bar . image = progress _bar . original _image . Scale ( progress _bar . original _image . GetWidth ( progress _bar . original _image ) * progress , progress _bar . original _image . GetHeight ( ) ) ;
progress _bar . sprite . SetImage ( progress _bar . image ) ;
f = Math . Int ( progress _bar . image . GetWidth ( ) / progress _bar . original _image . GetWidth ( ) * 100 ) ;
progress _t . image = Image . Text ( f + "%" , 255 , 255 , 255 , 1 , progressfont ) ;
progress _text . sprite . SetImage ( progress _t . image ) ;
}
}
Plymouth . SetBootProgressFunction ( progress _callback ) ;
// DIALOG
status = "normal" ;
//count = 0;
function dialog _setup ( ) {
2023-05-08 17:37:11 +05:00
local . box _form ;
2023-05-06 21:33:20 +05:00
local . lock ;
local . entry ;
local . prompt _sprite ;
2023-05-08 17:37:11 +05:00
box _form . image = Image ( "BOX.png" ) ;
box _form . image = box _form . image . Scale ( Percent ( 20 , screen . width ) , Percent ( 10 , screen . height ) ) ;
2023-05-06 21:33:20 +05:00
2023-05-08 17:37:11 +05:00
box _form . width = box _form . image . GetWidth ( ) ;
box _form . height = box _form . image . GetHeight ( ) ;
2023-05-06 21:33:20 +05:00
2023-05-08 17:37:11 +05:00
box _form . x = progress _form . x ;
box _form . y = progress _form . y - box _form . height - Percent ( 1 , screen . height ) ;
box _form . z = 10000 ;
2023-05-06 21:33:20 +05:00
2023-05-08 17:37:11 +05:00
box _form . sprite = Sprite ( box _form . image ) ;
box _form . sprite . SetPosition ( box _form . x , box _form . y , box _form . z ) ;
2023-05-12 18:40:45 +05:00
box _form . sprite . SetOpacity ( 1 ) ;
2023-05-06 21:33:20 +05:00
entry . image = Image ( "ENTRY.png" ) ;
2023-05-08 17:37:11 +05:00
entry . image = entry . image . Scale ( Percent ( 90 , box _form . width ) , Percent ( 33 , box _form . height ) ) ;
2023-05-06 21:33:20 +05:00
entry . width = entry . image . GetWidth ( ) ;
entry . height = entry . image . GetHeight ( ) ;
2023-05-08 17:37:11 +05:00
entry . x = box _form . x + box _form . width / 2 - entry . width / 2 ;
entry . y = box _form . y + box _form . height / 2 - entry . height / 2 ;
entry . z = box _form . z + 1 ;
2023-05-06 21:33:20 +05:00
entry . sprite = Sprite ( entry . image ) ;
entry . sprite . SetPosition ( entry . x , entry . y , entry . z ) ;
lock . image = Image ( "LOCK.png" ) ;
lock . image = lock . image . Scale ( Percent ( 95 , entry . height ) , Percent ( 95 , entry . height ) ) ;
lock . width = lock . image . GetWidth ( ) ;
lock . height = lock . image . GetHeight ( ) ;
lock . x = entry . x + entry . width - lock . width - ( entry . height - lock . height ) ;
lock . y = entry . y + entry . height / 2 - lock . height / 2 ;
2023-05-08 17:37:11 +05:00
lock . z = box _form . z + 2 ;
2023-05-06 21:33:20 +05:00
lock . sprite = Sprite ( lock . image ) ;
lock . sprite . SetPosition ( lock . x , lock . y , lock . z ) ;
prompt _sprite = SpriteNew ( ) ;
2023-05-08 17:37:11 +05:00
prompt _sprite . SetPosition ( entry . x , box _form . y + entry . height / 2 , box _form . z + 1 ) ;
2023-05-06 21:33:20 +05:00
2023-05-08 17:37:11 +05:00
global . dialog . box _form = box _form ;
2023-05-06 21:33:20 +05:00
global . dialog . lock = lock ;
global . dialog . entry = entry ;
global . dialog . bullet _image = Image ( "BULLET.png" ) ;
global . dialog . prompt _sprite = prompt _sprite ;
dialog _opacity ( 1 ) ;
}
function dialog _opacity ( opacity ) {
if ( opacity == 0 ) {
2023-05-08 17:37:11 +05:00
dialog . box _form . sprite . SetOpacity ( opacity ) ;
2023-05-06 21:33:20 +05:00
dialog . lock . sprite . SetOpacity ( opacity ) ;
dialog . entry . sprite . SetOpacity ( opacity ) ;
}
else {
dialog . lock . sprite . SetOpacity ( opacity ) ;
dialog . entry . sprite . SetOpacity ( opacity ) ;
}
dialog . prompt _sprite . SetOpacity ( opacity ) ;
for ( index = 0 ; dialog . bullet [ index ] ; index ++ ) {
dialog . bullet [ index ] . sprite . SetOpacity ( opacity ) ;
}
}
function display _normal _callback ( ) {
global . status = "normal" ;
if ( global . dialog )
dialog _opacity ( 0 ) ;
}
function display _password _callback ( prompt , bullets ) {
global . status = "password" ;
if ( ! global . dialog )
dialog _setup ( ) ;
else
dialog _opacity ( 1 ) ;
dialog . image = Image . Text ( prompt , 1.0 , 1.0 , 1.0 , 1 , ubuntufont ) ;
dialog . prompt _sprite . SetImage ( dialog . image ) ;
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 ( ) / 0.9 - dialog . entry . image . GetHeight ( ) * - 0.2 ; // отступ точки от точки и от поля(modified)
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 ) ;
}
}
function display _message _callback ( prompt ) {
prompt = Image . Text ( prompt , 0.5 , 0.5 , 0.5 , 1 , ubuntufont ) ;
sprite _prompt . SetImage ( prompt ) ;
}
Plymouth . SetDisplayNormalFunction ( display _normal _callback ) ;
Plymouth . SetDisplayPasswordFunction ( display _password _callback ) ;
Plymouth . SetMessageFunction ( display _message _callback ) ;
/ * t h i s f u n c t i o n o n l y g o e s u p t o 1 0 0
because thats all thats needed for
the progress meter bar * /
function atoi ( str ) {
int = - 1 ;
for ( i = 0 ; i <= 100 ; i ++ ) {
if ( i + "" == str ) {
int = i ;
break ;
}
}
return int ;
}
time = 1 ;
function refreshHandler ( ) {
if ( global . status == "normal" && Plymouth . GetMode ( ) == "boot" ) {
progress _fade . sprite . SetOpacity ( 0 ) ; // полностью прозрачный
progress _bar . sprite . SetOpacity ( 1 ) ;
text . image = Image . Text ( starting _text , 0.5 , 0.5 , 0.5 , 1 , ubuntufont ) ;
text . sprite = Sprite ( text . image ) ;
text . x = progress _box . x ;
text . y = progress _box . y - progress _text . image . GetHeight ( ) * 2 ;
text . sprite . SetPosition ( text . x , text . y , 2 ) ;
}
else {
progress _fade . sprite . SetOpacity ( 1 ) ;
progress _bar . sprite . SetOpacity ( 0 ) ;
text _end . image = Image . Text ( bye _text , 0.5 , 0.5 , 0.5 , 1 , ubuntufont ) ;
text _end . sprite = Sprite ( text _end . image ) ;
text _end . x = progress _box . x ;
text _end . y = progress _box . y - progress _text . image . GetHeight ( ) * 2 ;
2023-05-08 17:37:11 +05:00
text _end . sprite . SetPosition ( text _end . x , text _end . y , 2 ) ;
2023-05-06 21:33:20 +05:00
}
progress _fade . x = progress _bar . x ;
progress _fade . y = progress _bar . y ;
2023-05-08 17:37:11 +05:00
progress _fade . sprite . SetPosition ( counter + progress _fade . x , progress _fade . y , 4 ) ;
2023-05-06 21:33:20 +05:00
if ( fade _dir == 0 ) {
counter ++ ;
if ( counter >= max _counter ) {
fade _dir = 1 ;
}
}
else {
counter -- ;
if ( counter <= 0 ) {
fade _dir = 0 ;
}
}
/* if fsck is running or the password is prompted, hide the spinner */
if ( fsck _running == 1 || passw _dialog _input _sprite . GetOpacity ( ) == 1 ) {
spinner . sprite . SetOpacity ( 0 ) ;
}
else {
spinner . sprite . SetOpacity ( 1 ) ;
time ++ ;
theta = time / ( Math . Pi * 2 ) ;
spinner . sprite . SetImage ( spinner . image . Rotate ( theta ) ) ;
}
if ( ( fsck _running == 1 ) && ( fsck _done _fading == 0 ) ) {
fsck _progress _meter _sprite . SetOpacity ( fsck _fade _in _counter ) ;
fsck _progress _fade _sprite . SetOpacity ( fsck _fade _in _counter ) ;
if ( fsck _fade _in _counter < 1 ) {
fsck _fade _in _counter += 0.025 ;
}
else {
fsck _done _fading = 1 ;
}
}
}
Plymouth . SetRefreshFunction ( refreshHandler ) ;
// LOG //
NUM _SCROLL _LINES = 25 ; //количество строк лога
LINE _WIDTH = 35 ; //ширина строк лога
message _sprite = SpriteNew ( ) ;
function message _callback ( prompt ) {
message = Image . Text ( prompt , 0.5 , 0.5 , 0.5 , 1 , ubuntufont ) ;
message _sprite . SetImage ( message ) ;
2023-05-08 17:37:11 +05:00
message _sprite . SetPosition ( Percent ( 2 , screen . width ) , Percent ( 50 , screen . height ) , 2 ) ;
2023-05-06 21:33:20 +05:00
message _sprite . SetOpacity ( 1 ) ;
}
Plymouth . SetMessageFunction ( message _callback ) ;
// Initialising text images and their positions
// 20 is the height(including line spacing) of each line
for ( i = 0 ; i < NUM _SCROLL _LINES ; i ++ ) {
lines [ i ] = Image . Text ( "" , 0.5 , 0.5 , 0.5 , 1 , ubuntufont ) ; //цвет строк
message _sprite [ i ] = SpriteNew ( ) ;
2023-05-08 17:37:11 +05:00
message _sprite [ i ] . SetPosition ( Percent ( 2 , screen . width ) , Percent ( 5 , screen . height ) + ( i * 17 ) , 2 ) ;
2023-05-06 21:33:20 +05:00
} //высота строк //отступ строк
function StringLength ( string ) {
index = 0 ;
str = String ( string ) ;
while ( str . CharAt ( index ) ) index ++ ;
return index ;
}
function scroll _message _callback ( text ) {
// Truncate the message if too long
if ( StringLength ( text ) > LINE _WIDTH ) {
text = text . SubString ( 0 , LINE _WIDTH - 3 ) ;
text += "..." ;
}
// Shift message one up
for ( i = 0 ; i < NUM _SCROLL _LINES - 1 ; i ++ ) {
lines [ i ] = lines [ i + 1 ] ;
}
// Create the image for the latest message
lines [ i ] = Image . Text ( text , 0.5 , 0.5 , 0.5 , 1 , ubuntufont ) ;
// Re-positioning the text images
for ( i = 0 ; i < NUM _SCROLL _LINES ; i ++ ) {
message _sprite [ i ] . SetImage ( lines [ i ] ) ;
}
}
Plymouth . SetUpdateStatusFunction ( scroll _message _callback ) ;
// QUIT
function quit _callback ( ) {
progress _fade . sprite . SetOpacity ( 1 ) ;
progress _bar . sprite . SetOpacity ( 0 ) ;
if ( Plymouth . GetMode ( ) == "shutdown" ) {
logo . sprite . SetOpacity ( 0 ) ;
}
}
Plymouth . SetQuitFunction ( quit _callback ) ;