From: Ray Strode Date: Thu, 24 Oct 2013 13:33:17 +0000 (-0400) Subject: two-step: add support for watermark X-Git-Tag: 0.9.0~70 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a834730ce7586095234bcae41d1fe31e26603aaa;p=thirdparty%2Fplymouth.git two-step: add support for watermark The watermark is overlaid on top of the background but below all the other content. --- diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index 8a734543..f48b41e1 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -89,7 +89,7 @@ typedef struct ply_throbber_t *throbber; ply_label_t *label; ply_label_t *message_label; - ply_rectangle_t box_area, lock_area; + ply_rectangle_t box_area, lock_area, watermark_area; ply_trigger_t *end_trigger; ply_image_t *background_image; } view_t; @@ -103,10 +103,14 @@ struct _ply_boot_splash_plugin ply_image_t *corner_image; ply_image_t *header_image; ply_image_t *background_tile_image; + ply_image_t *watermark_image; ply_list_t *views; ply_boot_splash_display_type_t state; + double watermark_horizontal_alignment; + double watermark_vertical_alignment; + double animation_horizontal_alignment; double animation_vertical_alignment; char *animation_dir; @@ -201,6 +205,14 @@ view_load (view_t *view) view->background_image = ply_image_tile (plugin->background_tile_image, screen_width, screen_height); } + if (plugin->watermark_image != NULL) + { + view->watermark_area.width = ply_image_get_width (plugin->watermark_image); + view->watermark_area.height = ply_image_get_height (plugin->watermark_image); + view->watermark_area.x = screen_width * plugin->watermark_horizontal_alignment - ply_image_get_width (plugin->watermark_image) * plugin->watermark_horizontal_alignment; + view->watermark_area.y = screen_height * plugin->watermark_vertical_alignment - ply_image_get_height (plugin->watermark_image) * plugin->watermark_vertical_alignment; + } + ply_trace ("loading entry"); if (!ply_entry_load (view->entry)) return false; @@ -542,6 +554,10 @@ create_plugin (ply_key_file_t *key_file) plugin->background_tile_image = ply_image_new (image_path); free (image_path); + asprintf (&image_path, "%s/watermark.png", image_dir); + plugin->watermark_image = ply_image_new (image_path); + free (image_path); + plugin->animation_dir = image_dir; alignment = ply_key_file_get_value (key_file, "two-step", "HorizontalAlignment"); @@ -558,6 +574,20 @@ create_plugin (ply_key_file_t *key_file) plugin->animation_vertical_alignment = .5; free (alignment); + alignment = ply_key_file_get_value (key_file, "two-step", "WatermarkHorizontalAlignment"); + if (alignment != NULL) + plugin->watermark_horizontal_alignment = strtod (alignment, NULL); + else + plugin->watermark_horizontal_alignment = 1.0; + free (alignment); + + alignment = ply_key_file_get_value (key_file, "two-step", "WatermarkVerticalAlignment"); + if (alignment != NULL) + plugin->watermark_vertical_alignment = strtod (alignment, NULL); + else + plugin->watermark_vertical_alignment = .5; + free (alignment); + plugin->transition = PLY_PROGRESS_ANIMATION_TRANSITION_NONE; transition = ply_key_file_get_value (key_file, "two-step", "Transition"); if (transition != NULL) @@ -679,6 +709,9 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) if (plugin->background_tile_image != NULL) ply_image_free (plugin->background_tile_image); + if (plugin->watermark_image != NULL) + ply_image_free (plugin->watermark_image); + free (plugin->animation_dir); free_views (plugin); free (plugin); @@ -846,6 +879,14 @@ draw_background (view_t *view, data = ply_image_get_data (view->background_image); ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, &area, data); } + + if (plugin->watermark_image != NULL) + { + uint32_t *data; + + data = ply_image_get_data (plugin->watermark_image); + ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, &view->watermark_area, data); + } } static void @@ -1040,6 +1081,16 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin, } } + if (plugin->watermark_image != NULL) + { + ply_trace ("loading watermark image"); + if (!ply_image_load (plugin->watermark_image)) + { + ply_image_free (plugin->watermark_image); + plugin->watermark_image = NULL; + } + } + if (!load_views (plugin)) { ply_trace ("couldn't load views");