From f8968dbbbb6477d0b1b2ee2f27d8c7c027bf0839 Mon Sep 17 00:00:00 2001 From: Charles Brej Date: Thu, 9 Oct 2008 13:58:52 +0100 Subject: [PATCH] Add progress bar and remove planets from solar plugin --- src/plugins/splash/solar/Makefile.am | 8 +- src/plugins/splash/solar/comet1.png | Bin 0 -> 2046 bytes src/plugins/splash/solar/plugin.c | 240 ++++++++++++++++------ src/plugins/splash/solar/progress_bar.png | Bin 0 -> 222 bytes src/plugins/splash/solar/progress_box.png | Bin 0 -> 229 bytes 5 files changed, 179 insertions(+), 69 deletions(-) create mode 100755 src/plugins/splash/solar/comet1.png create mode 100644 src/plugins/splash/solar/progress_bar.png create mode 100644 src/plugins/splash/solar/progress_box.png diff --git a/src/plugins/splash/solar/Makefile.am b/src/plugins/splash/solar/Makefile.am index 7b998d5a..77ef5b90 100644 --- a/src/plugins/splash/solar/Makefile.am +++ b/src/plugins/splash/solar/Makefile.am @@ -9,14 +9,14 @@ INCLUDES = -I$(top_srcdir) \ plugindir = $(libdir)/plymouth plugin_LTLIBRARIES = solar.la -solar_la_CFLAGS = $(PLYMOUTH_CFLAGS) \ +solar_la_CFLAGS = $(PLYMOUTH_CFLAGS) \ -DPLYMOUTH_IMAGE_DIR=\"$(datadir)/plymouth/\" \ -DPLYMOUTH_LOGO_FILE=\"$(logofile)\" \ -DPLYMOUTH_BACKGROUND_COLOR=$(background_color) \ -DPLYMOUTH_BACKGROUND_END_COLOR=$(background_end_color) \ -DPLYMOUTH_BACKGROUND_START_COLOR=$(background_start_color) solar_la_LDFLAGS = -module -avoid-version -export-dynamic -solar_la_LIBADD = $(PLYMOUTH_LIBS) \ +solar_la_LIBADD = $(PLYMOUTH_LIBS) \ ../../../libply/libply.la \ ../../../libplybootsplash/libplybootsplash.la solar_la_SOURCES = $(srcdir)/plugin.c @@ -24,8 +24,8 @@ solar_la_SOURCES = $(srcdir)/plugin.c plymouthdir = $(datadir)/plymouth/solar plymouth_DATA = bullet.png entry.png lock.png \ background.png star.png box.png \ - planet1.png planet2.png planet3.png planet4.png planet5.png \ - comet1.png + comet1.png progress_box.png progress_bar.png +# planet1.png planet2.png planet3.png planet4.png planet5.png EXTRA_DIST = $(plymouth_DATA) MAINTAINERCLEANFILES = Makefile.in diff --git a/src/plugins/splash/solar/comet1.png b/src/plugins/splash/solar/comet1.png new file mode 100755 index 0000000000000000000000000000000000000000..4b6cbaeab62a1e1b03d8aa3fe3de61af85583336 GIT binary patch literal 2046 zc-jH}2LbqrP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOV; z3jqr7npAfH000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000MBNklPi>V7t5HB;AxPErY?f?3@`n#r{?ls1s3v5cV z?LJTe=e8xuH#Pva$ss=hwt(MBD!|D0pKX5wESma0x~BBs27V*ykHB-=whTn1i&_uo&Ya^9?-F^ysm)X zO4?}(46h>qvi$(KWxES>CDm9o4=(KiH?ssJZA*G8=`v`)2o_bgr?$^+_iY#3H!A>j z&$s;oI0GiYEU$;aTS+rXcK}Q4$LMauw~y_Qfv;@ele7)oOAtE17#If=itWX^gV1fb z{*iPJY}o$P_D&8x1bUJ#ZNHXuKOEueMwP(IZ4M+YBz*~-+8zTRY+nE);7Za}6W^&c zb@Tbzwfzvd4ZHjP{ku_N&O?14*}m zodl~3ybNZnoeDIO0ZPx`i~4(P`xhZadqB_jUEo~OmF=;lewgCgv!J`~+b^X!e7)(CA|aATU`PHz+EjLfUl$cu3~%~OBzKYpGGVVC0zoCH7jgo z09F*>)b>0nJqF&`o&ulP-VY!aNgKciEfMp3+uyZX4u{ZCN|^=+I+E^7dYZrt!}u!O z<0!y)wnxBB(mmUYb<5%II_p0{*j+*LUL2n%0l_iwO45@6;WkT`cx-!LQYWmjof(j4 z7E-gFGI(oy({?Yny%7;K0!{*gJ86eotuBG8syeCfez^ZpYW)hR!SB-cT+*!ssslU^ zIqJ1t3skl%Nmr6OsrzXyje%#8!rQ`drdkcz-Ybz8jF71QQ4&?AvZH24n)%WjO=r z#9;^#-sH3}T1%;uSjnz%YR#^tioU zAkP7CH)QD2_U$OWMQHI!DDXu9u*4rItp>prD*Vf|v&;B?7q<5#Jy`*E7ix53YmNbk$D3QdZ6C7k;sHBCCZ-N?}+1>`uB;AeeH4Ex1#Ahek z|03q-hrEC7Db z_ayDb6rD5yf?CtTsj8}k0{2r2^GMS`tWt(|`0|mW&&Me6PK68OZ9HEUU#mD)ZdLB4P z*|b*<+wP@~yO|GGnG#KGZ-f>PBaz9Lc$F4dS{ZfN4k^uQn*eG}vH)0Ds@ zlb))oszohyQV#QMjZsRef(x}sYF7r-Z7?KeBhK$4w_l|_7D>CwkYR#xCv36g;Nw;< zO0IZ;lC+t_&+=KDNqMCUY=tb%S+2i48|Znd@qG7%cAwnUcJw-b!I6_TmZdA&QI9KS c*+>BX1HPn0=t=56dH?_b07*qoM6N<$f`k{x#sB~S literal 0 Hc-jL100001 diff --git a/src/plugins/splash/solar/plugin.c b/src/plugins/splash/solar/plugin.c index d81f30e5..5a3ced76 100644 --- a/src/plugins/splash/solar/plugin.c +++ b/src/plugins/splash/solar/plugin.c @@ -65,14 +65,16 @@ #define FLARE_LINE_COUNT 4 /*you can comment one or both of these out*/ -#define SHOW_PLANETS +/*#define SHOW_PLANETS */ #define SHOW_COMETS +#define SHOW_PROGRESS_BAR typedef enum { SPRITE_TYPE_STATIC, SPRITE_TYPE_FLARE, + SPRITE_TYPE_SATELLITE, SPRITE_TYPE_PROGRESS, } sprite_type_t; @@ -108,13 +110,13 @@ typedef struct typedef enum { - PROGRESS_TYPE_PLANET, - PROGRESS_TYPE_COMET, -} progress_type_t; + SATELLITE_TYPE_PLANET, + SATELLITE_TYPE_COMET, +} satellite_type_t; typedef struct { - progress_type_t type; + satellite_type_t type; int start_x; int start_y; int end_x; @@ -123,10 +125,19 @@ typedef struct double theta; ply_image_t *image; ply_image_t *image_altered; -} progress_t; +} satellite_t; +typedef struct +{ + int start_width; + int end_width; + int current_width; + ply_image_t *image; + ply_image_t *image_altered; +} progress_t; + struct _ply_boot_splash_plugin { ply_event_loop_t *loop; @@ -144,6 +155,11 @@ struct _ply_boot_splash_plugin #ifdef SHOW_COMETS ply_image_t *comet_image[1]; #endif +#ifdef SHOW_PROGRESS_BAR + ply_image_t *progress_box_image; + ply_image_t *progress_barimage; + ply_image_t *scaled_progress_box_image; +#endif ply_image_t *scaled_background_image; @@ -192,6 +208,10 @@ create_plugin (void) #endif #ifdef SHOW_COMETS plugin->comet_image[0] = ply_image_new (PLYMOUTH_IMAGE_DIR "solar/comet1.png"); +#endif +#ifdef SHOW_PROGRESS_BAR + plugin->progress_box_image = ply_image_new (PLYMOUTH_IMAGE_DIR "solar/progress_box.png"); + plugin->progress_barimage = ply_image_new (PLYMOUTH_IMAGE_DIR "solar/progress_bar.png"); #endif plugin->entry = ply_entry_new (PLYMOUTH_IMAGE_DIR "solar"); plugin->label = ply_label_new (); @@ -232,6 +252,10 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) #ifdef SHOW_COMETS ply_image_free (plugin->comet_image[0]); #endif +#ifdef SHOW_PROGRESS_BAR + ply_image_free (plugin->progress_box_image); + ply_image_free (plugin->progress_barimage); +#endif ply_entry_free (plugin->entry); ply_label_free (plugin->label); @@ -249,7 +273,19 @@ free_sprite (sprite_t* sprite) switch (sprite->type){ case SPRITE_TYPE_STATIC: break; + case SPRITE_TYPE_SATELLITE: + { + satellite_t *satellite = sprite->data; + ply_image_free (satellite->image_altered); + break; + } + break; case SPRITE_TYPE_PROGRESS: + { + progress_t *progress = sprite->data; + ply_image_free (progress->image_altered); + break; + } break; case SPRITE_TYPE_FLARE: { @@ -304,29 +340,6 @@ draw_background (ply_boot_splash_plugin_t *plugin, area->width, area->height); } -static void -flare_update (sprite_t* sprite, double time); - -static void -progress_move (ply_boot_splash_plugin_t *plugin, sprite_t* sprite, double time); - -static void -sprite_move (ply_boot_splash_plugin_t *plugin, sprite_t* sprite, double time) -{ - sprite->oldx = sprite->x; - sprite->oldy = sprite->y; - sprite->oldz = sprite->z; - switch (sprite->type){ - case SPRITE_TYPE_STATIC: - break; - case SPRITE_TYPE_FLARE: - flare_update (sprite, time); - break; - case SPRITE_TYPE_PROGRESS: - progress_move (plugin, sprite, time); - break; - } -} int sprite_compare_z(void *data_a, void *data_b) { sprite_t *sprite_a = data_a; @@ -334,12 +347,44 @@ int sprite_compare_z(void *data_a, void *data_b) return sprite_a->z - sprite_b->z; } - +static void +stretch_image(ply_image_t *scaled_image, ply_image_t *orig_image, int width) +{ + int x, y; + int stretched_width = ply_image_get_width (scaled_image); + int stretched_height = ply_image_get_height (scaled_image); + int orig_width = ply_image_get_width (orig_image); + int orig_height = ply_image_get_height (orig_image); + uint32_t * scaled_image_data = ply_image_get_data (scaled_image); + uint32_t * orig_image_data = ply_image_get_data (orig_image); + + for (y=0; ydata; + int newwidth = plugin->progress*(progress->end_width-progress->start_width)+progress->start_width; + if (progress->current_width >newwidth) return; + progress->current_width = newwidth; + stretch_image(progress->image_altered, progress->image, newwidth); + + sprite->refresh_me=1; +} + +static void +satellite_move (ply_boot_splash_plugin_t *plugin, sprite_t* sprite, double time) +{ + satellite_t *satellite = sprite->data; ply_frame_buffer_area_t screen_area; ply_frame_buffer_get_size (plugin->frame_buffer, &screen_area); @@ -347,8 +392,8 @@ progress_move (ply_boot_splash_plugin_t *plugin, sprite_t* sprite, double time) int width = ply_image_get_width (sprite->image); int height = ply_image_get_height (sprite->image); - sprite->x=cos(progress->theta+(1-plugin->progress)*5000/(progress->distance))*progress->distance; - sprite->y=sin(progress->theta+(1-plugin->progress)*5000/(progress->distance))*progress->distance; + sprite->x=cos(satellite->theta+(1-plugin->progress)*5000/(satellite->distance))*satellite->distance; + sprite->y=sin(satellite->theta+(1-plugin->progress)*5000/(satellite->distance))*satellite->distance; sprite->z=0; float distance = sqrt(sprite->z*sprite->z+sprite->y*sprite->y); @@ -359,18 +404,18 @@ progress_move (ply_boot_splash_plugin_t *plugin, sprite_t* sprite, double time) float angle_offset = atan2 (sprite->x, sprite->y); float cresent_angle = atan2 (sqrt(sprite->x*sprite->x+sprite->y*sprite->y), sprite->z); - sprite->x+=(float)progress->end_x*plugin->progress+(float)progress->start_x*(1-plugin->progress)-width/2; - sprite->y+=(float)progress->end_y*plugin->progress+(float)progress->start_y*(1-plugin->progress)-height/2; + sprite->x+=(float)satellite->end_x*plugin->progress+(float)satellite->start_x*(1-plugin->progress)-width/2; + sprite->y+=(float)satellite->end_y*plugin->progress+(float)satellite->start_y*(1-plugin->progress)-height/2; if (sprite->x > (signed int)screen_area.width) return; if (sprite->y > (signed int)screen_area.height) return; - if (progress->type == PROGRESS_TYPE_PLANET) + if (satellite->type == SATELLITE_TYPE_PLANET) { int x, y, z; - uint32_t *image_data = ply_image_get_data (progress->image); - uint32_t *cresent_data = ply_image_get_data (progress->image_altered); + uint32_t *image_data = ply_image_get_data (satellite->image); + uint32_t *cresent_data = ply_image_get_data (satellite->image_altered); for (y=0; ytype == PROGRESS_TYPE_COMET) + if (satellite->type == SATELLITE_TYPE_COMET) { int x, y, z; - uint32_t *image_data = ply_image_get_data (progress->image); - uint32_t *comet_data = ply_image_get_data (progress->image_altered); + uint32_t *image_data = ply_image_get_data (satellite->image); + uint32_t *comet_data = ply_image_get_data (satellite->image_altered); for (y=0; ytheta+(1-plugin->progress)*5000/(progress->distance)); + float angle = atan2 (fy, fx)-(satellite->theta+(1-plugin->progress)*5000/(satellite->distance)); float distance = sqrt(fy*fy+fx*fx); fx = cos(angle)*distance; fy = sin(angle)*distance; @@ -439,7 +484,6 @@ progress_move (ply_boot_splash_plugin_t *plugin, sprite_t* sprite, double time) } - static void sprite_list_sort (ply_boot_splash_plugin_t *plugin) { @@ -589,6 +633,27 @@ flare_update (sprite_t* sprite, double time) +static void +sprite_move (ply_boot_splash_plugin_t *plugin, sprite_t* sprite, double time) +{ + sprite->oldx = sprite->x; + sprite->oldy = sprite->y; + sprite->oldz = sprite->z; + switch (sprite->type){ + case SPRITE_TYPE_STATIC: + break; + case SPRITE_TYPE_PROGRESS: + progress_update (plugin, sprite, time); + break; + case SPRITE_TYPE_FLARE: + flare_update (sprite, time); + break; + case SPRITE_TYPE_SATELLITE: + satellite_move (plugin, sprite, time); + break; + } +} + static void animate_attime (ply_boot_splash_plugin_t *plugin, double time) { @@ -710,6 +775,10 @@ stop_animation (ply_boot_splash_plugin_t *plugin, } ply_image_free(plugin->scaled_background_image); +#ifdef SHOW_PROGRESS_BAR + ply_image_free(plugin->scaled_progress_box_image); +#endif + for(node = ply_list_get_first_node (plugin->sprites); node; node = ply_list_get_next_node (plugin->sprites, node)) { sprite_t* sprite = ply_list_node_get_data (node); @@ -865,35 +934,70 @@ setup_solar (ply_boot_splash_plugin_t *plugin) #ifdef SHOW_PLANETS for (i=0; i<5; i++) { - progress_t* progress = malloc(sizeof(progress_t)); - progress->type=PROGRESS_TYPE_PLANET; - progress->end_x=progress->start_x=579-640+screen_area.width; - progress->end_y=progress->start_y=306-480+screen_area.height; - - progress->distance=i*100+280; - progress->theta=M_PI*0.8; - progress->image=plugin->planet_image[i]; - progress->image_altered=ply_image_resize (progress->image, ply_image_get_width(progress->image), ply_image_get_height(progress->image)); - sprite = add_sprite (plugin, progress->image_altered, SPRITE_TYPE_PROGRESS, progress); - progress_move (plugin, sprite, 0); + satellite_t* satellite = malloc(sizeof(satellite_t)); + satellite->type=SATELLITE_TYPE_PLANET; + satellite->end_x=satellite->start_x=579-640+screen_area.width; + satellite->end_y=satellite->start_y=306-480+screen_area.height; + + satellite->distance=i*100+280; + satellite->theta=M_PI*0.8; + satellite->image=plugin->planet_image[i]; + satellite->image_altered=ply_image_resize (satellite->image, ply_image_get_width(satellite->image), ply_image_get_height(satellite->image)); + sprite = add_sprite (plugin, satellite->image_altered, SPRITE_TYPE_SATELLITE, satellite); + satellite_move (plugin, sprite, 0); } #endif #ifdef SHOW_COMETS for (i=0; i<1; i++) { - progress_t* progress = malloc(sizeof(progress_t)); - progress->type=PROGRESS_TYPE_COMET; - progress->end_x=progress->start_x=579-640+screen_area.width; - progress->end_y=progress->start_y=306-480+screen_area.height; - - progress->distance=800; - progress->theta=M_PI*0.8; - progress->image=plugin->comet_image[i]; - progress->image_altered=ply_image_resize (progress->image, ply_image_get_width(progress->image), ply_image_get_height(progress->image)); - sprite = add_sprite (plugin, progress->image_altered, SPRITE_TYPE_PROGRESS, progress); - progress_move (plugin, sprite, 0); + satellite_t* satellite = malloc(sizeof(satellite_t)); + satellite->type=SATELLITE_TYPE_COMET; + satellite->end_x=satellite->start_x=579-640+screen_area.width; + satellite->end_y=satellite->start_y=306-480+screen_area.height; + + satellite->distance=500; + satellite->theta=M_PI*0.8; + satellite->image=plugin->comet_image[i]; + satellite->image_altered=ply_image_resize (satellite->image, ply_image_get_width(satellite->image), ply_image_get_height(satellite->image)); + sprite = add_sprite (plugin, satellite->image_altered, SPRITE_TYPE_SATELLITE, satellite); + satellite_move (plugin, sprite, 0); } +#endif + +#ifdef SHOW_PROGRESS_BAR + x = screen_area.width/4; + y = screen_area.height/2 - ply_image_get_height(plugin->progress_box_image)/2; + plugin->scaled_progress_box_image = ply_image_resize (plugin->progress_box_image, screen_area.width/2, ply_image_get_height(plugin->progress_box_image)); + + stretch_image(plugin->scaled_progress_box_image, plugin->progress_box_image, screen_area.width/2); + + sprite = add_sprite (plugin, plugin->scaled_progress_box_image, SPRITE_TYPE_STATIC, NULL); + sprite->x=x; + sprite->y=y; + sprite->z=10000; + + + progress_t* progress = malloc(sizeof(progress_t)); + + progress->image = plugin->progress_barimage; + + int x_diff = ply_image_get_width(plugin->progress_box_image) - ply_image_get_width(plugin->progress_barimage); + x = screen_area.width/4+x_diff/2; + y = screen_area.height/2 - ply_image_get_height(plugin->progress_barimage)/2; + progress->image_altered = ply_image_resize (plugin->progress_barimage, screen_area.width/2-x_diff, ply_image_get_height(plugin->progress_barimage)); + progress->start_width = ply_image_get_width(plugin->progress_barimage); + progress->end_width = screen_area.width/2-x_diff; + progress->current_width = 0; + + sprite = add_sprite (plugin, progress->image_altered, SPRITE_TYPE_PROGRESS, progress); + sprite->x=x; + sprite->y=y; + sprite->z=10011; + progress_update (plugin, sprite, 0); + + + #endif flare_t *flare = malloc(sizeof(flare_t)); @@ -986,6 +1090,12 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin, if (!ply_image_load (plugin->comet_image[0])) return false; #endif +#ifdef SHOW_PROGRESS_BAR + if (!ply_image_load (plugin->progress_box_image)) + return false; + if (!ply_image_load (plugin->progress_barimage)) + return false; +#endif ply_trace ("loading lock image"); if (!ply_image_load (plugin->lock_image)) diff --git a/src/plugins/splash/solar/progress_bar.png b/src/plugins/splash/solar/progress_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..b8f6719e1ce28c402b3e218c0591658d6a2a82d7 GIT binary patch literal 222 zc-rd>@N?(olHy`uVBq!ia0vp^%s?!_!3HERXC3VVQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4K8+3VQr&?vzviJk|nMYCC>S| zxv6<249-QVi6yBi3gww484B*6z5(HleBwYwmYyz-Asp9}x17%Yd!B*ShX)AO>|4rl z?!5i~36}MpkN&8+^9wyczyCi6U)Sw|;x~EvsR=;9!0`EvQoyUz&q9HQFnGH9xvX@N?(olHy`uVBq!ia0vp^>_9BS!3HE91=ODbDaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#S9GG!XV7ZFl&wk$dD3GUsv`UT`VJr&nDB*+6V;Q;S#PB z<~H{}{QLU3fF~Oe)YZlD%=O`^II!Z$f~hIb6AsT6y0^csFI0$OS1+fI;