📄 xournal.h
字号:
#include <gtk/gtk.h>#include <libgnomecanvas/libgnomecanvas.h>#define ENABLE_XINPUT_BUGFIX/* comment out this line if you are experiencing calibration problems with XInput and want to try things differently. This will probably break on-the-fly display rotation after application startup, though. */// PREF FILES INFO#define CONFIG_DIR ".xournal"#define MRU_FILE "recent-files"#define MRU_SIZE 8 #define CONFIG_FILE "config"// DATA STRUCTURES AND CONSTANTS#define PIXEL_MOTION_THRESHOLD 0.3#define MAX_AXES 12#define EPSILON 1E-7#define MAX_ZOOM 20.0#define DISPLAY_DPI_DEFAULT 96.0#define MIN_ZOOM 0.2#define VBOX_MAIN_NITEMS 5 // number of interface items in vboxMain/* a string (+ aux data) that maintains a refcount */typedef struct Refstring { int nref; char *s; gpointer aux;} Refstring;/* The journal is mostly a list of pages. Each page is a list of layers, and a background. Each layer is a list of items, from bottom to top.*/typedef struct Background { int type; GnomeCanvasItem *canvas_item; int color_no; guint color_rgba; int ruling; GdkPixbuf *pixbuf; Refstring *filename; int file_domain; int file_page_seq; int pixbuf_dpi; // for PDF only - the *current* dpi value double pixbuf_scale; // for PIXMAP, this is the *current* zoom value // for PDF, this is the *requested* zoom value} Background;#define BG_SOLID 0#define BG_PIXMAP 1#define BG_PDF 2 // not implemented yet#define RULING_NONE 0#define RULING_LINED 1#define RULING_RULED 2#define RULING_GRAPH 3#define DOMAIN_ABSOLUTE 0#define DOMAIN_ATTACH 1#define DOMAIN_CLONE 2 // only while loading filetypedef struct Brush { int tool_type; int color_no; guint color_rgba; int thickness_no; double thickness; int tool_options;} Brush;#define COLOR_BLACK 0#define COLOR_BLUE 1#define COLOR_RED 2#define COLOR_GREEN 3#define COLOR_GRAY 4#define COLOR_LIGHTBLUE 5#define COLOR_LIGHTGREEN 6#define COLOR_MAGENTA 7#define COLOR_ORANGE 8#define COLOR_YELLOW 9#define COLOR_WHITE 10#define COLOR_OTHER -1#define COLOR_MAX 11extern guint predef_colors_rgba[COLOR_MAX];extern guint predef_bgcolors_rgba[COLOR_MAX];#define THICKNESS_VERYFINE 0#define THICKNESS_FINE 1#define THICKNESS_MEDIUM 2#define THICKNESS_THICK 3#define THICKNESS_VERYTHICK 4#define THICKNESS_MAX 5#define TOOL_PEN 0#define TOOL_ERASER 1#define TOOL_HIGHLIGHTER 2#define TOOL_TEXT 3#define TOOL_SELECTREGION 4#define TOOL_SELECTRECT 5#define TOOL_VERTSPACE 6#define TOOL_HAND 7#define NUM_STROKE_TOOLS 3#define NUM_TOOLS 8#define NUM_BUTTONS 3#define TOOLOPT_ERASER_STANDARD 0#define TOOLOPT_ERASER_WHITEOUT 1#define TOOLOPT_ERASER_STROKES 2extern double predef_thickness[NUM_STROKE_TOOLS][THICKNESS_MAX];typedef struct BBox { double left, right, top, bottom;} BBox;struct UndoErasureData;typedef struct Item { int type; struct Brush brush; // the brush to use, if ITEM_STROKE // 'brush" also contains color info for text items GnomeCanvasPoints *path; GnomeCanvasItem *canvas_item; // the corresponding canvas item, or NULL struct BBox bbox; struct UndoErasureData *erasure; // for temporary use during erasures // the following fields for ITEM_TEXT: gchar *text; gchar *font_name; gdouble font_size; GtkWidget *widget; // the widget while text is being edited (ITEM_TEMP_TEXT)} Item;// item type values for Item.type, UndoItem.type, ui.cur_item_type ...// (not all are valid in all places)#define ITEM_NONE -1#define ITEM_STROKE 0#define ITEM_TEMP_STROKE 1#define ITEM_ERASURE 2#define ITEM_SELECTRECT 3#define ITEM_MOVESEL 4#define ITEM_PASTE 5#define ITEM_NEW_LAYER 6#define ITEM_DELETE_LAYER 7#define ITEM_NEW_BG_ONE 8#define ITEM_NEW_BG_RESIZE 9#define ITEM_PAPER_RESIZE 10#define ITEM_NEW_DEFAULT_BG 11#define ITEM_NEW_PAGE 13#define ITEM_DELETE_PAGE 14#define ITEM_REPAINTSEL 15#define ITEM_MOVESEL_VERT 16#define ITEM_HAND 17#define ITEM_TEXT 18#define ITEM_TEMP_TEXT 19#define ITEM_TEXT_EDIT 20#define ITEM_TEXT_ATTRIB 21typedef struct Layer { GList *items; // the items on the layer, from bottom to top int nitems; GnomeCanvasGroup *group;} Layer;typedef struct Page { GList *layers; // the layers on the page int nlayers; double height, width; double hoffset, voffset; // offsets of canvas group rel. to canvas root struct Background *bg; GnomeCanvasGroup *group;} Page;typedef struct Journal { GList *pages; // the pages in the journal int npages; int last_attach_no; // for naming of attached backgrounds} Journal;typedef struct Selection { int type; // ITEM_SELECTRECT, ITEM_MOVESEL_VERT BBox bbox; // the rectangle bbox of the selection struct Layer *layer; // the layer on which the selection lives double anchor_x, anchor_y, last_x, last_y; // for selection motion GnomeCanvasItem *canvas_item; // if the selection box is on screen GList *items; // the selected items (a list of struct Item) int move_pageno, orig_pageno; // if selection moves to a different page struct Layer *move_layer; float move_pagedelta;} Selection;typedef struct UIData { int pageno, layerno; // the current page and layer struct Page *cur_page; struct Layer *cur_layer; gboolean saved; // is file saved ? struct Brush *cur_brush; // the brush in use (one of brushes[...]) int toolno[NUM_BUTTONS+1]; // the number of the currently selected tool struct Brush brushes[NUM_BUTTONS+1][NUM_STROKE_TOOLS]; // the current pen, eraser, hiliter struct Brush default_brushes[NUM_STROKE_TOOLS]; // the default ones gboolean ruler[NUM_BUTTONS+1]; // whether each button is in ruler mode int linked_brush[NUM_BUTTONS+1]; // whether brushes are linked across buttons int cur_mapping; // the current button number for mappings gboolean use_erasertip; int which_mouse_button; // the mouse button drawing the current path struct Page default_page; // the model for the default page int layerbox_length; // the number of entries registered in the layers combo-box struct Item *cur_item; // the item being drawn, or NULL int cur_item_type; GnomeCanvasPoints cur_path; // the path being drawn int cur_path_storage_alloc; double zoom; // zoom factor, in pixels per pt gboolean use_xinput; // use input devices instead of core pointer gboolean allow_xinput; // allow use of xinput ? gboolean discard_corepointer; // discard core pointer events in XInput mode gboolean is_corestroke; // this stroke is painted with core pointer int screen_width, screen_height; // initial screen size, for XInput events double hand_refpt[2]; int hand_scrollto_cx, hand_scrollto_cy; gboolean hand_scrollto_pending; char *filename; gchar *default_path; // default path for new notes gboolean view_continuous, fullscreen, maximize_at_start; gboolean in_update_page_stuff; // semaphore to avoid scrollbar retroaction struct Selection *selection; GdkCursor *cursor; gboolean antialias_bg; // bilinear interpolation on bg pixmaps gboolean progressive_bg; // rescale bg's one at a time char *mrufile, *configfile; // file names for MRU & config char *mru[MRU_SIZE]; // MRU data GtkWidget *mrumenu[MRU_SIZE]; gboolean bg_apply_all_pages; int window_default_width, window_default_height, scrollbar_step_increment; gboolean print_ruling; // print the paper ruling ? int default_unit; // the default unit for paper sizes int startuptool; // the default tool at startup gboolean startupruler; int zoom_step_increment; // the increment in the zoom dialog box double zoom_step_factor; // the multiplicative factor in zoom in/out double startup_zoom;#if GLIB_CHECK_VERSION(2,6,0) GKeyFile *config_data;#endif int vertical_order[2][VBOX_MAIN_NITEMS]; // the order of interface components gchar *default_font_name, *font_name; gdouble default_font_size, font_size; gulong resize_signal_handler; gdouble hiliter_opacity; guint hiliter_alpha_mask;} UIData;#define BRUSH_LINKED 0#define BRUSH_COPIED 1#define BRUSH_STATIC 2typedef struct UndoErasureData { struct Item *item; // the item that got erased int npos; // its position in its layer int nrepl; // the number of replacement items GList *replacement_items;} UndoErasureData;typedef struct UndoItem { int type; struct Item *item; // for ITEM_STROKE, ITEM_TEXT, ITEM_TEXT_EDIT, ITEM_TEXT_ATTRIB struct Layer *layer; // for ITEM_STROKE, ITEM_ERASURE, ITEM_PASTE, ITEM_NEW_LAYER, ITEM_DELETE_LAYER, ITEM_MOVESEL, ITEM_TEXT, ITEM_TEXT_EDIT struct Layer *layer2; // for ITEM_DELETE_LAYER with val=-1, ITEM_MOVESEL struct Page *page; // for ITEM_NEW_BG_ONE/RESIZE, ITEM_NEW_PAGE, ITEM_NEW_LAYER, ITEM_DELETE_LAYER, ITEM_DELETE_PAGE GList *erasurelist; // for ITEM_ERASURE GList *itemlist; // for ITEM_MOVESEL, ITEM_PASTE, ITEM_REPAINTSEL GList *auxlist; // for ITEM_REPAINTSEL (brushes), ITEM_MOVESEL (depths) struct Background *bg; // for ITEM_NEW_BG_ONE/RESIZE, ITEM_NEW_DEFAULT_BG int val; // for ITEM_NEW_PAGE, ITEM_NEW_LAYER, ITEM_DELETE_LAYER, ITEM_DELETE_PAGE double val_x, val_y; // for ITEM_MOVESEL, ITEM_NEW_BG_RESIZE, ITEM_PAPER_RESIZE, ITEM_NEW_DEFAULT_BG, ITEM_TEXT_ATTRIB gchar *str; // for ITEM_TEXT_EDIT, ITEM_TEXT_ATTRIB struct Brush *brush; // for ITEM_TEXT_ATTRIB struct UndoItem *next; int multiop;} UndoItem;#define MULTIOP_CONT_REDO 1 // not the last in a multiop, so keep redoing#define MULTIOP_CONT_UNDO 2 // not the first in a multiop, so keep undoingtypedef struct BgPdfRequest { int pageno; int dpi; gboolean initial_request; // if so, loop over page numbers gboolean is_printing; // this is for printing, not for display} BgPdfRequest;typedef struct BgPdfPage { int dpi; GdkPixbuf *pixbuf;} BgPdfPage;typedef struct BgPdf { int status; // the rest only makes sense if this is not STATUS_NOT_INIT int pid; // PID of the converter process Refstring *filename; int file_domain; gchar *tmpfile_copy; // the temporary work copy of the file (in tmpdir) int npages; GList *pages; // a list of BgPdfPage structures GList *requests; // a list of BgPdfRequest structures gchar *tmpdir; // where to look for pages coming from pdf converter gboolean create_pages; // create journal pages as we find stuff in PDF gboolean has_failed; // has failed in the past...} BgPdf;#define STATUS_NOT_INIT 0#define STATUS_IDLE 1#define STATUS_RUNNING 2 // currently running child process on head(requests)#define STATUS_ABORTED 3 // child process running, but head(requests) aborted#define STATUS_SHUTDOWN 4 // waiting for child process to shut down// UTILITY MACROS// getting a component of the interface by name#define GET_COMPONENT(a) GTK_WIDGET (g_object_get_data(G_OBJECT (winMain), a))// the margin between consecutive pages in continuous view#define VIEW_CONTINUOUS_SKIP 20.0// GLOBAL VARIABLES// the main window and the canvasextern GtkWidget *winMain;extern GnomeCanvas *canvas;// the dataextern struct Journal journal;extern struct UIData ui;extern struct BgPdf bgpdf;extern struct UndoItem *undo, *redo;extern double DEFAULT_ZOOM;#define UNIT_CM 0#define UNIT_IN 1#define UNIT_PX 2#define UNIT_PT 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -