2 | 2 |
|
3 | 3 |
#include <glib.h>
|
4 | 4 |
#include <gio/gio.h>
|
|
5 |
#include <pango/pango.h>
|
5 | 6 |
|
6 | 7 |
#include "xapp-util.h"
|
7 | 8 |
|
|
103 | 104 |
|
104 | 105 |
return session_running;
|
105 | 106 |
}
|
|
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 |
}
|