diff --git a/README.md b/README.md
new file mode 100644
index 0000000..c9b2a9d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,142 @@
+# Plymouth Theme
+
+elementary Plymouth theme using the ACPI BGRT graphics as background
+
+## Building and installing
+
+You'll need the following dependencies:
+* plymouth
+* plymouth-theme-spinner
+
+Verify that this theme is set as default:
+
+```bash
+$ sudo update-alternatives --config default.plymouth
+There are 2 choices for the alternative default.plymouth (providing /usr/share/plymouth/themes/default.plymouth).
+
+ Selection Path Priority Status
+------------------------------------------------------------
+ 0 /usr/share/plymouth/themes/bgrt/bgrt.plymouth 110 auto mode
+ 1 /usr/share/plymouth/themes/bgrt/bgrt.plymouth 110 manual mode
+* 2 /usr/share/plymouth/themes/elementary/elementary.plymouth 100 manual mode
+```
+
+Copy the latest theme
+
+```bash
+sudo cp -r elementary/* /usr/share/plymouth/themes/elementary/
+```
+
+and build a new initramfs to apply the changes
+
+```bash
+sudo update-initramfs -u -k all
+```
+
+If you want to test this is theme in your running X11 session, you'll need the following dependencies:
+* plymouth-x11
+
+## Testing
+
+⚠️ Plymouth draws over your desktop. Please note that you will need Terminal 2 on a different workspace to close Plymouth. ⚠️
+
+If you want to take screenshots, you should quit Wingpanel before
+
+```bash
+killall wingpanel
+```
+
+### Terminal 1
+
+#### Tab 1
+
+Start Plymouth daemon
+
+```bash
+sudo plymouthd --no-daemon --debug
+```
+
+#### Tab 2
+
+Show splash
+
+```bash
+sudo plymouth show-splash
+```
+
+### Terminal 2
+
+With this terminal you can test the following modes and user interactions.
+When you're done, you can close Plymouth
+
+```bash
+sudo plymouth quit
+```
+
+### Modes
+
+#### Boot up
+
+sudo plymouth change-mode --boot-up
+
+![Boot up](data/screenshots/boot-up.png "Boot up")
+
+
+
+#### Shutdown
+
+sudo plymouth change-mode --shutdown
+
+![Shutdown](data/screenshots/shutdown.png "Shutdown")
+
+
+
+#### Reboot
+
+sudo plymouth change-mode --reboot
+
+![Reboot](data/screenshots/reboot.png "Reboot")
+
+
+
+#### Updates
+
+sudo plymouth change-mode --updates
+
+![Updates](data/screenshots/updates.png "Updates")
+
+
+
+#### Firmware upgrade
+
+sudo plymouth change-mode --firmware-upgrade
+
+![Firmware upgrade](data/screenshots/firmware-upgrade.png "Firmware upgrade")
+
+
+
+#### System upgrade
+
+sudo plymouth change-mode --system-upgrade
+
+![System upgrade](data/screenshots/system-upgrade.png "System upgrade")
+
+
+
+### User interaction
+
+#### Message
+
+sudo plymouth message --text="The quick brown fox jumps over the lazy dog"
+
+![Message](data/screenshots/message.png "Message")
+
+
+
+#### Password prompt
+
+sudo plymouth --ask-for-password
+
+![Password prompt](data/screenshots/password-prompt.png "Password prompt")
+
+
diff --git a/data/screenshots/boot-up.png b/data/screenshots/boot-up.png
new file mode 100644
index 0000000..4650f55
Binary files /dev/null and b/data/screenshots/boot-up.png differ
diff --git a/data/screenshots/firmware-upgrade.png b/data/screenshots/firmware-upgrade.png
new file mode 100644
index 0000000..a988f68
Binary files /dev/null and b/data/screenshots/firmware-upgrade.png differ
diff --git a/data/screenshots/message.png b/data/screenshots/message.png
new file mode 100644
index 0000000..061e775
Binary files /dev/null and b/data/screenshots/message.png differ
diff --git a/data/screenshots/password-prompt.png b/data/screenshots/password-prompt.png
new file mode 100644
index 0000000..5ac7aeb
Binary files /dev/null and b/data/screenshots/password-prompt.png differ
diff --git a/data/screenshots/reboot.png b/data/screenshots/reboot.png
new file mode 100644
index 0000000..d6ffbbe
Binary files /dev/null and b/data/screenshots/reboot.png differ
diff --git a/data/screenshots/shutdown.png b/data/screenshots/shutdown.png
new file mode 100644
index 0000000..d6ffbbe
Binary files /dev/null and b/data/screenshots/shutdown.png differ
diff --git a/data/screenshots/system-upgrade.png b/data/screenshots/system-upgrade.png
new file mode 100644
index 0000000..2f82f21
Binary files /dev/null and b/data/screenshots/system-upgrade.png differ
diff --git a/data/screenshots/updates.png b/data/screenshots/updates.png
new file mode 100644
index 0000000..efbf4a2
Binary files /dev/null and b/data/screenshots/updates.png differ
diff --git a/debian/compat b/debian/compat
index 7f8f011..ec63514 100644
--- a/debian/compat
+++ b/debian/compat
@@ -1 +1 @@
-7
+9
diff --git a/debian/control b/debian/control
index fd5bd53..2602a40 100644
--- a/debian/control
+++ b/debian/control
@@ -7,7 +7,7 @@ Standards-Version: 4.5.0
Package: plymouth-theme-elementary
Architecture: all
-Depends: ${misc:Depends}, plymouth, plymouth-label
+Depends: ${misc:Depends}, plymouth, plymouth-label, plymouth-theme-spinner
Provides: plymouth-theme
Breaks: elementary-default-settings (<<5.9.0)
Replaces: elementary-default-settings (<<5.9.0), plymouth (<< 0.8.1-1~)
diff --git a/elementary/animation-0001.png b/elementary/animation-0001.png
new file mode 100644
index 0000000..8897add
Binary files /dev/null and b/elementary/animation-0001.png differ
diff --git a/elementary/animation-0002.png b/elementary/animation-0002.png
new file mode 100644
index 0000000..1a2f5ba
Binary files /dev/null and b/elementary/animation-0002.png differ
diff --git a/elementary/animation-0003.png b/elementary/animation-0003.png
new file mode 100644
index 0000000..0278d39
Binary files /dev/null and b/elementary/animation-0003.png differ
diff --git a/elementary/animation-0004.png b/elementary/animation-0004.png
new file mode 100644
index 0000000..7b6dfa5
Binary files /dev/null and b/elementary/animation-0004.png differ
diff --git a/elementary/animation-0005.png b/elementary/animation-0005.png
new file mode 100644
index 0000000..802028d
Binary files /dev/null and b/elementary/animation-0005.png differ
diff --git a/elementary/animation-0006.png b/elementary/animation-0006.png
new file mode 100644
index 0000000..e01c68d
Binary files /dev/null and b/elementary/animation-0006.png differ
diff --git a/elementary/animation-0007.png b/elementary/animation-0007.png
new file mode 100644
index 0000000..97a0db2
Binary files /dev/null and b/elementary/animation-0007.png differ
diff --git a/elementary/animation-0008.png b/elementary/animation-0008.png
new file mode 100644
index 0000000..fd65369
Binary files /dev/null and b/elementary/animation-0008.png differ
diff --git a/elementary/animation-0009.png b/elementary/animation-0009.png
new file mode 100644
index 0000000..dd684d3
Binary files /dev/null and b/elementary/animation-0009.png differ
diff --git a/elementary/animation-0010.png b/elementary/animation-0010.png
new file mode 100644
index 0000000..883e8ad
Binary files /dev/null and b/elementary/animation-0010.png differ
diff --git a/elementary/animation-0011.png b/elementary/animation-0011.png
new file mode 100644
index 0000000..3bcd15b
Binary files /dev/null and b/elementary/animation-0011.png differ
diff --git a/elementary/animation-0012.png b/elementary/animation-0012.png
new file mode 100644
index 0000000..9c4229e
Binary files /dev/null and b/elementary/animation-0012.png differ
diff --git a/elementary/animation-0013.png b/elementary/animation-0013.png
new file mode 120000
index 0000000..a466cf2
--- /dev/null
+++ b/elementary/animation-0013.png
@@ -0,0 +1 @@
+animation-0001.png
\ No newline at end of file
diff --git a/elementary/animation-0014.png b/elementary/animation-0014.png
new file mode 120000
index 0000000..611f4d1
--- /dev/null
+++ b/elementary/animation-0014.png
@@ -0,0 +1 @@
+animation-0002.png
\ No newline at end of file
diff --git a/elementary/animation-0015.png b/elementary/animation-0015.png
new file mode 120000
index 0000000..86959e2
--- /dev/null
+++ b/elementary/animation-0015.png
@@ -0,0 +1 @@
+animation-0003.png
\ No newline at end of file
diff --git a/elementary/animation-0016.png b/elementary/animation-0016.png
new file mode 120000
index 0000000..4483484
--- /dev/null
+++ b/elementary/animation-0016.png
@@ -0,0 +1 @@
+animation-0004.png
\ No newline at end of file
diff --git a/elementary/animation-0017.png b/elementary/animation-0017.png
new file mode 120000
index 0000000..3b07792
--- /dev/null
+++ b/elementary/animation-0017.png
@@ -0,0 +1 @@
+animation-0005.png
\ No newline at end of file
diff --git a/elementary/animation-0018.png b/elementary/animation-0018.png
new file mode 120000
index 0000000..94db2aa
--- /dev/null
+++ b/elementary/animation-0018.png
@@ -0,0 +1 @@
+animation-0006.png
\ No newline at end of file
diff --git a/elementary/animation-0019.png b/elementary/animation-0019.png
new file mode 120000
index 0000000..46fddae
--- /dev/null
+++ b/elementary/animation-0019.png
@@ -0,0 +1 @@
+animation-0007.png
\ No newline at end of file
diff --git a/elementary/animation-0020.png b/elementary/animation-0020.png
new file mode 120000
index 0000000..fb5cb58
--- /dev/null
+++ b/elementary/animation-0020.png
@@ -0,0 +1 @@
+animation-0008.png
\ No newline at end of file
diff --git a/elementary/animation-0021.png b/elementary/animation-0021.png
new file mode 120000
index 0000000..5e13d24
--- /dev/null
+++ b/elementary/animation-0021.png
@@ -0,0 +1 @@
+animation-0009.png
\ No newline at end of file
diff --git a/elementary/animation-0022.png b/elementary/animation-0022.png
new file mode 120000
index 0000000..c1f5f5d
--- /dev/null
+++ b/elementary/animation-0022.png
@@ -0,0 +1 @@
+animation-0010.png
\ No newline at end of file
diff --git a/elementary/animation-0023.png b/elementary/animation-0023.png
new file mode 120000
index 0000000..c1a4a0c
--- /dev/null
+++ b/elementary/animation-0023.png
@@ -0,0 +1 @@
+animation-0011.png
\ No newline at end of file
diff --git a/elementary/animation-0024.png b/elementary/animation-0024.png
new file mode 120000
index 0000000..ad703c4
--- /dev/null
+++ b/elementary/animation-0024.png
@@ -0,0 +1 @@
+animation-0012.png
\ No newline at end of file
diff --git a/elementary/animation-0025.png b/elementary/animation-0025.png
new file mode 120000
index 0000000..4bdf03e
--- /dev/null
+++ b/elementary/animation-0025.png
@@ -0,0 +1 @@
+animation-0013.png
\ No newline at end of file
diff --git a/elementary/animation-0026.png b/elementary/animation-0026.png
new file mode 120000
index 0000000..a3d3132
--- /dev/null
+++ b/elementary/animation-0026.png
@@ -0,0 +1 @@
+animation-0014.png
\ No newline at end of file
diff --git a/elementary/animation-0027.png b/elementary/animation-0027.png
new file mode 120000
index 0000000..4fd390b
--- /dev/null
+++ b/elementary/animation-0027.png
@@ -0,0 +1 @@
+animation-0015.png
\ No newline at end of file
diff --git a/elementary/animation-0028.png b/elementary/animation-0028.png
new file mode 120000
index 0000000..d6a1685
--- /dev/null
+++ b/elementary/animation-0028.png
@@ -0,0 +1 @@
+animation-0016.png
\ No newline at end of file
diff --git a/elementary/animation-0029.png b/elementary/animation-0029.png
new file mode 120000
index 0000000..c0addd3
--- /dev/null
+++ b/elementary/animation-0029.png
@@ -0,0 +1 @@
+animation-0017.png
\ No newline at end of file
diff --git a/elementary/animation-0030.png b/elementary/animation-0030.png
new file mode 120000
index 0000000..03cd370
--- /dev/null
+++ b/elementary/animation-0030.png
@@ -0,0 +1 @@
+animation-0018.png
\ No newline at end of file
diff --git a/elementary/animation-0031.png b/elementary/animation-0031.png
new file mode 120000
index 0000000..081630c
--- /dev/null
+++ b/elementary/animation-0031.png
@@ -0,0 +1 @@
+animation-0019.png
\ No newline at end of file
diff --git a/elementary/animation-0032.png b/elementary/animation-0032.png
new file mode 120000
index 0000000..fc635f5
--- /dev/null
+++ b/elementary/animation-0032.png
@@ -0,0 +1 @@
+animation-0020.png
\ No newline at end of file
diff --git a/elementary/animation-0033.png b/elementary/animation-0033.png
new file mode 120000
index 0000000..c58c749
--- /dev/null
+++ b/elementary/animation-0033.png
@@ -0,0 +1 @@
+animation-0021.png
\ No newline at end of file
diff --git a/elementary/animation-0034.png b/elementary/animation-0034.png
new file mode 120000
index 0000000..3f5ab72
--- /dev/null
+++ b/elementary/animation-0034.png
@@ -0,0 +1 @@
+animation-0022.png
\ No newline at end of file
diff --git a/elementary/animation-0035.png b/elementary/animation-0035.png
new file mode 120000
index 0000000..d491a53
--- /dev/null
+++ b/elementary/animation-0035.png
@@ -0,0 +1 @@
+animation-0023.png
\ No newline at end of file
diff --git a/elementary/animation-0036.png b/elementary/animation-0036.png
new file mode 120000
index 0000000..0f16f64
--- /dev/null
+++ b/elementary/animation-0036.png
@@ -0,0 +1 @@
+animation-0024.png
\ No newline at end of file
diff --git a/elementary/logo.png b/elementary/bgrt-fallback.png
similarity index 100%
rename from elementary/logo.png
rename to elementary/bgrt-fallback.png
diff --git a/elementary/bullet.png b/elementary/bullet.png
new file mode 100644
index 0000000..e94e877
Binary files /dev/null and b/elementary/bullet.png differ
diff --git a/elementary/capslock.png b/elementary/capslock.png
new file mode 100644
index 0000000..45afa93
Binary files /dev/null and b/elementary/capslock.png differ
diff --git a/elementary/create-frames.sh b/elementary/create-frames.sh
new file mode 100755
index 0000000..c2d0d9a
--- /dev/null
+++ b/elementary/create-frames.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Remove any extra symlinks/frames
+for i in {0013..9999}; do rm -f animation-${i}.png; done
+rm -f throbber-*.png
+
+# Duplicate frames
+for i in {0001..0024}
+do
+ ln -s animation-"$i".png animation-00$(( 10#$i + 12 )).png
+done
+
+# Create throbber symlinks
+for frame in animation-*.png
+do
+ ln -s "$frame" "${frame/animation/throbber}"
+done
+
diff --git a/elementary/elementary.plymouth b/elementary/elementary.plymouth
index 0328700..0dcaaf0 100644
--- a/elementary/elementary.plymouth
+++ b/elementary/elementary.plymouth
@@ -1,8 +1,56 @@
[Plymouth Theme]
Name=elementary
-Description=A theme that features a blank background with a logo.
-ModuleName=script
+Description=elementary theme using the ACPI BGRT graphics as background
+ModuleName=two-step
-[script]
+[two-step]
+Font=Inter 12
+TitleFont=Inter Bold 32
ImageDir=/usr/share/plymouth/themes/elementary
-ScriptFile=/usr/share/plymouth/themes/elementary/elementary.script
+DialogHorizontalAlignment=.5
+DialogVerticalAlignment=.7
+TitleHorizontalAlignment=.5
+TitleVerticalAlignment=.382
+HorizontalAlignment=.5
+VerticalAlignment=.7
+Transition=none
+TransitionDuration=0.0
+BackgroundStartColor=0x000000
+BackgroundEndColor=0x000000
+ProgressBarBackgroundColor=0x606060
+ProgressBarForegroundColor=0xffffff
+DialogClearsFirmwareBackground=false
+MessageBelowAnimation=true
+
+[boot-up]
+UseEndAnimation=false
+UseFirmwareBackground=true
+
+[shutdown]
+UseEndAnimation=false
+UseFirmwareBackground=true
+
+[reboot]
+UseEndAnimation=false
+UseFirmwareBackground=true
+
+[updates]
+SuppressMessages=true
+ProgressBarShowPercentComplete=true
+UseProgressBar=true
+_Title=Installing Updates...
+_SubTitle=Do not turn off your computer
+
+[system-upgrade]
+SuppressMessages=true
+ProgressBarShowPercentComplete=true
+UseProgressBar=true
+_Title=Upgrading System...
+_SubTitle=Do not turn off your computer
+
+[firmware-upgrade]
+SuppressMessages=true
+ProgressBarShowPercentComplete=true
+UseProgressBar=true
+_Title=Upgrading Firmware...
+_SubTitle=Do not turn off your computer
diff --git a/elementary/elementary.script b/elementary/elementary.script
deleted file mode 100644
index 657e311..0000000
--- a/elementary/elementary.script
+++ /dev/null
@@ -1,955 +0,0 @@
-# ubuntu-logo.script - boot splash plugin
-#
-# Copyright (C) 2009 Canonical Ltd.
-#
-# 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, 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., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-#
-# Written by: Sergey "Shnatsel" Davidoff
-#
-# Based on the example provided with the "script plugin" written by:
-# Charlie Brej
-# and on "ubuntu-logo" theme written by:
-# Alberto Milone
-#
-
-# Set the text colour in (rgb / 256)
-text_colour.red = 1.0;
-text_colour.green = 1.0;
-text_colour.blue = 1.0;
-
-# Tinted text #e2e3e3
-tinted_text_colour.red = 0.83;
-tinted_text_colour.green = 0.84;
-tinted_text_colour.blue = 0.84;
-
-# Action Text - #ffffff - RGB 255 255 255
-action_text_colour.red = 1.0;
-action_text_colour.green = 1.0;
-action_text_colour.blue = 1.0;
-
-# Orange - #ff4012 - RGB 255 64 18
-debugsprite = Sprite();
-debugsprite_bottom = Sprite();
-debugsprite_medium = Sprite();
-
-# are we currently prompting for a password?
-prompt_active = 0;
-
-# General purpose function to create text
-fun WriteText (text, colour) {
- image = Image.Text (text, colour.red, colour.green, colour.blue);
- return image;
-}
-
-fun ImageToText (text) {
- image = WriteText (text, text_colour);
- return image;
-}
-
-fun ImageToTintedText (text) {
- image = WriteText (text, tinted_text_colour);
- return image;
-}
-
-fun ImageToActionText (text) {
- image = WriteText (text, action_text_colour);
- return image;
-}
-
-fun Debug(text) {
- debugsprite.SetImage(ImageToText (text));
-}
-
-fun DebugBottom(text) {
- debugsprite_bottom.SetImage(ImageToText (text));
- debugsprite_bottom.SetPosition(0, (Window.GetHeight (0) - 20), 1);
-}
-
-fun DebugMedium(text) {
- debugsprite_medium.SetImage(ImageToText (text));
- debugsprite_medium.SetPosition(0, (Window.GetHeight (0) - 60), 1);
-}
-
-fun TextYOffset() {
- local.y;
- local.text_height;
- local.min_height;
-
- # Put the 1st line below the logo + some spacing
- y = logo.y + logo.height + logo_spacing; # + (progress_indicator.bullet_height * 7 );
-
- text_height = first_line_height * 2;
-
- min_height = Window.GetHeight();
- if (y + text_height > min_height)
- y = min_height - text_height;
-
- # Debug("logo.y = " + logo.y + " logo.height = " + logo.height );
-
- return y;
-}
-
-#------------------------------String functions-------------------------------
-
-# This is the equivalent for strstr()
-fun StringString(string, substring) {
- start = 0;
- while (String(string).CharAt (start)) {
- walk = 0;
- while (String(substring).CharAt (walk) == String(string).CharAt (start + walk) ) {
- walk++;
- if (!String(substring).CharAt (walk)) return start;
- }
- start++;
- }
-
- return NULL;
-}
-
-fun StringLength (string) {
- index = 0;
- while (String(string).CharAt(index)) index++;
- return index;
-}
-
-fun StringCopy (source, beginning, end) {
- local.destination = "";
- for (index = beginning; ( ( (end == NULL) || (index <= end) ) && (String(source).CharAt(index)) ); index++) {
- local.destination += String(source).CharAt(index);
- }
-
- return local.destination;
-}
-
-fun StringReplace (source, pattern, replacement) {
- local.found = StringString(source, pattern);
- if (local.found == NULL)
- return source;
-
- local.new_string = StringCopy (source, 0, local.found - 1) +
- replacement +
- StringCopy (source, local.found + StringLength(pattern), NULL);
-
- return local.new_string;
-}
-
-# it makes sense to use it only for
-# numbers up to 100
-fun StringToInteger (str) {
- int = -1;
- for (i=0; i<=100; i++) {
- if (i+"" == str) {
- int = i;
- break;
- }
- }
- return int;
-}
-
-#-----------------------------------------------------------------------------
-Window.SetBackgroundTopColor (0.00, 0.00, 0.00); # Nice colour on top of the screen fading to
-Window.SetBackgroundBottomColor (0.00, 0.00, 0.00); # an equally nice colour on the bottom
-
-bits_per_pixel = Window.GetBitsPerPixel ();
-if (bits_per_pixel == 4) {
- logo_filename = "ubuntu_logo16.png";
- progress_dot_off_filename = "progress_dot_off16.png";
- progress_dot_on_filename = "progress_dot_on16.png";
- password_field_filename = "password_field16.png";
-} else {
- logo_filename = "logo.png";
- blurred_logo_filename = "logo_blurred.png";
- progress_dot_off_filename = "progress_dot_off.png";
- progress_dot_on_filename = "progress_dot_on.png";
- password_field_filename = "password_field.png";
-}
-
-logo.screen_size = Math.Sqrt ( Window.GetHeight () * Window.GetWidth () / 18 );
-
-logo.image = Image (logo_filename).Scale (logo.screen_size, logo.screen_size);
-logo.sprite = Sprite ();
-logo.sprite.SetImage (logo.image);
-logo.width = logo.image.GetWidth ();
-logo.height = logo.image.GetHeight ();
-logo.x = Window.GetX () + Window.GetWidth () / 2 - logo.width / 2;
-logo.y = Window.GetY () + Window.GetHeight () / 2 - logo.height / 2 ;
-logo.z = 1000;
-logo.sprite.SetX (logo.x);
-logo.sprite.SetY (logo.y);
-logo.sprite.SetZ (logo.z);
-if (Plymouth.GetMode () == "boot" || Plymouth.GetMode () == "resume") {
- logo.sprite.SetOpacity (0); # for init puproses only; superseded by opacity angle below
- logo.opacity_angle = Math.Pi; # we'll need it later for cosine fade-in
-}
-else if (Plymouth.GetMode () == "shutdown" || Plymouth.GetMode () == "suspend") {
- logo.sprite.SetOpacity (1); # for init puproses only; superseded by opacity angle below
- logo.opacity_angle = 0; # we'll need it later for cosine fade-in
-}
-
-# assumes the blurred image has the same size as the main one
-logo_blurred.image = Image (blurred_logo_filename).Scale (logo.screen_size, logo.screen_size);
-logo_blurred.sprite = Sprite ();
-logo_blurred.sprite.SetImage (logo_blurred.image);
-logo_blurred.width = logo_blurred.image.GetWidth ();
-logo_blurred.height = logo_blurred.image.GetHeight ();
-logo_blurred.x = Window.GetX () + Window.GetWidth () / 2 - logo_blurred.width / 2;
-logo_blurred.y = Window.GetY () + Window.GetHeight () / 2 - logo_blurred.height / 2;
-logo_blurred.z = 999;
-logo_blurred.sprite.SetX (logo_blurred.x);
-logo_blurred.sprite.SetY (logo_blurred.y);
-logo_blurred.sprite.SetZ (logo_blurred.z);
-logo_blurred.sprite.SetOpacity (0);
-logo_blurred.opacity_angle = Math.Pi; # we'll need it later for cosine fade-in
-
-# Spacing below the logo - in pixels
-logo_spacing = logo.height / 8;
-
-message_notification[0].image = ImageToTintedText ("");
-message_notification[1].image = ImageToTintedText ("");
-fsck_notification.image = ImageToActionText ("");
-
-status = "normal";
-
-# use a fixed string with ascending and descending stems to calibrate the
-# bounding box for the first message, so the messages below don't move up
-# and down according to *their* height.
-first_line_height = ImageToTintedText ("AfpqtM").GetHeight();
-
-# if the user has a 640x480 or 800x600 display, we can't quite fit everything
-# (including passphrase prompts) with the target spacing, so scoot the text up
-# a bit if needed.
-top_of_the_text = TextYOffset();
-
-#-----------------------------------------Label utility functions---------------------
-
-# label should be either a string or NULL
-# Images for n lines will be created and returned as items of the
-# message_label array
-#
-fun get_message_label (label, is_fake, is_action_line) {
- # Debug("Get Label position");
- local.message_label;
-
- if (is_fake)
- # Create a fake label so as to get the y coordinate of
- # a standard-length label.
- local.message_image = ImageToTintedText ("This is a fake message");
- else
- local.message_image = (is_action_line) && ImageToActionText (label) || ImageToTintedText (label);
-
- message_label.width = message_image.GetWidth ();
- message_label.height = message_image.GetHeight ();
-
- # Center the line horizontally
- message_label.x = Window.GetX () + Window.GetWidth () / 2 - message_label.width / 2;
-
- message_label.y = top_of_the_text;
-
- # Put the 2nd line below the fsck line
- if (is_action_line) {
- local.fsck_label.y = message_label.y + (first_line_height + first_line_height / 2);
- message_label.y = local.fsck_label.y + (first_line_height * 2);
- }
-
- # Debug("action label x = " + message_label.x + " y = " + message_label.y );
-
-# message_debug = "msg_x = " + message_label.x + " msg_y = " + message_label.y +
-# "msg_width = " + message_label.width + " msg_height = " +
-# message_label.height + " message = " + label;
-# Debug(message_debug);
-
- return message_label;
-
-}
-
-# Create an fsck label and/or get its position
-fun get_fsck_label (label, is_fake) {
- # Debug("Get Label position");
- local.fsck_label = global.progress_label;
-
- if (is_fake)
- fsck_label.image = ImageToTintedText ("This is a fake message");
- else
- fsck_label.image = ImageToTintedText (label);
-
- fsck_label.width = fsck_label.image.GetWidth ();
- fsck_label.height = fsck_label.image.GetHeight ();
-
- # Centre the label horizontally
- fsck_label.x = Window.GetX () + Window.GetWidth () / 2 - fsck_label.width / 2;
-
- local.first_label = get_message_label (label, 1, 0);
-
- # Place the label below the 1st message line
- fsck_label.y = local.first_label.y + local.first_label.height + (local.first_label.height / 2);
-
-# message_debug = "msg_x = " + fsck_label.x + " msg_y = " + fsck_label.y +
-# "msg_width = " + fsck_label.width + " msg_height = " +
-# fsck_label.height + " message = " + label;
-# Debug(message_debug);
-
- return fsck_label;
-}
-
-#-----------------------------------------Message stuff --------------------------------
-#
-
-# Set up a message label
-#
-# NOTE: this is called when doing something like 'plymouth message "hello world"'
-#
-fun setup_message (message_text, x, y, z, index) {
- # Debug("Message setup");
- global.message_notification[index].image = (index) && ImageToActionText (message_text) || ImageToTintedText (message_text);
-
- # Set up the text message, if any
- message_notification[index].x = x;
- message_notification[index].y = y;
- message_notification[index].z = z;
-
- message_notification[index].sprite = Sprite ();
- message_notification[index].sprite.SetImage (message_notification[index].image);
- message_notification[index].sprite.SetX (message_notification[index].x);
- message_notification[index].sprite.SetY (message_notification[index].y);
- message_notification[index].sprite.SetZ (message_notification[index].z);
-
-}
-
-fun show_message (index) {
- if (global.message_notification[index].sprite) global.message_notification[index].sprite.SetOpacity(1);
-}
-
-fun hide_message (index) {
- if (global.message_notification[index].sprite) global.message_notification[index].sprite.SetOpacity(0);
-}
-
-
-
-
-# the callback function is called when new message should be displayed.
-# First arg is message to display.
-fun message_callback (message)
-{
- # Debug("Message callback");
- is_fake = 0;
- if (!message || (message == "")) is_fake = 1;
-
- local.substring = "keys:";
-
- # Look for the "keys:" prefix
- local.keys = StringString(message, local.substring);
-
- local.is_action_line = (keys != NULL);
- #Debug("keys " + local.keys + " substring length = " + StringLength(local.substring));
-
- # Get the message without the "keys:" prefix
- if (keys != NULL)
- message = StringCopy (message, keys + StringLength(local.substring), NULL);
-
- local.label.is_fake = is_fake;
- label = get_message_label(message, is_fake, is_action_line);
- label.z = 10000;
-
- setup_message (message, label.x, label.y, label.z, is_action_line);
- if (prompt_active && local.is_action_line)
- hide_message (is_action_line);
- else
- show_message (is_action_line);
-
-}
-
-
-#-----------------------------------------Display Password stuff -----------------------
-#
-
-fun password_dialogue_setup (message_label) {
- # Debug("Password dialog setup");
-
- local.entry;
- local.bullet_image;
-
- bullet_image = Image (progress_dot_off_filename);
- entry.image = Image (password_field_filename);
-
- # Hide the normal labels
- prompt_active = 1;
- if (message_notification[1].sprite) hide_message (1);
-
- # Set the prompt label
- label = get_message_label(message_label, 0, 1);
- label.z = 10000;
-
- setup_message (message_label, label.x, label.y, label.z, 2);
- show_message (2);
-
- # Set up the text entry which contains the bullets
- entry.sprite = Sprite ();
- entry.sprite.SetImage (entry.image);
-
- # Centre the box horizontally
- entry.x = Window.GetX () + Window.GetWidth () / 2 - entry.image.GetWidth () / 2;
-
- # Put the entry below the second label.
- entry.y = message_notification[2].y + label.height;
-
- #Debug ("entry x = " + entry.x + ", y = " + entry.y);
- entry.z = 10000;
- entry.sprite.SetX (entry.x);
- entry.sprite.SetY (entry.y);
- entry.sprite.SetZ (entry.z);
-
- global.password_dialogue = local;
-}
-
-fun password_dialogue_opacity (opacity) {
- # Debug("Password dialog opacity");
- global.password_dialogue.opacity = opacity;
- local = global.password_dialogue;
-
- # You can make the box translucent with a float
- # entry.sprite.SetOpacity (0.3);
- entry.sprite.SetOpacity (opacity);
- label.sprite.SetOpacity (opacity);
-
- if (bullets) {
- for (index = 0; bullets[index]; index++) {
- bullets[index].sprite.SetOpacity (opacity);
- }
- }
-}
-
-
-# The callback function is called when the display should display a password dialogue.
-# First arg is prompt string, the second is the number of bullets.
-fun display_password_callback (prompt, bullets) {
- # Debug("Password dialog setup");
-
- global.status = "password";
- if (!global.password_dialogue) password_dialogue_setup(prompt);
- password_dialogue_opacity (1);
- bullet_width = password_dialogue.bullet_image.GetWidth();
- bullet_y = password_dialogue.entry.y +
- password_dialogue.entry.image.GetHeight () / 2 -
- password_dialogue.bullet_image.GetHeight () / 2;
- margin = bullet_width;
- spaces = Math.Int( (password_dialogue.entry.image.GetWidth () - (margin * 2)) / (bullet_width / 2 ) );
- #Debug ("spaces = " + spaces + ", bullets = " + bullets);
- bullets_area.width = margin + spaces * (bullet_width / 2);
- bullets_area.x = Window.GetX () + Window.GetWidth () / 2 - bullets_area.width / 2;
- #DebugBottom ("pwd_entry x = " + password_dialogue.entry.x + ", bullets_area.x = " + bullets_area.x + ", bullets_area.width = " + bullets_area.width);
- if (bullets > spaces)
- bullets = spaces;
- for (index = 0; password_dialogue.bullets[index] || index < bullets; index++){
- if (!password_dialogue.bullets[index]) {
- password_dialogue.bullets[index].sprite = Sprite ();
- password_dialogue.bullets[index].sprite.SetImage (password_dialogue.bullet_image);
- password_dialogue.bullets[index].x = bullets_area.x + # password_dialogue.entry.x + margin +
- index * bullet_width / 2;
- password_dialogue.bullets[index].sprite.SetX (password_dialogue.bullets[index].x);
- password_dialogue.bullets[index].y = bullet_y;
- password_dialogue.bullets[index].sprite.SetY (password_dialogue.bullets[index].y);
- password_dialogue.bullets[index].z = password_dialogue.entry.z + 1;
- password_dialogue.bullets[index].sprite.SetZ (password_dialogue.bullets[index].z);
- }
-
- password_dialogue.bullets[index].sprite.SetOpacity (0);
-
- if (index < bullets) {
- password_dialogue.bullets[index].sprite.SetOpacity (1);
- }
- }
-}
-
-Plymouth.SetDisplayPasswordFunction (display_password_callback);
-
-Plymouth.SetMessageFunction (message_callback);
-
-#Plymouth.SetBootProgressFunction (animate_progress_indicator);
-
-# Plymouth.SetBootProgressFunction: the callback function is called with two numbers, the progress (between 0 and 1) and the time spent booting so far
-# Plymouth.SetRootMountedFunction: the callback function is called when a new root is mounted
-# Plymouth.SetKeyboardInputFunction: the callback function is called with a string containing a new character entered on the keyboard
-
-#----------------------------------------- FSCK Counter --------------------------------
-
-# Initialise the counter
-fun init_fsck_count () {
- # The number of fsck checks in this cycle
- global.counter.total = 0;
- # The number of fsck checks already performed + the current one
- global.counter.current = 1;
- # The previous fsck
- global.counter.last = 0;
-}
-
-# Increase the total counter
-fun increase_fsck_count () {
- global.counter.total++;
-}
-
-fun increase_current_fsck_count () {
- global.counter.last = global.counter.current++;
-}
-
-# Clear the counter
-fun clear_fsck_count () {
- global.counter = NULL;
- init_fsck_count ();
-}
-
-#----------------------------------------- Progress Label ------------------------------
-
-
-# Change the opacity level of a progress label
-#
-# opacity = 1 -> show
-# opacity = 0 -> hide
-# opacity = 0.3 (or any other float) -> translucent
-#
-fun set_progress_label_opacity (opacity) {
- # the label
- progress_label.sprite.SetOpacity (opacity);
-
- # Make the slot available again when hiding the bar
- # So that another bar can take its place
- if (opacity == 0) {
- progress_label.is_available = 1;
- progress_label.device = "";
- }
-}
-
-# Set up a new Progress Bar
-#
-# TODO: Make it possible to reuse (rather than recreate) a bar
-# if .is_available = 1. Ideally this would just reset the
-# label, the associated
-# device and the image size of the sprite.
-
-fun init_progress_label (device, status_string) {
- # Make the slot unavailable
- global.progress_label.is_available = 0;
- progress_label.progress = 0;
- progress_label.device = device;
- progress_label.status_string = status_string;
-}
-
-# See if the progress label is keeping track of the fsck
-# of "device"
-#
-fun device_has_progress_label (device) {
- #DebugBottom ("label device = " + progress_label.device + " checking device " + device);
- return (progress_label.device == device);
-}
-
-# Update the Progress bar which corresponds to index
-#
-fun update_progress_label (progress) {
- # If progress is NULL then we just refresh the label.
- # This happens when only counter.total has changed.
- if (progress != NULL) {
- progress_label.progress = progress;
-
- #Debug("device " + progress_label.device + " progress " + progress);
-
- # If progress >= 100% hide the label and make it available again
- if (progress >= 100) {
- set_progress_label_opacity (0);
-
- # See if we any other fsck check is complete
- # and, if so, hide the progress bars and the labels
- on_fsck_completed ();
-
- return 0;
- }
- }
- # Update progress label here
- #
- # FIXME: the queue logic from this theme should really be moved into mountall
- # instead of using string replacement to deal with localised strings.
- label = StringReplace (progress_label.status_string[0], "%1$d", global.counter.current);
- label = StringReplace (label, "%2$d", global.counter.total);
- label = StringReplace (label, "%3$d", progress_label.progress);
- label = StringReplace (label, "%%", "%");
-
- progress_label = get_fsck_label (label, 0);
- #progress_label.progress = progress;
-
- progress_label.sprite = Sprite (progress_label.image);
-
- # Set up the bar
- progress_label.sprite.SetPosition(progress_label.x, progress_label.y, 1);
-
- set_progress_label_opacity (1);
-
-}
-
-# Refresh the label so as to update counters
-fun refresh_progress_label () {
- update_progress_label (NULL);
-}
-
-#----------------------------------------- FSCK Queue ----------------------------------
-
-# Initialise the fsck queue
-fun init_queue () {
- global.fsck_queue[0].device;
- global.fsck_queue[0].progress;
- global.fsck_queue.counter = 0;
- global.fsck_queue.biggest_item = 0;
-}
-
-fun clear_queue () {
- global.fsck_queue = NULL;
- init_queue ();
-}
-
-# Return either the device index in the queue or -1
-fun queue_look_up_by_device (device) {
- for (i=0; i <= fsck_queue.biggest_item; i++) {
- if ((fsck_queue[i]) && (fsck_queue[i].device == device))
- return i;
- }
- return -1;
-}
-
-# Keep track of an fsck process in the queue
-fun add_fsck_to_queue (device, progress) {
- # Look for an empty slot in the queue
- for (i=0; global.fsck_queue[i].device; i++) {
- continue;
- }
- local.index = i;
-
- # Set device and progress
- global.fsck_queue[local.index].device = device;
- global.fsck_queue[local.index].progress = progress;
-
- # Increase the queue counter
- global.fsck_queue.counter++;
-
- # Update the max index of the array for iterations
- if (local.index > global.fsck_queue.biggest_item)
- global.fsck_queue.biggest_item = local.index;
-
- #DebugMedium ("Adding " + device + " at " + local.index);
-}
-
-fun is_queue_empty () {
- return (fsck_queue.counter == 0);
-}
-
-fun is_progress_label_available () {
- return (progress_label.is_available == 1);
-}
-
-
-# This should cover the case in which the fsck checks in
-# the queue are completed before the ones showed in the
-# progress label
-fun on_queued_fsck_completed () {
- if (!is_queue_empty ())
- return;
-
- # Hide the extra label, if any
- #if (progress_bar.extra_label.sprite)
- # progress_bar.extra_label.sprite.SetOpacity(0);
-}
-
-fun remove_fsck_from_queue (index) {
- # Free memory which was previously allocated for
- # device and progress
- global.fsck_queue[index].device = NULL;
- global.fsck_queue[index].progress = NULL;
-
- # Decrease the queue counter
- global.fsck_queue.counter--;
-
- # See if there are other processes in the queue
- # if not, clear the extra_label
- on_queued_fsck_completed ();
-}
-
-fun on_fsck_completed () {
- # We have moved on to tracking the next fsck
- increase_current_fsck_count ();
-
- if (!is_progress_label_available ())
- return;
-
- if (!is_queue_empty ())
- return;
-
- # Hide the progress label
- if (progress_label.sprite)
- progress_label.sprite.SetOpacity (0);
-
- # Clear the queue
- clear_queue ();
-
- # Clear the fsck counter
- clear_fsck_count ();
-}
-
-# Update an fsck process that we keep track of in the queue
-fun update_progress_in_queue (index, device, progress) {
- # If the fsck is complete, remove it from the queue
- if (progress >= 100) {
- remove_fsck_from_queue (index);
- on_queued_fsck_completed ();
- return;
- }
-
- global.fsck_queue[index].device = device;
- global.fsck_queue[index].progress = progress;
-
-}
-
-# TODO: Move it to some function
-# Create an empty queue
-#init_queue ();
-
-
-#----------------------------------------- FSCK Functions ------------------------------
-
-
-# Either add a new bar for fsck checks or update an existing bar
-#
-# NOTE: no more than "progress_bar.max_number" bars are allowed
-#
-fun fsck_check (device, progress, status_string) {
-
- # The 1st time this will take place
- if (!global.progress_label) {
- # Increase the fsck counter
- increase_fsck_count ();
-
- # Set up a new label for the check
- init_progress_label (device, status_string);
- update_progress_label (progress);
-
- return;
- }
-
-
- if (device_has_progress_label (device)) {
- # Update the progress of the existing label
- update_progress_label (progress);
- }
- else {
- # See if there's already a slot in the queue for the device
- local.queue_device_index = queue_look_up_by_device(device);
-
- # See if the progress_label is available
- if (progress_label.is_available) {
-
-# local.my_string = "available index " + local.available_index + " progress_bar counter is " + progress_bar.counter;
-# Debug(local.my_string);
-
-
- # If the fsck check for the device was in the queue, then
- # remove it from the queue
- if (local.queue_device_index >= 0) {
- remove_fsck_from_queue (index);
- }
- else {
- # Increase the fsck counter
- increase_fsck_count ();
- }
-
-# local.my_string += local.message;
- #Debug("setting new label for device " + device + " progress " + progress);
-
- # Set up a new label for the check
- init_progress_label (device, status_string);
- update_progress_label (progress);
-
- }
- # If the progress_label is not available
- else {
-
- # If the fsck check for the device is already in the queue
- # just update its progress in the queue
- if (local.queue_device_index >= 0) {
- #DebugMedium("Updating queue at " + local.queue_device_index + " for device " + device);
- update_progress_in_queue (local.queue_device_index, device, progress);
- }
- # Otherwise add the check to the queue
- else {
- #DebugMedium("Adding device " + device + " to queue at " + local.queue_device_index);
- add_fsck_to_queue (device, progress);
-
- # Increase the fsck counter
- increase_fsck_count ();
-
- refresh_progress_label ();
- }
-
- }
- }
-
-# if (!is_queue_empty ()) {
-# DebugBottom("Extra label for "+ device);
- #}
-# else {
-# DebugBottom("No extra label for " + device + ". 1st Device in the queue "+ fsck_queue[0].device + " counter = " + global.fsck_queue.counter);
-# }
-}
-
-
-#-----------------------------------------Update Status stuff --------------------------
-#
-# The update_status_callback is what we can use to pass plymouth whatever we want so
-# as to make use of features which are available only in this program (as opposed to
-# being available for any theme for the script plugin).
-#
-# Example:
-#
-# Thanks to the current implementation, some scripts can call "plymouth --update=fsck:sda1:40"
-# and this program will know that 1) we're performing and fsck check, 2) we're checking sda1,
-# 3) the program should set the label progress to 40%
-#
-# Other features can be easily added by parsing the string that we pass plymouth with "--update"
-#
-fun update_status_callback (status) {
-# Debug(status);
- if (!status) return;
-
- string_it = 0;
- update_strings[string_it] = "";
-
- for (i=0; (String(status).CharAt(i) != ""); i++) {
- local.temp_char = String(status).CharAt(i);
- if (temp_char != ":")
- update_strings[string_it] += temp_char;
- else
- update_strings[++string_it] = "";
- }
-
-# my_string = update_strings[0] + " " + update_strings[1] + " " + update_strings[2];
-# Debug(my_string);
- # Let's assume that we're dealing with these strings fsck:sda1:40
- if ((string_it >= 2) && (update_strings[0] == "fsck")) {
-
- device = update_strings[1];
- progress = update_strings[2];
- status_string[0] = update_strings[3]; # "Checking disk %1$d of %2$d (%3$d %% complete)"
- if (!status_string[0])
- status_string[0] = "Checking disk %1$d of %2$d (%3$d %% complete)";
-
- if ((device != "") && (progress != "")) {
- progress = StringToInteger (progress);
-
- # Make sure that the fsck_queue is initialised
- if (!global.fsck_queue)
- init_queue ();
-
- # Make sure that the fsck counter is initialised
- if (!global.counter)
- init_fsck_count ();
-
-# if (!global.progress_bar.extra_label.sprite)
-# create_extra_fsck_label ();
-
- # Keep track of the fsck check
- fsck_check (device, progress, status_string);
- }
-
- }
-
-}
-Plymouth.SetUpdateStatusFunction (update_status_callback);
-
-#-----------------------------------------Display Question stuff -----------------------
-#
-# TODO: Implement this if needed
-#
-# The callback function is called when the display should display a question dialogue.
-# First arg is prompt string, the second is the entry contents.
-#fun display_question_callback (prompt_string, entry_contents)
-#{
-# time++;
-#}
-#
-#Plymouth.SetDisplayQuestionFunction (display_question_callback);
-
-#-----------------------------------------Refresh stuff --------------------------------
-#
-# Calling Plymouth.SetRefreshFunction with a function will set that function to be
-# called up to 50 times every second, e.g.
-#
-# NOTE: if a refresh function is not set, Plymouth doesn't seem to be able to update
-# the screen correctly
-#
-fun refresh_callback ()
-{
- if (Plymouth.GetMode () == "boot" || Plymouth.GetMode () == "resume") {
- logo.opacity_angle += ((2 * Math.Pi) / 50) * 0.2; # 0.2 HZ
- opacity = ( Math.Cos (logo.opacity_angle) + 1) / 2;
- if ( opacity > logo.sprite.GetOpacity () )
- logo.sprite.SetOpacity (opacity);
- else {
- logo.sprite.SetOpacity (1);
- logo_blurred.opacity_angle += ((2 * Math.Pi) / 50) * 0.4; # 0.4 HZ
- opacity_blurred = ( Math.Cos (logo_blurred.opacity_angle) + 1) / 2;
- logo_blurred.sprite.SetOpacity (opacity_blurred);
- }
- }
- else if (Plymouth.GetMode () == "shutdown" || Plymouth.GetMode () == "suspend") {
- logo.opacity_angle += ((2 * Math.Pi) / 50) * 0.1; # actually 0.05 HZ because of the division below
- opacity = ( Math.Cos (logo.opacity_angle) + 1) / 4 + 0.5;
- if ( opacity < logo.sprite.GetOpacity () )
- logo.sprite.SetOpacity (opacity);
- }
- else
- {
- logo.sprite.SetOpacity (1);
- }
-}
-Plymouth.SetRefreshFunction (refresh_callback);
-
-
-#-----------------------------------------Display Normal stuff -----------------------
-#
-# The callback function is called when the display should return to normal
-fun display_normal_callback ()
-{
- global.status = "normal";
- if (global.password_dialogue) {
- password_dialogue_opacity (0);
- global.password_dialogue = NULL;
- if (message_notification[2].sprite) hide_message(2);
- prompt_active = 0;
- }
-
- if (message_notification[1].sprite) show_message (1);
-
-
-}
-
-Plymouth.SetDisplayNormalFunction (display_normal_callback);
-
-
-#----------------------------------------- Quit --------------------------------
-
-# TODO: Maybe we should also hide any other dialog
-# Show the logo and make the progress indicator look full when on exit
-fun quit_callback ()
-{
- logo.sprite.SetOpacity (1);
- switch_on_bullets ();
-}
-
-Plymouth.SetQuitFunction(quit_callback);
diff --git a/elementary/entry.png b/elementary/entry.png
new file mode 100644
index 0000000..d913f45
Binary files /dev/null and b/elementary/entry.png differ
diff --git a/elementary/entry.svg b/elementary/entry.svg
new file mode 100644
index 0000000..0e70dae
--- /dev/null
+++ b/elementary/entry.svg
@@ -0,0 +1,87 @@
+
+
diff --git a/elementary/keyboard.png b/elementary/keyboard.png
new file mode 100644
index 0000000..5339826
Binary files /dev/null and b/elementary/keyboard.png differ
diff --git a/elementary/keymap-render.png b/elementary/keymap-render.png
new file mode 100644
index 0000000..5c466e0
Binary files /dev/null and b/elementary/keymap-render.png differ
diff --git a/elementary/lock.png b/elementary/lock.png
new file mode 100644
index 0000000..256939f
Binary files /dev/null and b/elementary/lock.png differ
diff --git a/elementary/logo_blurred.png b/elementary/logo_blurred.png
deleted file mode 100644
index ea296fe..0000000
Binary files a/elementary/logo_blurred.png and /dev/null differ
diff --git a/elementary/password_field.png b/elementary/password_field.png
deleted file mode 100644
index d71ffa5..0000000
Binary files a/elementary/password_field.png and /dev/null differ
diff --git a/elementary/password_field16.png b/elementary/password_field16.png
deleted file mode 100644
index 22d6b6d..0000000
Binary files a/elementary/password_field16.png and /dev/null differ
diff --git a/elementary/progress_dot_off.png b/elementary/progress_dot_off.png
deleted file mode 100644
index 615a301..0000000
Binary files a/elementary/progress_dot_off.png and /dev/null differ
diff --git a/elementary/throbber-0001.png b/elementary/throbber-0001.png
new file mode 120000
index 0000000..a466cf2
--- /dev/null
+++ b/elementary/throbber-0001.png
@@ -0,0 +1 @@
+animation-0001.png
\ No newline at end of file
diff --git a/elementary/throbber-0002.png b/elementary/throbber-0002.png
new file mode 120000
index 0000000..611f4d1
--- /dev/null
+++ b/elementary/throbber-0002.png
@@ -0,0 +1 @@
+animation-0002.png
\ No newline at end of file
diff --git a/elementary/throbber-0003.png b/elementary/throbber-0003.png
new file mode 120000
index 0000000..86959e2
--- /dev/null
+++ b/elementary/throbber-0003.png
@@ -0,0 +1 @@
+animation-0003.png
\ No newline at end of file
diff --git a/elementary/throbber-0004.png b/elementary/throbber-0004.png
new file mode 120000
index 0000000..4483484
--- /dev/null
+++ b/elementary/throbber-0004.png
@@ -0,0 +1 @@
+animation-0004.png
\ No newline at end of file
diff --git a/elementary/throbber-0005.png b/elementary/throbber-0005.png
new file mode 120000
index 0000000..3b07792
--- /dev/null
+++ b/elementary/throbber-0005.png
@@ -0,0 +1 @@
+animation-0005.png
\ No newline at end of file
diff --git a/elementary/throbber-0006.png b/elementary/throbber-0006.png
new file mode 120000
index 0000000..94db2aa
--- /dev/null
+++ b/elementary/throbber-0006.png
@@ -0,0 +1 @@
+animation-0006.png
\ No newline at end of file
diff --git a/elementary/throbber-0007.png b/elementary/throbber-0007.png
new file mode 120000
index 0000000..46fddae
--- /dev/null
+++ b/elementary/throbber-0007.png
@@ -0,0 +1 @@
+animation-0007.png
\ No newline at end of file
diff --git a/elementary/throbber-0008.png b/elementary/throbber-0008.png
new file mode 120000
index 0000000..fb5cb58
--- /dev/null
+++ b/elementary/throbber-0008.png
@@ -0,0 +1 @@
+animation-0008.png
\ No newline at end of file
diff --git a/elementary/throbber-0009.png b/elementary/throbber-0009.png
new file mode 120000
index 0000000..5e13d24
--- /dev/null
+++ b/elementary/throbber-0009.png
@@ -0,0 +1 @@
+animation-0009.png
\ No newline at end of file
diff --git a/elementary/throbber-0010.png b/elementary/throbber-0010.png
new file mode 120000
index 0000000..c1f5f5d
--- /dev/null
+++ b/elementary/throbber-0010.png
@@ -0,0 +1 @@
+animation-0010.png
\ No newline at end of file
diff --git a/elementary/throbber-0011.png b/elementary/throbber-0011.png
new file mode 120000
index 0000000..c1a4a0c
--- /dev/null
+++ b/elementary/throbber-0011.png
@@ -0,0 +1 @@
+animation-0011.png
\ No newline at end of file
diff --git a/elementary/throbber-0012.png b/elementary/throbber-0012.png
new file mode 120000
index 0000000..ad703c4
--- /dev/null
+++ b/elementary/throbber-0012.png
@@ -0,0 +1 @@
+animation-0012.png
\ No newline at end of file
diff --git a/elementary/throbber-0013.png b/elementary/throbber-0013.png
new file mode 120000
index 0000000..4bdf03e
--- /dev/null
+++ b/elementary/throbber-0013.png
@@ -0,0 +1 @@
+animation-0013.png
\ No newline at end of file
diff --git a/elementary/throbber-0014.png b/elementary/throbber-0014.png
new file mode 120000
index 0000000..a3d3132
--- /dev/null
+++ b/elementary/throbber-0014.png
@@ -0,0 +1 @@
+animation-0014.png
\ No newline at end of file
diff --git a/elementary/throbber-0015.png b/elementary/throbber-0015.png
new file mode 120000
index 0000000..4fd390b
--- /dev/null
+++ b/elementary/throbber-0015.png
@@ -0,0 +1 @@
+animation-0015.png
\ No newline at end of file
diff --git a/elementary/throbber-0016.png b/elementary/throbber-0016.png
new file mode 120000
index 0000000..d6a1685
--- /dev/null
+++ b/elementary/throbber-0016.png
@@ -0,0 +1 @@
+animation-0016.png
\ No newline at end of file
diff --git a/elementary/throbber-0017.png b/elementary/throbber-0017.png
new file mode 120000
index 0000000..c0addd3
--- /dev/null
+++ b/elementary/throbber-0017.png
@@ -0,0 +1 @@
+animation-0017.png
\ No newline at end of file
diff --git a/elementary/throbber-0018.png b/elementary/throbber-0018.png
new file mode 120000
index 0000000..03cd370
--- /dev/null
+++ b/elementary/throbber-0018.png
@@ -0,0 +1 @@
+animation-0018.png
\ No newline at end of file
diff --git a/elementary/throbber-0019.png b/elementary/throbber-0019.png
new file mode 120000
index 0000000..081630c
--- /dev/null
+++ b/elementary/throbber-0019.png
@@ -0,0 +1 @@
+animation-0019.png
\ No newline at end of file
diff --git a/elementary/throbber-0020.png b/elementary/throbber-0020.png
new file mode 120000
index 0000000..fc635f5
--- /dev/null
+++ b/elementary/throbber-0020.png
@@ -0,0 +1 @@
+animation-0020.png
\ No newline at end of file
diff --git a/elementary/throbber-0021.png b/elementary/throbber-0021.png
new file mode 120000
index 0000000..c58c749
--- /dev/null
+++ b/elementary/throbber-0021.png
@@ -0,0 +1 @@
+animation-0021.png
\ No newline at end of file
diff --git a/elementary/throbber-0022.png b/elementary/throbber-0022.png
new file mode 120000
index 0000000..3f5ab72
--- /dev/null
+++ b/elementary/throbber-0022.png
@@ -0,0 +1 @@
+animation-0022.png
\ No newline at end of file
diff --git a/elementary/throbber-0023.png b/elementary/throbber-0023.png
new file mode 120000
index 0000000..d491a53
--- /dev/null
+++ b/elementary/throbber-0023.png
@@ -0,0 +1 @@
+animation-0023.png
\ No newline at end of file
diff --git a/elementary/throbber-0024.png b/elementary/throbber-0024.png
new file mode 120000
index 0000000..0f16f64
--- /dev/null
+++ b/elementary/throbber-0024.png
@@ -0,0 +1 @@
+animation-0024.png
\ No newline at end of file
diff --git a/elementary/throbber-0025.png b/elementary/throbber-0025.png
new file mode 120000
index 0000000..2ab8a48
--- /dev/null
+++ b/elementary/throbber-0025.png
@@ -0,0 +1 @@
+animation-0025.png
\ No newline at end of file
diff --git a/elementary/throbber-0026.png b/elementary/throbber-0026.png
new file mode 120000
index 0000000..67a4515
--- /dev/null
+++ b/elementary/throbber-0026.png
@@ -0,0 +1 @@
+animation-0026.png
\ No newline at end of file
diff --git a/elementary/throbber-0027.png b/elementary/throbber-0027.png
new file mode 120000
index 0000000..634fad7
--- /dev/null
+++ b/elementary/throbber-0027.png
@@ -0,0 +1 @@
+animation-0027.png
\ No newline at end of file
diff --git a/elementary/throbber-0028.png b/elementary/throbber-0028.png
new file mode 120000
index 0000000..7abfc98
--- /dev/null
+++ b/elementary/throbber-0028.png
@@ -0,0 +1 @@
+animation-0028.png
\ No newline at end of file
diff --git a/elementary/throbber-0029.png b/elementary/throbber-0029.png
new file mode 120000
index 0000000..4ad5aca
--- /dev/null
+++ b/elementary/throbber-0029.png
@@ -0,0 +1 @@
+animation-0029.png
\ No newline at end of file
diff --git a/elementary/throbber-0030.png b/elementary/throbber-0030.png
new file mode 120000
index 0000000..41a0040
--- /dev/null
+++ b/elementary/throbber-0030.png
@@ -0,0 +1 @@
+animation-0030.png
\ No newline at end of file
diff --git a/elementary/throbber-0031.png b/elementary/throbber-0031.png
new file mode 120000
index 0000000..8388e35
--- /dev/null
+++ b/elementary/throbber-0031.png
@@ -0,0 +1 @@
+animation-0031.png
\ No newline at end of file
diff --git a/elementary/throbber-0032.png b/elementary/throbber-0032.png
new file mode 120000
index 0000000..8e1de4f
--- /dev/null
+++ b/elementary/throbber-0032.png
@@ -0,0 +1 @@
+animation-0032.png
\ No newline at end of file
diff --git a/elementary/throbber-0033.png b/elementary/throbber-0033.png
new file mode 120000
index 0000000..0fcd16d
--- /dev/null
+++ b/elementary/throbber-0033.png
@@ -0,0 +1 @@
+animation-0033.png
\ No newline at end of file
diff --git a/elementary/throbber-0034.png b/elementary/throbber-0034.png
new file mode 120000
index 0000000..49a495f
--- /dev/null
+++ b/elementary/throbber-0034.png
@@ -0,0 +1 @@
+animation-0034.png
\ No newline at end of file
diff --git a/elementary/throbber-0035.png b/elementary/throbber-0035.png
new file mode 120000
index 0000000..d486227
--- /dev/null
+++ b/elementary/throbber-0035.png
@@ -0,0 +1 @@
+animation-0035.png
\ No newline at end of file
diff --git a/elementary/throbber-0036.png b/elementary/throbber-0036.png
new file mode 120000
index 0000000..cd053e5
--- /dev/null
+++ b/elementary/throbber-0036.png
@@ -0,0 +1 @@
+animation-0036.png
\ No newline at end of file
diff --git a/elementary/ubuntu_logo.png b/elementary/ubuntu_logo.png
deleted file mode 100644
index 9732789..0000000
Binary files a/elementary/ubuntu_logo.png and /dev/null differ
diff --git a/elementary/ubuntu_logo16.png b/elementary/ubuntu_logo16.png
deleted file mode 100644
index 6228278..0000000
Binary files a/elementary/ubuntu_logo16.png and /dev/null differ