~ubuntu-branches/ubuntu/saucy/clutter-perl/saucy

1 by Ross Burton
Import upstream version 0.2.0
1
package Clutter::Ex::Behaviour::Rotate;
2
1.1.1 by Ross Burton
Import upstream version 0.4.1
3
# behaviour.pl: Example showing the behaviours API in Clutter
4
# Copyright (C) 2007  OpenedHand, Ltd.
5
# Author: Emmanuele Bassi
6
#
7
# This is free software. Permission to redistribute and/or modify it under
8
# the same terms of Perl itself.
9
1 by Ross Burton
Import upstream version 0.2.0
10
use strict;
11
use warnings;
12
13
use Glib;
14
use Clutter;
15
16
# we need to register these enums first hand, so that the
17
# object registering code can find them when defining the
18
# properties of the Clutter::Ex::Behaviour::Rotate.
19
sub BEGIN {
20
    Glib::Type->register_enum(
21
        'Clutter::Ex::RotateDirection',
22
        'clockwise',
23
        'anticlockwise',
24
    );
25
26
    Glib::Type->register_enum(
27
        'Clutter::Ex::RotateAxis',
28
        'x',
29
        'y',
30
        'z',
31
    );
32
}
33
34
use Glib::Object::Subclass
35
    'Clutter::Behaviour',
36
    signals => { },
37
    properties => [
38
        Glib::ParamSpec->double(
39
            'angle-start',
40
            'Angle Start',
41
            'Initial angle value',
42
            0.0, 359.0, 0.0,
43
            [ qw( readable writable ) ],
44
        ),
45
        Glib::ParamSpec->double(
46
            'angle-end',
47
            'Angle End',
48
            'Final angle value',
49
            0.0, 359.0, 359.0,
50
            [ qw( readable writable ) ],
51
        ),
52
        Glib::ParamSpec->enum(
53
            'direction',
54
            'Direction',
55
            'Direction of the rotation',
56
            'Clutter::Ex::RotateDirection',
57
            'clockwise',
58
            [ qw( readable writable ) ],
59
        ),
60
        Glib::ParamSpec->enum(
61
            'axis',
62
            'Axis',
63
            'Axis of the rotation',
64
            'Clutter::Ex::RotateAxis',
65
            'z',
66
            [ qw( readable writable ) ],
67
        ),
68
    ]
69
    ;
70
71
sub INIT_INSTANCE {
72
    my ($self) = @_;
73
74
    $self->{angle_start} =   0.0;
75
    $self->{angle_end}   = 359.0;
76
    $self->{direction}   = 'clockwise';
77
    $self->{axis}        = 'z';
78
}
79
80
sub ALPHA_NOTIFY {
81
    my ($self, $alpha_value) = @_;
82
83
    my $angle = $alpha_value
84
              * ($self->{angle_end} - $self->{angle_start})
85
              / Clutter::Alpha->MAX_ALPHA;
86
87
    my @actors = $self->get_actors();
88
    return unless scalar @actors;
89
90
    foreach my $actor (@actors) {
1.1.2 by Ross Burton
Import upstream version 0.6.0.0
91
        $actor->set_rotation('z-axis', $angle,
92
                             $actor->get_x() - 20,
93
                             $actor->get_y() - 20,
94
                             0);
1 by Ross Burton
Import upstream version 0.2.0
95
    }
96
}
97
98
package main;
99
100
use strict;
101
use warnings;
102
103
use Glib qw( :constants );
1.1.1 by Ross Burton
Import upstream version 0.4.1
104
use Clutter qw( :init );
1 by Ross Burton
Import upstream version 0.2.0
105
106
my $stage = Clutter::Stage->get_default();
107
$stage->set_color(Clutter::Color->new(0xcc, 0xcc, 0xcc, 0xff));
108
$stage->signal_connect(key_press_event => sub { Clutter->main_quit(); });
109
110
my $group = Clutter::Group->new();
111
$stage->add($group);
112
$group->show();
113
114
my $rect = Clutter::Rectangle->new();
115
$rect->set_size(100, 100);
116
$rect->set_position(0, 0);
117
$rect->set_color(Clutter::Color->new(0x33, 0x22, 0x22, 0xff));
118
$rect->set_border_width(10);
119
$rect->set_border_color(Clutter::Color->new(0xff, 0xcc, 0xcc, 0xff));
120
121
$group->add($rect);
122
$rect->show();
123
1.2.1 by Ross Burton
Import upstream version 0.8.0.1
124
my $hand;
125
eval { $hand = Clutter::Texture->new('redhand.png') };
1 by Ross Burton
Import upstream version 0.2.0
126
if ($@) {
127
    warn ("Unable to load 'redhand.png': $@");
128
}
129
else {
130
    $hand->set_position(5, 5);
131
1.2.1 by Ross Burton
Import upstream version 0.8.0.1
132
    $rect->set_size($hand->get_width()  + 5,
133
                    $hand->get_height() + 5);
1 by Ross Burton
Import upstream version 0.2.0
134
135
    $group->add($hand);
136
    $hand->show();
137
}
138
139
my $timeline = Clutter::Timeline->new(100, 26);
140
$timeline->set(loop => TRUE);
141
1.1.2 by Ross Burton
Import upstream version 0.6.0.0
142
my $alpha = Clutter::Alpha->new($timeline, sub {
143
    my $alpha = shift;
144
    my $timeline = $alpha->get_timeline();
145
146
    return int($timeline->get_progress() * Clutter::Alpha->MAX_ALPHA);
147
});
148
1 by Ross Burton
Import upstream version 0.2.0
149
my $o_behave = Clutter::Behaviour::Opacity->new($alpha, 0x33, 0xff);
150
$o_behave->apply($group);
151
152
my $p_behave
153
    = Clutter::Behaviour::Path->new($alpha,
154
        [   0,   0 ],
155
        [   0, 300 ],
156
        [ 300, 300 ],
157
        [ 300,   0 ],
158
        [   0,   0 ],
159
      );
160
$p_behave->apply($group);
161
162
my $r_behave
163
    = Clutter::Ex::Behaviour::Rotate->new(alpha => $alpha);
164
$r_behave->apply($group);
165
166
$timeline->start();
167
168
$stage->show();
169
170
Clutter->main();
171
172
0;