Codebase list xapp / 50dddf7
util: add a utility function to convert from a pango font string to css (#135) Also adds a convenience method to the style manager. Stephen Collins authored 2 years ago GitHub committed 2 years ago
4 changed file(s) with 167 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
00 #include "xapp-style-manager.h"
1 #include "xapp-util.h"
12
23 /**
34 * SECTION:xapp-style-manager
253254
254255 process_property_list_update (style_manager);
255256 }
257
258 /**
259 * xapp_style_manager_set_from_pango_font_string:
260 * @style_manager: a #XAppStyleManager
261 * @desc_string: a pango font description string
262 *
263 * Sets the css font property on the widget based on the supplied pango font description string.
264 *
265 * Since: 2.2
266 */
267 void
268 xapp_style_manager_set_from_pango_font_string (XAppStyleManager *style_manager,
269 const gchar *desc_string)
270 {
271 gchar *css_string = xapp_pango_font_string_to_css (desc_string);
272
273 xapp_style_manager_set_style_property (style_manager, "font", css_string);
274 g_free (css_string);
275 }
1818 void xapp_style_manager_remove_style_property (XAppStyleManager *style_manager,
1919 const gchar *name);
2020
21 void xapp_style_manager_set_from_pango_font_string (XAppStyleManager *style_manager,
22 const gchar *desc_string);
23
2124 G_END_DECLS
2225
2326 #endif /* __XAPP_STYLE_MANAGER_H__ */
22
33 #include <glib.h>
44 #include <gio/gio.h>
5 #include <pango/pango.h>
56
67 #include "xapp-util.h"
78
103104
104105 return session_running;
105106 }
107
108 /**
109 * xapp_pango_font_string_to_css:
110 * @pango_font_string: a pango font description string
111 *
112 * Converts a pango font description string to a string suitable for use with the css "font" tag. The font description must contain the font family and font size or conversion will fail and %NULL will be returned
113 *
114 * Returns: (transfer full) the css compatible font string or %NULL if the conversion failed.
115 *
116 * Since: 2.2
117 */
118 gchar *
119 xapp_pango_font_string_to_css (const char *pango_font_string)
120 {
121 PangoFontDescription *desc;
122 GString *font_string;
123 PangoFontMask set;
124
125 desc = pango_font_description_from_string (pango_font_string);
126 font_string = g_string_new ("");
127
128 set = pango_font_description_get_set_fields (desc);
129
130 if (!(set & PANGO_FONT_MASK_SIZE) || !(set & PANGO_FONT_MASK_FAMILY))
131 {
132 return NULL;
133 }
134
135 if (set & PANGO_FONT_MASK_STYLE)
136 {
137 switch (pango_font_description_get_style (desc))
138 {
139 case PANGO_STYLE_NORMAL:
140 g_string_append (font_string, "normal ");
141 break;
142 case PANGO_STYLE_OBLIQUE:
143 g_string_append (font_string, "oblique ");
144 break;
145 case PANGO_STYLE_ITALIC:
146 g_string_append (font_string, "italic ");
147 break;
148 default:
149 break;
150 }
151 }
152
153 if (set & PANGO_FONT_MASK_VARIANT)
154 {
155 switch (pango_font_description_get_variant (desc))
156 {
157 case PANGO_VARIANT_NORMAL:
158 g_string_append (font_string, "normal ");
159 break;
160 case PANGO_VARIANT_SMALL_CAPS:
161 g_string_append (font_string, "small-caps ");
162 break;
163 default:
164 break;
165 }
166 }
167
168 if (set & PANGO_FONT_MASK_WEIGHT)
169 {
170 switch (pango_font_description_get_weight (desc))
171 {
172 case PANGO_WEIGHT_THIN:
173 g_string_append (font_string, "100 ");
174 break;
175 case PANGO_WEIGHT_ULTRALIGHT:
176 g_string_append (font_string, "200 ");
177 break;
178 case PANGO_WEIGHT_LIGHT:
179 case PANGO_WEIGHT_SEMILIGHT:
180 g_string_append (font_string, "300 ");
181 break;
182 case PANGO_WEIGHT_BOOK:
183 case PANGO_WEIGHT_NORMAL:
184 g_string_append (font_string, "400 ");
185 break;
186 case PANGO_WEIGHT_MEDIUM:
187 g_string_append (font_string, "500 ");
188 break;
189 case PANGO_WEIGHT_SEMIBOLD:
190 g_string_append (font_string, "600 ");
191 break;
192 case PANGO_WEIGHT_BOLD:
193 g_string_append (font_string, "700 ");
194 break;
195 case PANGO_WEIGHT_ULTRABOLD:
196 g_string_append (font_string, "800 ");
197 break;
198 case PANGO_WEIGHT_HEAVY:
199 case PANGO_WEIGHT_ULTRAHEAVY:
200 g_string_append (font_string, "900 ");
201 break;
202 default:
203 break;
204 }
205 }
206
207 if (set & PANGO_FONT_MASK_STRETCH)
208 {
209 switch (pango_font_description_get_stretch (desc))
210 {
211 case PANGO_STRETCH_ULTRA_CONDENSED:
212 g_string_append (font_string, "ultra-condensed ");
213 break;
214 case PANGO_STRETCH_EXTRA_CONDENSED:
215 g_string_append (font_string, "extra-condensed ");
216 break;
217 case PANGO_STRETCH_CONDENSED:
218 g_string_append (font_string, "condensed ");
219 break;
220 case PANGO_STRETCH_SEMI_CONDENSED:
221 g_string_append (font_string, "semi-condensed ");
222 break;
223 case PANGO_STRETCH_NORMAL:
224 g_string_append (font_string, "normal ");
225 break;
226 case PANGO_STRETCH_SEMI_EXPANDED:
227 g_string_append (font_string, "semi-expanded ");
228 break;
229 case PANGO_STRETCH_EXPANDED:
230 g_string_append (font_string, "expanded ");
231 break;
232 case PANGO_STRETCH_EXTRA_EXPANDED:
233 break;
234 case PANGO_STRETCH_ULTRA_EXPANDED:
235 g_string_append (font_string, "ultra-expanded ");
236 break;
237 default:
238 break;
239 }
240 }
241
242 g_string_append_printf (font_string, "%dpx ", pango_font_description_get_size (desc) / PANGO_SCALE);
243 g_string_append (font_string, pango_font_description_get_family (desc));
244
245 return g_string_free (font_string, FALSE);
246 }
77 gboolean xapp_util_gpu_offload_supported (void);
88 gboolean xapp_util_get_session_is_running (void);
99
10 gchar *xapp_pango_font_string_to_css (const char *pango_font_string);
11
12
1013 G_END_DECLS
1114 #endif /* __XAPP_UTIL_H__ */