示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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));
}
示例#4
0
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));
}
示例#5
0
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));
}
示例#6
0
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;
}
示例#7
0
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;
}
示例#8
0
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));

}
示例#9
0
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));
}
示例#10
0
/**
 * 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);
}
示例#11
0
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;
}
示例#12
0
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);
  
}
示例#13
0
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);
}