xref: /haiku/src/apps/haikudepot/textview/CharacterStyleData.h (revision bab64f65bb775dc23060e276f1f1c4498ab7af6c)
1 /*
2  * Copyright 2013, Stephan Aßmus <superstippi@gmx.de>.
3  * All rights reserved. Distributed under the terms of the MIT License.
4  */
5 #ifndef CHARACTER_STYLE_DATA_H
6 #define CHARACTER_STYLE_DATA_H
7 
8 #include <Font.h>
9 #include <Referenceable.h>
10 
11 
12 enum {
13 	STRIKE_OUT_NONE		= 0,
14 	STRIKE_OUT_SINGLE	= 1,
15 };
16 
17 
18 enum {
19 	UNDERLINE_NONE		= 0,
20 	UNDERLINE_SINGLE	= 1,
21 	UNDERLINE_DOUBLE	= 2,
22 	UNDERLINE_WIGGLE	= 3,
23 	UNDERLINE_DOTTED	= 4,
24 };
25 
26 
27 class CharacterStyleData;
28 typedef BReference<CharacterStyleData>	CharacterStyleDataRef;
29 
30 
31 // You cannot modify a CharacterStyleData object once it has been
32 // created. Instead, the setter methods return a new object that equals
33 // the object on which the method has been called, except for the changed
34 // property. If the property already has the requested value, then a
35 // reference to the same object is returned.
36 class CharacterStyleData : public BReferenceable {
37 public:
38 								CharacterStyleData();
39 								CharacterStyleData(
40 									const CharacterStyleData& other);
41 
42 			bool				operator==(
43 									const CharacterStyleData& other) const;
44 			bool				operator!=(
45 									const CharacterStyleData& other) const;
46 
47 			CharacterStyleDataRef SetFont(const BFont& font);
Font()48 	inline	const BFont&		Font() const
49 									{ return fFont; }
50 
51 			CharacterStyleDataRef SetAscent(float ascent);
52 
53 			// Returns the ascent of the configured font, unless the ascent
54 			// has been overridden by a fixed value with SetAscent().
55 			float				Ascent() const;
56 
57 			CharacterStyleDataRef SetDescent(float descent);
58 
59 			// Returns the descent of the configured font, unless the descent
60 			// has been overridden by a fixed value with SetDescent().
61 			float				Descent() const;
62 
63 			CharacterStyleDataRef SetWidth(float width);
Width()64 	inline	float				Width() const
65 									{ return fWidth; }
66 
67 			CharacterStyleDataRef SetGlyphSpacing(float glyphSpacing);
GlyphSpacing()68 	inline	float				GlyphSpacing() const
69 									{ return fGlyphSpacing; }
70 
71 			CharacterStyleDataRef SetForegroundColor(color_which which);
72 			CharacterStyleDataRef SetForegroundColor(rgb_color color);
ForegroundColor()73 	inline	rgb_color			ForegroundColor() const
74 									{ return fFgColor; }
WhichForegroundColor()75 	inline	color_which			WhichForegroundColor() const
76 									{ return fWhichFgColor; }
77 
78 			CharacterStyleDataRef SetBackgroundColor(color_which which);
79 			CharacterStyleDataRef SetBackgroundColor(rgb_color color);
BackgroundColor()80 	inline	rgb_color			BackgroundColor() const
81 									{ return fBgColor; }
WhichBackgroundColor()82 	inline	color_which			WhichBackgroundColor() const
83 									{ return fWhichBgColor; }
84 
85 			CharacterStyleDataRef SetStrikeOutColor(color_which which);
86 			CharacterStyleDataRef SetStrikeOutColor(rgb_color color);
StrikeOutColor()87 	inline	rgb_color			StrikeOutColor() const
88 									{ return fStrikeOutColor; }
WhichStrikeOutColor()89 	inline	color_which			WhichStrikeOutColor() const
90 									{ return fWhichStrikeOutColor; }
91 
92 			CharacterStyleDataRef SetUnderlineColor(color_which which);
93 			CharacterStyleDataRef SetUnderlineColor(rgb_color color);
UnderlineColor()94 	inline	rgb_color			UnderlineColor() const
95 									{ return fUnderlineColor; }
WhichUnderlineColor()96 	inline	color_which			WhichUnderlineColor() const
97 									{ return fWhichUnderlineColor; }
98 
99 			CharacterStyleDataRef SetStrikeOut(uint8 strikeOut);
StrikeOut()100 	inline	uint8				StrikeOut() const
101 									{ return fStrikeOutStyle; }
102 
103 			CharacterStyleDataRef SetUnderline(uint8 underline);
Underline()104 	inline	uint8				Underline() const
105 									{ return fUnderlineStyle; }
106 
107 
108 private:
109 			CharacterStyleData&	operator=(const CharacterStyleData& other);
110 
111 private:
112 			BFont				fFont;
113 
114 			// The following three values override glyph metrics unless -1
115 			// This is useful when you want to have a place-holder character
116 			// in the text. You would assign this character a CharacterStyle
117 			// which defines ascent, descent and width to fixed values, thereby
118 			// controlling the exact dimensions of the character, regardless of
119 			// font size. Instead of the character, one could render an icon
120 			// that is layouted within the text.
121 			float				fAscent;
122 			float				fDescent;
123 			float				fWidth;
124 
125 			// Additional spacing to be applied between glyphs.
126 			float				fGlyphSpacing;
127 
128 			color_which			fWhichFgColor;
129 			color_which			fWhichBgColor;
130 
131 			color_which			fWhichStrikeOutColor;
132 			color_which			fWhichUnderlineColor;
133 
134 			rgb_color			fFgColor;
135 			rgb_color			fBgColor;
136 
137 			rgb_color			fStrikeOutColor;
138 			rgb_color			fUnderlineColor;
139 
140 			uint8				fStrikeOutStyle;
141 			uint8				fUnderlineStyle;
142 };
143 
144 
145 #endif // CHARACTER_STYLE_DATA_H
146