more work on the debugger
[swfdec.git] / player / swfdec_player_manager.c
blobeb3fe106e7cc9329332c54548b62243a152cdf10
1 /* Swfdec
2 * Copyright (C) 2006 Benjamin Otte <otte@gnome.org>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301 USA
20 #ifdef HAVE_CONFIG_H
21 #include "config.h"
22 #endif
24 #include "swfdec_player_manager.h"
25 #include "swfdec_source.h"
27 enum {
28 PROP_0,
29 PROP_PLAYING,
30 PROP_SPEED
33 G_DEFINE_TYPE (SwfdecPlayerManager, swfdec_player_manager, G_TYPE_OBJECT)
35 static void
36 swfdec_player_manager_get_property (GObject *object, guint param_id, GValue *value,
37 GParamSpec * pspec)
39 SwfdecPlayerManager *manager = SWFDEC_PLAYER_MANAGER (object);
41 switch (param_id) {
42 case PROP_PLAYING:
43 g_value_set_boolean (value, swfdec_player_manager_get_playing (manager));
44 break;
45 case PROP_SPEED:
46 g_value_set_double (value, swfdec_player_manager_get_speed (manager));
47 break;
48 default:
49 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
50 break;
54 static void
55 swfdec_player_manager_set_property (GObject *object, guint param_id, const GValue *value,
56 GParamSpec *pspec)
58 SwfdecPlayerManager *manager = SWFDEC_PLAYER_MANAGER (object);
60 switch (param_id) {
61 case PROP_PLAYING:
62 swfdec_player_manager_set_playing (manager, g_value_get_boolean (value));
63 break;
64 case PROP_SPEED:
65 swfdec_player_manager_set_speed (manager, g_value_get_double (value));
66 break;
67 default:
68 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
69 break;
73 static void
74 swfdec_player_manager_dispose (GObject *object)
76 SwfdecPlayerManager *manager = SWFDEC_PLAYER_MANAGER (object);
78 swfdec_player_manager_set_playing (manager, FALSE);
79 g_object_unref (manager->player);
81 G_OBJECT_CLASS (swfdec_player_manager_parent_class)->dispose (object);
84 static void
85 swfdec_player_manager_class_init (SwfdecPlayerManagerClass * g_class)
87 GObjectClass *object_class = G_OBJECT_CLASS (g_class);
89 object_class->dispose = swfdec_player_manager_dispose;
90 object_class->set_property = swfdec_player_manager_set_property;
91 object_class->get_property = swfdec_player_manager_get_property;
93 g_object_class_install_property (object_class, PROP_SPEED,
94 g_param_spec_double ("speed", "speed", "playback speed of movie",
95 G_MINDOUBLE, 16.0, 1.0, G_PARAM_READWRITE));
96 g_object_class_install_property (object_class, PROP_SPEED,
97 g_param_spec_boolean ("playing", "playing", "if the movie is played back",
98 FALSE, G_PARAM_READWRITE));
101 static void
102 swfdec_player_manager_init (SwfdecPlayerManager *manager)
104 manager->speed = 1.0;
107 static void
108 swfdec_player_manager_set_player (SwfdecPlayerManager *manager, SwfdecPlayer *player)
110 if (manager->player == player)
111 return;
113 if (manager->player) {
114 g_object_unref (manager->player);
116 manager->player = player;
117 if (player) {
118 g_object_ref (player);
122 SwfdecPlayerManager *
123 swfdec_player_manager_new (SwfdecPlayer *player)
125 SwfdecPlayerManager *manager;
127 g_return_val_if_fail (player == NULL || SWFDEC_IS_PLAYER (player), NULL);
129 manager = g_object_new (SWFDEC_TYPE_PLAYER_MANAGER, 0);
130 swfdec_player_manager_set_player (manager, player);
132 return manager;
135 void
136 swfdec_player_manager_set_speed (SwfdecPlayerManager *manager, double speed)
138 g_return_if_fail (SWFDEC_IS_PLAYER_MANAGER (manager));
139 g_return_if_fail (speed > 0.0);
141 if (manager->speed == speed)
142 return;
143 if (manager->source) {
144 swfdec_player_manager_set_playing (manager, FALSE);
145 manager->speed = speed;
146 swfdec_player_manager_set_playing (manager, TRUE);
147 } else {
148 manager->speed = speed;
150 g_object_notify (G_OBJECT (manager), "speed");
153 double
154 swfdec_player_manager_get_speed (SwfdecPlayerManager *manager)
156 g_return_val_if_fail (SWFDEC_IS_PLAYER_MANAGER (manager), 1.0);
158 return manager->speed;
161 void
162 swfdec_player_manager_set_playing (SwfdecPlayerManager *manager, gboolean playing)
164 g_return_if_fail (SWFDEC_IS_PLAYER_MANAGER (manager));
166 if ((manager->source != NULL) == playing)
167 return;
168 if (playing) {
169 g_assert (manager->source == NULL);
170 manager->source = swfdec_iterate_source_new (manager->player);
171 g_source_attach (manager->source, NULL);
172 } else {
173 g_assert (manager->source != NULL);
174 g_source_destroy (manager->source);
175 g_source_unref (manager->source);
176 manager->source = NULL;
178 g_object_notify (G_OBJECT (manager), "playing");
181 gboolean
182 swfdec_player_manager_get_playing (SwfdecPlayerManager *manager)
184 g_return_val_if_fail (SWFDEC_IS_PLAYER_MANAGER (manager), FALSE);
186 return manager->source != NULL;