static gboolean glide_image_button_press (ClutterActor *actor, ClutterButtonEvent *event) { GlideStageManager *m; GlideActor *ga = GLIDE_ACTOR (actor); GlideImage *image = GLIDE_IMAGE (actor); gfloat ax, ay; m = glide_actor_get_stage_manager (ga); glide_stage_manager_set_selection (m, ga); clutter_actor_get_position (actor, &ax, &ay); image->priv->drag_center_x = event->x - ax; image->priv->drag_center_y = event->y - ay; image->priv->dragging = TRUE; image->priv->motion_since_press = FALSE; clutter_grab_pointer (actor); glide_undo_manager_start_actor_action (glide_actor_get_undo_manager (GLIDE_ACTOR (actor)), GLIDE_ACTOR (actor), "Move object"); return TRUE; }
static gboolean glide_slide_button_drawing_area_expose (GtkWidget *drawing_area, GdkEventExpose *event, gpointer user_data) { GlideSlideButton *b = (GlideSlideButton *)user_data; cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (drawing_area)); gfloat width, height; clutter_actor_get_size (CLUTTER_ACTOR (b->priv->slide), &width, &height); cairo_save (cr); cairo_scale (cr, 80.0/width, 60.0/height); glide_actor_print (GLIDE_ACTOR (b->priv->slide), cr); cairo_restore (cr); if (CLUTTER_ACTOR_IS_VISIBLE (b->priv->slide)) { glide_cairo_set_fg_color (cr, drawing_area, GTK_STATE_NORMAL); cairo_set_line_width (cr, 3); cairo_rectangle (cr, 0, 0, 80, 60); cairo_stroke (cr); } cairo_destroy (cr); return FALSE; }
static void glide_slide_button_clicked (GlideSlideButton *button, gpointer user_data) { GlideStageManager *m = glide_actor_get_stage_manager (GLIDE_ACTOR (button->priv->slide)); glide_stage_manager_set_current_slide (m, glide_slide_get_index (button->priv->slide)); }
void glide_window_font_set_cb (GtkWidget *b, gpointer user_data) { GlideActor *selection; GlideWindow *w = (GlideWindow *)user_data; selection = glide_stage_manager_get_selection (w->priv->manager); if (!selection || !GLIDE_IS_TEXT(selection)) return; glide_undo_manager_start_actor_action (glide_actor_get_undo_manager (GLIDE_ACTOR (selection)), GLIDE_ACTOR (selection), "Set font"); glide_text_set_font_name (GLIDE_TEXT (selection), gtk_font_button_get_font_name (GTK_FONT_BUTTON (b))); glide_undo_manager_end_actor_action (glide_actor_get_undo_manager (GLIDE_ACTOR (selection)), GLIDE_ACTOR (selection)); }
static void glide_window_align_selected_text (GlideWindow *w, PangoAlignment alignment) { GlideActor *selected = glide_stage_manager_get_selection (w->priv->manager); if (!selected || !GLIDE_IS_TEXT (selected)) { g_warning ("Align invoked on non-text selection, might mean a bug?"); return; } glide_undo_manager_start_actor_action (glide_actor_get_undo_manager (GLIDE_ACTOR (selected)), GLIDE_ACTOR (selected), "Set text alignment"); glide_text_set_line_alignment (GLIDE_TEXT (selected), alignment); glide_undo_manager_end_actor_action (glide_actor_get_undo_manager (GLIDE_ACTOR (selected)), GLIDE_ACTOR (selected)); }
static gboolean glide_undo_actor_action_redo_callback (GlideUndoManager *undo_manager, GlideUndoInfo *info) { GlideUndoActorData *data = (GlideUndoActorData *)info->user_data; glide_actor_deserialize (GLIDE_ACTOR (data->actor), data->new_state); return TRUE; }
static gboolean glide_image_button_release (ClutterActor *actor, ClutterButtonEvent *bev) { GlideImage *image = GLIDE_IMAGE (actor); if (image->priv->dragging) { if (!image->priv->motion_since_press) glide_undo_manager_cancel_actor_action (glide_actor_get_undo_manager (GLIDE_ACTOR (actor))); else glide_undo_manager_end_actor_action (glide_actor_get_undo_manager (GLIDE_ACTOR (actor)), GLIDE_ACTOR (actor)); clutter_ungrab_pointer (); image->priv->dragging = FALSE; return TRUE; } return FALSE; }
void glide_window_new_text_action_activate (GtkAction *a, gpointer user_data) { GlideWindow *w = (GlideWindow *)user_data; ClutterActor *text = glide_text_new (); ClutterColor cc; GdkColor c; gtk_color_button_get_color (GTK_COLOR_BUTTON (gtk_builder_get_object (w->priv->builder, "text-color-button")), &c); glide_clutter_color_from_gdk_color (&c, &cc); glide_text_set_color (GLIDE_TEXT (text), &cc); glide_text_set_font_name (GLIDE_TEXT (text), gtk_font_button_get_font_name (GTK_FONT_BUTTON (gtk_builder_get_object (w->priv->builder, "text-font-button")))); glide_stage_manager_add_actor (w->priv->manager, GLIDE_ACTOR (text)); glide_undo_manager_append_insert (w->priv->undo_manager, GLIDE_ACTOR (text)); }
static void glide_window_image_open_response_callback (GtkDialog *dialog, int response, gpointer user_data) { GlideWindow *window = (GlideWindow *)user_data; if (response == GTK_RESPONSE_ACCEPT) { GError *e = NULL; ClutterActor *im; // Todo: URI gchar *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); im = glide_image_new_from_file (filename, &e); if (e) { g_warning ("Failed to load image (%s): %s", filename, e->message); glide_gtk_util_show_error_dialog ("Failed to load image", e->message); g_free (filename); g_error_free (e); gtk_widget_destroy (GTK_WIDGET (dialog)); return; } glide_stage_manager_add_actor (window->priv->manager, GLIDE_ACTOR (im)); glide_undo_manager_append_insert (window->priv->undo_manager, GLIDE_ACTOR (im)); g_free (filename); clutter_actor_show (im); } gtk_widget_destroy (GTK_WIDGET (dialog)); }
/** * glide_slide_button_set_slide: * @button: A #GlideSlideButton * @slide: The #GlideSlide to set for @button * * Sets the slide displayed for @button to @slide. * */ void glide_slide_button_set_slide (GlideSlideButton *button, GlideSlide *slide) { g_return_if_fail (GLIDE_IS_SLIDE_BUTTON (button)); g_return_if_fail (GLIDE_IS_SLIDE (slide)); button->priv->manager = (GlideUndoManager *)g_object_ref (G_OBJECT (glide_stage_manager_get_undo_manager (glide_actor_get_stage_manager (GLIDE_ACTOR (slide))))); button->priv->slide = slide; g_object_notify (G_OBJECT (button), "slide"); button->priv->position_changed_id = g_signal_connect (button->priv->manager, "position-changed", G_CALLBACK (glide_slide_button_undo_position_changed), button); }
static gboolean glide_undo_delete_actor_redo_callback (GlideUndoManager *undo_manager, GlideUndoInfo *info) { GlideUndoDeleteActorData *data = (GlideUndoDeleteActorData *)info->user_data; GlideStageManager *manager; manager = glide_actor_get_stage_manager (GLIDE_ACTOR (data->actor)); if (glide_stage_manager_get_selection (manager) == (GlideActor *)data->actor) glide_stage_manager_set_selection (manager, NULL); clutter_container_remove_actor (CLUTTER_CONTAINER (data->parent), data->actor); return TRUE; }
static void glide_document_json_obj_set_slides (GlideDocument *document, JsonObject *obj) { JsonNode *node = json_node_new (JSON_NODE_ARRAY); JsonArray *array = json_array_new (); GList *s; for (s = document->priv->slides; s; s = s->next) { JsonNode *n; GlideSlide *slide = (GlideSlide *)(s->data); n = glide_actor_serialize (GLIDE_ACTOR (slide)); json_array_add_element (array, n); } json_node_take_array (node, array); json_object_set_member (obj, "slides", node); }
static void glide_window_paste_contents_text_received (GtkClipboard *clipboard, GtkSelectionData *data, gpointer user_data) { GlideWindow *w = (GlideWindow *)user_data; guchar *text = gtk_selection_data_get_text (data); GlideActor *selection; selection = glide_stage_manager_get_selection (w->priv->manager); if (!selection) { ClutterActor *ntext = glide_text_new (); ClutterColor cc; GdkColor c; gtk_color_button_get_color (GTK_COLOR_BUTTON (gtk_builder_get_object (w->priv->builder, "text-color-button")), &c); glide_clutter_color_from_gdk_color (&c, &cc); glide_text_set_color (GLIDE_TEXT (ntext), &cc); glide_text_set_font_name (GLIDE_TEXT (ntext), gtk_font_button_get_font_name (GTK_FONT_BUTTON (gtk_builder_get_object (w->priv->builder, "text-font-button")))); glide_text_set_text (GLIDE_TEXT (ntext), (gchar *)text); glide_stage_manager_add_actor (w->priv->manager, GLIDE_ACTOR (ntext)); } else if (selection && GLIDE_IS_TEXT (selection)) { glide_text_insert_text (GLIDE_TEXT (selection), (gchar *)text, glide_text_get_cursor_position (GLIDE_TEXT (selection))); } g_free (text); }