⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xournal.h

📁 高手写的手写代码!欢迎大家下载,共同交流,如果有问题,请联系我!谢谢!
💻 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 + -