/* usplash
*
* eft-theme.c – definition of eft theme
*
* Copyright © 2006 Dennis Kaarsemaker
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include
/* Needed for the custom drawing functions */
#include
extern struct usplash_pixmap pixmap_usplash_640_480;
extern struct usplash_pixmap pixmap_usplash_800_480, pixmap_usplash_800_600, pixmap_usplash_1024_768, pixmap_usplash_1024_600, pixmap_usplash_1280_800, pixmap_usplash_1280_1024, pixmap_usplash_1440_900, pixmap_usplash_1680_1050, pixmap_usplash_1920_1200;
extern struct usplash_pixmap pixmap_throbber_back;
extern struct usplash_pixmap pixmap_throbber_fore;
void t_init(struct usplash_theme* theme);
void t_clear_progressbar(struct usplash_theme* theme);
void t_draw_progressbar(struct usplash_theme* theme, int percentage);
void t_animate_step(struct usplash_theme* theme, int pulsating);
struct usplash_theme usplash_theme_800_480;
struct usplash_theme usplash_theme_800_600;
struct usplash_theme usplash_theme_1024_600;
struct usplash_theme usplash_theme_1024_768;
struct usplash_theme usplash_theme_1280_800;
struct usplash_theme usplash_theme_1280_1024;
struct usplash_theme usplash_theme_1440_900;
struct usplash_theme usplash_theme_1680_1050;
struct usplash_theme usplash_theme_1920_1200;
/* Theme definition */
struct usplash_theme usplash_theme = {
.version = THEME_VERSION, /* ALWAYS set this to THEME_VERSION,
it’s a compatibility check */
.next = &usplash_theme_800_480,
.ratio = USPLASH_4_3,
/* Background and font */
.pixmap = &pixmap_usplash_640_480,
/* Palette indexes */
.background = 34,
.text_background = 34,
.text_foreground = 0,
.text_success = 255,
.text_failure = 17,
/* Progress bar position and size in pixels */
.progressbar_x = 182,
.progressbar_y = 278,
.progressbar_width = 276,
.progressbar_height = 20,
/* Text box position and size in pixels */
.text_x = 140,
.text_y = 345,
.text_width = 360,
.text_height = 100,
/* Text details */
.line_height = 15,
.line_length = 32,
.status_width = 35,
/* Functions */
.init = t_init,
.clear_progressbar = t_clear_progressbar,
.draw_progressbar = t_draw_progressbar,
.animate_step = t_animate_step,
};
struct usplash_theme usplash_theme_800_480 = {
.version = THEME_VERSION, /* ALWAYS set this to THEME_VERSION,
it’s a compatibility check */
.next = &usplash_theme_800_600,
.ratio = USPLASH_16_9,
/* Background and font */
.pixmap = &pixmap_usplash_800_480,
/* Palette indexes */
.background = 34,
.text_background = 34,
.text_foreground = 0,
.text_success = 255,
.text_failure = 17,
/* Progress bar position and size in pixels */
.progressbar_x = 262,
.progressbar_y = 278,
.progressbar_width = 276,
.progressbar_height = 20,
/* Text box position and size in pixels */
.text_x = 220,
.text_y = 345,
.text_width = 360,
.text_height = 100,
/* Text details */
.line_height = 15,
.line_length = 32,
.status_width = 35,
/* Functions */
.init = t_init,
.clear_progressbar = t_clear_progressbar,
.draw_progressbar = t_draw_progressbar,
.animate_step = t_animate_step,
};
struct usplash_theme usplash_theme_800_600 = {
.version = THEME_VERSION, /* ALWAYS set this to THEME_VERSION,
it’s a compatibility check */
.next = &usplash_theme_1024_600,
.ratio = USPLASH_4_3,
/* Background and font */
.pixmap = &pixmap_usplash_800_600,
/* Palette indexes */
.background = 34,
.text_background = 34,
.text_foreground = 0,
.text_success = 255,
.text_failure = 17,
/* Progress bar position and size in pixels */
.progressbar_x = 225,
.progressbar_y = 348,
.progressbar_width = 350,
.progressbar_height = 20,
/* Text box position and size in pixels */
.text_x = 220,
.text_y = 432,
.text_width = 360,
.text_height = 150,
/* Text details */
.line_height = 15,
.line_length = 32,
.status_width = 35,
/* Functions */
.init = t_init,
.clear_progressbar = t_clear_progressbar,
.draw_progressbar = t_draw_progressbar,
.animate_step = t_animate_step,
};
struct usplash_theme usplash_theme_1024_600 = {
.version = THEME_VERSION,
.next = &usplash_theme_1024_768,
.ratio = USPLASH_16_9,
/* Background and font */
.pixmap = &pixmap_usplash_1024_600,
/* Palette indexes */
.background = 34,
.text_background = 34,
.text_foreground = 0,
.text_success = 255,
.text_failure = 17,
/* Progress bar position and size in pixels */
.progressbar_x = 362,
.progressbar_y = 348,
.progressbar_width = 300,
.progressbar_height = 20,
/* Text box position and size in pixels */
.text_x = 332,
.text_y = 432,
.text_width = 360,
.text_height = 150,
/* Text details */
.line_height = 15,
.line_length = 32,
.status_width = 35,
/* Functions */
.init = t_init,
.clear_progressbar = t_clear_progressbar,
.draw_progressbar = t_draw_progressbar,
.animate_step = t_animate_step,
};
struct usplash_theme usplash_theme_1024_768 = {
.version = THEME_VERSION,
.next = &usplash_theme_1280_800,
.ratio = USPLASH_4_3,
/* Background and font */
.pixmap = &pixmap_usplash_1024_768,
/* Palette indexes */
.background = 34,
.text_background = 34,
.text_foreground = 0,
.text_success = 255,
.text_failure = 17,
/* Progress bar position and size in pixels */
.progressbar_x = 312,
.progressbar_y = 445,
.progressbar_width = 400,
.progressbar_height = 20,
/* Text box position and size in pixels */
.text_x = 322,
.text_y = 552,
.text_width = 380,
.text_height = 200,
/* Text details */
.line_height = 15,
.line_length = 32,
.status_width = 35,
/* Functions */
.init = t_init,
.clear_progressbar = t_clear_progressbar,
.draw_progressbar = t_draw_progressbar,
.animate_step = t_animate_step,
};
struct usplash_theme usplash_theme_1280_800 = {
.version = THEME_VERSION,
.next = &usplash_theme_1280_1024,
.ratio = USPLASH_16_9,
/* Background and font */
.pixmap = &pixmap_usplash_1280_800,
/* Palette indexes */
.background = 34,
.text_background = 34,
.text_foreground = 0,
.text_success = 255,
.text_failure = 17,
/* Progress bar position and size in pixels */
.progressbar_x = 440, /* 1280/2 – 400/2 */
.progressbar_y = 464,
.progressbar_width = 400,
.progressbar_height = 20,
/* Text box position and size in pixels */
.text_x = 450,
.text_y = 576,
.text_width = 380,
.text_height = 200,
/* Text details */
.line_height = 15,
.line_length = 32,
.status_width = 35,
/* Functions */
.init = t_init,
.clear_progressbar = t_clear_progressbar,
.draw_progressbar = t_draw_progressbar,
.animate_step = t_animate_step,
};
struct usplash_theme usplash_theme_1280_1024 = {
.version = THEME_VERSION,
.next = &usplash_theme_1440_900,
.ratio = USPLASH_4_3,
/* Background and font */
.pixmap = &pixmap_usplash_1280_1024,
/* Palette indexes */
.background = 34,
.text_background = 34,
.text_foreground = 0,
.text_success = 255,
.text_failure = 17,
/* Progress bar position and size in pixels */
.progressbar_x = 440,
.progressbar_y = 594,
.progressbar_width = 400,
.progressbar_height = 20,
/* Text box position and size in pixels */
.text_x = 450,
.text_y = 736,
.text_width = 380,
.text_height = 200,
/* Text details */
.line_height = 15,
.line_length = 32,
.status_width = 35,
/* Functions */
.init = t_init,
.clear_progressbar = t_clear_progressbar,
.draw_progressbar = t_draw_progressbar,
.animate_step = t_animate_step,
};
struct usplash_theme usplash_theme_1440_900 = {
.version = THEME_VERSION,
.next = &usplash_theme_1680_1050,
.ratio = USPLASH_16_9,
/* Background and font */
.pixmap = &pixmap_usplash_1440_900,
/* Palette indexes */
.background = 34,
.text_background = 34,
.text_foreground = 0,
.text_success = 255,
.text_failure = 17,
/* Progress bar position and size in pixels */
.progressbar_x = 520,
.progressbar_y = 522,
.progressbar_width = 400,
.progressbar_height = 20,
/* Text box position and size in pixels */
.text_x = 530,
.text_y = 648,
.text_width = 380,
.text_height = 200,
/* Text details */
.line_height = 15,
.line_length = 32,
.status_width = 35,
/* Functions */
.init = t_init,
.clear_progressbar = t_clear_progressbar,
.draw_progressbar = t_draw_progressbar,
.animate_step = t_animate_step,
};
struct usplash_theme usplash_theme_1680_1050 = {
.version = THEME_VERSION,
.next = &usplash_theme_1920_1200,
.ratio = USPLASH_16_9,
/* Background and font */
.pixmap = &pixmap_usplash_1680_1050,
/* Palette indexes */
.background = 34,
.text_background = 34,
.text_foreground = 0,
.text_success = 255,
.text_failure = 17,
/* Progress bar position and size in pixels */
.progressbar_x = 640,
.progressbar_y = 610,
.progressbar_width = 400,
.progressbar_height = 20,
/* Text box position and size in pixels */
.text_x = 650,
.text_y = 756,
.text_width = 380,
.text_height = 200,
/* Text details */
.line_height = 15,
.line_length = 32,
.status_width = 35,
/* Functions */
.init = t_init,
.clear_progressbar = t_clear_progressbar,
.draw_progressbar = t_draw_progressbar,
.animate_step = t_animate_step,
};
struct usplash_theme usplash_theme_1920_1200 = {
.version = THEME_VERSION,
.next = NULL,
.ratio = USPLASH_16_9,
/* Background and font */
.pixmap = &pixmap_usplash_1920_1200,
/* Palette indexes */
.background = 34,
.text_background = 34,
.text_foreground = 0,
.text_success = 255,
.text_failure = 17,
/* Progress bar position and size in pixels */
.progressbar_x = 760,
.progressbar_y = 696,
.progressbar_width = 400,
.progressbar_height = 20,
/* Text box position and size in pixels */
.text_x = 770,
.text_y = 864,
.text_width = 380,
.text_height = 200,
/* Text details */
.line_height = 15,
.line_length = 32,
.status_width = 35,
/* Functions */
.init = t_init,
.clear_progressbar = t_clear_progressbar,
.draw_progressbar = t_draw_progressbar,
.animate_step = t_animate_step,
};
void t_init(struct usplash_theme *theme) {
int x, y;
usplash_getdimensions(&x, &y);
theme->progressbar_x = (x – theme->pixmap->width)/2 + theme->progressbar_x;
theme->progressbar_y = (y – theme->pixmap->height)/2 + theme->progressbar_y;
}
void t_clear_progressbar(struct usplash_theme *theme) {
usplash_put(theme->progressbar_x, theme->progressbar_y, &pixmap_throbber_back);
}
void t_draw_progressbar(struct usplash_theme *theme, int percentage) {
int w = (pixmap_throbber_back.width * percentage / 100);
if(percentage == 0)
usplash_put(theme->progressbar_x, theme->progressbar_y, &pixmap_throbber_back);
if(percentage progressbar_x, theme->progressbar_y, w, pixmap_throbber_back.height,
&pixmap_throbber_back, 0, 0);
/* Draw foreground to right of background */
usplash_put_part(theme->progressbar_x + w, theme->progressbar_y, pixmap_throbber_back.width – w,
pixmap_throbber_back.height, &pixmap_throbber_fore, w, 0);
}
else{/* Loading */
/* Draw foreground to left of background */
usplash_put_part(theme->progressbar_x, theme->progressbar_y, w, pixmap_throbber_back.height,
&pixmap_throbber_fore, 0, 0);
/* Draw background ot right of foreground */
usplash_put_part(theme->progressbar_x + w, theme->progressbar_y, pixmap_throbber_back.width – w, pixmap_throbber_back.height,
&pixmap_throbber_back, w, 0);
}
}
void t_animate_step(struct usplash_theme* theme, int pulsating) {
static int pulsate_step = 0;
static int pulse_width = 56;
static int step_width = 2;
static int num_steps = 0;
int x1;
int x2;
num_steps = (pixmap_throbber_fore.width – pulse_width)/2;
if (pulsating) {
if(pulsate_step progressbar_x, theme->progressbar_y, x1,
pixmap_throbber_back.height, &pixmap_throbber_back, 0, 0);
/* Draw progress bar foreground ‘pulse’ */
usplash_put_part(theme->progressbar_x + x1, theme->progressbar_y, pulse_width,
pixmap_throbber_back.height, &pixmap_throbber_fore, x1, 0);
/* Draw progress bar background on right side of foreground ‘pulse’ */
usplash_put_part(theme->progressbar_x + x2, theme->progressbar_y, pixmap_throbber_back.width – x2,
pixmap_throbber_back.height, &pixmap_throbber_back, x2, 0);
pulsate_step = (pulsate_step + 1) % num_steps;
}
}