#include <ctype.h>
#include "gdk/gdk.h"
+/* Protect against the CHARSET struct in Win32 */
+#ifdef GDK_WINDOWING_WIN32
+# define CHARSET CHARSETstruct
+#endif
#include "gdkx.h"
+#ifdef GDK_WINDOWING_WIN32
+# undef CHARSET
+#endif
#include "gdk/gdkkeysyms.h"
#include "gtkbutton.h"
GdkEventConfigure *event,
GtkFontSelectionDialog *fsd);
-#if GDK_WINDOWING == GDK_WINDOWING_WIN32
+#ifdef GDK_WINDOWING_WIN32
static char *logfont_to_xlfd (const LOGFONT *lfp,
int size,
int res,
/* Insert the property names, expanded, and in sorted order.
But we make sure that the wildcard '*' is first. */
gtk_clist_freeze (GTK_CLIST(clist));
- property = "*";
+ property = N_("*");
gtk_clist_append(GTK_CLIST(clist), &property);
for (i = 1; i < fontsel_info->nproperties[prop]; i++) {
- property = fontsel_info->properties[prop][i];
+ property = _(fontsel_info->properties[prop][i]);
if (prop == SLANT)
property = gtk_font_selection_expand_slant_code(property);
else if (prop == SPACING)
property = gtk_font_selection_expand_spacing_code(property);
-
+
inserted = FALSE;
for (row = 1; row < GTK_CLIST(clist)->rows; row++)
{
spacing = fontsel_info->properties[SPACING] [spacing_index];
/* Convert '(nil)' weights to 'regular', since it looks nicer. */
- if (!g_strcasecmp(weight, "(nil)")) weight = _("regular");
+ if (!g_strcasecmp(weight, N_("(nil)"))) weight = N_("regular");
/* We don't show default values or (nil) in the other properties. */
if (!g_strcasecmp(slant, "r")) slant = NULL;
else if (!g_strcasecmp(slant, "(nil)")) slant = NULL;
- else if (!g_strcasecmp(slant, "i")) slant = _("italic");
- else if (!g_strcasecmp(slant, "o")) slant = _("oblique");
- else if (!g_strcasecmp(slant, "ri")) slant = _("reverse italic");
- else if (!g_strcasecmp(slant, "ro")) slant = _("reverse oblique");
- else if (!g_strcasecmp(slant, "ot")) slant = _("other");
+ else if (!g_strcasecmp(slant, "i")) slant = N_("italic");
+ else if (!g_strcasecmp(slant, "o")) slant = N_("oblique");
+ else if (!g_strcasecmp(slant, "ri")) slant = N_("reverse italic");
+ else if (!g_strcasecmp(slant, "ro")) slant = N_("reverse oblique");
+ else if (!g_strcasecmp(slant, "ot")) slant = N_("other");
if (!g_strcasecmp(set_width, "normal")) set_width = NULL;
else if (!g_strcasecmp(set_width, "(nil)")) set_width = NULL;
if (!g_strcasecmp(spacing, "p")) spacing = NULL;
else if (!g_strcasecmp(spacing, "(nil)")) spacing = NULL;
- else if (!g_strcasecmp(spacing, "m")) spacing = _("[M]");
- else if (!g_strcasecmp(spacing, "c")) spacing = _("[C]");
+ else if (!g_strcasecmp(spacing, "m")) spacing = N_("[M]");
+ else if (!g_strcasecmp(spacing, "c")) spacing = N_("[C]");
/* Add the strings together, making sure there is 1 space between
them */
- strcpy(buffer, weight);
+ strcpy(buffer, _(weight));
if (slant)
{
strcat(buffer, " ");
- strcat(buffer, slant);
+ strcat(buffer, _(slant));
}
if (set_width)
{
strcat(buffer, " ");
- strcat(buffer, set_width);
+ strcat(buffer, _(set_width));
}
if (spacing)
{
strcat(buffer, " ");
- strcat(buffer, spacing);
+ strcat(buffer, _(spacing));
}
new_item = buffer;
can_match = TRUE;
if (nbitmapped_sizes)
- if (fontsel->metric == GTK_FONT_METRIC_POINTS)
- {
- if (*bitmapped_sizes % 10 != 0)
- can_match = FALSE;
- bitmap_size = *bitmapped_sizes / 10;
- bitmap_size_float = *bitmapped_sizes / 10;
- }
- else
- {
- bitmap_size = *bitmapped_sizes;
- bitmap_size_float = *bitmapped_sizes;
- }
+ {
+ if (fontsel->metric == GTK_FONT_METRIC_POINTS)
+ {
+ if (*bitmapped_sizes % 10 != 0)
+ can_match = FALSE;
+ bitmap_size = *bitmapped_sizes / 10;
+ bitmap_size_float = *bitmapped_sizes / 10;
+ }
+ else
+ {
+ bitmap_size = *bitmapped_sizes;
+ bitmap_size_float = *bitmapped_sizes;
+ }
+ }
if (can_match && nstandard_sizes && nbitmapped_sizes
&& *standard_sizes == bitmap_size)
{
GdkFont *font;
gchar *fontname, *label_text;
+ XFontStruct *xfs;
if (fontsel->font)
gdk_font_unref (fontsel->font);
#ifdef FONTSEL_DEBUG
g_message("Loading: %s\n", fontname);
#endif
+#ifndef GDK_WINDOWING_WIN32
font = gdk_font_load (fontname);
+ xfs = GDK_FONT_XFONT(font);
+ if (xfs->min_byte1 != 0 || xfs->max_byte1 != 0)
+ {
+ gchar *tmp_name;
+
+ gdk_font_unref (font);
+ tmp_name = g_strconcat (fontname, ",*", NULL);
+ font = gdk_fontset_load (tmp_name);
+ g_free(tmp_name);
+ }
+#else
+ /* Load as a fontset so that gtkentry uses wide chars for it */
+ font = gdk_fontset_load (fontname);
+#endif
g_free(fontname);
if (font)
GtkStyle *style;
gint text_height, new_height;
gchar *text;
-#if GDK_WINDOWING == GDK_WINDOWING_X11
+#ifdef GDK_WINDOWING_X11
XFontStruct *xfs;
#endif
gtk_entry_set_text(GTK_ENTRY(fontsel->preview_entry), PREVIEW_TEXT);
gtk_entry_set_position(GTK_ENTRY(fontsel->preview_entry), 0);
-#if GDK_WINDOWING == GDK_WINDOWING_X11
+#ifdef GDK_WINDOWING_X11
/* If this is a 2-byte font display a message to say it may not be
displayed properly. */
xfs = GDK_FONT_XFONT(fontsel->font);
static void
gtk_font_selection_show_font_info (GtkFontSelection *fontsel)
{
-#if GDK_WINDOWING == GDK_WINDOWING_X11
+#ifdef GDK_WINDOWING_X11
Atom font_atom, atom;
Bool status;
#endif
gtk_clist_set_text(GTK_CLIST(fontsel->info_clist), i, 1,
field ? field : "");
}
-#if GDK_WINDOWING == GDK_WINDOWING_X11
+#ifdef GDK_WINDOWING_X11
if (fontsel->font)
{
- font_atom = XInternAtom(GDK_DISPLAY(), "FONT", True);
- if (font_atom != None)
+ font_atom = gdk_atom_intern ("FONT", FALSE);
+
+ if (fontsel->font->type == GDK_FONT_FONTSET)
+ {
+ XFontStruct **font_structs;
+ gint num_fonts;
+ gchar **font_names;
+
+ num_fonts = XFontsOfFontSet (GDK_FONT_XFONT(fontsel->font),
+ &font_structs, &font_names);
+ status = XGetFontProperty(font_structs[0], font_atom, &atom);
+ }
+ else
{
status = XGetFontProperty(GDK_FONT_XFONT(fontsel->font), font_atom,
&atom);
- if (status == True)
+ }
+
+ if (status == True)
+ {
+ name = gdk_atom_name (atom);
+ gtk_entry_set_text (GTK_ENTRY (fontsel->actual_font_name), name);
+
+ for (i = 0; i < GTK_XLFD_NUM_FIELDS; i++)
{
- name = XGetAtomName(GDK_DISPLAY(), atom);
- gtk_entry_set_text(GTK_ENTRY(fontsel->actual_font_name), name);
-
- for (i = 0; i < GTK_XLFD_NUM_FIELDS; i++)
- {
- field = gtk_font_selection_get_xlfd_field (name, i,
- field_buffer);
- if (i == XLFD_SLANT)
- field = gtk_font_selection_expand_slant_code(field);
- else if (i == XLFD_SPACING)
- field = gtk_font_selection_expand_spacing_code(field);
- gtk_clist_set_text(GTK_CLIST(fontsel->info_clist), i, 2,
- field ? field : "");
- }
- shown_actual_fields = TRUE;
- XFree(name);
+ field = gtk_font_selection_get_xlfd_field (name, i, field_buffer);
+ if (i == XLFD_SLANT)
+ field = gtk_font_selection_expand_slant_code(field);
+ else if (i == XLFD_SPACING)
+ field = gtk_font_selection_expand_spacing_code(field);
+ gtk_clist_set_text(GTK_CLIST(fontsel->info_clist), i, 2,
+ field ? field : "");
}
+ shown_actual_fields = TRUE;
+ g_free (name);
}
}
-#elif GDK_WINDOWING == GDK_WINDOWING_WIN32
+#elif defined (GDK_WINDOWING_WIN32)
if (fontsel->font)
{
LOGFONT logfont;
filter_string = filter_strings[prop][i];
for (j = 0; j < fontsel_info->nproperties[prop]; j++)
{
- property = fontsel_info->properties[prop][j];
+ property = _(fontsel_info->properties[prop][j]);
property_alt = NULL;
if (prop == SLANT)
property_alt = gtk_font_selection_expand_slant_code(property);
}
-#if GDK_WINDOWING == GDK_WINDOWING_WIN32
+#ifdef GDK_WINDOWING_WIN32
static gint num_fonts;
static gint font_names_size;
int point_size;
static int logpixelsy = 0;
gchar facename[LF_FACESIZE*3];
- gchar *p, *q;
+ gchar *p;
+ const gchar *q;
if (logpixelsy == 0)
{
ReleaseDC (NULL, hdc);
}
+ /* Don't use _() here, only N_(), the actual translation is done elsewhere */
if (lfp->lfWeight >= FW_HEAVY)
- weight = "heavy";
+ weight = N_("heavy");
else if (lfp->lfWeight >= FW_EXTRABOLD)
- weight = "extrabold";
+ weight = N_("extrabold");
else if (lfp->lfWeight >= FW_BOLD)
- weight = "bold";
+ weight = N_("bold");
+#ifdef FW_DEMIBOLD
else if (lfp->lfWeight >= FW_DEMIBOLD)
- weight = "demibold";
+ weight = N_("demibold");
+#endif
else if (lfp->lfWeight >= FW_MEDIUM)
- weight = "medium";
+ weight = N_("medium");
else if (lfp->lfWeight >= FW_NORMAL)
- weight = "normal";
+ weight = N_("normal");
else if (lfp->lfWeight >= FW_LIGHT)
- weight = "light";
+ weight = N_("light");
else if (lfp->lfWeight >= FW_EXTRALIGHT)
- weight = "extralight";
+ weight = N_("extralight");
else if (lfp->lfWeight >= FW_THIN)
- weight = "thin";
+ weight = N_("thin");
else
- weight = "regular";
+ weight = N_("regular");
if (lfp->lfCharSet == ANSI_CHARSET)
{
encoding = "chinesebig5";
else if (lfp->lfCharSet == OEM_CHARSET)
encoding = "oem";
+#ifdef JOHAB_CHARSET
else if (lfp->lfCharSet == JOHAB_CHARSET)
encoding = "johab";
+#endif
else if (lfp->lfCharSet == HEBREW_CHARSET)
encoding = "hebrew";
else if (lfp->lfCharSet == ARABIC_CHARSET)
static void
gtk_font_selection_get_fonts (void)
{
-#if GDK_WINDOWING == GDK_WINDOWING_X11
+#ifdef GDK_WINDOWING_X11
gchar **xfontnames;
gint num_fonts;
-#elif GDK_WINDOWING == GDK_WINDOWING_WIN32
+#elif defined (GDK_WINDOWING_WIN32)
LOGFONT logfont;
+#else
+ gint num_fonts = 0;
+ gchar **xfontnames = NULL;
#endif
GSList **fontnames;
gchar *fontname;
fontsel_info = g_new (GtkFontSelInfo, 1);
-#if GDK_WINDOWING == GDK_WINDOWING_X11
+#ifdef GDK_WINDOWING_X11
/* Get a maximum of MAX_FONTS fontnames from the X server.
Use "-*" as the pattern rather than "-*-*-*-*-*-*-*-*-*-*-*-*-*-*" since
the latter may result in fonts being returned which don't actually exist.
if (num_fonts == MAX_FONTS)
g_warning(_("MAX_FONTS exceeded. Some fonts may be missing."));
-#elif GDK_WINDOWING == GDK_WINDOWING_WIN32
+#elif defined (GDK_WINDOWING_WIN32)
num_fonts = 0;
hdc = GetDC (NULL);
font_names_size = 100;
fontsel_info->nfonts = 0;
for (i = 0; i < num_fonts; i++)
{
-#ifdef FONTSEL_DEBUG
- g_message("%s\n", xfontnames[i]);
-#endif
if (gtk_font_selection_is_xlfd_font_name (xfontnames[i]))
gtk_font_selection_insert_font (fontnames, &fontsel_info->nfonts, xfontnames[i]);
- else
- {
-#ifdef FONTSEL_DEBUG
- g_warning("Skipping invalid font: %s", xfontnames[i]);
-#endif
- }
}
sizeof(guint16) * npoint_sizes);
g_free(fontnames);
-#if GDK_WINDOWING == GDK_WINDOWING_X11
+#ifdef GDK_WINDOWING_X11
XFreeFontNames (xfontnames);
-#elif GDK_WINDOWING == GDK_WINDOWING_WIN32
+#elif defined (GDK_WINDOWING_WIN32)
for (i = 0; i < num_fonts; i++)
g_free (xfontnames[i]);
g_free (xfontnames);
{
const gchar *t1, *t2;
gint countdown, len, num_dashes;
+#ifdef GDK_WINDOWING_WIN32
+ gchar *p;
+#endif
if (!fontname)
return NULL;
return NULL;
strncpy (buffer, t1, len);
buffer[len] = 0;
-
+#ifdef GDK_WINDOWING_X11
/* Convert to lower case. */
g_strdown (buffer);
+#elif defined (GDK_WINDOWING_WIN32)
+ /* Check for hex escapes in font family */
+ if (field_num == XLFD_FAMILY)
+ {
+ p = buffer;
+ while (*p)
+ {
+ if (*p == '%' && isxdigit (p[1]) && isxdigit (p[2]))
+ {
+ guint c;
+ sscanf (p+1, "%2x", &c);
+ *p = c;
+ strcpy (p+1, p+3);
+ }
+ p++;
+ }
+ }
+#endif
}
else
strcpy(buffer, "(nil)");
{
gchar buffer[16];
gchar *pixel_size = "*", *point_size = "*", *fontname;
-
+ gchar *fam = family;
+#ifdef GDK_WINDOWING_WIN32
+ gchar *p, *q;
+#endif
+
if (size <= 0)
return NULL;
else
point_size = buffer;
+#ifdef GDK_WINDOWING_WIN32
+ fam = g_malloc (strlen (family) * 3 + 1);
+ p = fam;
+ q = family;
+ while (*q)
+ {
+ if (*q == '-' || *q == '*' || *q == '?' || *q == '%')
+ p += sprintf (p, "%%%.02x", *q);
+ else
+ *p++ = *q;
+ q++;
+ }
+ *p = '\0';
+#endif
fontname = g_strdup_printf ("-%s-%s-%s-%s-%s-*-%s-%s-*-*-%s-*-%s",
- foundry, family, weight, slant,
+ foundry, fam, weight, slant,
set_width, pixel_size, point_size,
spacing, charset);
+#ifdef GDK_WINDOWING_WIN32
+ g_free (fam);
+#endif
return fontname;
}
* GtkFontSelectionDialog
*****************************************************************************/
-guint
+GtkType
gtk_font_selection_dialog_get_type (void)
{
static guint font_selection_dialog_type = 0;