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

📄 object.h

📁 早期freebsd实现
💻 H
字号:
// -*- C++ -*-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.     Written by James Clark (jjc@jclark.com)This file is part of groff.groff is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 2, or (at your option) any laterversion.groff is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public Licensefor more details.You should have received a copy of the GNU General Public License alongwith groff; see the file COPYING.  If not, write to the Free SoftwareFoundation, 675 Mass Ave, Cambridge, MA 02139, USA. */struct place;enum object_type {  OTHER_OBJECT,  BOX_OBJECT,  CIRCLE_OBJECT,  ELLIPSE_OBJECT,  ARC_OBJECT,  SPLINE_OBJECT,  LINE_OBJECT,  ARROW_OBJECT,  MOVE_OBJECT,  TEXT_OBJECT,  BLOCK_OBJECT,  MARK_OBJECT  };struct bounding_box;struct object {  object *prev;  object *next;  object();  virtual ~object();  virtual position origin();  virtual double width();  virtual double radius();  virtual double height();  virtual position north();  virtual position south();  virtual position east();  virtual position west();  virtual position north_east();  virtual position north_west();  virtual position south_east();  virtual position south_west();  virtual position start();  virtual position end();  virtual position center();  virtual place *find_label(const char *);  virtual void move_by(const position &);  virtual int blank();  virtual void update_bounding_box(bounding_box *);  virtual object_type type() = 0;  virtual void print();  virtual void print_text();};typedef position (object::*corner)();struct place {  object *obj;  double x, y;};struct string_list;class path {  corner crn;  string_list *label_list;public:  path(corner = 0);  path(char *, corner = 0);  ~path();  void append(corner);  void append(char *);  int follow(const place &, place *) const;};struct object_list {  object *head;  object *tail;  object_list();  void append(object *);  void wrap_up_block(object_list *);};declare_ptable(place)// these go counterclockwiseenum direction {  RIGHT_DIRECTION,  UP_DIRECTION,  LEFT_DIRECTION,  DOWN_DIRECTION  };struct graphics_state {  double x, y;  direction dir;};struct saved_state : graphics_state {  saved_state *prev;  PTABLE(place) *tbl;};struct text_item {  text_item *next;  char *text;  adjustment adj;  const char *filename;  int lineno;  text_item(char *, const char *, int);  ~text_item();};const unsigned long IS_DOTTED = 01;const unsigned long IS_DASHED = 02;const unsigned long IS_CLOCKWISE = 04;const unsigned long IS_INVISIBLE = 020;const unsigned long HAS_LEFT_ARROW_HEAD = 040;const unsigned long HAS_RIGHT_ARROW_HEAD = 0100;const unsigned long HAS_SEGMENT = 0200;const unsigned long IS_SAME = 0400;const unsigned long HAS_FROM = 01000;const unsigned long HAS_AT = 02000;const unsigned long HAS_WITH = 04000;const unsigned long HAS_HEIGHT = 010000;const unsigned long HAS_WIDTH = 020000;const unsigned long HAS_RADIUS = 040000;const unsigned long HAS_TO = 0100000;const unsigned long IS_CHOPPED = 0200000;const unsigned long IS_DEFAULT_CHOPPED = 0400000;const unsigned long HAS_THICKNESS = 01000000;const unsigned long IS_FILLED = 02000000;const unsigned long IS_DEFAULT_FILLED = 04000000;const unsigned long IS_ALIGNED = 010000000;struct segment {  int is_absolute;  position pos;  segment *next;  segment(const position &, int, segment *);};struct rectangle_object;struct graphic_object;struct linear_object;struct object_spec {  unsigned long flags;  object_type type;  object_list oblist;  PTABLE(place) *tbl;  double dash_width;  position from;  position to;  position at;  position by;  path *with;  text_item *text;  double height;  double radius;  double width;  double segment_width;  double segment_height;  double start_chop;  double end_chop;  double thickness;  double fill;  direction dir;  segment *segment_list;  position segment_pos;  int segment_is_absolute;  object_spec(object_type);  ~object_spec();  object *make_object(position *, direction *);  graphic_object *make_box(position *, direction *);  graphic_object *make_block(position *, direction *);  graphic_object *make_text(position *, direction *);  graphic_object *make_ellipse(position *, direction *);  graphic_object *make_circle(position *, direction *);  linear_object *make_line(position *, direction *);  linear_object *make_arc(position *, direction *);  graphic_object *make_linear(position *, direction *);  graphic_object *make_move(position *, direction *);  int position_rectangle(rectangle_object *p, position *curpos,			 direction *dirp);};object *make_object(object_spec *, position *, direction *);object *make_mark_object();object *make_command_object(char *, const char *, int);int lookup_variable(const char *name, double *val);void define_variable(const char *name, double val);void print_picture(object *);

⌨️ 快捷键说明

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