shell-recorder: Make drawing the cursor optional

As with screenshots, showing the cursor in a recording may not be
desirable, so add a property to control whether the cursor is drawn
or not.

https://bugzilla.gnome.org/show_bug.cgi?id=696247
This commit is contained in:
Florian Müllner 2013-05-08 19:52:16 +02:00
parent c61573a8b7
commit dc3082e66d
2 changed files with 45 additions and 2 deletions

View File

@ -68,6 +68,7 @@ struct _ShellRecorder {
CoglHandle recording_icon; /* icon shown while playing */ CoglHandle recording_icon; /* icon shown while playing */
gboolean draw_cursor;
cairo_surface_t *cursor_image; cairo_surface_t *cursor_image;
int cursor_hot_x; int cursor_hot_x;
int cursor_hot_y; int cursor_hot_y;
@ -112,6 +113,8 @@ static void recorder_set_pipeline (ShellRecorder *recorder,
const char *pipeline); const char *pipeline);
static void recorder_set_file_template (ShellRecorder *recorder, static void recorder_set_file_template (ShellRecorder *recorder,
const char *file_template); const char *file_template);
static void recorder_set_draw_cursor (ShellRecorder *recorder,
gboolean draw_cursor);
static void recorder_pipeline_set_caps (RecorderPipeline *pipeline); static void recorder_pipeline_set_caps (RecorderPipeline *pipeline);
static void recorder_pipeline_closed (RecorderPipeline *pipeline); static void recorder_pipeline_closed (RecorderPipeline *pipeline);
@ -121,7 +124,8 @@ enum {
PROP_STAGE, PROP_STAGE,
PROP_FRAMERATE, PROP_FRAMERATE,
PROP_PIPELINE, PROP_PIPELINE,
PROP_FILE_TEMPLATE PROP_FILE_TEMPLATE,
PROP_DRAW_CURSOR
}; };
G_DEFINE_TYPE(ShellRecorder, shell_recorder, G_TYPE_OBJECT); G_DEFINE_TYPE(ShellRecorder, shell_recorder, G_TYPE_OBJECT);
@ -275,6 +279,7 @@ shell_recorder_init (ShellRecorder *recorder)
recorder->state = RECORDER_STATE_CLOSED; recorder->state = RECORDER_STATE_CLOSED;
recorder->framerate = DEFAULT_FRAMES_PER_SECOND; recorder->framerate = DEFAULT_FRAMES_PER_SECOND;
recorder->draw_cursor = TRUE;
} }
static void static void
@ -575,7 +580,8 @@ recorder_record_frame (ShellRecorder *recorder)
GST_BUFFER_PTS(buffer) = now - recorder->start_time; GST_BUFFER_PTS(buffer) = now - recorder->start_time;
recorder_draw_cursor (recorder, buffer); if (recorder->draw_cursor)
recorder_draw_cursor (recorder, buffer);
shell_recorder_src_add_buffer (SHELL_RECORDER_SRC (recorder->current_pipeline->src), buffer); shell_recorder_src_add_buffer (SHELL_RECORDER_SRC (recorder->current_pipeline->src), buffer);
gst_buffer_unref (buffer); gst_buffer_unref (buffer);
@ -1017,6 +1023,18 @@ recorder_set_file_template (ShellRecorder *recorder,
g_object_notify (G_OBJECT (recorder), "file-template"); g_object_notify (G_OBJECT (recorder), "file-template");
} }
static void
recorder_set_draw_cursor (ShellRecorder *recorder,
gboolean draw_cursor)
{
if (draw_cursor == recorder->draw_cursor)
return;
recorder->draw_cursor = draw_cursor;
g_object_notify (G_OBJECT (recorder), "draw-cursor");
}
static void static void
shell_recorder_set_property (GObject *object, shell_recorder_set_property (GObject *object,
guint prop_id, guint prop_id,
@ -1039,6 +1057,9 @@ shell_recorder_set_property (GObject *object,
case PROP_FILE_TEMPLATE: case PROP_FILE_TEMPLATE:
recorder_set_file_template (recorder, g_value_get_string (value)); recorder_set_file_template (recorder, g_value_get_string (value));
break; break;
case PROP_DRAW_CURSOR:
recorder_set_draw_cursor (recorder, g_value_get_boolean (value));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -1067,6 +1088,9 @@ shell_recorder_get_property (GObject *object,
case PROP_FILE_TEMPLATE: case PROP_FILE_TEMPLATE:
g_value_set_string (value, recorder->file_template); g_value_set_string (value, recorder->file_template);
break; break;
case PROP_DRAW_CURSOR:
g_value_set_boolean (value, recorder->draw_cursor);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -1115,6 +1139,14 @@ shell_recorder_class_init (ShellRecorderClass *klass)
"The filename template to use for output files", "The filename template to use for output files",
NULL, NULL,
G_PARAM_READWRITE)); G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_DRAW_CURSOR,
g_param_spec_boolean ("draw-cursor",
"Draw Cursor",
"Whether to record the cursor",
TRUE,
G_PARAM_READWRITE));
} }
/* Sets the GstCaps (video format, in this case) on the stream /* Sets the GstCaps (video format, in this case) on the stream
@ -1689,6 +1721,15 @@ shell_recorder_set_file_template (ShellRecorder *recorder,
} }
void
shell_recorder_set_draw_cursor (ShellRecorder *recorder,
gboolean draw_cursor)
{
g_return_if_fail (SHELL_IS_RECORDER (recorder));
recorder_set_draw_cursor (recorder, draw_cursor);
}
/** /**
* shell_recorder_set_pipeline: * shell_recorder_set_pipeline:
* @recorder: the #ShellRecorder * @recorder: the #ShellRecorder

View File

@ -36,6 +36,8 @@ void shell_recorder_set_file_template (ShellRecorder *recorder,
const char *file_template); const char *file_template);
void shell_recorder_set_pipeline (ShellRecorder *recorder, void shell_recorder_set_pipeline (ShellRecorder *recorder,
const char *pipeline); const char *pipeline);
void shell_recorder_set_draw_cursor (ShellRecorder *recorder,
gboolean draw_cursor);
void shell_recorder_set_area (ShellRecorder *recorder, void shell_recorder_set_area (ShellRecorder *recorder,
int x, int x,
int y, int y,