diff options
| -rw-r--r-- | data/org.ArcticaProject.arctica-greeter.gschema.xml | 11 | ||||
| -rw-r--r-- | src/background.vala | 30 | ||||
| -rw-r--r-- | src/settings.vala | 1 |
3 files changed, 40 insertions, 2 deletions
diff --git a/data/org.ArcticaProject.arctica-greeter.gschema.xml b/data/org.ArcticaProject.arctica-greeter.gschema.xml index b5c2cab..540d87f 100644 --- a/data/org.ArcticaProject.arctica-greeter.gschema.xml +++ b/data/org.ArcticaProject.arctica-greeter.gschema.xml @@ -347,5 +347,16 @@ <default>'#000000'</default> <summary>The background color of the menubar in #RRGGBB format.</summary> </key> + <key name="background-position" type="s"> + <choices> + <choice value='center'/> + <choice value='top-left'/> + <choice value='top-right'/> + <choice value='bottom-left'/> + <choice value='bottom-right'/> + </choices> + <default>'center'</default> + <summary>The position of the background image.</summary> + </key> </schema> </schemalist> diff --git a/src/background.vala b/src/background.vala index bf1ca6f..07dce7e 100644 --- a/src/background.vala +++ b/src/background.vala @@ -173,17 +173,43 @@ class BackgroundLoader : Object var target_aspect = (double) width / height; var aspect = (double) image.width / image.height; double scale, offset_x = 0, offset_y = 0; + string sPosition = AGSettings.get_string (AGSettings.KEY_BACKGROUND_POSITION); + if (aspect > target_aspect) { /* Fit height and trim sides */ scale = (double) height / image.height; - offset_x = (image.width * scale - width) / 2; + + if (sPosition == "center") + { + offset_x = (image.width * scale - width) / 2; + } + else if (sPosition == "top-left" || sPosition == "bottom-left") + { + offset_x = 0; + } + else if (sPosition == "top-right" || sPosition == "bottom-right") + { + offset_x = (image.width * scale - width); + } } else { /* Fit width and trim top and bottom */ scale = (double) width / image.width; - offset_y = (image.height * scale - height) / 2; + + if (sPosition == "center") + { + offset_y = (image.height * scale - height) / 2; + } + else if (sPosition == "top-left" || sPosition == "top-right") + { + offset_y = 0; + } + else if (sPosition == "bottom-left" || sPosition == "bottom-right") + { + offset_y = (image.height * scale - height); + } } var scaled_image = new Gdk.Pixbuf (image.colorspace, image.has_alpha, image.bits_per_sample, width, height); diff --git a/src/settings.vala b/src/settings.vala index 865fe4a..d479aa6 100644 --- a/src/settings.vala +++ b/src/settings.vala @@ -101,6 +101,7 @@ public class AGSettings : Object public const string KEY_LOGO_OFFSET_VERTICAL = "logo-offset-vertical"; public const string KEY_ERROR_BELOW_ENTRY = "error-below-entry"; public const string KEY_MENUBAR_BGCOLOR = "menubar-bgcolor"; + public const string KEY_BACKGROUND_POSITION = "background-position"; public static bool get_boolean (string key) { |
