/* * take_button_clicked_cb: * @button: the #GtkButton that was clicked * @widget: the #CheeseAvatarWidget * * Take a photo with the #CheeseCamera of @widget. When the photo has been * taken, call cheese_widget_photo_taken_cb(). */ static void take_button_clicked_cb (GtkButton *button, CheeseAvatarWidget *widget) { CheeseAvatarWidgetPrivate *priv; GObject *camera; priv = cheese_avatar_widget_get_instance_private (widget); camera = cheese_widget_get_camera (CHEESE_WIDGET (priv->camera)); if (priv->photo_taken_id == 0) { gtk_widget_set_sensitive (priv->take_button, FALSE); priv->photo_taken_id = g_signal_connect (G_OBJECT (camera), "photo-taken", G_CALLBACK (cheese_widget_photo_taken_cb), widget); } if (cheese_camera_take_photo_pixbuf (CHEESE_CAMERA (camera))) { cheese_flash_fire (CHEESE_FLASH (priv->flash)); ca_gtk_play_for_widget (GTK_WIDGET (widget), 0, CA_PROP_EVENT_ID, "camera-shutter", CA_PROP_MEDIA_ROLE, "event", CA_PROP_EVENT_DESCRIPTION, _("Shutter sound"), NULL); } else { g_assert_not_reached (); } }
void setup_camera (CheeseWidget *widget) { CheeseWidgetPrivate *priv = CHEESE_WIDGET_GET_PRIVATE (widget); char *webcam_device = NULL; int x_resolution; int y_resolution; gdouble brightness; gdouble contrast; gdouble saturation; gdouble hue; g_settings_get (priv->settings, "photo-x-resolution", "i", &x_resolution); g_settings_get (priv->settings, "photo-y-resolution", "i", &y_resolution); g_settings_get (priv->settings, "camera", "s", &webcam_device); g_settings_get (priv->settings, "brightness", "d", &brightness); g_settings_get (priv->settings, "contrast", "d", &contrast); g_settings_get (priv->settings, "saturation", "d", &saturation); g_settings_get (priv->settings, "hue", "d", &hue); gdk_threads_enter (); priv->webcam = cheese_camera_new (CLUTTER_TEXTURE (priv->texture), webcam_device, x_resolution, y_resolution); gdk_threads_leave (); g_free (webcam_device); cheese_camera_setup (priv->webcam, NULL, &priv->error); gdk_threads_enter (); gtk_spinner_stop (GTK_SPINNER (priv->spinner)); if (priv->error != NULL) { priv->state = CHEESE_WIDGET_STATE_ERROR; g_object_notify (G_OBJECT (widget), "state"); cheese_widget_set_problem_page (CHEESE_WIDGET (widget), "error"); } else { cheese_camera_set_balance_property (priv->webcam, "brightness", brightness); cheese_camera_set_balance_property (priv->webcam, "contrast", contrast); cheese_camera_set_balance_property (priv->webcam, "saturation", saturation); cheese_camera_set_balance_property (priv->webcam, "hue", hue); priv->state = CHEESE_WIDGET_STATE_READY; g_object_notify (G_OBJECT (widget), "state"); cheese_camera_play (priv->webcam); gtk_notebook_set_current_page (GTK_NOTEBOOK (widget), WEBCAM_PAGE); } gdk_threads_leave (); }
GtkWidget * cheese_widget_get_video_area (CheeseWidget *widget) { CheeseWidgetPrivate *priv; g_return_val_if_fail (CHEESE_WIDGET (widget), NULL); priv = CHEESE_WIDGET_GET_PRIVATE (widget); return priv->screen; }
GObject * cheese_widget_get_camera (CheeseWidget *widget) { CheeseWidgetPrivate *priv; g_return_val_if_fail (CHEESE_WIDGET (widget), NULL); priv = CHEESE_WIDGET_GET_PRIVATE (widget); return G_OBJECT (priv->webcam); }
GSettings * cheese_widget_get_settings (CheeseWidget *widget) { CheeseWidgetPrivate *priv; g_return_val_if_fail (CHEESE_WIDGET (widget), NULL); priv = CHEESE_WIDGET_GET_PRIVATE (widget); return priv->settings; }
void cheese_widget_get_error (CheeseWidget *widget, GError **error) { CheeseWidgetPrivate *priv; g_return_if_fail (CHEESE_WIDGET (widget)); priv = CHEESE_WIDGET_GET_PRIVATE (widget); g_propagate_error (error, priv->error); priv->error = NULL; }
static void cheese_widget_realize (GtkWidget *widget) { CheeseWidgetPrivate *priv = CHEESE_WIDGET_GET_PRIVATE (widget); GTK_WIDGET_CLASS (cheese_widget_parent_class)->realize (widget); gtk_spinner_start (GTK_SPINNER (priv->spinner)); gtk_widget_realize (priv->screen); setup_camera (CHEESE_WIDGET (widget)); gtk_widget_set_app_paintable (priv->problem, TRUE); gtk_widget_realize (priv->problem); return; }