📄 xo-callbacks.c
字号:
if (it->type == ITEM_TEXT && it->canvas_item != NULL) gnome_canvas_item_set(it->canvas_item, "fill-color-rgba", it->brush.color_rgba, NULL); } } else if (redo->type == ITEM_TEXT_EDIT) { tmpstr = redo->str; redo->str = redo->item->text; redo->item->text = tmpstr; gnome_canvas_item_set(redo->item->canvas_item, "text", tmpstr, NULL); update_item_bbox(redo->item); } else if (redo->type == ITEM_TEXT_ATTRIB) { tmpstr = redo->str; redo->str = redo->item->font_name; redo->item->font_name = tmpstr; tmp_x = redo->val_x; redo->val_x = redo->item->font_size; redo->item->font_size = tmp_x; g_memmove(&tmp_brush, redo->brush, sizeof(struct Brush)); g_memmove(redo->brush, &(redo->item->brush), sizeof(struct Brush)); g_memmove(&(redo->item->brush), &tmp_brush, sizeof(struct Brush)); gnome_canvas_item_set(redo->item->canvas_item, "fill-color-rgba", redo->item->brush.color_rgba, NULL); update_text_item_displayfont(redo->item); update_item_bbox(redo->item); } // move item from redo to undo stack u = redo; redo = redo->next; u->next = undo; undo = u; ui.saved = FALSE; update_undo_redo_enabled(); if (u->multiop & MULTIOP_CONT_REDO) on_editRedo_activate(NULL,NULL); // loop}voidon_editCut_activate (GtkMenuItem *menuitem, gpointer user_data){ end_text(); reset_focus(); selection_to_clip(); selection_delete();}voidon_editCopy_activate (GtkMenuItem *menuitem, gpointer user_data){ end_text(); reset_focus(); selection_to_clip();}voidon_editPaste_activate (GtkMenuItem *menuitem, gpointer user_data){ end_text(); reset_focus(); clipboard_paste();}voidon_editDelete_activate (GtkMenuItem *menuitem, gpointer user_data){ end_text(); reset_focus(); selection_delete();}voidon_viewContinuous_activate (GtkMenuItem *menuitem, gpointer user_data){ GtkAdjustment *v_adj; double yscroll; struct Page *pg; reset_focus(); if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; if (ui.view_continuous) return; ui.view_continuous = TRUE; v_adj = gtk_layout_get_vadjustment(GTK_LAYOUT(canvas)); pg = ui.cur_page; yscroll = gtk_adjustment_get_value(v_adj) - pg->voffset*ui.zoom; update_page_stuff(); gtk_adjustment_set_value(v_adj, yscroll + pg->voffset*ui.zoom); // force a refresh gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);}voidon_viewOnePage_activate (GtkMenuItem *menuitem, gpointer user_data){ GtkAdjustment *v_adj; double yscroll; reset_focus(); if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; if (!ui.view_continuous) return; ui.view_continuous = FALSE; v_adj = gtk_layout_get_vadjustment(GTK_LAYOUT(canvas)); yscroll = gtk_adjustment_get_value(v_adj) - ui.cur_page->voffset*ui.zoom; update_page_stuff(); gtk_adjustment_set_value(v_adj, yscroll + ui.cur_page->voffset*ui.zoom); // force a refresh gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);}voidon_viewZoomIn_activate (GtkMenuItem *menuitem, gpointer user_data){ reset_focus(); if (ui.zoom > MAX_ZOOM) return; ui.zoom *= ui.zoom_step_factor; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); rescale_text_items(); rescale_bg_pixmaps();}voidon_viewZoomOut_activate (GtkMenuItem *menuitem, gpointer user_data){ reset_focus(); if (ui.zoom < MIN_ZOOM) return; ui.zoom /= ui.zoom_step_factor; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); rescale_text_items(); rescale_bg_pixmaps();}voidon_viewNormalSize_activate (GtkMenuItem *menuitem, gpointer user_data){ reset_focus(); ui.zoom = DEFAULT_ZOOM; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); rescale_text_items(); rescale_bg_pixmaps();}voidon_viewPageWidth_activate (GtkMenuItem *menuitem, gpointer user_data){ reset_focus(); ui.zoom = (GTK_WIDGET(canvas))->allocation.width/ui.cur_page->width; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); rescale_text_items(); rescale_bg_pixmaps();}voidon_viewFirstPage_activate (GtkMenuItem *menuitem, gpointer user_data){ end_text(); reset_focus(); do_switch_page(0, TRUE, FALSE);}voidon_viewPreviousPage_activate (GtkMenuItem *menuitem, gpointer user_data){ end_text(); reset_focus(); if (ui.pageno == 0) return; do_switch_page(ui.pageno-1, TRUE, FALSE);}voidon_viewNextPage_activate (GtkMenuItem *menuitem, gpointer user_data){ end_text(); reset_focus(); if (ui.pageno == journal.npages-1) { // create a page at end if (page_ops_forbidden()) return; on_journalNewPageEnd_activate(menuitem, user_data); return; } do_switch_page(ui.pageno+1, TRUE, FALSE);}voidon_viewLastPage_activate (GtkMenuItem *menuitem, gpointer user_data){ end_text(); reset_focus(); do_switch_page(journal.npages-1, TRUE, FALSE);}voidon_viewShowLayer_activate (GtkMenuItem *menuitem, gpointer user_data){ end_text(); reset_focus(); if (ui.layerno == ui.cur_page->nlayers-1) return; reset_selection(); ui.layerno++; ui.cur_layer = g_list_nth_data(ui.cur_page->layers, ui.layerno); gnome_canvas_item_show(GNOME_CANVAS_ITEM(ui.cur_layer->group)); update_page_stuff();}voidon_viewHideLayer_activate (GtkMenuItem *menuitem, gpointer user_data){ end_text(); reset_focus(); if (ui.layerno == -1) return; reset_selection(); gnome_canvas_item_hide(GNOME_CANVAS_ITEM(ui.cur_layer->group)); ui.layerno--; if (ui.layerno<0) ui.cur_layer = NULL; else ui.cur_layer = g_list_nth_data(ui.cur_page->layers, ui.layerno); update_page_stuff();}voidon_journalNewPageBefore_activate (GtkMenuItem *menuitem, gpointer user_data){ struct Page *pg; end_text(); reset_focus(); if (page_ops_forbidden()) return; reset_selection(); pg = new_page(ui.cur_page); journal.pages = g_list_insert(journal.pages, pg, ui.pageno); journal.npages++; do_switch_page(ui.pageno, TRUE, TRUE); prepare_new_undo(); undo->type = ITEM_NEW_PAGE; undo->val = ui.pageno; undo->page = pg;}voidon_journalNewPageAfter_activate (GtkMenuItem *menuitem, gpointer user_data){ struct Page *pg; end_text(); reset_focus(); if (page_ops_forbidden()) return; reset_selection(); pg = new_page(ui.cur_page); journal.pages = g_list_insert(journal.pages, pg, ui.pageno+1); journal.npages++; do_switch_page(ui.pageno+1, TRUE, TRUE); prepare_new_undo(); undo->type = ITEM_NEW_PAGE; undo->val = ui.pageno; undo->page = pg;}voidon_journalNewPageEnd_activate (GtkMenuItem *menuitem, gpointer user_data){ struct Page *pg; end_text(); reset_focus(); if (page_ops_forbidden()) return; reset_selection(); pg = new_page((struct Page *)g_list_last(journal.pages)->data); journal.pages = g_list_append(journal.pages, pg); journal.npages++; do_switch_page(journal.npages-1, TRUE, TRUE); prepare_new_undo(); undo->type = ITEM_NEW_PAGE; undo->val = ui.pageno; undo->page = pg;}voidon_journalDeletePage_activate (GtkMenuItem *menuitem, gpointer user_data){ GList *layerlist, *itemlist; struct Layer *l; end_text(); reset_focus(); if (page_ops_forbidden()) return; if (journal.npages == 1) return; reset_selection(); prepare_new_undo(); undo->type = ITEM_DELETE_PAGE; undo->val = ui.pageno; undo->page = ui.cur_page; // unmap all the canvas items gtk_object_destroy(GTK_OBJECT(ui.cur_page->group)); ui.cur_page->group = NULL; ui.cur_page->bg->canvas_item = NULL; for (layerlist = ui.cur_page->layers; layerlist!=NULL; layerlist = layerlist->next) { l = (struct Layer *)layerlist->data; for (itemlist = l->items; itemlist!=NULL; itemlist = itemlist->next) ((struct Item *)itemlist->data)->canvas_item = NULL; l->group = NULL; } journal.pages = g_list_remove(journal.pages, ui.cur_page); journal.npages--; if (ui.pageno == journal.npages) ui.pageno--; ui.cur_page = NULL; // so do_switch_page() won't try to remap the layers of the defunct page do_switch_page(ui.pageno, TRUE, TRUE);}voidon_journalNewLayer_activate (GtkMenuItem *menuitem, gpointer user_data){ struct Layer *l; end_text(); reset_focus(); reset_selection(); l = g_new(struct Layer, 1); l->items = NULL; l->nitems = 0; l->group = (GnomeCanvasGroup *) gnome_canvas_item_new( ui.cur_page->group, gnome_canvas_group_get_type(), NULL); lower_canvas_item_to(ui.cur_page->group, GNOME_CANVAS_ITEM(l->group), (ui.cur_layer!=NULL)?(GNOME_CANVAS_ITEM(ui.cur_layer->group)):(ui.cur_page->bg->canvas_item)); ui.cur_page->layers = g_list_insert(ui.cur_page->layers, l, ui.layerno+1); ui.cur_layer = l; ui.layerno++; ui.cur_page->nlayers++; update_page_stuff(); prepare_new_undo(); undo->type = ITEM_NEW_LAYER; undo->val = ui.layerno; undo->layer = l; undo->page = ui.cur_page; }voidon_journalDeleteLayer_activate (GtkMenuItem *menuitem, gpointer user_data){ GList *list; end_text(); reset_focus(); if (ui.cur_layer == NULL) return; reset_selection(); prepare_new_undo(); undo->type = ITEM_DELETE_LAYER; undo->val = ui.layerno; undo->layer = ui.cur_layer; undo->layer2 = NULL; undo->page = ui.cur_page; // delete all the canvas items gtk_object_destroy(GTK_OBJECT(ui.cur_layer->group)); ui.cur_layer->group = NULL; for (list=ui.cur_layer->items; list!=NULL; list=list->next) ((struct Item *)list->data)->canvas_item = NULL; ui.cur_page->layers = g_list_remove(ui.cur_page->layers, ui.cur_layer); if (ui.cur_page->nlayers>=2) { ui.cur_page->nlayers--; ui.layerno--; if (ui.layerno<0) ui.cur_layer = NULL; else ui.cur_layer = (struct Layer *)g_list_nth_data(ui.cur_page->layers, ui.layerno); } else { // special case: can't remove the last layer ui.cur_layer = g_new(struct Layer, 1); ui.cur_layer->items = NULL; ui.cur_layer->nitems = 0; ui.cur_layer->group = (GnomeCanvasGroup *) gnome_canvas_item_new(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -