[cheese/0-to-1-devices] Do not import error_layer actor in Cheese.Camera.



commit 8e511b184f1efb29fc53a370a88854d806d88b8c
Author: Patricia Santana Cruz <patriciasantanacruz gmail com>
Date:   Fri Mar 2 16:33:59 2012 +0000

    Do not import error_layer actor in Cheese.Camera.
    
    The error_layer does not show when importing it from the .json file in
    Cheese.Camera. This is probably happening due to some threading issue and
    therefore, we are currently passing the actor by argument in the
    Cheese.Camera constructor, from Cheese.MainWindow.

 libcheese/cheese-camera.c   |   59 ++++++++++++++++---------------------------
 libcheese/cheese-camera.h   |    1 +
 libcheese/cheese-widget.c   |    1 +
 src/cheese-window.vala      |    3 ++
 src/vapi/cheese-common.vapi |    2 +-
 tests/cheese-test-camera.c  |    2 +-
 6 files changed, 29 insertions(+), 39 deletions(-)
---
diff --git a/libcheese/cheese-camera.c b/libcheese/cheese-camera.c
index 31c40d9..0f1beb6 100644
--- a/libcheese/cheese-camera.c
+++ b/libcheese/cheese-camera.c
@@ -290,7 +290,6 @@ static void
 cheese_camera_setup_init (CheeseCameraDevice        *device,
                           CheeseCamera              *camera)
 {
-  g_printf ("Camera - cheese_camera_setup_init\n");
   CheeseCameraPrivate *priv  = camera->priv;
   const gchar *uuid = cheese_camera_device_get_uuid (device);
   GError *error = NULL;
@@ -323,7 +322,6 @@ cheese_camera_add_device (CheeseCameraDeviceMonitor *monitor,
 			  CheeseCameraDevice        *device,
                           CheeseCamera              *camera)
 {
-  g_printf ("Cheese - cheese_camera_add_device\n");
   CheeseCameraPrivate *priv  = camera->priv;
 
   g_ptr_array_add (priv->camera_devices, device);
@@ -379,7 +377,6 @@ cheese_camera_remove_device (CheeseCameraDeviceMonitor *monitor,
 static void
 cheese_camera_detect_camera_devices (CheeseCamera *camera)
 {
-  g_printf ("Camera - cheese_camera_detect_camera_devices\n");
   CheeseCameraPrivate       *priv = camera->priv;
 
   priv->num_camera_devices = 0;
@@ -391,9 +388,6 @@ cheese_camera_detect_camera_devices (CheeseCamera *camera)
   g_signal_connect (G_OBJECT (priv->monitor), "removed",
                     G_CALLBACK (cheese_camera_remove_device), camera);
 
-  if (priv->error_layer == NULL)
-    cheese_camera_error_layer_init (camera);
-
   cheese_camera_device_monitor_coldplug (priv->monitor);
 
   if (priv->num_camera_devices < 1)
@@ -756,7 +750,6 @@ cheese_camera_switch_camera_device (CheeseCamera *camera)
 void
 cheese_camera_play (CheeseCamera *camera)
 {
-  g_printf ("Camera - cheese_camera_play\n");
   CheeseCameraPrivate *priv;
   CheeseCameraDevice *device;
   GstCaps *caps;
@@ -1420,7 +1413,6 @@ cheese_camera_class_init (CheeseCameraClass *klass)
 static void
 cheese_camera_init (CheeseCamera *camera)
 {
-  g_printf ("Camera - cheese_camera_init\n");
   CheeseCameraPrivate *priv = camera->priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   priv->is_recording            = FALSE;
@@ -1432,33 +1424,8 @@ cheese_camera_init (CheeseCamera *camera)
   priv->photo_handler_signal_id = 0;
   priv->current_format          = NULL;
   priv->monitor                 = NULL;
-  priv->error_layer             = NULL;
 }
 
-void
-cheese_camera_error_layer_init (CheeseCamera *camera)
-{
-  g_printf ("Camera - cheese_camera_error_layer_init\n");
-
-  CheeseCameraPrivate *priv = camera->priv;
-  ClutterScript *clutter_builder = clutter_script_new();
-  GError *error;
-  const gchar *file;
-  int result;
-
-  file = g_build_filename (PACKAGE_DATADIR, "cheese-viewport.json", NULL);
-  result = clutter_script_load_from_file (clutter_builder, file, &error);
-
-  if (result == 0) {
-    g_error ("Error: %s\n", error->message);
-    g_error_free (error);
-  }
-
-  priv->error_layer = CLUTTER_TEXT (clutter_script_get_object (clutter_builder, "error_layer"));
-
-  //g_object_unref (clutter_builder);
- }
-
 /**
  * cheese_camera_new:
  * @video_texture: a #ClutterTexture
@@ -1472,10 +1439,10 @@ cheese_camera_error_layer_init (CheeseCamera *camera)
  */
 CheeseCamera *
 cheese_camera_new (ClutterTexture *video_texture,
+                   ClutterText *error_texture,
                    const gchar *camera_device_node,
                    gint x_resolution, gint y_resolution)
 {
-  g_printf ("Camera - cheese_camera_new\n");
   CheeseCamera      *camera;
   CheeseVideoFormat *format = g_slice_new (CheeseVideoFormat);
 
@@ -1494,6 +1461,13 @@ cheese_camera_new (ClutterTexture *video_texture,
                            "format", format, NULL);
   }
 
+  // Ideally, priv->error_layer should not be passed by argument in
+  // the constructor, but imported from the .json file. We have tried
+  // this, but the error_layer does not show then, most probably due
+  // to some threading issue.
+  CheeseCameraPrivate *priv = camera->priv;
+  priv->error_layer = error_texture;
+
   cheese_camera_detect_camera_devices (camera);
 
   return camera;
@@ -1541,11 +1515,17 @@ cheese_camera_set_device_by_dev_uuid (CheeseCamera *camera, const gchar *uuid)
   }
 }
 
+/*
+ * cheese_camera_show_error_layer:
+ * @camera: a #CheeseCamera
+ * @message: a text message
+ *
+ * Shows the error layer with message, and hides the currently
+ * displayed video.
+ */
 void
 cheese_camera_show_error_layer (CheeseCamera *camera, char *message)
 {
-  g_printf ("Camera - cheese_camera_show_error_layer\n");
-  g_printf ("Message is %s\n", message);
   CheeseCameraPrivate *priv = camera->priv;
 
   clutter_actor_hide ((ClutterActor *) priv->video_texture);
@@ -1553,10 +1533,15 @@ cheese_camera_show_error_layer (CheeseCamera *camera, char *message)
   clutter_actor_show ((ClutterActor *) priv->error_layer);
 }
 
+/*
+ * cheese_camera_hide_error_layer:
+ * @camera: a #CheeseCamera
+ *
+ * Hides the error layer and shows the video.
+ */
 void
 cheese_camera_hide_error_layer (CheeseCamera *camera)
 {
-  g_printf ("Camera - cheese_camera_hide_error_layer\n");
   CheeseCameraPrivate *priv = camera->priv;
   clutter_actor_hide ((ClutterActor *) priv->error_layer);
   clutter_actor_show ((ClutterActor *) priv->video_texture);
diff --git a/libcheese/cheese-camera.h b/libcheese/cheese-camera.h
index c546f0d..106b851 100644
--- a/libcheese/cheese-camera.h
+++ b/libcheese/cheese-camera.h
@@ -97,6 +97,7 @@ typedef enum
 
 GType         cheese_camera_get_type (void) G_GNUC_CONST;
 CheeseCamera *cheese_camera_new (ClutterTexture *video_texture,
+                                 ClutterText    *error_layer,
                                  const gchar    *camera_device_node,
                                  gint            x_resolution,
                                  gint            y_resolution);
diff --git a/libcheese/cheese-widget.c b/libcheese/cheese-widget.c
index 5f2166b..b331b08 100644
--- a/libcheese/cheese-widget.c
+++ b/libcheese/cheese-widget.c
@@ -296,6 +296,7 @@ setup_camera (CheeseWidget *widget)
 
   gdk_threads_enter ();
   priv->webcam = cheese_camera_new (CLUTTER_TEXTURE (priv->texture),
+                                    NULL,
                                     webcam_device,
                                     x_resolution,
                                     y_resolution);
diff --git a/src/cheese-window.vala b/src/cheese-window.vala
index 68be390..0bc95fc 100644
--- a/src/cheese-window.vala
+++ b/src/cheese-window.vala
@@ -73,6 +73,7 @@ public class Cheese.MainWindow : Gtk.Window
   private Clutter.BinLayout viewport_layout_manager;
   private Clutter.Text      countdown_layer;
   private Clutter.Rectangle background_layer;
+  private Clutter.Text      error_layer;
 
   private Clutter.Box           current_effects_grid;
   private int                current_effects_page = 0;
@@ -1503,6 +1504,7 @@ public class Cheese.MainWindow : Gtk.Window
     viewport_layout_manager = clutter_builder.get_object ("viewport_layout_manager") as Clutter.BinLayout;
     countdown_layer         = clutter_builder.get_object ("countdown_layer") as Clutter.Text;
     background_layer        = clutter_builder.get_object ("background") as Clutter.Rectangle;
+    error_layer             = clutter_builder.get_object ("error_layer") as Clutter.Text;
 
     video_preview.keep_aspect_ratio = true;
     video_preview.request_mode      = Clutter.RequestMode.HEIGHT_FOR_WIDTH;
@@ -1592,6 +1594,7 @@ public class Cheese.MainWindow : Gtk.Window
       device = settings.get_string ("camera");
 
     camera = new Camera (video_preview,
+                         error_layer,
                          device,
                          settings.get_int ("photo-x-resolution"),
                          settings.get_int ("photo-y-resolution"));
diff --git a/src/vapi/cheese-common.vapi b/src/vapi/cheese-common.vapi
index b845d90..c3580dc 100644
--- a/src/vapi/cheese-common.vapi
+++ b/src/vapi/cheese-common.vapi
@@ -33,7 +33,7 @@ namespace Cheese
   public class Camera : GLib.Object
   {
     [CCode (has_construct_function = false)]
-    public Camera (Clutter.Texture video_texture, string camera_device_node, int x_resolution, int y_resolution);
+    public Camera (Clutter.Texture video_texture, Clutter.Text error_layer, string camera_device_node, int x_resolution, int y_resolution);
     public bool                        get_balance_property_range (string property, double min, double max, double def);
     public unowned GLib.PtrArray       get_camera_devices ();
     public unowned Cheese.VideoFormat  get_current_video_format ();
diff --git a/tests/cheese-test-camera.c b/tests/cheese-test-camera.c
index aa9f713..26635a3 100644
--- a/tests/cheese-test-camera.c
+++ b/tests/cheese-test-camera.c
@@ -64,7 +64,7 @@ main (int argc, char **argv)
   clutter_actor_show (texture);
 
   gdk_threads_enter ();
-  camera = cheese_camera_new (CLUTTER_TEXTURE (texture), NULL, 640, 480);
+  camera = cheese_camera_new (CLUTTER_TEXTURE (texture), NULL, NULL, 640, 480);
   gdk_threads_leave ();
 
   cheese_camera_setup (camera, NULL, NULL);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]