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

📄 paragraph.h

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 H
字号:
/* $Id: paragraph.h,v 1.7 2002/11/01 02:10:58 micahjd Exp $ * * paragraph.h - Build upon the text storage capabilities of pgstring, adding word *               wrapping, formatting, and UI. * * PicoGUI small and efficient client/server GUI * Copyright (C) 2000-2002 Micah Dowty <micahjd@users.sourceforge.net> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. *  * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. *  * Contributors: *  *  *  */#ifndef __PARAGRAPH_H#define __PARAGRAPH_H#include <pgserver/pgstring.h>#include <pgserver/divtree.h>/* Types of metadata for paragraph_metadata */#define PAR_META_FONT            1#define PAR_META_COLOR           2#define PAR_META_EMBED_WIDGET    3struct textbox_document;/* This structure is embedded in the metadata of the paragraph's pgstring, * and controls formatting and embedded objects. */struct paragraph_metadata {  int refcount;  int type;          /* Selects which member of the union to use */  union {    struct font_descriptor *fd;    hwrcolor color;    struct widget *embedwidget;  } u;  /* Links in the paragraph's metadata list */  struct paragraph_metadata *prev, *next;};/* Represent all the formatting necessary to display text in the * paragraph. This data can be altered by metadata nodes. */struct paragraph_formatting {  struct font_descriptor *fd;  hwrcolor color;};/* Metadata for one line in the paragraph */struct paragraph_line {  /* If this line has been wrapped, wrapped will be 1,   * char_width will be the number of characters on the line,   * height will be the height of the line in pixels.   */  int char_width;  int height;  unsigned int wrapped : 1;  /* This flag is set when the line is rewrapped, and cleared when   * the line is rendered either incrementally or normally.   */  unsigned int wrap_need_render : 1;  struct {    /* The following information is only valid if the 'valid' flags     * for this line _and all before it_ are nonzero     */    struct pgstr_iterator iterator;    struct paragraph_formatting fmt;    unsigned int valid : 1;  } cache;    struct paragraph_line *prev, *next;};struct paragraph;/* Information about the cursor location in the paragraph */struct paragraph_cursor {  struct paragraph *par;  struct paragraph_line *line;  struct pgstr_iterator iterator; /* The selected cursor, after the insertion point */  /* The appearance of the cursor. Right now only solid rectangular cursors   * are supported. This could be extended to using fillstyles if needed.   */  int width;  hwrcolor color;  /* The location this cursor was most recently rendered   * at, in absolute logical coordinates.    */  struct rect last_rect;  unsigned int visible : 1;};struct paragraph {  struct pgstring *content;  struct paragraph_line *lines;  struct divnode *background;  int width;                      /* This is set before wrapping, by the owner */  int height;                     /* Calculated during wrapping */  struct paragraph_metadata *metanodes;   /* List of metadata nodes for this paragraph */    struct divnode *div;            /* Divnode for formatting this paragraph relative				   * to other paragraphs. The contents are				   * rendered to the divnode div->div.   /* Information about the most recent change, for incremental rendering.   */  struct {    struct paragraph_line *line;    struct pgstr_iterator start;    int nchars;                  /* Number of changed characters, or 0 to keep rendering				  * as long as the scrolling was changed.				  */  } last_change;  /* NOTE: It is possible to use other cursors than this one in most places,   * but this cursor is the only one that may be used for interactive   * editing. This is because incremental redraws rely on this cursor having   * a correct 'line' member, so the cursor must be updated when it wraps   * onto a different line.   */  struct paragraph_cursor cursor;  /* Document this paragraph is contained in if any, or NULL.   * This is needed for document-wide settings, like password rendering   * or line wrapping options.   */  struct textbox_document *doc;  /* Previous and next paragraphs in cursor navigation order */  struct paragraph *prev, *next;};/******************************************************** Public Methods **//* div is the divnode used for formatting, div->div is what the paragraph * uses for all its sizing and rendering. The paragraph doesn't need to * know about div, but storing it in the paragraph makes things much easier * for textbox_document. */g_error paragraph_new(struct paragraph **par, struct divnode *div);void paragraph_delete(struct paragraph *par);/* Draw a gropnode containing a PG_GROP_PARAGRAPH */void paragraph_render(struct groprender *r, struct gropnode *n);/* Draw the PG_GROP_PARAGRAPH_INC gropnode, only drawing changed areas */void paragraph_render_inc(struct groprender *r, struct gropnode *n);/* Move the specified cursor as close as possible to the location x,y * relative to the specified paragraph */void paragraph_movecursor(struct paragraph_cursor *crsr, 			  struct paragraph *par, int x, int y);/* Move the cursor in the paragraph, works like fseek() */void paragraph_seekcursor(struct paragraph_cursor *crsr, int offset, int whence);/* Delete a character at the cursor */g_error paragraph_delete_char(struct paragraph_cursor *crsr);/* Insert a character at the cursor */g_error paragraph_insert_char(struct paragraph_cursor *crsr, u32 ch, 			      struct paragraph_metadata *meta);/* Hide/show the cursor */void paragraph_hide_cursor(struct paragraph_cursor *crsr);void paragraph_show_cursor(struct paragraph_cursor *crsr);/* Make sure the cursor is visible in the scrolled area * if autoscrolling is on and this is possible, otherwise do nothing. */void paragraph_scroll_to_cursor(struct paragraph_cursor *crsr);/* Set this cursor as the last change location, for incremental redraws */void paragraph_set_last_change(struct paragraph_cursor *crsr);#endif /* __PARAGRAPH_H *//* The End */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -