1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
// -*- C++ -*-
// The common_output class: subclassed from the output class,
// providing support for dotting/dashing and for rounded boxes.
// The output class is defined in output.h.
class common_output : public output
{
public:
// basic interface, implemented in concrete classes rather than here
virtual void start_picture (double sc, const position &ll, const position &ur) = 0;
virtual void finish_picture () = 0;
// draw objects (not implemented here)
virtual void arc (const position &start, const position ¢,
const position &end, const line_type <) = 0;
virtual void circle (const position ¢, double rad,
const line_type <, double fill) = 0;
virtual void ellipse (const position ¢, const distance &dim,
const line_type <, double fill) = 0;
virtual void line (const position &start, const position *v, int n,
const line_type <) = 0;
virtual void polygon (const position *v, int n,
const line_type <, double fill) = 0;
virtual void spline (const position &start, const position *v, int n,
const line_type <) = 0;
virtual void text (const position ¢er, text_piece *v, int n,
double angle) = 0;
// draw objects (implemented here)
virtual void rounded_box (const position ¢, const distance &dim,
double rad, const line_type <, double fill);
protected:
/* implemented in concrete classes (used for dotting lines by hand) */
virtual void dot (const position ¢, const line_type <) = 0;
/* implemented in terms of arc (); can be overridden (e.g. in tex_output) */
virtual void solid_arc (const position ¢, double rad, double start_angle,
double end_angle, const line_type <);
/* dashing and dotting `by hand' (used by troff_output, not tex_output) */
void dashed_circle (const position ¢, double rad, const line_type <);
void dotted_circle (const position ¢, double rad, const line_type <);
void dashed_arc (const position &start, const position ¢,
const position &end, const line_type <);
void dotted_arc (const position &start, const position ¢,
const position &end, const line_type <);
void dashed_rounded_box (const position ¢, const distance &dim,
double rad, const line_type <);
void dotted_rounded_box (const position ¢, const distance &dim,
double rad, const line_type <);
void solid_rounded_box (const position ¢, const distance &dim,
double rad, const line_type <);
void filled_rounded_box (const position ¢, const distance &dim,
double rad, double fill);
private:
void dash_line (const position &start, const position &end,
const line_type <, double dash_width, double gap_width,
double *offsetp);
void dash_arc (const position ¢, double rad,
double start_angle, double end_angle, const line_type <,
double dash_width, double gap_width, double *offsetp);
void dot_line (const position &start, const position &end,
const line_type <, double gap_width, double *offsetp);
void dot_arc (const position ¢, double rad,
double start_angle, double end_angle, const line_type <,
double gap_width, double *offsetp);
};
// not private because TeX driver uses this
int compute_arc_center (const position &start, const position ¢, const position &end, position *result);
|