summaryrefslogtreecommitdiff
path: root/src/cheese-stage.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cheese-stage.c')
-rw-r--r--src/cheese-stage.c43
1 files changed, 19 insertions, 24 deletions
diff --git a/src/cheese-stage.c b/src/cheese-stage.c
index 376acff..489df63 100644
--- a/src/cheese-stage.c
+++ b/src/cheese-stage.c
@@ -35,7 +35,7 @@
static GstBusSyncReply
create_window (GstBus * bus, GstMessage * message, gpointer data)
{
- CheeseActor **actor = (CheeseActor **) data;
+ CheeseGrid *layout = CHEESE_GRID (data);
static gint count = 0;
static GMutex *mutex = NULL;
Window win;
@@ -51,13 +51,10 @@ create_window (GstBus * bus, GstMessage * message, gpointer data)
g_mutex_lock (mutex);
- if (count < N_ACTORS) {
- g_object_get (G_OBJECT (actor[count]), "window", &win, NULL);
- g_message ("adding actor: %d win: %ld", count, win);
- gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (GST_MESSAGE_SRC (message)),
- win);
- count++;
- }
+ ClutterActor *actor = cheese_grid_get_actor_for_sink (layout, GST_MESSAGE_SRC (message));
+ g_object_get (G_OBJECT (actor), "window", &win, NULL);
+ gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (GST_MESSAGE_SRC (message)),
+ win);
g_mutex_unlock (mutex);
@@ -181,6 +178,8 @@ main (int argc, char *argv[])
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_main_quit), NULL);
+ gtk_window_set_default_size (GTK_WINDOW (window), DEFAULT_W*3, DEFAULT_H*3);
+
clutter = gtk_clutter_embed_new ();
gtk_container_add (GTK_CONTAINER (window), clutter);
@@ -197,21 +196,6 @@ main (int argc, char *argv[])
G_CALLBACK (on_window_configure), layout);
- for (i = 0; i < N_ACTORS; i++) {
- actor[i] = cheese_texture_new ();
- clutter_actor_set_scale_with_gravity (actor[i], 1.0, 1.0,
- CLUTTER_GRAVITY_CENTER);
- clutter_container_add_actor (CLUTTER_CONTAINER (layout), actor[i]);
- clutter_actor_set_reactive (actor[i], TRUE);
- g_signal_connect (actor[i], "button-press-event", G_CALLBACK (on_button_animate), NULL);
-// g_signal_connect (actor[i], "enter-event", G_CALLBACK (on_enter_animate), NULL);
-// g_signal_connect (actor[i], "leave-event", G_CALLBACK (on_leave_animate), NULL);
- if (xpos > (COLS - 1) * W) {
- xpos = 0;
- ypos += H + 1;
- } else
- xpos += W + 1;
- }
/* desc = g_strdup_printf ("v4l2src ! "
"video/x-raw-rgb, width=320, height=240, framerate=30/1 ! "
"videoscale ! "
@@ -251,6 +235,17 @@ main (int argc, char *argv[])
gst_bin_add_many (GST_BIN (pipeline), queue[i], fx[i], sink[i], NULL);
}
+ for (i = 0; i < N_ACTORS; i++) {
+ actor[i] = g_object_new (CHEESE_TYPE_ACTOR, "sink", sink[i], NULL);
+ clutter_actor_set_scale_with_gravity (actor[i], 1.0, 1.0,
+ CLUTTER_GRAVITY_CENTER);
+ clutter_container_add_actor (CLUTTER_CONTAINER (layout), actor[i]);
+ clutter_actor_set_reactive (actor[i], TRUE);
+ g_signal_connect (actor[i], "button-press-event", G_CALLBACK (on_button_animate), NULL);
+ }
+// g_signal_connect (actor[i], "enter-event", G_CALLBACK (on_enter_animate), NULL);
+// g_signal_connect (actor[i], "leave-event", G_CALLBACK (on_leave_animate), NULL);
+
gst_element_link_many (srcbin, tee, NULL);
for (i = 0; i < N_ACTORS; i++) {
@@ -262,7 +257,7 @@ main (int argc, char *argv[])
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
- gst_bus_set_sync_handler (bus, (GstBusSyncHandler) create_window, actor);
+ gst_bus_set_sync_handler (bus, (GstBusSyncHandler) create_window, layout);
gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);