1 /* GDK - The GIMP Drawing Kit
2 * Copyright © 2005 Red Hat, Inc
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
19 * Based on code from xftdpy.c
21 * Copyright © 2000 Keith Packard
23 * Permission to use, copy, modify, distribute, and sell this software and its
24 * documentation for any purpose is hereby granted without fee, provided that
25 * the above copyright notice appear in all copies and that both that
26 * copyright notice and this permission notice appear in supporting
27 * documentation, and that the name of Keith Packard not be used in
28 * advertising or publicity pertaining to distribution of the software without
29 * specific, written prior permission. Keith Packard makes no
30 * representations about the suitability of this software for any purpose. It
31 * is provided "as is" without express or implied warranty.
33 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
34 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
35 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
36 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
37 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
47 #include <fontconfig/fontconfig.h>
50 #define FC_HINT_NONE 0
51 #define FC_HINT_SLIGHT 1
52 #define FC_HINT_MEDIUM 2
53 #define FC_HINT_FULL 3
56 #include <gdkscreen-x11.h>
57 #include <gdkprivate-x11.h>
60 parse_boolean (char *v)
65 if (g_ascii_isupper ((int)c0))
66 c0 = g_ascii_tolower (c0);
67 if (c0 == 't' || c0 == 'y' || c0 == '1')
69 if (c0 == 'f' || c0 == 'n' || c0 == '0')
74 if (g_ascii_isupper ((int)c1))
75 c1 = g_ascii_tolower (c1);
86 get_boolean_default (Display *dpy,
93 v = XGetDefault (dpy, "Xft", option);
96 i = parse_boolean (v);
108 get_double_default (Display *dpy,
114 v = XGetDefault (dpy, "Xft", option);
117 /* Xft uses strtod, though localization probably wasn't
118 * desired. For compatibility, we use the conservative
119 * g_strtod() that accepts either localized or non-localized
122 *value = g_strtod (v, &e);
131 get_integer_default (Display *dpy,
137 v = XGetDefault (dpy, "Xft", option);
140 if (FcNameConstant ((FcChar8 *) v, value))
143 *value = strtol (v, &e, 0);
152 init_xft_settings (GdkScreen *screen)
154 GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
155 Display *xdisplay = GDK_SCREEN_XDISPLAY (screen);
158 if (x11_screen->xft_init)
161 x11_screen->xft_init = TRUE;
163 if (!get_boolean_default (xdisplay, "antialias", &x11_screen->xft_antialias))
164 x11_screen->xft_antialias = TRUE;
166 if (!get_boolean_default (xdisplay, "hinting", &x11_screen->xft_hinting))
167 x11_screen->xft_hinting = TRUE;
169 if (!get_integer_default (xdisplay, "hintstyle", &x11_screen->xft_hintstyle))
170 x11_screen->xft_hintstyle = FC_HINT_FULL;
172 if (!get_integer_default (xdisplay, "rgba", &x11_screen->xft_rgba))
173 x11_screen->xft_rgba = FC_RGBA_UNKNOWN;
175 if (!get_double_default (xdisplay, "dpi", &dpi_double))
176 dpi_double = (((double) DisplayHeight (xdisplay, x11_screen->screen_num) * 25.4) /
177 (double) DisplayHeightMM (xdisplay, x11_screen->screen_num));
179 x11_screen->xft_dpi = (int)(0.5 + PANGO_SCALE * dpi_double);
183 _gdk_x11_get_xft_setting (GdkScreen *screen,
187 GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
189 if (strncmp (name, "gtk-xft-", 8) != 0)
194 init_xft_settings (screen);
196 if (strcmp (name, "antialias") == 0)
198 g_value_set_int (value, x11_screen->xft_antialias);
201 else if (strcmp (name, "hinting") == 0)
203 g_value_set_int (value, x11_screen->xft_hinting);
206 else if (strcmp (name, "hintstyle") == 0)
210 switch (x11_screen->xft_hintstyle)
228 g_value_set_string (value, str);
231 else if (strcmp (name, "rgba") == 0)
235 switch (x11_screen->xft_rgba)
252 case FC_RGBA_UNKNOWN:
257 g_value_set_string (value, str);
260 else if (strcmp (name, "dpi") == 0)
262 g_value_set_int (value, x11_screen->xft_dpi);