Lines 21-26
Link Here
|
21 |
#include "gtkintl.h" |
21 |
#include "gtkintl.h" |
22 |
#include "gtkwidget.h" |
22 |
#include "gtkwidget.h" |
23 |
|
23 |
|
|
|
24 |
#ifdef HAVE_XFT |
25 |
#include <X11/Xft/Xft.h> |
26 |
#include <pango/pangoxft.h> |
27 |
#include <gtk/x11/gdkx.h> |
28 |
#endif |
29 |
|
24 |
typedef struct _GtkSettingsValuePrivate GtkSettingsValuePrivate; |
30 |
typedef struct _GtkSettingsValuePrivate GtkSettingsValuePrivate; |
25 |
|
31 |
|
26 |
typedef enum |
32 |
typedef enum |
Lines 53-59
Link Here
|
53 |
PROP_MENU_BAR_ACCEL, |
59 |
PROP_MENU_BAR_ACCEL, |
54 |
PROP_DND_DRAG_THRESHOLD, |
60 |
PROP_DND_DRAG_THRESHOLD, |
55 |
PROP_FONT_NAME, |
61 |
PROP_FONT_NAME, |
56 |
PROP_ICON_SIZES |
62 |
PROP_ICON_SIZES, |
|
|
63 |
#ifdef HAVE_XFT |
64 |
PROP_XFT_ANTIALIAS, |
65 |
PROP_XFT_HINTING, |
66 |
PROP_XFT_HINTSTYLE, |
67 |
PROP_XFT_RGBA, |
68 |
PROP_XFT_DPI, |
69 |
#endif |
57 |
}; |
70 |
}; |
58 |
|
71 |
|
59 |
|
72 |
|
Lines 112-117
Link Here
|
112 |
return settings_type; |
125 |
return settings_type; |
113 |
} |
126 |
} |
114 |
|
127 |
|
|
|
128 |
#ifdef HAVE_XFT |
129 |
static void |
130 |
gtk_default_substitute (FcPattern *pattern, |
131 |
gpointer data) |
132 |
{ |
133 |
GtkSettings *settings = data; |
134 |
gint antialias; |
135 |
gint hinting; |
136 |
char *rgba; |
137 |
char *hintstyle; |
138 |
gint dpi; |
139 |
FcValue v; |
140 |
|
141 |
g_object_get (G_OBJECT (settings), |
142 |
"gtk-xft-antialias", &antialias, |
143 |
"gtk-xft-hinting", &hinting, |
144 |
"gtk-xft-hintstyle", &hintstyle, |
145 |
"gtk-xft-rgba", &rgba, |
146 |
"gtk-xfg-dpi", &dpi, |
147 |
NULL); |
148 |
|
149 |
if (antialias >= 0 && |
150 |
FcPatternGet (pattern, FC_ANTIALIAS, 0, &v) == FcResultNoMatch) |
151 |
FcPatternAddBool (pattern, FC_ANTIALIAS, antialias != 0); |
152 |
|
153 |
if (hinting >= 0 && |
154 |
FcPatternGet (pattern, FC_HINTING, 0, &v) == FcResultNoMatch) |
155 |
FcPatternAddBool (pattern, FC_HINTING, hinting != 0); |
156 |
|
157 |
if (hintstyle && FcPatternGet (pattern, FC_HINT_STYLE, 0, &v) == FcResultNoMatch) |
158 |
{ |
159 |
int val = FC_HINT_FULL; /* Quiet GCC */ |
160 |
gboolean found = TRUE; |
161 |
|
162 |
if (strcmp (hintstyle, "hintnone") == 0) |
163 |
val = FC_HINT_NONE; |
164 |
else if (strcmp (hintstyle, "hintslight") == 0) |
165 |
val = FC_HINT_SLIGHT; |
166 |
else if (strcmp (hintstyle, "hintmedium") == 0) |
167 |
val = FC_HINT_MEDIUM; |
168 |
else if (strcmp (hintstyle, "hintfull") == 0) |
169 |
val = FC_HINT_FULL; |
170 |
else |
171 |
found = FALSE; |
172 |
|
173 |
if (found) |
174 |
FcPatternAddInteger (pattern, FC_HINT_STYLE, val); |
175 |
} |
176 |
|
177 |
if (rgba && FcPatternGet (pattern, FC_RGBA, 0, &v) == FcResultNoMatch) |
178 |
{ |
179 |
int val = FC_RGBA_NONE; /* Quiet GCC */ |
180 |
gboolean found = TRUE; |
181 |
|
182 |
if (strcmp (rgba, "none") == 0) |
183 |
val = FC_RGBA_NONE; |
184 |
else if (strcmp (rgba, "rgb") == 0) |
185 |
val = FC_RGBA_RGB; |
186 |
else if (strcmp (rgba, "bgr") == 0) |
187 |
val = FC_RGBA_BGR; |
188 |
else if (strcmp (rgba, "vrgb") == 0) |
189 |
val = FC_RGBA_VRGB; |
190 |
else if (strcmp (rgba, "vbgr") == 0) |
191 |
val = FC_RGBA_VBGR; |
192 |
else |
193 |
found = FALSE; |
194 |
|
195 |
if (found) |
196 |
FcPatternAddInteger (pattern, FC_RGBA, val); |
197 |
} |
198 |
|
199 |
if (dpi >= 0 && FcPatternGet (pattern, FC_DPI, 0, &v) == FcResultNoMatch) |
200 |
FcPatternAddDouble (pattern, FC_DPI, dpi / 1024.); |
201 |
|
202 |
g_free (hintstyle); |
203 |
g_free (rgba); |
204 |
} |
205 |
#endif /* HAVE_XFT */ |
206 |
|
115 |
static void |
207 |
static void |
116 |
gtk_settings_init (GtkSettings *settings) |
208 |
gtk_settings_init (GtkSettings *settings) |
117 |
{ |
209 |
{ |
Lines 247-252
Link Here
|
247 |
G_PARAM_READWRITE), |
339 |
G_PARAM_READWRITE), |
248 |
NULL); |
340 |
NULL); |
249 |
g_assert (result == PROP_ICON_SIZES); |
341 |
g_assert (result == PROP_ICON_SIZES); |
|
|
342 |
|
343 |
#ifdef HAVE_XFT |
344 |
result = settings_install_property_parser (class, |
345 |
g_param_spec_int ("gtk-xft-antialias", |
346 |
_("Xft Antialias"), |
347 |
_("Whether to antialias Xft fonts; 0=no, 1=yes, -1=default"), |
348 |
-1, 1, -1, |
349 |
G_PARAM_READWRITE), |
350 |
NULL); |
351 |
g_assert (result == PROP_XFT_ANTIALIAS); |
352 |
|
353 |
result = settings_install_property_parser (class, |
354 |
g_param_spec_int ("gtk-xft-hinting", |
355 |
_("Xft Hinting"), |
356 |
_("Whether to hint Xft fonts; 0=no, 1=yes, -1=default"), |
357 |
-1, 1, -1, |
358 |
G_PARAM_READWRITE), |
359 |
NULL); |
360 |
g_assert (result == PROP_XFT_HINTING); |
361 |
|
362 |
result = settings_install_property_parser (class, |
363 |
g_param_spec_string ("gtk-xft-hintstyle", |
364 |
_("Xft Hint Style"), |
365 |
_("What degree of hinting to use; none, slight, medium, or full"), |
366 |
NULL, |
367 |
G_PARAM_READWRITE), |
368 |
NULL); |
369 |
g_assert (result == PROP_XFT_HINTSTYLE); |
370 |
|
371 |
result = settings_install_property_parser (class, |
372 |
g_param_spec_string ("gtk-xft-rgba", |
373 |
_("Xft RGBA"), |
374 |
_("Type of subpixel antialiasing, none, rgb, bgr, vrgb, vbgr"), |
375 |
NULL, |
376 |
G_PARAM_READWRITE), |
377 |
NULL); |
378 |
g_assert (result == PROP_XFT_RGBA); |
379 |
|
380 |
result = settings_install_property_parser (class, |
381 |
g_param_spec_int ("gtk-xft-dpi", |
382 |
_("Xft DPI"), |
383 |
_("Resolution for Xft, in 1024 * dots/inch. -1 to use default value"), |
384 |
-1, 1024*1024, -1, |
385 |
G_PARAM_READWRITE), |
386 |
NULL); |
387 |
g_assert (result == PROP_XFT_DPI); |
388 |
#endif /* HAVE_XFT */ |
250 |
} |
389 |
} |
251 |
|
390 |
|
252 |
static void |
391 |
static void |
Lines 289-294
Link Here
|
289 |
settings = g_object_new (GTK_TYPE_SETTINGS, NULL); |
428 |
settings = g_object_new (GTK_TYPE_SETTINGS, NULL); |
290 |
settings->screen = screen; |
429 |
settings->screen = screen; |
291 |
g_object_set_data (G_OBJECT (screen), "gtk-settings", settings); |
430 |
g_object_set_data (G_OBJECT (screen), "gtk-settings", settings); |
|
|
431 |
|
432 |
#ifdef HAVE_XFT |
433 |
/* Set the default substitution function for the Pango fontmap. |
434 |
*/ |
435 |
pango_xft_set_default_substitute (GDK_SCREEN_XDISPLAY (screen), |
436 |
GDK_SCREEN_XNUMBER (screen), |
437 |
gtk_default_substitute, |
438 |
settings, NULL); |
439 |
#endif /* HAVE_XFT */ |
440 |
|
292 |
gtk_rc_reparse_all_for_settings (settings, TRUE); |
441 |
gtk_rc_reparse_all_for_settings (settings, TRUE); |
293 |
settings_update_double_click_time (settings); |
442 |
settings_update_double_click_time (settings); |
294 |
} |
443 |
} |
Lines 413-418
Link Here
|
413 |
case PROP_DOUBLE_CLICK_TIME: |
562 |
case PROP_DOUBLE_CLICK_TIME: |
414 |
settings_update_double_click_time (settings); |
563 |
settings_update_double_click_time (settings); |
415 |
break; |
564 |
break; |
|
|
565 |
#ifdef HAVE_XFT |
566 |
case PROP_XFT_ANTIALIAS: |
567 |
case PROP_XFT_HINTING: |
568 |
case PROP_XFT_HINTSTYLE: |
569 |
case PROP_XFT_RGBA: |
570 |
case PROP_XFT_DPI: |
571 |
pango_xft_substitute_changed (GDK_SCREEN_XDISPLAY (settings->screen), |
572 |
GDK_SCREEN_NUMBER (settings->screen)); |
573 |
/* See comments with _gtk_rc_reset_styles for why this is a hack |
574 |
*/ |
575 |
_gtk_rc_reset_styles (GTK_SETTINGS (object)); |
576 |
break; |
577 |
#endif /* HAVE_XFT */ |
416 |
} |
578 |
} |
417 |
} |
579 |
} |
418 |
|
580 |
|