Skip to content
Snippets Groups Projects
Commit 1b8e1714 authored by Rafaël Carré's avatar Rafaël Carré
Browse files

* #6321: integrate clutter widget into preferences dialog

parent 24bd1575
Branches
Tags
No related merge requests found
......@@ -53,6 +53,7 @@ AC_SUBST(LIBSEXY_LIBS)
PKG_CHECK_MODULES(DBUSGLIB, dbus-glib-1 >= 0.75, HAVE_DBUS_G_PROXY_SET_DEFAULT_TIMEOUT=true, HAVE_DBUS_G_PROXY_SET_DEFAULT_TIMEOUT=false);
PKG_CHECK_MODULES([LIBNOTIFY], [libnotify >= 0.7.2], [AC_DEFINE([LIBNOTIFY_VERSION_0_7_2],[],[Using libnotify-0.7.2 or higher])],[PKG_CHECK_MODULES([LIBNOTIFY], [libnotify >= 0.4])])
PKG_CHECK_MODULES(CLUTTER, clutter-1.0)
PKG_CHECK_MODULES(CLUTTERGTK, clutter-gtk-0.10)
PKG_CHECK_MODULES(SFLGTK, gtk+-2.0 > 2.2)
PKG_CHECK_MODULES(SFLGLIB, glib-2.0 >= 2.2)
PKG_CHECK_MODULES(WEBKIT, webkit-1.0)
......
......@@ -38,6 +38,7 @@
#include <assert.h>
#include <clutter/clutter.h>
#include <clutter-gtk/clutter-gtk.h>
static GtkWidget *v4l2Device;
static GtkWidget *v4l2Channel;
......@@ -114,6 +115,7 @@ static VideoPreview *preview = NULL;
static GtkWidget *preview_button = NULL;
static GtkWidget *drawarea = NULL;
static int using_clutter;
static int drawWidth = 20 * 16;
static int drawHeight = 20 * 9;
static const char *drawFormat;
......@@ -153,11 +155,7 @@ preview_button_clicked(GtkButton *button, gpointer data UNUSED)
static const char *formats[2] = { "rgb24", "bgra" };
if (clutter_init(NULL, NULL) == CLUTTER_INIT_SUCCESS) {
drawFormat = formats[0];
} else {
drawFormat = formats[1];
}
drawFormat = using_clutter ? formats[0] : formats[1];
dbus_start_video_preview(drawWidth, drawHeight, drawFormat);
}
else {
......@@ -190,7 +188,8 @@ GtkWidget* create_video_configuration()
g_signal_connect(G_OBJECT(preview_button), "clicked", G_CALLBACK(preview_button_clicked), NULL);
gtk_widget_show(GTK_WIDGET(preview_button));
drawarea = gtk_drawing_area_new();
using_clutter = clutter_init(NULL, NULL) == CLUTTER_INIT_SUCCESS;
drawarea = using_clutter ? gtk_clutter_embed_new() : gtk_drawing_area_new();
gtk_widget_set_size_request (drawarea, drawWidth, drawHeight);
gtk_table_attach(GTK_TABLE(table), drawarea, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 6);
gtk_widget_show(GTK_WIDGET(drawarea));
......
......@@ -4,10 +4,10 @@ noinst_LTLIBRARIES = libvideo.la
libvideo_la_SOURCES = video_preview.c
libvideo_la_LDFLAGS = @CLUTTER_LDFLAGS@
libvideo_la_LDFLAGS = @CLUTTER_LDFLAGS@ @CLUTTERGTK_LDFLAGS@
libvideo_la_LIBADD = @CLUTTER_LIBS@ \
@SFLGTK_LIBS@ @SFLGLIB_LIBS@
@SFLGTK_LIBS@ @SFLGLIB_LIBS@ @CLUTTERGTK_LIBS@
libvideo_la_CFLAGS = @CLUTTER_CFLAGS@ \
@SFLGTK_CFLAGS@ @SFLGLIB_CFLAGS@
@SFLGTK_CFLAGS@ @SFLGLIB_CFLAGS@ @CLUTTERGTK_CFLAGS@
......@@ -42,6 +42,7 @@
#include <string.h>
#include <clutter/clutter.h>
#include <clutter-gtk/clutter-gtk.h>
#include <cairo.h>
#define VIDEO_PREVIEW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
......@@ -374,6 +375,7 @@ readFrameFromShm(VideoPreviewPrivate *priv)
if (priv->using_clutter) {
if (strcmp(priv->format, "rgb24")) {
g_print("clutter render: Unknown pixel format `%s'\n", priv->format);
return;
}
clutter_texture_set_from_rgb_data (CLUTTER_TEXTURE(texture),
......@@ -386,14 +388,12 @@ readFrameFromShm(VideoPreviewPrivate *priv)
0,
NULL);
} else {
cairo_format_t format;
if (!strcmp(priv->format, "bgra"))
format = CAIRO_FORMAT_RGB24;
else {
if (strcmp(priv->format, "bgra")) {
g_print("cairo render: Unknown pixel format `%s'\n", priv->format);
return;
}
cairo_format_t format = CAIRO_FORMAT_RGB24;
int stride = cairo_format_stride_for_width (format, width);
assert(stride == align(4*width));
......@@ -487,29 +487,25 @@ video_preview_run(VideoPreview *preview)
priv->using_clutter = !strcmp(priv->format, "rgb24");
g_print("Preview: using %s render\n", priv->using_clutter ? "clutter" : "cairo");
g_signal_connect(priv->drawarea, "unrealize", G_CALLBACK(on_drawarea_unrealize), preview);
if (priv->using_clutter) {
ClutterActor *stage;
/* Get a stage */
stage = clutter_stage_new ();
stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED(priv->drawarea));
assert(stage);
g_signal_connect (stage, "delete-event", G_CALLBACK(on_stage_delete),
preview);
clutter_actor_set_size(stage,
priv->width,
priv->height);
//clutter_actor_set_size(stage, priv->width, priv->height);
priv->texture = clutter_texture_new();
clutter_stage_set_title(CLUTTER_STAGE (stage), "Video Test");
/* Add ClutterTexture to the stage */
clutter_container_add(CLUTTER_CONTAINER (stage), priv->texture, NULL);
clutter_actor_show_all(stage);
} else {
GtkWidget *drawarea = priv->drawarea;
g_signal_connect(drawarea, "unrealize", G_CALLBACK(on_drawarea_unrealize), preview);
GdkWindow *w = gtk_widget_get_window(drawarea);
priv->cairo = gdk_cairo_create(w);
priv->cairo = gdk_cairo_create(gtk_widget_get_window(priv->drawarea));
}
/* frames are read and saved here */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment