1
/* Copyright 2013 Jens Bav
2
* Copyright 2011-2013 Yorba Foundation
4
* This software is licensed under the GNU Lesser General Public License
5
* (version 2.1 or later). See the COPYING file in this distribution.
10
private class CirclesEffectDescriptor : ShotwellTransitionDescriptor {
11
public CirclesEffectDescriptor (GLib.File resource_directory) {
12
base (resource_directory);
15
public override unowned string get_id () {
16
return "org.pantheon.photos.transitions.circles";
19
public override unowned string get_pluggable_name () {
23
public override Transitions.Effect create (HostInterface host) {
24
return new CirclesEffect ();
28
private class CirclesEffect : Object, Transitions.Effect {
29
private const int DESIRED_FPS = 25;
30
private const int MIN_FPS = 15;
31
private const double SPEED = 2.5;
33
public CirclesEffect () {
36
public void get_fps (out int desired_fps, out int min_fps) {
37
desired_fps = CirclesEffect.DESIRED_FPS;
38
min_fps = CirclesEffect.MIN_FPS;
41
public void start (Transitions.Visuals visuals, Transitions.Motion motion) {
44
public bool needs_clear_background () {
48
public void paint (Transitions.Visuals visuals, Transitions.Motion motion, Cairo.Context ctx,
49
int width, int height, int frame_number) {
50
double alpha = motion.get_alpha (frame_number);
51
int distance = 60, radius;
52
int circleCountX = width / (2 * distance);
53
int circleCountY = height / distance;
54
double maxRadius = SPEED * distance;
56
if (visuals.from_pixbuf != null) {
57
Gdk.cairo_set_source_pixbuf (ctx, visuals.from_pixbuf, visuals.from_pos.x,
59
ctx.paint_with_alpha (1 - alpha);
62
if (visuals.to_pixbuf != null) {
63
Gdk.cairo_set_source_pixbuf (ctx, visuals.to_pixbuf, visuals.to_pos.x, visuals.to_pos.y);
65
for (int y = 0; y <= circleCountY; y++) {
66
for (int x = 0; x <= circleCountX; x++) {
67
radius = (int) (Math.fmax (0, Math.fmin (1, alpha - ((double) (x + y) / (double)
68
((circleCountY + circleCountX) * SPEED)))) * maxRadius);
69
ctx.arc (2 * distance * x, 2 * distance * y, radius, 0, 2 * Math.PI);
75
ctx.paint_with_alpha (alpha);
81
public void advance (Transitions.Visuals visuals, Transitions.Motion motion, int frame_number) {
84
public void cancel () {