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
No related branches found
No related tags found
No related merge requests found
...@@ -53,6 +53,7 @@ AC_SUBST(LIBSEXY_LIBS) ...@@ -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(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([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(CLUTTER, clutter-1.0)
PKG_CHECK_MODULES(CLUTTERGTK, clutter-gtk-0.10)
PKG_CHECK_MODULES(SFLGTK, gtk+-2.0 > 2.2) PKG_CHECK_MODULES(SFLGTK, gtk+-2.0 > 2.2)
PKG_CHECK_MODULES(SFLGLIB, glib-2.0 >= 2.2) PKG_CHECK_MODULES(SFLGLIB, glib-2.0 >= 2.2)
PKG_CHECK_MODULES(WEBKIT, webkit-1.0) PKG_CHECK_MODULES(WEBKIT, webkit-1.0)
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <assert.h> #include <assert.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
#include <clutter-gtk/clutter-gtk.h>
static GtkWidget *v4l2Device; static GtkWidget *v4l2Device;
static GtkWidget *v4l2Channel; static GtkWidget *v4l2Channel;
...@@ -114,6 +115,7 @@ static VideoPreview *preview = NULL; ...@@ -114,6 +115,7 @@ static VideoPreview *preview = NULL;
static GtkWidget *preview_button = NULL; static GtkWidget *preview_button = NULL;
static GtkWidget *drawarea = NULL; static GtkWidget *drawarea = NULL;
static int using_clutter;
static int drawWidth = 20 * 16; static int drawWidth = 20 * 16;
static int drawHeight = 20 * 9; static int drawHeight = 20 * 9;
static const char *drawFormat; static const char *drawFormat;
...@@ -153,11 +155,7 @@ preview_button_clicked(GtkButton *button, gpointer data UNUSED) ...@@ -153,11 +155,7 @@ preview_button_clicked(GtkButton *button, gpointer data UNUSED)
static const char *formats[2] = { "rgb24", "bgra" }; static const char *formats[2] = { "rgb24", "bgra" };
if (clutter_init(NULL, NULL) == CLUTTER_INIT_SUCCESS) { drawFormat = using_clutter ? formats[0] : formats[1];
drawFormat = formats[0];
} else {
drawFormat = formats[1];
}
dbus_start_video_preview(drawWidth, drawHeight, drawFormat); dbus_start_video_preview(drawWidth, drawHeight, drawFormat);
} }
else { else {
...@@ -190,7 +188,8 @@ GtkWidget* create_video_configuration() ...@@ -190,7 +188,8 @@ GtkWidget* create_video_configuration()
g_signal_connect(G_OBJECT(preview_button), "clicked", G_CALLBACK(preview_button_clicked), NULL); g_signal_connect(G_OBJECT(preview_button), "clicked", G_CALLBACK(preview_button_clicked), NULL);
gtk_widget_show(GTK_WIDGET(preview_button)); 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_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_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)); gtk_widget_show(GTK_WIDGET(drawarea));
......
...@@ -4,10 +4,10 @@ noinst_LTLIBRARIES = libvideo.la ...@@ -4,10 +4,10 @@ noinst_LTLIBRARIES = libvideo.la
libvideo_la_SOURCES = video_preview.c libvideo_la_SOURCES = video_preview.c
libvideo_la_LDFLAGS = @CLUTTER_LDFLAGS@ libvideo_la_LDFLAGS = @CLUTTER_LDFLAGS@ @CLUTTERGTK_LDFLAGS@
libvideo_la_LIBADD = @CLUTTER_LIBS@ \ libvideo_la_LIBADD = @CLUTTER_LIBS@ \
@SFLGTK_LIBS@ @SFLGLIB_LIBS@ @SFLGTK_LIBS@ @SFLGLIB_LIBS@ @CLUTTERGTK_LIBS@
libvideo_la_CFLAGS = @CLUTTER_CFLAGS@ \ libvideo_la_CFLAGS = @CLUTTER_CFLAGS@ \
@SFLGTK_CFLAGS@ @SFLGLIB_CFLAGS@ @SFLGTK_CFLAGS@ @SFLGLIB_CFLAGS@ @CLUTTERGTK_CFLAGS@
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include <string.h> #include <string.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
#include <clutter-gtk/clutter-gtk.h>
#include <cairo.h> #include <cairo.h>
#define VIDEO_PREVIEW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \ #define VIDEO_PREVIEW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
...@@ -374,6 +375,7 @@ readFrameFromShm(VideoPreviewPrivate *priv) ...@@ -374,6 +375,7 @@ readFrameFromShm(VideoPreviewPrivate *priv)
if (priv->using_clutter) { if (priv->using_clutter) {
if (strcmp(priv->format, "rgb24")) { if (strcmp(priv->format, "rgb24")) {
g_print("clutter render: Unknown pixel format `%s'\n", priv->format); g_print("clutter render: Unknown pixel format `%s'\n", priv->format);
return;
} }
clutter_texture_set_from_rgb_data (CLUTTER_TEXTURE(texture), clutter_texture_set_from_rgb_data (CLUTTER_TEXTURE(texture),
...@@ -386,14 +388,12 @@ readFrameFromShm(VideoPreviewPrivate *priv) ...@@ -386,14 +388,12 @@ readFrameFromShm(VideoPreviewPrivate *priv)
0, 0,
NULL); NULL);
} else { } else {
cairo_format_t format; if (strcmp(priv->format, "bgra")) {
if (!strcmp(priv->format, "bgra"))
format = CAIRO_FORMAT_RGB24;
else {
g_print("cairo render: Unknown pixel format `%s'\n", priv->format); g_print("cairo render: Unknown pixel format `%s'\n", priv->format);
return; return;
} }
cairo_format_t format = CAIRO_FORMAT_RGB24;
int stride = cairo_format_stride_for_width (format, width); int stride = cairo_format_stride_for_width (format, width);
assert(stride == align(4*width)); assert(stride == align(4*width));
...@@ -487,29 +487,25 @@ video_preview_run(VideoPreview *preview) ...@@ -487,29 +487,25 @@ video_preview_run(VideoPreview *preview)
priv->using_clutter = !strcmp(priv->format, "rgb24"); priv->using_clutter = !strcmp(priv->format, "rgb24");
g_print("Preview: using %s render\n", priv->using_clutter ? "clutter" : "cairo"); 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) { if (priv->using_clutter) {
ClutterActor *stage; ClutterActor *stage;
/* Get a stage */ stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED(priv->drawarea));
stage = clutter_stage_new (); assert(stage);
g_signal_connect (stage, "delete-event", G_CALLBACK(on_stage_delete), g_signal_connect (stage, "delete-event", G_CALLBACK(on_stage_delete),
preview); preview);
clutter_actor_set_size(stage, //clutter_actor_set_size(stage, priv->width, priv->height);
priv->width,
priv->height);
priv->texture = clutter_texture_new(); priv->texture = clutter_texture_new();
clutter_stage_set_title(CLUTTER_STAGE (stage), "Video Test");
/* Add ClutterTexture to the stage */ /* Add ClutterTexture to the stage */
clutter_container_add(CLUTTER_CONTAINER (stage), priv->texture, NULL); clutter_container_add(CLUTTER_CONTAINER (stage), priv->texture, NULL);
clutter_actor_show_all(stage); clutter_actor_show_all(stage);
} else { } else {
GtkWidget *drawarea = priv->drawarea; priv->cairo = gdk_cairo_create(gtk_widget_get_window(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);
} }
/* frames are read and saved here */ /* 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