Clone in a terminal:
ScaledBackgrounds.vala
/*
	Copyright (C) 2015 Johan Mattsson

	This library is free software; you can redistribute it and/or modify 
	it under the terms of the GNU Lesser General Public License as 
	published by the Free Software Foundation; either version 3 of the 
	License, or (at your option) any later version.

	This library 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 
	Lesser General Public License for more details.
*/

using Cairo;
using Math;
using Gee;

namespace BirdFont {

public class ScaledBackgrounds : GLib.Object {
	ImageSurface original;
	ArrayList<ScaledBackground> scaled;
	
	public ScaledBackgrounds (ImageSurface original) {
		this.original = original;
		scaled = new ArrayList<ScaledBackground> ();

		ScaledBackground image = scale (0.01);
		scaled.add (image);
					
		for (double scale_factor = 0.1; scale_factor <= 1; scale_factor += 0.1) {
			image = scale (scale_factor);
			scaled.add (image);
		}
	}
	
	public ScaledBackground get_image (double scale) {
		foreach (ScaledBackground image in scaled) {
			if (image.get_scale () < scale) {
				continue;
			}
			
			return image;
		}

		return scaled.get (scaled.size - 1);
	}

	private ScaledBackground scale (double scale_factor) {
		ImageSurface scaled_image;
		
		if (scale_factor <= 0) {
			warning ("scale_factor <= 0");
			scale_factor = 1;
		}
		
		int width = (int) (original.get_width () * scale_factor);
		int height = (int) (original.get_height () * scale_factor);
		
		scaled_image = new ImageSurface (Format.ARGB32, width, height);
		Context context = new Context (scaled_image);
		context.scale (scale_factor, scale_factor);
		context.set_source_surface (original, 0, 0);
		context.paint ();
		
		return new ScaledBackground (scaled_image, scale_factor);
	}
}

}

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112