[cheese/0-to-1-devices] Do not import error_layer actor in Cheese.Camera.
- From: Patricia Santana Cruz <patriciasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cheese/0-to-1-devices] Do not import error_layer actor in Cheese.Camera.
- Date: Fri, 2 Mar 2012 16:39:47 +0000 (UTC)
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]