summaryrefslogtreecommitdiff
path: root/graphics/epix/label_style.h
blob: 3d3461281f844b0103ecac05eeb69a0f1d1fd0dc (plain)
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/* 
 * label_style.h -- ePiX's current state for text and markers
 *
 * This file is part of ePiX, a C++ library for creating high-quality 
 * figures in LaTeX 
 *
 * Version 1.1.22
 * Last Change: September 24, 2007
 */

/* 
 * Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
 * Andrew D. Hwang <rot 13 nujnat at zngupf dot ubylpebff dot rqh>
 * Department of Mathematics and Computer Science
 * College of the Holy Cross
 * Worcester, MA, 01610-2395, USA
 */

/*
 * ePiX 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.
 *
 * ePiX 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 ePiX; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */

/*
 * This file implements label_state:
 *
 *  [] Text and mask color (Color x2)
 *  [] Alignment (epix_label_posn)
 *  [] Font face and size (strings)
 *  [] Label angle (double, in degrees)
 *
 * The class in this file implements backend for user-level global
 * functions defined in state.h, which modify the_label_style().
 *
 * This header is not part of epix.h.
 */
#ifndef EPIX_LABEL_STATE
#define EPIX_LABEL_STATE

#include <string>

#include "enums.h"

#include "Color.h"
#include "length.h"

#include "pen_data.h"

namespace ePiX {

  class Camera;

  class label_state {
  public:
    // Clients can only construct the default state: black, unmasked,
    // unbordered, basepoint-aligned, unrotated normalsize Roman text.
    label_state();

    // set
    void text_color(const Color& col);
    void mask_color(const Color& col);

    void label_padding(const length& len);
    void label_border(const pen_data& p);

    void align_to(const epix_label_posn a);

    void fontsize(const std::string& fs);
    void fontface(const std::string& f);

    // store label rotation angle internally in degrees
    void label_angle(double th);

    // get
    Color text_color() const;
    Color mask_color() const;

    bool is_masked() const;

    length  label_padding() const;
    pen_data label_border() const;

    epix_label_posn align_to() const;

    // e.g. "scriptsize"
    std::string fontsize() const;
    std::string fontface() const;

    // return angle in degrees
    double label_angle() const;

    // map us through a camera filter
    label_state seen_through(const Camera& cam) const;

  private:
    Color the_text_color;
    Color the_mask_color;

    length the_padding;
    pen_data the_label_border;

    epix_label_posn the_alignment;

    std::string the_fontsize;
    std::string the_fontface;

    double the_angle; // stored in degrees

    // text and background color, padding, border style,
    // alignment, font size and face, angle (degrees)
    label_state(const Color& text,
		const Color& mask,
		const length& pad,
		const pen_data& border,
		const epix_label_posn align,
		const std::string& fontsize,
		const std::string& fontface,
		double th);
  }; // end of label_state

  label_state& the_label_style();

} // end of namespace

#endif /* EPIX_LABEL_STATE */