コード例 #1
0
ファイル: rubberband.c プロジェクト: baboofei/oregano
gboolean
rubberband_finish (Sheet *sheet, GdkEvent *event)
{
	RubberbandInfo *rubberband_info;
	
	rubberband_info = sheet->priv->rubberband_info;
#if 1
	GList *iter = NULL;
	if (sheet->priv->preserve_selection_items) {
		for (iter = sheet->priv->preserve_selection_items; iter; iter = iter->next)
			sheet_item_set_preserve_selection (SHEET_ITEM (iter->data), FALSE);
		
		g_list_free (sheet->priv->preserve_selection_items);
		sheet->priv->preserve_selection_items = NULL;
	}
#endif
	
	sheet_pointer_ungrab (sheet, event);

	g_object_set (rubberband_info->rectangle,
	              "visibility", GOO_CANVAS_ITEM_INVISIBLE,
	              NULL);
	
	rubberband_info->state = RUBBERBAND_START;
	return TRUE;
}
コード例 #2
0
ファイル: sheet.c プロジェクト: felipebetancur/oregano
/**
 * save the selection
 * @attention not stackable
 */
GList *sheet_preserve_selection (Sheet *sheet)
{
	g_return_val_if_fail (sheet != NULL, FALSE);
	g_return_val_if_fail (IS_SHEET (sheet), FALSE);

	GList *list = NULL;
	for (list = sheet->priv->selected_objects; list; list = list->next) {
		sheet_item_set_preserve_selection (SHEET_ITEM (list->data), TRUE);
	}
	// Return the list so that we can remove the preserve_selection
	// flags later.
	return sheet->priv->selected_objects;
}
コード例 #3
0
ファイル: rubberband.c プロジェクト: baboofei/oregano
gboolean
rubberband_start (Sheet *sheet, GdkEvent *event)
{
	GList *list;
	double x, y;
	RubberbandInfo *rubberband_info;

	g_assert (event->type == GDK_BUTTON_PRESS);
	x = event->button.x;
	y = event->button.y;
	goo_canvas_convert_from_pixels (GOO_CANVAS (sheet), &x, &y);
	
	rubberband_info = sheet->priv->rubberband_info;
	rubberband_info->start.x = x; 
	rubberband_info->start.y = y;
	rubberband_info->end.x = x; 
	rubberband_info->end.y = y;
	rubberband_info->state = RUBBERBAND_ACTIVE;
	
	//FIXME TODO recheck
	g_assert (rubberband_info->rectangle!=NULL);
	g_object_set (rubberband_info->rectangle,
	              "x", x,
	              "y", y,
	              "width", 0., 
	              "height", 0.,
	              "visibility", GOO_CANVAS_ITEM_VISIBLE,
	              NULL);
#if 1
	// Mark all the selected objects to preserve their selected state
	// if SHIFT is pressed while rubberbanding.
	if (event->button.state & GDK_SHIFT_MASK) {
		for (list = sheet->priv->selected_objects; list; list = list->next)
			sheet_item_set_preserve_selection (SHEET_ITEM (list->data), TRUE);

		sheet->priv->preserve_selection_items = 
		                   g_list_copy (sheet->priv->selected_objects);
	}
#endif

	sheet_pointer_grab (sheet, event);
	return TRUE;
}
コード例 #4
0
ファイル: sheet.c プロジェクト: dionysos-sf/oregano
void
sheet_stop_rubberband (Sheet *sheet, GdkEventButton *event)
{
	GList *list = NULL;

	sheet->priv->rubberband->state = RUBBER_NO;

	if (sheet->priv->preserve_selection_items != NULL) {
		for (list = sheet->priv->preserve_selection_items; list; list = list->next)
			sheet_item_set_preserve_selection (SHEET_ITEM (list->data), FALSE);
		
		g_list_free (sheet->priv->preserve_selection_items);
		sheet->priv->preserve_selection_items = NULL;
	}

	goo_canvas_pointer_ungrab (GOO_CANVAS (sheet),
	                           GOO_CANVAS_ITEM (sheet->grid), event->time);
	
	goo_canvas_item_remove (GOO_CANVAS_ITEM (sheet->priv->rubberband->rectangle));
	//g_list_free_full (list, g_object_unref); //FIXME
}