Beispiel #1
0
/*
 * 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 ();
    }
}
Beispiel #2
0
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 ();
}
Beispiel #3
0
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;
}
Beispiel #4
0
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);
}
Beispiel #5
0
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;
}
Beispiel #6
0
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;
}
Beispiel #7
0
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;
}