]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
two-step: add support for watermark
authorRay Strode <rstrode@redhat.com>
Thu, 24 Oct 2013 13:33:17 +0000 (09:33 -0400)
committerRay Strode <rstrode@redhat.com>
Thu, 24 Oct 2013 13:33:17 +0000 (09:33 -0400)
The watermark is overlaid on top of the background but below all the
other content.

src/plugins/splash/two-step/plugin.c

index 8a73454389f66f6c473a339538a6e3264bd85163..f48b41e1a16c46cf6cccb9fa2e053312dd9cb728 100644 (file)
@@ -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");