Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
glyphs.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* Authors:
3 * Jon A. Cruz
4 * Abhishek Sharma
5 * Tavmjong Bah
6 *
7 * Copyright (C) 2010 Jon A. Cruz
8 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
9 */
10
11#include "glyphs.h"
12
13#include <map>
14#include <utility>
15#include <glibmm/i18n.h>
16#include <glibmm/markup.h>
17#include <glibmm/ustring.h>
18#include <gtkmm/button.h>
19#include <gtkmm/comboboxtext.h>
20#include <gtkmm/grid.h>
21#include <gtkmm/iconview.h>
22#include <gtkmm/liststore.h>
23#include <gtkmm/scrolledwindow.h>
24#include <sigc++/adaptors/hide.h>
25#include <sigc++/functors/mem_fun.h>
29
30#include "document-undo.h"
31#include "selection.h"
32#include "text-editing.h"
33#include "object/sp-flowtext.h"
34#include "object/sp-text.h"
35#include "ui/icon-names.h"
36#include "ui/pack.h"
38
39namespace Inkscape::UI::Dialog {
40
41static auto const &getScriptToName()
42{
43 static std::map<GUnicodeScript, Glib::ustring> mappings;
44 if (!mappings.empty()) return mappings;
45
46 mappings[G_UNICODE_SCRIPT_INVALID_CODE] = _("all");
47 mappings[G_UNICODE_SCRIPT_COMMON] = _("common");
48 mappings[G_UNICODE_SCRIPT_INHERITED] = _("inherited");
49 mappings[G_UNICODE_SCRIPT_ARABIC] = _("Arabic");
50 mappings[G_UNICODE_SCRIPT_ARMENIAN] = _("Armenian");
51 mappings[G_UNICODE_SCRIPT_BENGALI] = _("Bengali");
52 mappings[G_UNICODE_SCRIPT_BOPOMOFO] = _("Bopomofo");
53 mappings[G_UNICODE_SCRIPT_CHEROKEE] = _("Cherokee");
54 mappings[G_UNICODE_SCRIPT_COPTIC] = _("Coptic");
55 mappings[G_UNICODE_SCRIPT_CYRILLIC] = _("Cyrillic");
56 mappings[G_UNICODE_SCRIPT_DESERET] = _("Deseret");
57 mappings[G_UNICODE_SCRIPT_DEVANAGARI] = _("Devanagari");
58 mappings[G_UNICODE_SCRIPT_ETHIOPIC] = _("Ethiopic");
59 mappings[G_UNICODE_SCRIPT_GEORGIAN] = _("Georgian");
60 mappings[G_UNICODE_SCRIPT_GOTHIC] = _("Gothic");
61 mappings[G_UNICODE_SCRIPT_GREEK] = _("Greek");
62 mappings[G_UNICODE_SCRIPT_GUJARATI] = _("Gujarati");
63 mappings[G_UNICODE_SCRIPT_GURMUKHI] = _("Gurmukhi");
64 mappings[G_UNICODE_SCRIPT_HAN] = _("Han");
65 mappings[G_UNICODE_SCRIPT_HANGUL] = _("Hangul");
66 mappings[G_UNICODE_SCRIPT_HEBREW] = _("Hebrew");
67 mappings[G_UNICODE_SCRIPT_HIRAGANA] = _("Hiragana");
68 mappings[G_UNICODE_SCRIPT_KANNADA] = _("Kannada");
69 mappings[G_UNICODE_SCRIPT_KATAKANA] = _("Katakana");
70 mappings[G_UNICODE_SCRIPT_KHMER] = _("Khmer");
71 mappings[G_UNICODE_SCRIPT_LAO] = _("Lao");
72 mappings[G_UNICODE_SCRIPT_LATIN] = _("Latin");
73 mappings[G_UNICODE_SCRIPT_MALAYALAM] = _("Malayalam");
74 mappings[G_UNICODE_SCRIPT_MONGOLIAN] = _("Mongolian");
75 mappings[G_UNICODE_SCRIPT_MYANMAR] = _("Myanmar");
76 mappings[G_UNICODE_SCRIPT_OGHAM] = _("Ogham");
77 mappings[G_UNICODE_SCRIPT_OLD_ITALIC] = _("Old Italic");
78 mappings[G_UNICODE_SCRIPT_ORIYA] = _("Oriya");
79 mappings[G_UNICODE_SCRIPT_RUNIC] = _("Runic");
80 mappings[G_UNICODE_SCRIPT_SINHALA] = _("Sinhala");
81 mappings[G_UNICODE_SCRIPT_SYRIAC] = _("Syriac");
82 mappings[G_UNICODE_SCRIPT_TAMIL] = _("Tamil");
83 mappings[G_UNICODE_SCRIPT_TELUGU] = _("Telugu");
84 mappings[G_UNICODE_SCRIPT_THAANA] = _("Thaana");
85 mappings[G_UNICODE_SCRIPT_THAI] = _("Thai");
86 mappings[G_UNICODE_SCRIPT_TIBETAN] = _("Tibetan");
87 mappings[G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL] = _("Canadian Aboriginal");
88 mappings[G_UNICODE_SCRIPT_YI] = _("Yi");
89 mappings[G_UNICODE_SCRIPT_TAGALOG] = _("Tagalog");
90 mappings[G_UNICODE_SCRIPT_HANUNOO] = _("Hanunoo");
91 mappings[G_UNICODE_SCRIPT_BUHID] = _("Buhid");
92 mappings[G_UNICODE_SCRIPT_TAGBANWA] = _("Tagbanwa");
93 mappings[G_UNICODE_SCRIPT_BRAILLE] = _("Braille");
94 mappings[G_UNICODE_SCRIPT_CYPRIOT] = _("Cypriot");
95 mappings[G_UNICODE_SCRIPT_LIMBU] = _("Limbu");
96 mappings[G_UNICODE_SCRIPT_OSMANYA] = _("Osmanya");
97 mappings[G_UNICODE_SCRIPT_SHAVIAN] = _("Shavian");
98 mappings[G_UNICODE_SCRIPT_LINEAR_B] = _("Linear B");
99 mappings[G_UNICODE_SCRIPT_TAI_LE] = _("Tai Le");
100 mappings[G_UNICODE_SCRIPT_UGARITIC] = _("Ugaritic");
101 mappings[G_UNICODE_SCRIPT_NEW_TAI_LUE] = _("New Tai Lue");
102 mappings[G_UNICODE_SCRIPT_BUGINESE] = _("Buginese");
103 mappings[G_UNICODE_SCRIPT_GLAGOLITIC] = _("Glagolitic");
104 mappings[G_UNICODE_SCRIPT_TIFINAGH] = _("Tifinagh");
105 mappings[G_UNICODE_SCRIPT_SYLOTI_NAGRI] = _("Syloti Nagri");
106 mappings[G_UNICODE_SCRIPT_OLD_PERSIAN] = _("Old Persian");
107 mappings[G_UNICODE_SCRIPT_KHAROSHTHI] = _("Kharoshthi");
108 mappings[G_UNICODE_SCRIPT_UNKNOWN] = _("unassigned");
109 mappings[G_UNICODE_SCRIPT_BALINESE] = _("Balinese");
110 mappings[G_UNICODE_SCRIPT_CUNEIFORM] = _("Cuneiform");
111 mappings[G_UNICODE_SCRIPT_PHOENICIAN] = _("Phoenician");
112 mappings[G_UNICODE_SCRIPT_PHAGS_PA] = _("Phags-pa");
113 mappings[G_UNICODE_SCRIPT_NKO] = _("N'Ko");
114 mappings[G_UNICODE_SCRIPT_KAYAH_LI] = _("Kayah Li");
115 mappings[G_UNICODE_SCRIPT_LEPCHA] = _("Lepcha");
116 mappings[G_UNICODE_SCRIPT_REJANG] = _("Rejang");
117 mappings[G_UNICODE_SCRIPT_SUNDANESE] = _("Sundanese");
118 mappings[G_UNICODE_SCRIPT_SAURASHTRA] = _("Saurashtra");
119 mappings[G_UNICODE_SCRIPT_CHAM] = _("Cham");
120 mappings[G_UNICODE_SCRIPT_OL_CHIKI] = _("Ol Chiki");
121 mappings[G_UNICODE_SCRIPT_VAI] = _("Vai");
122 mappings[G_UNICODE_SCRIPT_CARIAN] = _("Carian");
123 mappings[G_UNICODE_SCRIPT_LYCIAN] = _("Lycian");
124 mappings[G_UNICODE_SCRIPT_LYDIAN] = _("Lydian");
125 mappings[G_UNICODE_SCRIPT_AVESTAN] = _("Avestan"); // Since: 2.26
126 mappings[G_UNICODE_SCRIPT_BAMUM] = _("Bamum"); // Since: 2.26
127 mappings[G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS] = _("Egyptian Hieroglpyhs"); // Since: 2.26
128 mappings[G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC] = _("Imperial Aramaic"); // Since: 2.26
129 mappings[G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI]= _("Inscriptional Pahlavi"); // Since: 2.26
130 mappings[G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN]= _("Inscriptional Parthian"); // Since: 2.26
131 mappings[G_UNICODE_SCRIPT_JAVANESE] = _("Javanese"); // Since: 2.26
132 mappings[G_UNICODE_SCRIPT_KAITHI] = _("Kaithi"); // Since: 2.26
133 mappings[G_UNICODE_SCRIPT_LISU] = _("Lisu"); // Since: 2.26
134 mappings[G_UNICODE_SCRIPT_MEETEI_MAYEK] = _("Meetei Mayek"); // Since: 2.26
135 mappings[G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN] = _("Old South Arabian"); // Since: 2.26
136 mappings[G_UNICODE_SCRIPT_OLD_TURKIC] = _("Old Turkic"); // Since: 2.28
137 mappings[G_UNICODE_SCRIPT_SAMARITAN] = _("Samaritan"); // Since: 2.26
138 mappings[G_UNICODE_SCRIPT_TAI_THAM] = _("Tai Tham"); // Since: 2.26
139 mappings[G_UNICODE_SCRIPT_TAI_VIET] = _("Tai Viet"); // Since: 2.26
140 mappings[G_UNICODE_SCRIPT_BATAK] = _("Batak"); // Since: 2.28
141 mappings[G_UNICODE_SCRIPT_BRAHMI] = _("Brahmi"); // Since: 2.28
142 mappings[G_UNICODE_SCRIPT_MANDAIC] = _("Mandaic"); // Since: 2.28
143 mappings[G_UNICODE_SCRIPT_CHAKMA] = _("Chakma"); // Since: 2.32
144 mappings[G_UNICODE_SCRIPT_MEROITIC_CURSIVE] = _("Meroitic Cursive"); // Since: 2.32
145 mappings[G_UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS] = _("Meroitic Hieroglyphs"); // Since: 2.32
146 mappings[G_UNICODE_SCRIPT_MIAO] = _("Miao"); // Since: 2.32
147 mappings[G_UNICODE_SCRIPT_SHARADA] = _("Sharada"); // Since: 2.32
148 mappings[G_UNICODE_SCRIPT_SORA_SOMPENG] = _("Sora Sompeng"); // Since: 2.32
149 mappings[G_UNICODE_SCRIPT_TAKRI] = _("Takri"); // Since: 2.32
150 mappings[G_UNICODE_SCRIPT_BASSA_VAH] = _("Bassa"); // Since: 2.42
151 mappings[G_UNICODE_SCRIPT_CAUCASIAN_ALBANIAN] = _("Caucasian Albanian"); // Since: 2.42
152 mappings[G_UNICODE_SCRIPT_DUPLOYAN] = _("Duployan"); // Since: 2.42
153 mappings[G_UNICODE_SCRIPT_ELBASAN] = _("Elbasan"); // Since: 2.42
154 mappings[G_UNICODE_SCRIPT_GRANTHA] = _("Grantha"); // Since: 2.42
155 mappings[G_UNICODE_SCRIPT_KHOJKI] = _("Khojki"); // Since: 2.42
156 mappings[G_UNICODE_SCRIPT_KHUDAWADI] = _("Khudawadi, Sindhi"); // Since: 2.42
157 mappings[G_UNICODE_SCRIPT_LINEAR_A] = _("Linear A"); // Since: 2.42
158 mappings[G_UNICODE_SCRIPT_MAHAJANI] = _("Mahajani"); // Since: 2.42
159 mappings[G_UNICODE_SCRIPT_MANICHAEAN] = _("Manichaean"); // Since: 2.42
160 mappings[G_UNICODE_SCRIPT_MENDE_KIKAKUI] = _("Mende Kikakui"); // Since: 2.42
161 mappings[G_UNICODE_SCRIPT_MODI] = _("Modi"); // Since: 2.42
162 mappings[G_UNICODE_SCRIPT_MRO] = _("Mro"); // Since: 2.42
163 mappings[G_UNICODE_SCRIPT_NABATAEAN] = _("Nabataean"); // Since: 2.42
164 mappings[G_UNICODE_SCRIPT_OLD_NORTH_ARABIAN] = _("Old North Arabian"); // Since: 2.42
165 mappings[G_UNICODE_SCRIPT_OLD_PERMIC] = _("Old Permic"); // Since: 2.42
166 mappings[G_UNICODE_SCRIPT_PAHAWH_HMONG] = _("Pahawh Hmong"); // Since: 2.42
167 mappings[G_UNICODE_SCRIPT_PALMYRENE] = _("Palmyrene"); // Since: 2.42
168 mappings[G_UNICODE_SCRIPT_PAU_CIN_HAU] = _("Pau Cin Hau"); // Since: 2.42
169 mappings[G_UNICODE_SCRIPT_PSALTER_PAHLAVI] = _("Psalter Pahlavi"); // Since: 2.42
170 mappings[G_UNICODE_SCRIPT_SIDDHAM] = _("Siddham"); // Since: 2.42
171 mappings[G_UNICODE_SCRIPT_TIRHUTA] = _("Tirhuta"); // Since: 2.42
172 mappings[G_UNICODE_SCRIPT_WARANG_CITI] = _("Warang Citi"); // Since: 2.42
173 mappings[G_UNICODE_SCRIPT_AHOM] = _("Ahom"); // Since: 2.48
174 mappings[G_UNICODE_SCRIPT_ANATOLIAN_HIEROGLYPHS]= _("Anatolian Hieroglyphs"); // Since: 2.48
175 mappings[G_UNICODE_SCRIPT_HATRAN] = _("Hatran"); // Since: 2.48
176 mappings[G_UNICODE_SCRIPT_MULTANI] = _("Multani"); // Since: 2.48
177 mappings[G_UNICODE_SCRIPT_OLD_HUNGARIAN] = _("Old Hungarian"); // Since: 2.48
178 mappings[G_UNICODE_SCRIPT_SIGNWRITING] = _("Signwriting"); // Since: 2.48
179 /*
180 mappings[G_UNICODE_SCRIPT_ADLAM] = _("Adlam"); // Since: 2.50
181 mappings[G_UNICODE_SCRIPT_BHAIKSUKI] = _("Bhaiksuki"); // Since: 2.50
182 mappings[G_UNICODE_SCRIPT_MARCHEN] = _("Marchen"); // Since: 2.50
183 mappings[G_UNICODE_SCRIPT_NEWA] = _("Newa"); // Since: 2.50
184 mappings[G_UNICODE_SCRIPT_OSAGE] = _("Osage"); // Since: 2.50
185 mappings[G_UNICODE_SCRIPT_TANGUT] = _("Tangut"); // Since: 2.50
186 mappings[G_UNICODE_SCRIPT_MASARAM_GONDI] = _("Masaram Gondi"); // Since: 2.54
187 mappings[G_UNICODE_SCRIPT_NUSHU] = _("Nushu"); // Since: 2.54
188 mappings[G_UNICODE_SCRIPT_SOYOMBO] = _("Soyombo"); // Since: 2.54
189 mappings[G_UNICODE_SCRIPT_ZANABAZAR_SQUARE] = _("Zanabazar Square"); // Since: 2.54
190 mappings[G_UNICODE_SCRIPT_DOGRA] = _("Dogra"); // Since: 2.58
191 mappings[G_UNICODE_SCRIPT_GUNJALA_GONDI] = _("Gunjala Gondi"); // Since: 2.58
192 mappings[G_UNICODE_SCRIPT_HANIFI_ROHINGYA] = _("Hanifi Rohingya"); // Since: 2.58
193 mappings[G_UNICODE_SCRIPT_MAKASAR] = _("Makasar"); // Since: 2.58
194 mappings[G_UNICODE_SCRIPT_MEDEFAIDRIN] = _("Medefaidrin"); // Since: 2.58
195 mappings[G_UNICODE_SCRIPT_OLD_SOGDIAN] = _("Old Sogdian"); // Since: 2.58
196 mappings[G_UNICODE_SCRIPT_SOGDIAN] = _("Sogdian"); // Since: 2.58
197 mappings[G_UNICODE_SCRIPT_ELYMAIC] = _("Elym"); // Since: 2.62
198 mappings[G_UNICODE_SCRIPT_NANDINAGARI] = _("Nand"); // Since: 2.62
199 mappings[G_UNICODE_SCRIPT_NYIAKENG_PUACHUE_HMONG]= _("Rohg"); // Since: 2.62
200 mappings[G_UNICODE_SCRIPT_WANCHO] = _("Wcho"); // Since: 2.62
201 */
202 return mappings;
203}
204
205typedef std::pair<gunichar, gunichar> Range;
206typedef std::pair<Range, Glib::ustring> NamedRange;
207
208static auto const &getRanges()
209{
210 static std::vector<NamedRange> ranges;
211 if (!ranges.empty()) return ranges;
212
213 ranges.emplace_back(std::make_pair(0x00000, 0x2FFFF), _("all"));
214 ranges.emplace_back(std::make_pair(0x00000, 0x0FFFF), _("Basic Plane"));
215 ranges.emplace_back(std::make_pair(0x10000, 0x1FFFF), _("Extended Multilingual Plane"));
216 ranges.emplace_back(std::make_pair(0x20000, 0x2FFFF), _("Supplementary Ideographic Plane"));
217 ranges.emplace_back(std::make_pair(0x0000, 0x007F), _("Basic Latin"));
218 ranges.emplace_back(std::make_pair(0x0080, 0x00FF), _("Latin-1 Supplement"));
219 ranges.emplace_back(std::make_pair(0x0100, 0x017F), _("Latin Extended-A"));
220 ranges.emplace_back(std::make_pair(0x0180, 0x024F), _("Latin Extended-B"));
221 ranges.emplace_back(std::make_pair(0x0250, 0x02AF), _("IPA Extensions"));
222 ranges.emplace_back(std::make_pair(0x02B0, 0x02FF), _("Spacing Modifier Letters"));
223 ranges.emplace_back(std::make_pair(0x0300, 0x036F), _("Combining Diacritical Marks"));
224 ranges.emplace_back(std::make_pair(0x0370, 0x03FF), _("Greek and Coptic"));
225 ranges.emplace_back(std::make_pair(0x0400, 0x04FF), _("Cyrillic"));
226 ranges.emplace_back(std::make_pair(0x0500, 0x052F), _("Cyrillic Supplement"));
227 ranges.emplace_back(std::make_pair(0x0530, 0x058F), _("Armenian"));
228 ranges.emplace_back(std::make_pair(0x0590, 0x05FF), _("Hebrew"));
229 ranges.emplace_back(std::make_pair(0x0600, 0x06FF), _("Arabic"));
230 ranges.emplace_back(std::make_pair(0x0700, 0x074F), _("Syriac"));
231 ranges.emplace_back(std::make_pair(0x0750, 0x077F), _("Arabic Supplement"));
232 ranges.emplace_back(std::make_pair(0x0780, 0x07BF), _("Thaana"));
233 ranges.emplace_back(std::make_pair(0x07C0, 0x07FF), _("NKo"));
234 ranges.emplace_back(std::make_pair(0x0800, 0x083F), _("Samaritan"));
235 ranges.emplace_back(std::make_pair(0x0900, 0x097F), _("Devanagari"));
236 ranges.emplace_back(std::make_pair(0x0980, 0x09FF), _("Bengali"));
237 ranges.emplace_back(std::make_pair(0x0A00, 0x0A7F), _("Gurmukhi"));
238 ranges.emplace_back(std::make_pair(0x0A80, 0x0AFF), _("Gujarati"));
239 ranges.emplace_back(std::make_pair(0x0B00, 0x0B7F), _("Oriya"));
240 ranges.emplace_back(std::make_pair(0x0B80, 0x0BFF), _("Tamil"));
241 ranges.emplace_back(std::make_pair(0x0C00, 0x0C7F), _("Telugu"));
242 ranges.emplace_back(std::make_pair(0x0C80, 0x0CFF), _("Kannada"));
243 ranges.emplace_back(std::make_pair(0x0D00, 0x0D7F), _("Malayalam"));
244 ranges.emplace_back(std::make_pair(0x0D80, 0x0DFF), _("Sinhala"));
245 ranges.emplace_back(std::make_pair(0x0E00, 0x0E7F), _("Thai"));
246 ranges.emplace_back(std::make_pair(0x0E80, 0x0EFF), _("Lao"));
247 ranges.emplace_back(std::make_pair(0x0F00, 0x0FFF), _("Tibetan"));
248 ranges.emplace_back(std::make_pair(0x1000, 0x109F), _("Myanmar"));
249 ranges.emplace_back(std::make_pair(0x10A0, 0x10FF), _("Georgian"));
250 ranges.emplace_back(std::make_pair(0x1100, 0x11FF), _("Hangul Jamo"));
251 ranges.emplace_back(std::make_pair(0x1200, 0x137F), _("Ethiopic"));
252 ranges.emplace_back(std::make_pair(0x1380, 0x139F), _("Ethiopic Supplement"));
253 ranges.emplace_back(std::make_pair(0x13A0, 0x13FF), _("Cherokee"));
254 ranges.emplace_back(std::make_pair(0x1400, 0x167F), _("Unified Canadian Aboriginal Syllabics"));
255 ranges.emplace_back(std::make_pair(0x1680, 0x169F), _("Ogham"));
256 ranges.emplace_back(std::make_pair(0x16A0, 0x16FF), _("Runic"));
257 ranges.emplace_back(std::make_pair(0x1700, 0x171F), _("Tagalog"));
258 ranges.emplace_back(std::make_pair(0x1720, 0x173F), _("Hanunoo"));
259 ranges.emplace_back(std::make_pair(0x1740, 0x175F), _("Buhid"));
260 ranges.emplace_back(std::make_pair(0x1760, 0x177F), _("Tagbanwa"));
261 ranges.emplace_back(std::make_pair(0x1780, 0x17FF), _("Khmer"));
262 ranges.emplace_back(std::make_pair(0x1800, 0x18AF), _("Mongolian"));
263 ranges.emplace_back(std::make_pair(0x18B0, 0x18FF), _("Unified Canadian Aboriginal Syllabics Extended"));
264 ranges.emplace_back(std::make_pair(0x1900, 0x194F), _("Limbu"));
265 ranges.emplace_back(std::make_pair(0x1950, 0x197F), _("Tai Le"));
266 ranges.emplace_back(std::make_pair(0x1980, 0x19DF), _("New Tai Lue"));
267 ranges.emplace_back(std::make_pair(0x19E0, 0x19FF), _("Khmer Symbols"));
268 ranges.emplace_back(std::make_pair(0x1A00, 0x1A1F), _("Buginese"));
269 ranges.emplace_back(std::make_pair(0x1A20, 0x1AAF), _("Tai Tham"));
270 ranges.emplace_back(std::make_pair(0x1B00, 0x1B7F), _("Balinese"));
271 ranges.emplace_back(std::make_pair(0x1B80, 0x1BBF), _("Sundanese"));
272 ranges.emplace_back(std::make_pair(0x1C00, 0x1C4F), _("Lepcha"));
273 ranges.emplace_back(std::make_pair(0x1C50, 0x1C7F), _("Ol Chiki"));
274 ranges.emplace_back(std::make_pair(0x1CD0, 0x1CFF), _("Vedic Extensions"));
275 ranges.emplace_back(std::make_pair(0x1D00, 0x1D7F), _("Phonetic Extensions"));
276 ranges.emplace_back(std::make_pair(0x1D80, 0x1DBF), _("Phonetic Extensions Supplement"));
277 ranges.emplace_back(std::make_pair(0x1DC0, 0x1DFF), _("Combining Diacritical Marks Supplement"));
278 ranges.emplace_back(std::make_pair(0x1E00, 0x1EFF), _("Latin Extended Additional"));
279 ranges.emplace_back(std::make_pair(0x1F00, 0x1FFF), _("Greek Extended"));
280 ranges.emplace_back(std::make_pair(0x2000, 0x206F), _("General Punctuation"));
281 ranges.emplace_back(std::make_pair(0x2070, 0x209F), _("Superscripts and Subscripts"));
282 ranges.emplace_back(std::make_pair(0x20A0, 0x20CF), _("Currency Symbols"));
283 ranges.emplace_back(std::make_pair(0x20D0, 0x20FF), _("Combining Diacritical Marks for Symbols"));
284 ranges.emplace_back(std::make_pair(0x2100, 0x214F), _("Letterlike Symbols"));
285 ranges.emplace_back(std::make_pair(0x2150, 0x218F), _("Number Forms"));
286 ranges.emplace_back(std::make_pair(0x2190, 0x21FF), _("Arrows"));
287 ranges.emplace_back(std::make_pair(0x2200, 0x22FF), _("Mathematical Operators"));
288 ranges.emplace_back(std::make_pair(0x2300, 0x23FF), _("Miscellaneous Technical"));
289 ranges.emplace_back(std::make_pair(0x2400, 0x243F), _("Control Pictures"));
290 ranges.emplace_back(std::make_pair(0x2440, 0x245F), _("Optical Character Recognition"));
291 ranges.emplace_back(std::make_pair(0x2460, 0x24FF), _("Enclosed Alphanumerics"));
292 ranges.emplace_back(std::make_pair(0x2500, 0x257F), _("Box Drawing"));
293 ranges.emplace_back(std::make_pair(0x2580, 0x259F), _("Block Elements"));
294 ranges.emplace_back(std::make_pair(0x25A0, 0x25FF), _("Geometric Shapes"));
295 ranges.emplace_back(std::make_pair(0x2600, 0x26FF), _("Miscellaneous Symbols"));
296 ranges.emplace_back(std::make_pair(0x2700, 0x27BF), _("Dingbats"));
297 ranges.emplace_back(std::make_pair(0x27C0, 0x27EF), _("Miscellaneous Mathematical Symbols-A"));
298 ranges.emplace_back(std::make_pair(0x27F0, 0x27FF), _("Supplemental Arrows-A"));
299 ranges.emplace_back(std::make_pair(0x2800, 0x28FF), _("Braille Patterns"));
300 ranges.emplace_back(std::make_pair(0x2900, 0x297F), _("Supplemental Arrows-B"));
301 ranges.emplace_back(std::make_pair(0x2980, 0x29FF), _("Miscellaneous Mathematical Symbols-B"));
302 ranges.emplace_back(std::make_pair(0x2A00, 0x2AFF), _("Supplemental Mathematical Operators"));
303 ranges.emplace_back(std::make_pair(0x2B00, 0x2BFF), _("Miscellaneous Symbols and Arrows"));
304 ranges.emplace_back(std::make_pair(0x2C00, 0x2C5F), _("Glagolitic"));
305 ranges.emplace_back(std::make_pair(0x2C60, 0x2C7F), _("Latin Extended-C"));
306 ranges.emplace_back(std::make_pair(0x2C80, 0x2CFF), _("Coptic"));
307 ranges.emplace_back(std::make_pair(0x2D00, 0x2D2F), _("Georgian Supplement"));
308 ranges.emplace_back(std::make_pair(0x2D30, 0x2D7F), _("Tifinagh"));
309 ranges.emplace_back(std::make_pair(0x2D80, 0x2DDF), _("Ethiopic Extended"));
310 ranges.emplace_back(std::make_pair(0x2DE0, 0x2DFF), _("Cyrillic Extended-A"));
311 ranges.emplace_back(std::make_pair(0x2E00, 0x2E7F), _("Supplemental Punctuation"));
312 ranges.emplace_back(std::make_pair(0x2E80, 0x2EFF), _("CJK Radicals Supplement"));
313 ranges.emplace_back(std::make_pair(0x2F00, 0x2FDF), _("Kangxi Radicals"));
314 ranges.emplace_back(std::make_pair(0x2FF0, 0x2FFF), _("Ideographic Description Characters"));
315 ranges.emplace_back(std::make_pair(0x3000, 0x303F), _("CJK Symbols and Punctuation"));
316 ranges.emplace_back(std::make_pair(0x3040, 0x309F), _("Hiragana"));
317 ranges.emplace_back(std::make_pair(0x30A0, 0x30FF), _("Katakana"));
318 ranges.emplace_back(std::make_pair(0x3100, 0x312F), _("Bopomofo"));
319 ranges.emplace_back(std::make_pair(0x3130, 0x318F), _("Hangul Compatibility Jamo"));
320 ranges.emplace_back(std::make_pair(0x3190, 0x319F), _("Kanbun"));
321 ranges.emplace_back(std::make_pair(0x31A0, 0x31BF), _("Bopomofo Extended"));
322 ranges.emplace_back(std::make_pair(0x31C0, 0x31EF), _("CJK Strokes"));
323 ranges.emplace_back(std::make_pair(0x31F0, 0x31FF), _("Katakana Phonetic Extensions"));
324 ranges.emplace_back(std::make_pair(0x3200, 0x32FF), _("Enclosed CJK Letters and Months"));
325 ranges.emplace_back(std::make_pair(0x3300, 0x33FF), _("CJK Compatibility"));
326 ranges.emplace_back(std::make_pair(0x3400, 0x4DBF), _("CJK Unified Ideographs Extension A"));
327 ranges.emplace_back(std::make_pair(0x4DC0, 0x4DFF), _("Yijing Hexagram Symbols"));
328 ranges.emplace_back(std::make_pair(0x4E00, 0x9FFF), _("CJK Unified Ideographs"));
329 ranges.emplace_back(std::make_pair(0xA000, 0xA48F), _("Yi Syllables"));
330 ranges.emplace_back(std::make_pair(0xA490, 0xA4CF), _("Yi Radicals"));
331 ranges.emplace_back(std::make_pair(0xA4D0, 0xA4FF), _("Lisu"));
332 ranges.emplace_back(std::make_pair(0xA500, 0xA63F), _("Vai"));
333 ranges.emplace_back(std::make_pair(0xA640, 0xA69F), _("Cyrillic Extended-B"));
334 ranges.emplace_back(std::make_pair(0xA6A0, 0xA6FF), _("Bamum"));
335 ranges.emplace_back(std::make_pair(0xA700, 0xA71F), _("Modifier Tone Letters"));
336 ranges.emplace_back(std::make_pair(0xA720, 0xA7FF), _("Latin Extended-D"));
337 ranges.emplace_back(std::make_pair(0xA800, 0xA82F), _("Syloti Nagri"));
338 ranges.emplace_back(std::make_pair(0xA830, 0xA83F), _("Common Indic Number Forms"));
339 ranges.emplace_back(std::make_pair(0xA840, 0xA87F), _("Phags-pa"));
340 ranges.emplace_back(std::make_pair(0xA880, 0xA8DF), _("Saurashtra"));
341 ranges.emplace_back(std::make_pair(0xA8E0, 0xA8FF), _("Devanagari Extended"));
342 ranges.emplace_back(std::make_pair(0xA900, 0xA92F), _("Kayah Li"));
343 ranges.emplace_back(std::make_pair(0xA930, 0xA95F), _("Rejang"));
344 ranges.emplace_back(std::make_pair(0xA960, 0xA97F), _("Hangul Jamo Extended-A"));
345 ranges.emplace_back(std::make_pair(0xA980, 0xA9DF), _("Javanese"));
346 ranges.emplace_back(std::make_pair(0xAA00, 0xAA5F), _("Cham"));
347 ranges.emplace_back(std::make_pair(0xAA60, 0xAA7F), _("Myanmar Extended-A"));
348 ranges.emplace_back(std::make_pair(0xAA80, 0xAADF), _("Tai Viet"));
349 ranges.emplace_back(std::make_pair(0xABC0, 0xABFF), _("Meetei Mayek"));
350 ranges.emplace_back(std::make_pair(0xAC00, 0xD7AF), _("Hangul Syllables"));
351 ranges.emplace_back(std::make_pair(0xD7B0, 0xD7FF), _("Hangul Jamo Extended-B"));
352 ranges.emplace_back(std::make_pair(0xD800, 0xDB7F), _("High Surrogates"));
353 ranges.emplace_back(std::make_pair(0xDB80, 0xDBFF), _("High Private Use Surrogates"));
354 ranges.emplace_back(std::make_pair(0xDC00, 0xDFFF), _("Low Surrogates"));
355 ranges.emplace_back(std::make_pair(0xE000, 0xF8FF), _("Private Use Area"));
356 ranges.emplace_back(std::make_pair(0xF900, 0xFAFF), _("CJK Compatibility Ideographs"));
357 ranges.emplace_back(std::make_pair(0xFB00, 0xFB4F), _("Alphabetic Presentation Forms"));
358 ranges.emplace_back(std::make_pair(0xFB50, 0xFDFF), _("Arabic Presentation Forms-A"));
359 ranges.emplace_back(std::make_pair(0xFE00, 0xFE0F), _("Variation Selectors"));
360 ranges.emplace_back(std::make_pair(0xFE10, 0xFE1F), _("Vertical Forms"));
361 ranges.emplace_back(std::make_pair(0xFE20, 0xFE2F), _("Combining Half Marks"));
362 ranges.emplace_back(std::make_pair(0xFE30, 0xFE4F), _("CJK Compatibility Forms"));
363 ranges.emplace_back(std::make_pair(0xFE50, 0xFE6F), _("Small Form Variants"));
364 ranges.emplace_back(std::make_pair(0xFE70, 0xFEFF), _("Arabic Presentation Forms-B"));
365 ranges.emplace_back(std::make_pair(0xFF00, 0xFFEF), _("Halfwidth and Fullwidth Forms"));
366 ranges.emplace_back(std::make_pair(0xFFF0, 0xFFFF), _("Specials"));
367 // Selected ranges in Extended Multilingual Plane
368 ranges.emplace_back(std::make_pair(0x1F300, 0x1F5FF), _("Miscellaneous Symbols and Pictographs"));
369 ranges.emplace_back(std::make_pair(0x1F600, 0x1F64F), _("Emoticons"));
370 ranges.emplace_back(std::make_pair(0x1F650, 0x1F67F), _("Ornamental Dingbats"));
371 ranges.emplace_back(std::make_pair(0x1F680, 0x1F6FF), _("Transport and Map Symbols"));
372 ranges.emplace_back(std::make_pair(0x1F700, 0x1F77F), _("Alchemical Symbols"));
373 ranges.emplace_back(std::make_pair(0x1F780, 0x1F7FF), _("Geometric Shapes Extended"));
374 ranges.emplace_back(std::make_pair(0x1F800, 0x1F8FF), _("Supplemental Arrows-C"));
375 ranges.emplace_back(std::make_pair(0x1F900, 0x1F9FF), _("Supplemental Symbols and Pictographs"));
376 ranges.emplace_back(std::make_pair(0x1FA00, 0x1FA7F), _("Chess Symbols"));
377 ranges.emplace_back(std::make_pair(0x1FA80, 0x1FAFF), _("Symbols and Pictographs Extended-A"));
378 return ranges;
379}
380
381class GlyphColumns : public Gtk::TreeModel::ColumnRecord
382{
383public:
384 Gtk::TreeModelColumn<gunichar> code;
385 Gtk::TreeModelColumn<Glib::ustring> name;
386 Gtk::TreeModelColumn<Glib::ustring> tooltip;
387
388 GlyphColumns()
389 {
390 add(code);
391 add(name);
392 add(tooltip);
393 }
394};
395
397{
398 static GlyphColumns *columns = new GlyphColumns();
399
400 return columns;
401}
402
407 : DialogBase("/dialogs/glyphs", "Glyphs")
408 , store(Gtk::ListStore::create(*getColumns()))
409{
410 set_orientation(Gtk::Orientation::VERTICAL);
411 auto const table = Gtk::make_managed<Gtk::Grid>();
412 table->set_row_spacing(4);
413 table->set_column_spacing(4);
415 guint row = 0;
416
417// -------------------------------
418
419 {
420 fontSelector = Gtk::make_managed<UI::Widget::FontSelector>(false, false);
421 fontSelector->set_name ("UnicodeCharacters");
422 instanceConns.emplace_back(
423 fontSelector->connectChanged(sigc::hide(sigc::mem_fun(*this, &GlyphsPanel::rebuild))));
424 table->attach(*fontSelector, 0, row, 3, 1);
425 row++;
426 }
427
428// -------------------------------
429
430 {
431 auto const label = Gtk::make_managed<Gtk::Label>(_("Script: "));
432 table->attach(*label, 0, row, 1, 1);
433
434 scriptCombo = Gtk::make_managed<Gtk::ComboBoxText>();
435 for (auto const &it : getScriptToName()) {
436 scriptCombo->append(it.second);
437 }
438
439 scriptCombo->set_active_text(getScriptToName().at(G_UNICODE_SCRIPT_INVALID_CODE));
440
441 instanceConns.emplace_back(
442 scriptCombo->signal_changed().connect(sigc::mem_fun(*this, &GlyphsPanel::rebuild)));
443
444 scriptCombo->set_halign(Gtk::Align::START);
445 scriptCombo->set_valign(Gtk::Align::START);
446 scriptCombo->set_hexpand();
447 table->attach(*scriptCombo, 1, row, 1, 1);
448 }
449
450 row++;
451
452// -------------------------------
453
454 {
455 auto const label = Gtk::make_managed<Gtk::Label>(_("Range: "));
456 table->attach(*label, 0, row, 1, 1);
457
458 rangeCombo = Gtk::make_managed<Gtk::ComboBoxText>();
459 for (auto const &it : getRanges()) {
460 rangeCombo->append(it.second);
461 }
462
463 rangeCombo->set_active_text(getRanges().at(4).second); // Basic Latin
464
465 instanceConns.emplace_back(
466 rangeCombo->signal_changed().connect(sigc::mem_fun(*this, &GlyphsPanel::rebuild)));
467
468 rangeCombo->set_halign(Gtk::Align::START);
469 rangeCombo->set_valign(Gtk::Align::START);
470 rangeCombo->set_hexpand();
471 table->attach(*rangeCombo, 1, row, 1, 1);
472 }
473
474 row++;
475
476// -------------------------------
477
478 GlyphColumns *columns = getColumns();
479
480 iconView = Gtk::make_managed<Gtk::IconView>(static_cast<Glib::RefPtr<Gtk::TreeModel> >(store));
481 iconView->set_name("UnicodeIconView");
482 iconView->set_markup_column(columns->name);
483 iconView->set_tooltip_column(2); // Uses Pango markup, must use column number.
484 iconView->set_margin(0);
485 iconView->set_item_padding(0);
486 iconView->set_row_spacing(0);
487 iconView->set_column_spacing(0);
488
489 instanceConns.emplace_back(
490 iconView->signal_item_activated().connect(sigc::mem_fun(*this, &GlyphsPanel::glyphActivated)));
491 instanceConns.emplace_back(
492 iconView->signal_selection_changed().connect(sigc::mem_fun(*this, &GlyphsPanel::glyphSelectionChanged)));
493
494 auto const scroller = Gtk::make_managed<Gtk::ScrolledWindow>();
495 scroller->set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::ALWAYS);
496 scroller->set_child(*iconView);
497 scroller->set_hexpand();
498 scroller->set_vexpand();
499 table->attach(*scroller, 0, row, 3, 1);
500
501 row++;
502
503// -------------------------------
504
505 auto const box = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::HORIZONTAL);
506
507 entry = Gtk::make_managed<Gtk::Entry>();
508 instanceConns.emplace_back(
509 entry->signal_changed().connect(sigc::mem_fun(*this, &GlyphsPanel::calcCanInsert)));
510 entry->set_width_chars(18);
512
513 auto pad = Gtk::make_managed<Gtk::Label>(" ");
515
516 label = Gtk::make_managed<Gtk::Label>(" ");
518
519 pad = Gtk::make_managed<Gtk::Label>();
521
522 insertBtn = Gtk::make_managed<Gtk::Button>(_("Append"));
523 instanceConns.emplace_back(
524 insertBtn->signal_clicked().connect(sigc::mem_fun(*this, &GlyphsPanel::insertText)));
525 insertBtn->property_receives_default().set_value(true);
526 insertBtn->set_sensitive(false);
527
529 box->set_hexpand();
530 table->attach(*box, 0, row, 3, 1);
531
532 row++;
533
534 rebuild();
535}
536
537GlyphsPanel::~GlyphsPanel() = default;
538
540{
541 readSelection(true, true);
542}
543
544void GlyphsPanel::selectionModified(Selection *selection, guint flags)
545{
546 bool style = ((flags & ( SP_OBJECT_CHILD_MODIFIED_FLAG |
547 SP_OBJECT_STYLE_MODIFIED_FLAG )) != 0 );
548
549 bool content = ((flags & ( SP_OBJECT_CHILD_MODIFIED_FLAG |
550 SP_TEXT_CONTENT_MODIFIED_FLAG )) != 0 );
551
552 readSelection(style, content);
553}
554
555// Append selected glyphs to selected text
557{
558 auto selection = getSelection();
559 if (!selection)
560 return;
561
562 SPItem *textItem = nullptr;
563 auto itemlist = selection->items();
564 for(auto i=itemlist.begin(); itemlist.end() != i; ++i) {
565 if (is<SPText>(*i) || is<SPFlowtext>(*i)) {
566 textItem = *i;
567 break;
568 }
569 }
570
571 if (textItem) {
572 Glib::ustring glyphs;
573 if (entry->get_text_length() > 0) {
574 glyphs = entry->get_text();
575 } else {
576 auto itemArray = iconView->get_selected_items();
577
578 if (!itemArray.empty()) {
579 Gtk::TreeModel::Path const & path = *itemArray.begin();
580 Gtk::ListStore::iterator row = store->get_iter(path);
581 gunichar ch = (*row)[getColumns()->code];
582 glyphs = ch;
583 }
584 }
585
586 if (!glyphs.empty()) {
587 Glib::ustring combined = sp_te_get_string_multiline(textItem);
588 combined += glyphs;
589 sp_te_set_repr_text_multiline(textItem, combined.c_str());
590 DocumentUndo::done(getDocument(), _("Append text"), INKSCAPE_ICON("draw-text"));
591 }
592 }
593}
594
595void GlyphsPanel::glyphActivated(Gtk::TreeModel::Path const & path)
596{
597 Gtk::ListStore::iterator row = store->get_iter(path);
598 gunichar ch = (*row)[getColumns()->code];
599 Glib::ustring tmp;
600 tmp += ch;
601
602 int startPos = 0;
603 int endPos = 0;
604 if (entry->get_selection_bounds(startPos, endPos)) {
605 // there was something selected.
606 entry->delete_text(startPos, endPos);
607 }
608 startPos = entry->get_position();
609 entry->insert_text(tmp, -1, startPos);
610 entry->set_position(startPos);
611}
612
614{
615 auto itemArray = iconView->get_selected_items();
616
617 if (itemArray.empty()) {
618 label->set_text(" ");
619 } else {
620 Gtk::TreeModel::Path const & path = *itemArray.begin();
621 Gtk::ListStore::iterator row = store->get_iter(path);
622 gunichar ch = (*row)[getColumns()->code];
623
624 Glib::ustring scriptName;
625 GUnicodeScript script = g_unichar_get_script(ch);
626 auto const &mappings = getScriptToName();
627 if (auto const it = mappings.find(script); it != mappings.end()) {
628 scriptName = it->second;
629 }
630 gchar * tmp = g_strdup_printf("U+%04X %s", ch, scriptName.c_str());
631 label->set_text(tmp);
632 }
634}
635
637{
638 auto selection = getSelection();
639 if (!selection)
640 return;
641
642 int items = 0;
643 auto itemlist = selection->items();
644 for(auto i=itemlist.begin(); itemlist.end() != i; ++i) {
645 if (is<SPText>(*i) || is<SPFlowtext>(*i)) {
646 ++items;
647 }
648 }
649
650 bool enable = (items == 1);
651 if (enable) {
652 enable &= (!iconView->get_selected_items().empty()
653 || (entry->get_text_length() > 0));
654 }
655
656 if (enable != insertBtn->is_sensitive()) {
657 insertBtn->set_sensitive(enable);
658 }
659}
660
661void GlyphsPanel::readSelection( bool updateStyle, bool updateContent )
662{
664
665 if (updateStyle) {
667
668 // Update family/style based on selection.
669 fontlister->selection_update();
670
671 // Update GUI (based on fontlister values).
673 }
674}
675
677{
678 Glib::ustring fontspec = fontSelector->get_fontspec();
679
680 std::shared_ptr<FontInstance> font;
681 if (!fontspec.empty()) {
682 font = FontFactory::get().FaceFromFontSpecification(fontspec.c_str());
683 }
684
685 if (!font) return;
686
687 GUnicodeScript script = G_UNICODE_SCRIPT_INVALID_CODE;
688 Glib::ustring scriptName = scriptCombo->get_active_text();
689 auto const &items = getScriptToName();
690 for (auto const &item : items) {
691 if (scriptName == item.second) {
692 script = item.first;
693 break;
694 }
695 }
696
697 // Disconnect the model while we update it. Simple work-around for 5x+ performance boost.
698 Glib::RefPtr<Gtk::ListStore> tmp = Gtk::ListStore::create(*getColumns());
699 iconView->set_model(tmp);
700
701 gunichar lower = 0x00001;
702 gunichar upper = 0x2FFFF;
703 int active = rangeCombo->get_active_row_number();
704 if (active >= 0) {
705 std::tie(lower, upper) = getRanges().at(active).first;
706 }
707
708 std::vector<gunichar> present;
709 for (gunichar ch = lower; ch <= upper; ch++) {
710 int glyphId = font->MapUnicodeChar(ch);
711 if (glyphId > 0) {
712 if ((script == G_UNICODE_SCRIPT_INVALID_CODE) || (script == g_unichar_get_script(ch))) {
713 present.push_back(ch);
714 }
715 }
716 }
717
718 GlyphColumns *columns = getColumns();
719 store->clear();
720
721 for (auto const it : present) {
722 Gtk::ListStore::iterator row = store->append();
723 Glib::ustring tmp(1, it);
724 tmp = Glib::Markup::escape_text(tmp); // Escape '&', '<', etc.
725 (*row)[columns->code] = it;
726 (*row)[columns->name] = Glib::ustring::compose("<span font_desc=\"%1\">%2</span>",
727 fontspec, tmp);
728 (*row)[columns->tooltip] = Glib::ustring::compose("<span font_desc=\"%1\" size=\"42000\">%2</span>",
729 fontspec, tmp);
730 }
731
732 // Reconnect the model once it has been updated:
733 iconView->set_model(store);
734}
735
736} // namespace Inkscape::UI::Dialog
737
738/*
739 Local Variables:
740 mode:c++
741 c-file-style:"stroustrup"
742 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
743 indent-tabs-mode:nil
744 fill-column:99
745 End:
746*/
747// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
Fragment store
Definition canvas.cpp:155
std::shared_ptr< FontInstance > FaceFromFontSpecification(char const *fontSpecification)
static void done(SPDocument *document, Glib::ustring const &event_description, Glib::ustring const &undo_icon, unsigned int object_modified_tag=0)
This class enumerates fonts using libnrtype into reusable data stores and allows for random access to...
Definition font-lister.h:84
std::pair< Glib::ustring, Glib::ustring > selection_update()
Sets font-family and style after a selection change.
static Inkscape::FontLister * get_instance()
SPItemRange items()
Returns a range of selected SPItems.
Definition object-set.h:255
The set of selected SPObjects for a given document and layer model.
Definition selection.h:80
DialogBase is the base class for the dialog system.
Definition dialog-base.h:42
Selection * getSelection() const
Definition dialog-base.h:84
SPDocument * getDocument() const
Definition dialog-base.h:83
Glib::RefPtr< Gtk::ListStore > store
Definition glyphs.h:61
static GlyphColumns * getColumns()
Definition glyphs.cpp:396
void selectionModified(Selection *selection, unsigned flags) final
Definition glyphs.cpp:544
std::vector< sigc::scoped_connection > instanceConns
Definition glyphs.h:70
Inkscape::UI::Widget::FontSelector * fontSelector
Definition glyphs.h:68
void glyphActivated(Gtk::TreeModel::Path const &path)
Definition glyphs.cpp:595
void selectionChanged(Selection *selection) final
Definition glyphs.cpp:539
Gtk::ComboBoxText * rangeCombo
Definition glyphs.h:67
Gtk::ComboBoxText * scriptCombo
Definition glyphs.h:66
void readSelection(bool updateStyle, bool updateContent)
Definition glyphs.cpp:661
void update_font()
Update GUI based on fontspec.
sigc::connection connectChanged(sigc::slot< void(Glib::ustring)> slot)
Let others know that user has changed GUI settings.
Glib::ustring get_fontspec() const override
static FontFactory & get(Args &&... args)
Definition statics.h:153
Base class for visual SVG elements.
Definition sp-item.h:109
TODO: insert short description here.
TODO: insert short description here.
The data describing a single loaded font.
Font selection widgets.
The routines here create and manage a font selector widget with three parts, one each for font-family...
Macro for icon names used in Inkscape.
SPItem * item
Definition desktop.h:50
Dialog code.
Definition desktop.h:117
std::pair< gunichar, gunichar > Range
Definition glyphs.cpp:205
static auto const & getRanges()
Definition glyphs.cpp:208
std::pair< Range, Glib::ustring > NamedRange
Definition glyphs.cpp:206
static auto const & getScriptToName()
Definition glyphs.cpp:41
void pack_end(Gtk::Box &box, Gtk::Widget &child, bool const expand, bool const fill, unsigned const padding)
Adds child to box, packed with reference to the end of box.
Definition pack.cpp:153
void pack_start(Gtk::Box &box, Gtk::Widget &child, bool const expand, bool const fill, unsigned const padding)
Adds child to box, packed with reference to the start of box.
Definition pack.cpp:141
Helpers for using Gtk::Boxes, encapsulating large changes between GTK3 & GTK4.
std::vector< Mapping > mappings
GList * items
TODO: insert short description here.
Glib::ustring sp_te_get_string_multiline(SPItem const *text)
Gets a text-only representation of the given text or flowroot object, replacing line break elements w...
void sp_te_set_repr_text_multiline(SPItem *text, gchar const *str)
std::unique_ptr< Toolbar >(* create)()
Definition toolbars.cpp:56
Glib::ustring name
Definition toolbars.cpp:55
unsigned int gunichar