[Swfdec-commits] 13 commits - swfdec-gtk/swfdec_gtk_widget.c swfdec-gtk/swfdec_gtk_widget.h swfdec/swfdec_as_strings.c swfdec/swfdec_net_stream.c swfdec/swfdec_player.c swfdec/swfdec_player.h swfdec/swfdec_player_internal.h swfdec/swfdec_stage_as.c test/swfdec_test_plugin.c test/trace
Benjamin Otte
company at kemper.freedesktop.org
Mon Apr 14 04:40:37 PDT 2008
swfdec-gtk/swfdec_gtk_widget.c | 118 +++++++++++++++++---
swfdec-gtk/swfdec_gtk_widget.h | 1
swfdec/swfdec_as_strings.c | 2
swfdec/swfdec_net_stream.c | 3
swfdec/swfdec_player.c | 184 ++++++++++++++++++++++++++------
swfdec/swfdec_player.h | 6 +
swfdec/swfdec_player_internal.h | 4
swfdec/swfdec_stage_as.c | 33 ++++-
test/swfdec_test_plugin.c | 2
test/trace/Makefile.am | 5
test/trace/stage-fullscreen-7.swf |binary
test/trace/stage-fullscreen-7.swf.trace | 85 ++++++++++++++
test/trace/stage-fullscreen-8.swf |binary
test/trace/stage-fullscreen-8.swf.trace | 85 ++++++++++++++
test/trace/stage-fullscreen.as | 39 ++++++
15 files changed, 515 insertions(+), 52 deletions(-)
New commits:
commit 260ce59509ce0a505ad735ab5ad9834f05d8492e
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 13:39:51 2008 +0200
add a fullscreen test
The version 5 test was omitted because it doesn't do anything.
The version 6 test is so weird, I couldn't make it work.
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index efed79e..75c3e24 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -2868,6 +2868,11 @@ EXTRA_DIST = \
stage-align-7.swf.trace \
stage-align-8.swf \
stage-align-8.swf.trace \
+ stage-fullscreen-7.swf \
+ stage-fullscreen-7.swf.trace \
+ stage-fullscreen-8.swf \
+ stage-fullscreen-8.swf.trace \
+ stage-fullscreen.as \
stage-size.as \
stage-size-5.swf \
stage-size-5.swf.trace \
diff --git a/test/trace/stage-fullscreen-7.swf b/test/trace/stage-fullscreen-7.swf
new file mode 100644
index 0000000..f109bec
Binary files /dev/null and b/test/trace/stage-fullscreen-7.swf differ
diff --git a/test/trace/stage-fullscreen-7.swf.trace b/test/trace/stage-fullscreen-7.swf.trace
new file mode 100644
index 0000000..4a783d6
--- /dev/null
+++ b/test/trace/stage-fullscreen-7.swf.trace
@@ -0,0 +1,85 @@
+>>> before setting fullscreen
+normal
+showAll
+200
+150
+>>> fullscreen: true
+fullScreen
+showAll
+200
+150
+>>> after setting fullscreen
+fullScreen
+showAll
+200
+150
+>>> before Stage.displayState = "normal"
+fullScreen
+showAll
+200
+150
+>>> fullscreen: false
+normal
+showAll
+200
+150
+>>> after Stage.displayState = "normal"
+normal
+showAll
+200
+150
+>>> before Stage.scaleMode = "noScale"
+normal
+showAll
+200
+150
+>>> before Stage.displayState = "fullScreen"
+normal
+noScale
+200
+150
+>>> onResize
+fullScreen
+noScale
+1024
+768
+>>> fullscreen: true
+fullScreen
+noScale
+1024
+768
+>>> after Stage.displayState = "fullScreen"
+fullScreen
+noScale
+1024
+768
+>>> before Stage.displayState = "normal"
+fullScreen
+noScale
+1024
+768
+>>> onResize
+normal
+noScale
+200
+150
+>>> fullscreen: false
+normal
+noScale
+200
+150
+>>> after Stage.displayState = "normal"
+normal
+noScale
+200
+150
+>>> before Stage.scaleMode = "showAll"
+normal
+noScale
+200
+150
+>>> when quitting
+normal
+showAll
+200
+150
diff --git a/test/trace/stage-fullscreen-8.swf b/test/trace/stage-fullscreen-8.swf
new file mode 100644
index 0000000..5ecd514
Binary files /dev/null and b/test/trace/stage-fullscreen-8.swf differ
diff --git a/test/trace/stage-fullscreen-8.swf.trace b/test/trace/stage-fullscreen-8.swf.trace
new file mode 100644
index 0000000..4a783d6
--- /dev/null
+++ b/test/trace/stage-fullscreen-8.swf.trace
@@ -0,0 +1,85 @@
+>>> before setting fullscreen
+normal
+showAll
+200
+150
+>>> fullscreen: true
+fullScreen
+showAll
+200
+150
+>>> after setting fullscreen
+fullScreen
+showAll
+200
+150
+>>> before Stage.displayState = "normal"
+fullScreen
+showAll
+200
+150
+>>> fullscreen: false
+normal
+showAll
+200
+150
+>>> after Stage.displayState = "normal"
+normal
+showAll
+200
+150
+>>> before Stage.scaleMode = "noScale"
+normal
+showAll
+200
+150
+>>> before Stage.displayState = "fullScreen"
+normal
+noScale
+200
+150
+>>> onResize
+fullScreen
+noScale
+1024
+768
+>>> fullscreen: true
+fullScreen
+noScale
+1024
+768
+>>> after Stage.displayState = "fullScreen"
+fullScreen
+noScale
+1024
+768
+>>> before Stage.displayState = "normal"
+fullScreen
+noScale
+1024
+768
+>>> onResize
+normal
+noScale
+200
+150
+>>> fullscreen: false
+normal
+noScale
+200
+150
+>>> after Stage.displayState = "normal"
+normal
+noScale
+200
+150
+>>> before Stage.scaleMode = "showAll"
+normal
+noScale
+200
+150
+>>> when quitting
+normal
+showAll
+200
+150
diff --git a/test/trace/stage-fullscreen.as b/test/trace/stage-fullscreen.as
new file mode 100644
index 0000000..be1cfdf
--- /dev/null
+++ b/test/trace/stage-fullscreen.as
@@ -0,0 +1,39 @@
+// makeswf -v 7 -s 200x150 -r 1 -o stage-fullscreen.swf stage-fullscreen.as
+
+function print (stuff) {
+ trace (">>> " + stuff);
+ trace (Stage.displayState);
+ trace (Stage.scaleMode);
+ trace (Stage.width);
+ trace (Stage.height);
+};
+
+Stage.addListener ({ onResize: function () { print ("onResize"); } });
+Stage.addListener ({ onFullScreen: function (is_fs) { print ("fullscreen: " + is_fs); } });
+
+onEnterFrame = function () {
+ if (!work_around_stupid_size_bug) {
+ /* wine or adobe's player don't set the correct window size when
+ fullscreening before the window is shown */
+ print ("before setting fullscreen");
+ Stage.displayState = "fullscreen";
+ print ("after setting fullscreen");
+ work_around_stupid_size_bug = 1;
+ } else if (Stage.displayState == "fullScreen") {
+ print ("before Stage.displayState = \"normal\"");
+ Stage.displayState = "normal";
+ print ("after Stage.displayState = \"normal\"");
+ } else if (Stage.scaleMode != "noScale") {
+ print ("before Stage.scaleMode = \"noScale\"");
+ Stage.scaleMode = "noScale";
+ print ("before Stage.displayState = \"fullScreen\"");
+ Stage.displayState = "fullScreen";
+ print ("after Stage.displayState = \"fullScreen\"");
+ } else {
+ print ("before Stage.scaleMode = \"showAll\"");
+ Stage.scaleMode = "showAll";
+ print ("when quitting");
+ getURL ("fscommand:quit", "");
+ }
+};
+
commit 9dd4424f401849374ff2ddc905d98f0e853f0187
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 13:39:33 2008 +0200
allow going ullscreen during tests
diff --git a/test/swfdec_test_plugin.c b/test/swfdec_test_plugin.c
index a021c57..3bcee26 100644
--- a/test/swfdec_test_plugin.c
+++ b/test/swfdec_test_plugin.c
@@ -135,7 +135,7 @@ swfdec_test_plugin_swfdec_new (SwfdecTestPlugin *plugin)
plugin->finish = swfdec_test_plugin_swfdec_finish;
plugin->data = player = g_object_new (SWFDEC_TYPE_PLAYER, "random-seed", 0,
"loader-type", SWFDEC_TYPE_FILE_LOADER, "socket-type", SWFDEC_TYPE_TEST_SWFDEC_SOCKET,
- "max-runtime", 0, "start-time", &the_beginning,
+ "max-runtime", 0, "start-time", &the_beginning, "allow-fullscreen", TRUE,
NULL);
g_object_set_data (G_OBJECT (player), "plugin", plugin);
commit eba04d3bc7212cd83e338f287dd23ff2a3b2fb3d
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 13:17:00 2008 +0200
implement spawning a fullscreen window when the player goes into fullscreen
diff --git a/swfdec-gtk/swfdec_gtk_widget.c b/swfdec-gtk/swfdec_gtk_widget.c
index af6351c..1ac6196 100644
--- a/swfdec-gtk/swfdec_gtk_widget.c
+++ b/swfdec-gtk/swfdec_gtk_widget.c
@@ -37,12 +37,15 @@ struct _SwfdecGtkWidgetPrivate
gboolean interactive; /* TRUE if this widget propagates keyboard and mouse events */
GdkRegion * invalid; /* invalid regions we didn't yet repaint */
guint invalidator; /* GSource used for invalidating window contents */
+ GtkWidget * fullscreen_window;/* the window we use for displaying fullscreen */
+ gboolean fullscreen_mode;/* TRUE if we're a fullscreen widget */
};
enum {
PROP_0,
- PROP_PLAYER,
+ PROP_FULLSCREEN_MODE,
PROP_INTERACTIVE,
+ PROP_PLAYER,
PROP_RENDERER_SET,
PROP_RENDERER
};
@@ -107,9 +110,10 @@ swfdec_gtk_widget_button_press (GtkWidget *gtkwidget, GdkEventButton *event)
SwfdecGtkWidgetPrivate *priv = widget->priv;
if (event->type == GDK_BUTTON_PRESS && event->button <= 32 && priv->interactive && priv->player) {
- swfdec_player_set_allow_fullscreen (priv->player, TRUE);
- swfdec_player_mouse_press (priv->player, event->x, event->y, event->button);
- swfdec_player_set_allow_fullscreen (priv->player, FALSE);
+ SwfdecPlayer *player = priv->player;
+ swfdec_player_set_allow_fullscreen (player, TRUE);
+ swfdec_player_mouse_press (player, event->x, event->y, event->button);
+ swfdec_player_set_allow_fullscreen (player, FALSE);
}
return FALSE;
}
@@ -121,9 +125,10 @@ swfdec_gtk_widget_button_release (GtkWidget *gtkwidget, GdkEventButton *event)
SwfdecGtkWidgetPrivate *priv = widget->priv;
if (event->button <= 32 && priv->interactive && priv->player) {
- swfdec_player_set_allow_fullscreen (priv->player, TRUE);
- swfdec_player_mouse_release (priv->player, event->x, event->y, event->button);
- swfdec_player_set_allow_fullscreen (priv->player, FALSE);
+ SwfdecPlayer *player = priv->player;
+ swfdec_player_set_allow_fullscreen (player, TRUE);
+ swfdec_player_mouse_release (player, event->x, event->y, event->button);
+ swfdec_player_set_allow_fullscreen (player, FALSE);
}
return FALSE;
}
@@ -164,10 +169,11 @@ swfdec_gtk_widget_key_press (GtkWidget *gtkwidget, GdkEventKey *event)
if (priv->interactive && priv->player) {
guint keycode = swfdec_gtk_event_to_keycode (event);
if (keycode != 0) {
- swfdec_player_set_allow_fullscreen (priv->player, TRUE);
- swfdec_player_key_press (priv->player, keycode,
+ SwfdecPlayer *player = priv->player;
+ swfdec_player_set_allow_fullscreen (player, TRUE);
+ swfdec_player_key_press (player, keycode,
gdk_keyval_to_unicode (event->keyval));
- swfdec_player_set_allow_fullscreen (priv->player, FALSE);
+ swfdec_player_set_allow_fullscreen (player, FALSE);
}
return TRUE;
}
@@ -184,10 +190,11 @@ swfdec_gtk_widget_key_release (GtkWidget *gtkwidget, GdkEventKey *event)
if (priv->interactive && priv->player) {
guint keycode = swfdec_gtk_event_to_keycode (event);
if (keycode != 0) {
- swfdec_player_set_allow_fullscreen (priv->player, TRUE);
- swfdec_player_key_release (priv->player, keycode,
+ SwfdecPlayer *player = priv->player;
+ swfdec_player_set_allow_fullscreen (player, TRUE);
+ swfdec_player_key_release (player, keycode,
gdk_keyval_to_unicode (event->keyval));
- swfdec_player_set_allow_fullscreen (priv->player, FALSE);
+ swfdec_player_set_allow_fullscreen (player, FALSE);
}
return TRUE;
}
@@ -252,9 +259,9 @@ swfdec_gtk_widget_expose (GtkWidget *gtkwidget, GdkEventExpose *event)
cairo_t *cr;
cairo_surface_t *surface = NULL;
- if (event->window != gtkwidget->window)
- return FALSE;
- if (priv->player == NULL)
+ if (event->window != gtkwidget->window ||
+ priv->player == NULL ||
+ priv->fullscreen_window != NULL)
return FALSE;
/* FIXME: This might be ugly */
@@ -321,12 +328,15 @@ swfdec_gtk_widget_set_property (GObject *object, guint param_id, const GValue *v
SwfdecGtkWidgetPrivate *priv = widget->priv;
switch (param_id) {
- case PROP_PLAYER:
- swfdec_gtk_widget_set_player (widget, g_value_get_object (value));
+ case PROP_FULLSCREEN_MODE:
+ priv->fullscreen_mode = g_value_get_boolean (value);
break;
case PROP_INTERACTIVE:
swfdec_gtk_widget_set_interactive (widget, g_value_get_boolean (value));
break;
+ case PROP_PLAYER:
+ swfdec_gtk_widget_set_player (widget, g_value_get_object (value));
+ break;
case PROP_RENDERER_SET:
priv->renderer_set = g_value_get_boolean (value);
gtk_widget_queue_draw (GTK_WIDGET (widget));
@@ -368,7 +378,7 @@ swfdec_gtk_widget_size_allocate (GtkWidget *gtkwidget, GtkAllocation *allocation
gtkwidget->allocation = *allocation;
- if (priv->player && swfdec_player_is_initialized (priv->player))
+ if (priv->player && swfdec_player_is_initialized (priv->player) && !priv->fullscreen_mode)
swfdec_player_set_size (priv->player, allocation->width, allocation->height);
if (GTK_WIDGET_REALIZED (gtkwidget)) {
gdk_window_move_resize (gtkwidget->window,
@@ -384,6 +394,12 @@ swfdec_gtk_widget_size_request (GtkWidget *gtkwidget, GtkRequisition *req)
if (priv->player == NULL) {
req->width = req->height = 0;
+#if 0
+ } else if (priv->fullscreen_mode) {
+ GdkScreen *screen = gtk_widget_has_screen (gtkwidget) ? gtk_widget_get_screen (gtkwidget) : NULL;
+ req->width = screen ? gdk_screen_get_width (screen) : 0;
+ req->height = screen ? gdk_screen_get_height (screen) : 0;
+#endif
} else {
guint w, h;
swfdec_player_get_default_size (priv->player, &w, &h);
@@ -550,12 +566,15 @@ swfdec_gtk_widget_class_init (SwfdecGtkWidgetClass * g_class)
object_class->get_property = swfdec_gtk_widget_get_property;
object_class->set_property = swfdec_gtk_widget_set_property;
- g_object_class_install_property (object_class, PROP_PLAYER,
- g_param_spec_object ("player", "player", "player that is displayed",
- SWFDEC_TYPE_PLAYER, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class, PROP_FULLSCREEN_MODE,
+ g_param_spec_boolean ("fullscreen-mode", "fullscreen mode", "special mode for fullscreen display",
+ FALSE, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_INTERACTIVE,
g_param_spec_boolean ("interactive", "interactive", "if mouse events are processed",
TRUE, G_PARAM_READWRITE));
+ g_object_class_install_property (object_class, PROP_PLAYER,
+ g_param_spec_object ("player", "player", "player that is displayed",
+ SWFDEC_TYPE_PLAYER, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class, PROP_RENDERER_SET,
g_param_spec_boolean ("renderer-set", "renderer set", "if an intermediate renderer should be used",
TRUE, G_PARAM_READWRITE));
@@ -620,7 +639,8 @@ swfdec_gtk_widget_invalidate_cb (SwfdecPlayer *player, const SwfdecRectangle *ex
SwfdecGtkWidgetPrivate *priv = widget->priv;
guint i;
- if (!GTK_WIDGET_MAPPED (widget))
+ if (!GTK_WIDGET_MAPPED (widget) ||
+ priv->fullscreen_window != NULL)
return;
for (i = 0; i < n_rects; i++) {
@@ -633,12 +653,41 @@ swfdec_gtk_widget_invalidate_cb (SwfdecPlayer *player, const SwfdecRectangle *ex
}
static void
+swfdec_gtk_widget_do_fullscreen (SwfdecGtkWidget *widget, gboolean fullscreen)
+{
+ SwfdecGtkWidgetPrivate *priv = widget->priv;
+
+ if (priv->fullscreen_mode)
+ return;
+
+ if (fullscreen && priv->fullscreen_window == NULL) {
+ GtkWidget *window, *child;
+
+ priv->fullscreen_window = window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ child = swfdec_gtk_widget_new_fullscreen (priv->player);
+ gtk_container_add (GTK_CONTAINER (window), child);
+ gtk_widget_show_all (window);
+ gtk_window_fullscreen (GTK_WINDOW (window));
+ gtk_widget_grab_focus (child);
+ g_object_ref (window);
+ } else if (!fullscreen && priv->fullscreen_window != NULL) {
+ gtk_widget_destroy (priv->fullscreen_window);
+ g_object_unref (priv->fullscreen_window);
+ priv->fullscreen_window = NULL;
+ }
+ swfdec_gtk_widget_clear_invalidations (widget);
+ gtk_widget_queue_draw (GTK_WIDGET (widget));
+}
+
+static void
swfdec_gtk_widget_notify_cb (SwfdecPlayer *player, GParamSpec *pspec, SwfdecGtkWidget *widget)
{
if (g_str_equal (pspec->name, "mouse-cursor")) {
swfdec_gtk_widget_update_cursor (widget);
} else if (g_str_equal (pspec->name, "initialized")) {
gtk_widget_queue_resize (GTK_WIDGET (widget));
+ } else if (g_str_equal (pspec->name, "fullscreen")) {
+ swfdec_gtk_widget_do_fullscreen (widget, swfdec_player_get_fullscreen (player));
}
}
@@ -654,11 +703,16 @@ swfdec_gtk_widget_notify_cb (SwfdecPlayer *player, GParamSpec *pspec, SwfdecGtkW
void
swfdec_gtk_widget_set_player (SwfdecGtkWidget *widget, SwfdecPlayer *player)
{
- SwfdecGtkWidgetPrivate *priv = widget->priv;
+ SwfdecGtkWidgetPrivate *priv;
g_return_if_fail (SWFDEC_IS_GTK_WIDGET (widget));
g_return_if_fail (player == NULL || SWFDEC_IS_PLAYER (player));
+ priv = widget->priv;
+ if (priv->player == player)
+ return;
+
+ swfdec_gtk_widget_clear_invalidations (widget);
if (player) {
g_signal_connect (player, "invalidate", G_CALLBACK (swfdec_gtk_widget_invalidate_cb), widget);
g_signal_connect (player, "notify", G_CALLBACK (swfdec_gtk_widget_notify_cb), widget);
@@ -678,6 +732,7 @@ swfdec_gtk_widget_set_player (SwfdecGtkWidget *widget, SwfdecPlayer *player)
gtk_widget_queue_resize (GTK_WIDGET (widget));
g_object_notify (G_OBJECT (widget), "player");
swfdec_gtk_widget_update_renderer (widget);
+ swfdec_gtk_widget_do_fullscreen (widget, player ? swfdec_player_get_fullscreen (player) : FALSE);
}
/**
@@ -717,6 +772,29 @@ swfdec_gtk_widget_new (SwfdecPlayer *player)
}
/**
+ * swfdec_gtk_widget_new_fullscreen:
+ * @player: a #SwfdecPlayer
+ *
+ * Creates a new #SwfdecGtkWidget to display @player inside a fullscreen
+ * window.
+ *
+ * Returns: the new widget that displays @player in fullscreen mode.
+ **/
+GtkWidget *
+swfdec_gtk_widget_new_fullscreen (SwfdecPlayer *player)
+{
+ SwfdecGtkWidget *widget;
+
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+
+ /* NB: We must set fullscreen mode before setting the player, or we
+ * get inf-loops when setting the player creates fullscreen windows */
+ widget = g_object_new (SWFDEC_TYPE_GTK_WIDGET, "fullscreen-mode", TRUE, "player", player, NULL);
+
+ return GTK_WIDGET (widget);
+}
+
+/**
* swfdec_gtk_widget_set_interactive:
* @widget: a #SwfdecGtkWidget
* @interactive: %TRUE to make the widget interactive
diff --git a/swfdec-gtk/swfdec_gtk_widget.h b/swfdec-gtk/swfdec_gtk_widget.h
index 370fc20..4351640 100644
--- a/swfdec-gtk/swfdec_gtk_widget.h
+++ b/swfdec-gtk/swfdec_gtk_widget.h
@@ -51,6 +51,7 @@ struct _SwfdecGtkWidgetClass
GType swfdec_gtk_widget_get_type (void);
GtkWidget * swfdec_gtk_widget_new (SwfdecPlayer * player);
+GtkWidget * swfdec_gtk_widget_new_fullscreen (SwfdecPlayer * player);
void swfdec_gtk_widget_set_player (SwfdecGtkWidget * widget,
SwfdecPlayer * player);
commit 0154de03e28c9c139c57711d4268ec0e59b65f9a
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 13:16:36 2008 +0200
report correct stage width and height
diff --git a/swfdec/swfdec_stage_as.c b/swfdec/swfdec_stage_as.c
index 858628c..88f82d2 100644
--- a/swfdec/swfdec_stage_as.c
+++ b/swfdec/swfdec_stage_as.c
@@ -136,9 +136,12 @@ void
get_width (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
- SwfdecPlayer *player = SWFDEC_PLAYER (cx);
+ SwfdecPlayerPrivate *priv = SWFDEC_PLAYER (cx)->priv;
- SWFDEC_AS_VALUE_SET_INT (ret, player->priv->internal_width);
+ if (priv->scale_mode == SWFDEC_SCALE_NONE)
+ SWFDEC_AS_VALUE_SET_INT (ret, priv->internal_width);
+ else
+ SWFDEC_AS_VALUE_SET_INT (ret, priv->width);
}
SWFDEC_AS_NATIVE (666, 7, get_height)
@@ -146,9 +149,12 @@ void
get_height (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
- SwfdecPlayer *player = SWFDEC_PLAYER (cx);
+ SwfdecPlayerPrivate *priv = SWFDEC_PLAYER (cx)->priv;
- SWFDEC_AS_VALUE_SET_INT (ret, player->priv->internal_height);
+ if (priv->scale_mode == SWFDEC_SCALE_NONE)
+ SWFDEC_AS_VALUE_SET_INT (ret, priv->internal_height);
+ else
+ SWFDEC_AS_VALUE_SET_INT (ret, priv->height);
}
/* FIXME: do this smarter */
commit 83831e7a61681517dbfd6d7b0500ca06288d47e2
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 13:16:17 2008 +0200
properly emit an onResize event when going into/out of fullscreen
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index a40880b..ada8aa2 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -2603,6 +2603,33 @@ swfdec_player_add_missing_plugin (SwfdecPlayer *player, const char *detail)
priv->missing_plugins = g_slist_prepend (priv->missing_plugins, g_strdup (detail));
}
+static void
+swfdec_player_update_size (gpointer playerp, gpointer unused)
+{
+ SwfdecPlayer *player = playerp;
+ SwfdecPlayerPrivate *priv = player->priv;
+
+ if (priv->fullscreen) {
+ priv->internal_width = priv->system->screen_width;
+ priv->internal_height = priv->system->screen_height;
+ } else {
+ priv->internal_width = priv->stage_width >=0 ? (guint) priv->stage_width : priv->width;
+ priv->internal_height = priv->stage_height >=0 ? (guint) priv->stage_height : priv->height;
+ }
+
+ if (priv->scale_mode != SWFDEC_SCALE_NONE)
+ return;
+
+ /* only broadcast once */
+ if (priv->internal_width == priv->broadcasted_width &&
+ priv->internal_height == priv->broadcasted_height)
+ return;
+
+ priv->broadcasted_width = priv->internal_width;
+ priv->broadcasted_height = priv->internal_height;
+ swfdec_player_broadcast (player, SWFDEC_AS_STR_Stage, SWFDEC_AS_STR_onResize, 0, NULL);
+}
+
void
swfdec_player_set_fullscreen (SwfdecPlayer *player, gboolean fullscreen)
{
@@ -2623,15 +2650,17 @@ swfdec_player_set_fullscreen (SwfdecPlayer *player, gboolean fullscreen)
priv->fullscreen = fullscreen;
g_object_notify (G_OBJECT (player), "fullscreen");
SWFDEC_AS_VALUE_SET_BOOLEAN (&val, fullscreen);
+ swfdec_player_update_scale (player);
if (SWFDEC_AS_CONTEXT (player)->global) {
SwfdecSandbox *sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
swfdec_sandbox_unuse (sandbox);
+ swfdec_player_update_size (player, NULL);
swfdec_player_broadcast (player, SWFDEC_AS_STR_Stage, SWFDEC_AS_STR_onFullScreen, 1, &val);
swfdec_sandbox_use (sandbox);
} else {
+ swfdec_player_update_size (player, NULL);
swfdec_player_broadcast (player, SWFDEC_AS_STR_Stage, SWFDEC_AS_STR_onFullScreen, 1, &val);
}
- swfdec_player_update_scale (player);
}
/** PUBLIC API ***/
@@ -3100,29 +3129,6 @@ swfdec_player_get_size (SwfdecPlayer *player, int *width, int *height)
*height = player->priv->stage_height;
}
-static void
-swfdec_player_update_size (gpointer playerp, gpointer unused)
-{
- SwfdecPlayer *player = playerp;
- SwfdecPlayerPrivate *priv = player->priv;
-
- /* FIXME: only update if not fullscreen */
- priv->internal_width = priv->stage_width >=0 ? (guint) priv->stage_width : priv->width;
- priv->internal_height = priv->stage_height >=0 ? (guint) priv->stage_height : priv->height;
-
- if (priv->scale_mode != SWFDEC_SCALE_NONE)
- return;
-
- /* only broadcast once */
- if (priv->internal_width == priv->broadcasted_width &&
- priv->internal_height == priv->broadcasted_height)
- return;
-
- priv->broadcasted_width = priv->internal_width;
- priv->broadcasted_height = priv->internal_height;
- swfdec_player_broadcast (player, SWFDEC_AS_STR_Stage, SWFDEC_AS_STR_onResize, 0, NULL);
-}
-
/**
* swfdec_player_set_size:
* @player: a #SwfdecPlayer
commit 8f02998132edd98416499ffda1ff5d85342a6a0d
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 12:39:34 2008 +0200
unref the correct renderer
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index cc73066..a40880b 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -3457,7 +3457,7 @@ swfdec_player_set_renderer (SwfdecPlayer *player, SwfdecRenderer *renderer)
renderer = swfdec_renderer_new_default (player);
}
if (priv->renderer)
- g_object_unref (renderer);
+ g_object_unref (priv->renderer);
priv->renderer = renderer;
g_object_notify (G_OBJECT (player), "renderer");
}
commit d1e6a3b941552fe36f02a53e3e0c66eee73660fe
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 12:39:10 2008 +0200
don't return an image if we have no image
fixes warnings that sometimes appear upon youtube start
diff --git a/swfdec/swfdec_net_stream.c b/swfdec/swfdec_net_stream.c
index 60cc20b..bc19bbf 100644
--- a/swfdec/swfdec_net_stream.c
+++ b/swfdec/swfdec_net_stream.c
@@ -342,6 +342,9 @@ swfdec_net_stream_video_provider_get_image (SwfdecVideoProvider *provider,
return swfdec_cached_video_get_surface (cached);
}
+ if (stream->flvdecoder == NULL)
+ return NULL;
+
if (stream->decoder != NULL &&
(stream->decoder_time >= stream->current_time)) {
swfdec_video_decoder_free (stream->decoder);
commit 3a4b36482ba64eac946a87cc624f7b7c7e0a705c
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 11:59:43 2008 +0200
allow fullscreen on mouse clicks or key presses
diff --git a/swfdec-gtk/swfdec_gtk_widget.c b/swfdec-gtk/swfdec_gtk_widget.c
index 017e170..af6351c 100644
--- a/swfdec-gtk/swfdec_gtk_widget.c
+++ b/swfdec-gtk/swfdec_gtk_widget.c
@@ -107,7 +107,9 @@ swfdec_gtk_widget_button_press (GtkWidget *gtkwidget, GdkEventButton *event)
SwfdecGtkWidgetPrivate *priv = widget->priv;
if (event->type == GDK_BUTTON_PRESS && event->button <= 32 && priv->interactive && priv->player) {
+ swfdec_player_set_allow_fullscreen (priv->player, TRUE);
swfdec_player_mouse_press (priv->player, event->x, event->y, event->button);
+ swfdec_player_set_allow_fullscreen (priv->player, FALSE);
}
return FALSE;
}
@@ -119,7 +121,9 @@ swfdec_gtk_widget_button_release (GtkWidget *gtkwidget, GdkEventButton *event)
SwfdecGtkWidgetPrivate *priv = widget->priv;
if (event->button <= 32 && priv->interactive && priv->player) {
+ swfdec_player_set_allow_fullscreen (priv->player, TRUE);
swfdec_player_mouse_release (priv->player, event->x, event->y, event->button);
+ swfdec_player_set_allow_fullscreen (priv->player, FALSE);
}
return FALSE;
}
@@ -160,8 +164,10 @@ swfdec_gtk_widget_key_press (GtkWidget *gtkwidget, GdkEventKey *event)
if (priv->interactive && priv->player) {
guint keycode = swfdec_gtk_event_to_keycode (event);
if (keycode != 0) {
+ swfdec_player_set_allow_fullscreen (priv->player, TRUE);
swfdec_player_key_press (priv->player, keycode,
gdk_keyval_to_unicode (event->keyval));
+ swfdec_player_set_allow_fullscreen (priv->player, FALSE);
}
return TRUE;
}
@@ -178,8 +184,10 @@ swfdec_gtk_widget_key_release (GtkWidget *gtkwidget, GdkEventKey *event)
if (priv->interactive && priv->player) {
guint keycode = swfdec_gtk_event_to_keycode (event);
if (keycode != 0) {
+ swfdec_player_set_allow_fullscreen (priv->player, TRUE);
swfdec_player_key_release (priv->player, keycode,
gdk_keyval_to_unicode (event->keyval));
+ swfdec_player_set_allow_fullscreen (priv->player, FALSE);
}
return TRUE;
}
commit 982d29edcb1189d92d8ce3af395e5e8f09657180
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 11:52:04 2008 +0200
unset the sandbox during onFullScreen signal
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index 26879f6..cc73066 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -2623,7 +2623,14 @@ swfdec_player_set_fullscreen (SwfdecPlayer *player, gboolean fullscreen)
priv->fullscreen = fullscreen;
g_object_notify (G_OBJECT (player), "fullscreen");
SWFDEC_AS_VALUE_SET_BOOLEAN (&val, fullscreen);
- swfdec_player_broadcast (player, SWFDEC_AS_STR_Stage, SWFDEC_AS_STR_onFullScreen, 1, &val);
+ if (SWFDEC_AS_CONTEXT (player)->global) {
+ SwfdecSandbox *sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
+ swfdec_sandbox_unuse (sandbox);
+ swfdec_player_broadcast (player, SWFDEC_AS_STR_Stage, SWFDEC_AS_STR_onFullScreen, 1, &val);
+ swfdec_sandbox_use (sandbox);
+ } else {
+ swfdec_player_broadcast (player, SWFDEC_AS_STR_Stage, SWFDEC_AS_STR_onFullScreen, 1, &val);
+ }
swfdec_player_update_scale (player);
}
commit 99324833b1e99750893fd8e1f436a46754c6d9ac
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 11:47:10 2008 +0200
handle fullscreen in auto-scale
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index bfc0df5..26879f6 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -809,8 +809,14 @@ swfdec_player_update_scale (SwfdecPlayer *player)
int width, height;
double scale_x, scale_y;
- priv->stage.width = priv->stage_width >= 0 ? priv->stage_width : (int) priv->width;
- priv->stage.height = priv->stage_height >= 0 ? priv->stage_height : (int) priv->height;
+ if (priv->fullscreen) {
+ priv->stage.width = priv->system->screen_width;
+ priv->stage.height = priv->system->screen_height;
+ } else {
+ priv->stage.width = priv->stage_width >= 0 ? priv->stage_width : (int) priv->width;
+ priv->stage.height = priv->stage_height >= 0 ? priv->stage_height : (int) priv->height;
+ }
+
if (priv->stage.height == 0 || priv->stage.width == 0) {
priv->scale_x = 1.0;
priv->scale_y = 1.0;
@@ -2618,6 +2624,7 @@ swfdec_player_set_fullscreen (SwfdecPlayer *player, gboolean fullscreen)
g_object_notify (G_OBJECT (player), "fullscreen");
SWFDEC_AS_VALUE_SET_BOOLEAN (&val, fullscreen);
swfdec_player_broadcast (player, SWFDEC_AS_STR_Stage, SWFDEC_AS_STR_onFullScreen, 1, &val);
+ swfdec_player_update_scale (player);
}
/** PUBLIC API ***/
commit 3fffbc3c7b9f547b7a74cd38e73dc17923351006
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 11:45:04 2008 +0200
reported Stage.displayState the wrong way
diff --git a/swfdec/swfdec_stage_as.c b/swfdec/swfdec_stage_as.c
index f53b8de..858628c 100644
--- a/swfdec/swfdec_stage_as.c
+++ b/swfdec/swfdec_stage_as.c
@@ -190,9 +190,9 @@ swfdec_stage_get_displayState (SwfdecAsContext *cx, SwfdecAsObject *object,
SwfdecPlayerPrivate *priv = SWFDEC_PLAYER (cx)->priv;
if (priv->fullscreen)
- SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STR_normal);
- else
SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STR_fullScreen);
+ else
+ SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STR_normal);
}
SWFDEC_AS_NATIVE (666, 12, swfdec_stage_set_displayState)
commit cae80031b0024f727a0bef9f1f02b7b5e7b91a36
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 11:18:02 2008 +0200
implement fullscreen
diff --git a/swfdec/swfdec_as_strings.c b/swfdec/swfdec_as_strings.c
index b7bf838..6285a6b 100644
--- a/swfdec/swfdec_as_strings.c
+++ b/swfdec/swfdec_as_strings.c
@@ -503,5 +503,7 @@ const char swfdec_as_strings[] =
SWFDEC_AS_CONSTANT_STRING ("tabChildren")
SWFDEC_AS_CONSTANT_STRING ("tabIndex")
SWFDEC_AS_CONSTANT_STRING ("onChanged")
+ SWFDEC_AS_CONSTANT_STRING ("fullScreen")
+ SWFDEC_AS_CONSTANT_STRING ("onFullScreen")
/* add more here */
;
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index 58422c8..bfc0df5 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -1538,7 +1538,15 @@ swfdec_player_handle_tab (SwfdecPlayer *player, gboolean forward)
}
static void
-swfdec_player_handle_special_keys (SwfdecPlayer *player, guint key)
+swfdec_player_handle_special_keys_before (SwfdecPlayer *player, guint key)
+{
+ if (key == SWFDEC_KEY_ESCAPE) {
+ swfdec_player_set_fullscreen (player, FALSE);
+ }
+}
+
+static void
+swfdec_player_handle_special_keys_after (SwfdecPlayer *player, guint key)
{
if (key == SWFDEC_KEY_TAB) {
gboolean forward = swfdec_player_is_key_pressed (player, SWFDEC_KEY_SHIFT);
@@ -1562,6 +1570,8 @@ swfdec_player_do_handle_key (SwfdecPlayer *player, guint keycode, guint characte
} else {
priv->key_pressed[keycode / 8] &= ~(1 << keycode % 8);
}
+ if (down)
+ swfdec_player_handle_special_keys_before (player, keycode);
swfdec_player_broadcast (player, SWFDEC_AS_STR_Key,
down ? SWFDEC_AS_STR_onKeyDown : SWFDEC_AS_STR_onKeyUp, 0, NULL);
if (priv->focus) {
@@ -1575,7 +1585,7 @@ swfdec_player_do_handle_key (SwfdecPlayer *player, guint keycode, guint characte
}
}
if (down)
- swfdec_player_handle_special_keys (player, keycode);
+ swfdec_player_handle_special_keys_after (player, keycode);
swfdec_player_perform_actions (player);
swfdec_player_unlock (player);
@@ -2587,6 +2597,29 @@ swfdec_player_add_missing_plugin (SwfdecPlayer *player, const char *detail)
priv->missing_plugins = g_slist_prepend (priv->missing_plugins, g_strdup (detail));
}
+void
+swfdec_player_set_fullscreen (SwfdecPlayer *player, gboolean fullscreen)
+{
+ SwfdecPlayerPrivate *priv;
+ SwfdecAsValue val;
+
+ g_return_if_fail (SWFDEC_IS_PLAYER (player));
+
+ priv = player->priv;
+ if (priv->fullscreen == fullscreen)
+ return;
+
+ if (fullscreen && !priv->allow_fullscreen) {
+ SWFDEC_INFO ("going fullscreen not allowed");
+ return;
+ }
+
+ priv->fullscreen = fullscreen;
+ g_object_notify (G_OBJECT (player), "fullscreen");
+ SWFDEC_AS_VALUE_SET_BOOLEAN (&val, fullscreen);
+ swfdec_player_broadcast (player, SWFDEC_AS_STR_Stage, SWFDEC_AS_STR_onFullScreen, 1, &val);
+}
+
/** PUBLIC API ***/
/**
diff --git a/swfdec/swfdec_player_internal.h b/swfdec/swfdec_player_internal.h
index 87294f8..bafcaf7 100644
--- a/swfdec/swfdec_player_internal.h
+++ b/swfdec/swfdec_player_internal.h
@@ -223,6 +223,8 @@ void swfdec_player_add_action_script (SwfdecPlayer * player,
void swfdec_player_remove_all_actions (SwfdecPlayer * player,
SwfdecActor * actor);
+void swfdec_player_set_fullscreen (SwfdecPlayer * player,
+ gboolean fullscreen);
void swfdec_player_set_drag_movie (SwfdecPlayer * player,
SwfdecActor * drag,
gboolean center,
diff --git a/swfdec/swfdec_stage_as.c b/swfdec/swfdec_stage_as.c
index 87ced97..f53b8de 100644
--- a/swfdec/swfdec_stage_as.c
+++ b/swfdec/swfdec_stage_as.c
@@ -23,6 +23,7 @@
#include <string.h>
#include "swfdec_as_internal.h"
+#include "swfdec_as_native_function.h"
#include "swfdec_as_strings.h"
#include "swfdec_debug.h"
#include "swfdec_player_internal.h"
@@ -186,7 +187,12 @@ void
swfdec_stage_get_displayState (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
- SWFDEC_STUB ("Stage.displayState (get)");
+ SwfdecPlayerPrivate *priv = SWFDEC_PLAYER (cx)->priv;
+
+ if (priv->fullscreen)
+ SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STR_normal);
+ else
+ SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STR_fullScreen);
}
SWFDEC_AS_NATIVE (666, 12, swfdec_stage_set_displayState)
@@ -194,7 +200,16 @@ void
swfdec_stage_set_displayState (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
- SWFDEC_STUB ("Stage.displayState (set)");
+ SwfdecPlayer *player = SWFDEC_PLAYER (cx);
+ const char *s;
+
+ SWFDEC_AS_CHECK (0, NULL, "s", &s);
+
+ if (g_ascii_strcasecmp (s, SWFDEC_AS_STR_normal) == 0) {
+ swfdec_player_set_fullscreen (player, FALSE);
+ } else if (g_ascii_strcasecmp (s, SWFDEC_AS_STR_fullScreen) == 0) {
+ swfdec_player_set_fullscreen (player, TRUE);
+ }
}
SWFDEC_AS_NATIVE (666, 100, swfdec_stage_get_fullScreenSourceRect)
commit d7f23adad9ebfcb2abb520e510f259cda9fb98ab
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Apr 14 10:43:18 2008 +0200
add API for goint fullscreen
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index 92f4480..58422c8 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -665,7 +665,9 @@ enum {
PROP_VARIABLES,
PROP_START_TIME,
PROP_FOCUS,
- PROP_RENDERER
+ PROP_RENDERER,
+ PROP_FULLSCREEN,
+ PROP_ALLOW_FULLSCREEN
};
G_DEFINE_TYPE (SwfdecPlayer, swfdec_player, SWFDEC_TYPE_AS_CONTEXT)
@@ -788,6 +790,12 @@ swfdec_player_get_property (GObject *object, guint param_id, GValue *value,
case PROP_RENDERER:
g_value_set_object (value, priv->renderer);
break;
+ case PROP_FULLSCREEN:
+ g_value_set_boolean (value, priv->fullscreen);
+ break;
+ case PROP_ALLOW_FULLSCREEN:
+ g_value_set_boolean (value, priv->allow_fullscreen);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
@@ -932,6 +940,9 @@ swfdec_player_set_property (GObject *object, guint param_id, const GValue *value
case PROP_RENDERER:
swfdec_player_set_renderer (player, g_value_get_object (value));
break;
+ case PROP_ALLOW_FULLSCREEN:
+ swfdec_player_set_allow_fullscreen (player, g_value_get_boolean (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
@@ -2011,6 +2022,13 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
g_object_class_install_property (object_class, PROP_RENDERER,
g_param_spec_object ("renderer", "renderer", "the renderer used by this player",
SWFDEC_TYPE_RENDERER, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class, PROP_FULLSCREEN,
+ g_param_spec_boolean ("fullscreen", "fullscreen", "if the player is in fullscreen mode",
+ FALSE, G_PARAM_READABLE));
+ g_object_class_install_property (object_class, PROP_ALLOW_FULLSCREEN,
+ g_param_spec_boolean ("allow-fullscreen", "allow fullscreen",
+ "if the player is allowed to change into fullscreen mode",
+ FALSE, G_PARAM_READWRITE));
/**
* SwfdecPlayer::invalidate:
@@ -3548,3 +3566,58 @@ swfdec_player_set_variables (SwfdecPlayer *player, const char *variables)
g_object_notify (G_OBJECT (player), "variables");
}
+/**
+ * swfdec_player_get_fullscreen:
+ * @player: the player
+ *
+ * CHecks if the player is in fullscreen mode currently. If the player is
+ * in fullscreen mode, it assumes it occupies the whole screen. A player will
+ * only ever go into fullscreen, if you have allowed it by calling
+ * swfdec_player_set_allow_fullscreen().
+ *
+ * Returns: %TRUE if the player is in fullscreen mode currently
+ **/
+gboolean
+swfdec_player_get_fullscreen (SwfdecPlayer *player)
+{
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), FALSE);
+
+ return player->priv->fullscreen;
+}
+
+/**
+ * swfdec_player_get_allow_fullscreen:
+ * @player: the player
+ *
+ * Checks if the player is allowed to go fullscreen. See
+ * swfdec_player_set_allow_fullscreen() for details.
+ *
+ * Returns: %TRUE if the player is allowed to go fullscreen
+ **/
+gboolean
+swfdec_player_get_allow_fullscreen (SwfdecPlayer *player)
+{
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), FALSE);
+
+ return player->priv->allow_fullscreen;
+}
+
+/**
+ * swfdec_player_set_allow_fullscreen:
+ * @player: the player
+ * @allow: if the player should be allowed to go fullscreen
+ *
+ * Sets if the player is allowed to go fullscreen. If a player is allowed to go
+ * fullscreen, it may set the SwfdecPlayer::fullscreen property to %TRUE.
+ * Players are not allowed to go fullscreen by default. Usually applications
+ * only want to allow going fullscreen in response to mouse or keyboard events.
+ **/
+void
+swfdec_player_set_allow_fullscreen (SwfdecPlayer *player, gboolean allow)
+{
+ g_return_if_fail (SWFDEC_IS_PLAYER (player));
+
+ player->priv->allow_fullscreen = allow;
+ g_object_notify (G_OBJECT (player), "allow-fullscreen");
+}
+
diff --git a/swfdec/swfdec_player.h b/swfdec/swfdec_player.h
index c259895..c6656bf 100644
--- a/swfdec/swfdec_player.h
+++ b/swfdec/swfdec_player.h
@@ -147,6 +147,12 @@ void swfdec_player_set_focus (SwfdecPlayer * player,
SwfdecRenderer *swfdec_player_get_renderer (SwfdecPlayer * player);
void swfdec_player_set_renderer (SwfdecPlayer * player,
SwfdecRenderer * renderer);
+gboolean swfdec_player_get_fullscreen (SwfdecPlayer * player);
+gboolean swfdec_player_get_allow_fullscreen
+ (SwfdecPlayer * player);
+void swfdec_player_set_allow_fullscreen
+ (SwfdecPlayer * player,
+ gboolean allow);
void swfdec_player_render (SwfdecPlayer * player,
cairo_t * cr,
diff --git a/swfdec/swfdec_player_internal.h b/swfdec/swfdec_player_internal.h
index 94b9a98..87294f8 100644
--- a/swfdec/swfdec_player_internal.h
+++ b/swfdec/swfdec_player_internal.h
@@ -80,6 +80,7 @@ struct _SwfdecPlayerPrivate
GType loader_type; /* type to use for creating sockets */
GType socket_type; /* type to use for creating sockets */
gboolean has_focus; /* TRUE if this movie is given focus */
+ gboolean allow_fullscreen; /* TRUE if this movie may go fullscreen */
/* stage properties */
guint internal_width; /* width used by the scripting engine */
guint internal_height; /* height used by the scripting engine */
@@ -107,6 +108,7 @@ struct _SwfdecPlayerPrivate
SwfdecRectangle invalid_extents; /* extents of area that needs a redraw in global coordinates */
GArray * invalidations; /* fine-grained areas in need of redraw */
GSList * invalid_pending; /* pending invalidations due to invalidate_last */
+ gboolean fullscreen; /* TRUE if the player has gone fullscreen */
/* mouse */
gboolean mouse_visible; /* show the mouse (actionscriptable) */
More information about the Swfdec-commits
mailing list