blob: 8af2e235bfd806155daeb75e38eb68a041b863d5 (
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Author:
* Tavmjong Bah <tavmjong@free.fr>
*
* Copyright (C) 2015, 2018 Tavmong Bah
*
* Released under GNU GPL v2+, read the file 'COPYING' for more information.
*/
#ifndef INKSCAPE_UI_WIDGET_FONT_VARIANT_H
#define INKSCAPE_UI_WIDGET_FONT_VARIANT_H
#include <gtkmm/expander.h>
#include <gtkmm/checkbutton.h>
#include <gtkmm/radiobutton.h>
#include <gtkmm/entry.h>
#include <gtkmm/grid.h>
#include <gtkmm/hvbox.h>
class SPDesktop;
class SPObject;
class SPStyle;
class SPCSSAttr;
namespace Inkscape {
namespace UI {
namespace Widget {
class Feature;
/**
* A container for selecting font variants (OpenType Features).
*/
class FontVariants : public Gtk::Box
{
public:
/**
* Constructor
*/
FontVariants();
protected:
// Ligatures: To start, use four check buttons.
Gtk::Expander _ligatures_frame;
Gtk::Grid _ligatures_grid;
Gtk::CheckButton _ligatures_common;
Gtk::CheckButton _ligatures_discretionary;
Gtk::CheckButton _ligatures_historical;
Gtk::CheckButton _ligatures_contextual;
Gtk::Label _ligatures_label_common;
Gtk::Label _ligatures_label_discretionary;
Gtk::Label _ligatures_label_historical;
Gtk::Label _ligatures_label_contextual;
// Position: Exclusive options
Gtk::Expander _position_frame;
Gtk::Grid _position_grid;
Gtk::RadioButton _position_normal;
Gtk::RadioButton _position_sub;
Gtk::RadioButton _position_super;
// Caps: Exclusive options (maybe a dropdown menu to save space?)
Gtk::Expander _caps_frame;
Gtk::Grid _caps_grid;
Gtk::RadioButton _caps_normal;
Gtk::RadioButton _caps_small;
Gtk::RadioButton _caps_all_small;
Gtk::RadioButton _caps_petite;
Gtk::RadioButton _caps_all_petite;
Gtk::RadioButton _caps_unicase;
Gtk::RadioButton _caps_titling;
// Numeric: Complicated!
Gtk::Expander _numeric_frame;
Gtk::Grid _numeric_grid;
Gtk::RadioButton _numeric_default_style;
Gtk::RadioButton _numeric_lining;
Gtk::Label _numeric_lining_label;
Gtk::RadioButton _numeric_old_style;
Gtk::Label _numeric_old_style_label;
Gtk::RadioButton _numeric_default_width;
Gtk::RadioButton _numeric_proportional;
Gtk::Label _numeric_proportional_label;
Gtk::RadioButton _numeric_tabular;
Gtk::Label _numeric_tabular_label;
Gtk::RadioButton _numeric_default_fractions;
Gtk::RadioButton _numeric_diagonal;
Gtk::Label _numeric_diagonal_label;
Gtk::RadioButton _numeric_stacked;
Gtk::Label _numeric_stacked_label;
Gtk::CheckButton _numeric_ordinal;
Gtk::Label _numeric_ordinal_label;
Gtk::CheckButton _numeric_slashed_zero;
Gtk::Label _numeric_slashed_zero_label;
// East Asian: Complicated!
Gtk::Expander _asian_frame;
Gtk::Grid _asian_grid;
Gtk::RadioButton _asian_default_variant;
Gtk::RadioButton _asian_jis78;
Gtk::RadioButton _asian_jis83;
Gtk::RadioButton _asian_jis90;
Gtk::RadioButton _asian_jis04;
Gtk::RadioButton _asian_simplified;
Gtk::RadioButton _asian_traditional;
Gtk::RadioButton _asian_default_width;
Gtk::RadioButton _asian_full_width;
Gtk::RadioButton _asian_proportional_width;
Gtk::CheckButton _asian_ruby;
// -----
Gtk::Expander _feature_frame;
Gtk::Grid _feature_grid;
Gtk::Box _feature_vbox;
Gtk::Entry _feature_entry;
Gtk::Label _feature_label;
Gtk::Label _feature_list;
Gtk::Label _feature_substitutions;
private:
void ligatures_init();
void ligatures_callback();
void position_init();
void position_callback();
void caps_init();
void caps_callback();
void numeric_init();
void numeric_callback();
void asian_init();
void asian_callback();
void feature_init();
public:
void feature_callback();
private:
// To determine if we need to write out property (may not be necessary)
unsigned _ligatures_all;
unsigned _position_all;
unsigned _caps_all;
unsigned _numeric_all;
unsigned _asian_all;
unsigned _ligatures_mix;
unsigned _position_mix;
unsigned _caps_mix;
unsigned _numeric_mix;
unsigned _asian_mix;
bool _ligatures_changed;
bool _position_changed;
bool _caps_changed;
bool _numeric_changed;
bool _feature_changed;
bool _asian_changed;
std::map<std::string, Feature*> _features;
sigc::signal<void ()> _changed_signal;
public:
/**
* Update GUI based on query results.
*/
void update( SPStyle const *query, bool different_features, Glib::ustring& font_spec );
/**
* Update GUI based on OpenType features of selected font.
*/
void update_opentype( Glib::ustring& font_spec );
/**
* Fill SPCSSAttr based on settings of buttons.
*/
void fill_css( SPCSSAttr* css );
/**
* Get CSS string for markup.
*/
Glib::ustring get_markup();
/**
* Let others know that user has changed GUI settings.
* (Used to enable 'Apply' and 'Default' buttons.)
*/
sigc::connection connectChanged(sigc::slot<void ()> slot) {
return _changed_signal.connect(slot);
}
};
} // namespace Widget
} // namespace UI
} // namespace Inkscape
#endif // INKSCAPE_UI_WIDGET_FONT_VARIANT_H
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8 :
|