1// -*- C++ -*-
2/* Copyright (C) 1989, 1990, 1991, 1992, 1993, 2003
3   Free Software Foundation, Inc.
4     Written by James Clark (jjc@jclark.com)
5
6This file is part of groff.
7
8groff is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
10Software Foundation; either version 2, or (at your option) any later
11version.
12
13groff is distributed in the hope that it will be useful, but WITHOUT ANY
14WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16for more details.
17
18You should have received a copy of the GNU General Public License along
19with groff; see the file COPYING.  If not, write to the Free Software
20Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
21
22class common_output : public output {
23private:
24  void dash_line(const position &start, const position &end,
25		 const line_type &lt, double dash_width, double gap_width,
26		 double *offsetp);
27  void dash_arc(const position &cent, double rad,
28		double start_angle, double end_angle, const line_type &lt,
29		double dash_width, double gap_width, double *offsetp);
30  void dot_line(const position &start, const position &end,
31		const line_type &lt, double gap_width, double *offsetp);
32  void dot_arc(const position &cent, double rad,
33	       double start_angle, double end_angle, const line_type &lt,
34	       double gap_width, double *offsetp);
35protected:
36  virtual void dot(const position &, const line_type &) = 0;
37  void ellipse_arc(const position &, const position &,
38		   const position &, const distance &,
39		   const line_type &);
40  void dashed_circle(const position &, double rad, const line_type &);
41  void dotted_circle(const position &, double rad, const line_type &);
42  void dashed_ellipse(const position &, const distance &, const line_type &);
43  void dotted_ellipse(const position &, const distance &, const line_type &);
44  void dashed_arc(const position &, const position &, const position &,
45		  const line_type &);
46  void dotted_arc(const position &, const position &, const position &,
47		  const line_type &);
48  virtual void solid_arc(const position &cent, double rad, double start_angle,
49			 double end_angle, const line_type &lt);
50  void dashed_rounded_box(const position &, const distance &, double,
51			  const line_type &);
52  void dotted_rounded_box(const position &, const distance &, double,
53			  const line_type &);
54  void solid_rounded_box(const position &, const distance &, double,
55			 const line_type &);
56  void filled_rounded_box(const position &, const distance &, double, double);
57public:
58  void start_picture(double sc, const position &ll, const position &ur) = 0;
59  void finish_picture() = 0;
60  void circle(const position &, double rad, const line_type &, double) = 0;
61  void text(const position &, text_piece *, int, double) = 0;
62  void line(const position &, const position *, int n, const line_type &) = 0;
63  void polygon(const position *, int n, const line_type &, double) = 0;
64  void spline(const position &, const position *, int n,
65	      const line_type &) = 0;
66  void arc(const position &, const position &, const position &,
67	   const line_type &) = 0;
68  void ellipse(const position &, const distance &,
69	       const line_type &, double) = 0;
70  void rounded_box(const position &, const distance &, double,
71		   const line_type &, double);
72  void set_color(char *, char *) = 0;
73  void reset_color() = 0;
74  char *get_last_filled() = 0;
75  char *get_outline_color() = 0;
76};
77
78int compute_arc_center(const position &start, const position &cent,
79		       const position &end, position *result);
80
81