Bugzilla – Attachment 54869 Details for
Bug 53228
Enhance pango to support artifical bold and italic
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
IDP Log In
|
Forgot Password
[patch]
The updated patch for pango 1.10.1
pango-1.10.1-artifical-italic-bold.diff (text/plain), 4.17 KB, created by
Zhe Su
on 2005-10-20 06:58:32 UTC
(
hide
)
Description:
The updated patch for pango 1.10.1
Filename:
MIME Type:
Creator:
Zhe Su
Created:
2005-10-20 06:58:32 UTC
Size:
4.17 KB
patch
obsolete
>diff -ur pango-1.10.1.old/pango/pangofc-fontmap.c pango-1.10.1/pango/pangofc-fontmap.c >--- pango-1.10.1.old/pango/pangofc-fontmap.c 2005-07-23 06:39:27.000000000 +0800 >+++ pango-1.10.1/pango/pangofc-fontmap.c 2005-10-20 14:48:52.000000000 +0800 >@@ -83,6 +83,8 @@ > > PangoFcFamily *family; > char *style; >+ >+ guint fake : 1; > }; > > struct _PangoFcFamily >@@ -1671,7 +1673,7 @@ > FcPattern *match_pattern; > FcPattern *result_pattern; > >- if (is_alias_family (fcfamily->family_name)) >+ if (fcface->fake) > { > if (strcmp (fcface->style, "Regular") == 0) > return make_alias_description (fcfamily, FALSE, FALSE); >@@ -1851,11 +1853,13 @@ > */ > static PangoFcFace * > create_face (PangoFcFamily *fcfamily, >- const char *style) >+ const char *style, >+ gboolean fake) > { > PangoFcFace *face = g_object_new (PANGO_FC_TYPE_FACE, NULL); > face->style = g_strdup (style); > face->family = fcfamily; >+ face->fake = fake; > > return face; > } >@@ -1880,38 +1884,85 @@ > fcfamily->faces = g_new (PangoFcFace *, fcfamily->n_faces); > > i = 0; >- fcfamily->faces[i++] = create_face (fcfamily, "Regular"); >- fcfamily->faces[i++] = create_face (fcfamily, "Bold"); >- fcfamily->faces[i++] = create_face (fcfamily, "Italic"); >- fcfamily->faces[i++] = create_face (fcfamily, "Bold Italic"); >+ fcfamily->faces[i++] = create_face (fcfamily, "Regular", TRUE); >+ fcfamily->faces[i++] = create_face (fcfamily, "Bold", TRUE); >+ fcfamily->faces[i++] = create_face (fcfamily, "Italic", TRUE); >+ fcfamily->faces[i++] = create_face (fcfamily, "Bold Italic", TRUE); > } > else > { >- FcObjectSet *os = FcObjectSetBuild (FC_STYLE, NULL); >+ FcObjectSet *os = FcObjectSetBuild (FC_STYLE, FC_WEIGHT, FC_SLANT, NULL); > FcPattern *pat = FcPatternBuild (NULL, > FC_FAMILY, FcTypeString, fcfamily->family_name, > NULL); >- >+ >+ /* Regular, Italic, Bold, Bold Italic */ >+ gboolean face_state [4] = { FALSE, FALSE, FALSE, FALSE }; >+ PangoFcFace **tmp_faces; >+ gint num = 0; >+ > fontset = FcFontList (NULL, pat, os); >- >+ > FcPatternDestroy (pat); > FcObjectSetDestroy (os); >- >- fcfamily->n_faces = fontset->nfont; >- fcfamily->faces = g_new (PangoFcFace *, fcfamily->n_faces); >- >+ >+ /* at most we have 3 additional artifical faces */ >+ tmp_faces = g_new (PangoFcFace *, fontset->nfont + 3); >+ > for (i = 0; i < fontset->nfont; i++) > { > FcChar8 *s; > FcResult res; > >+ int weight, slant; >+ >+ if (FcPatternGetInteger(fontset->fonts[i], FC_WEIGHT, 0, &weight) != FcResultMatch) >+ weight = FC_WEIGHT_MEDIUM; >+ >+ if (FcPatternGetInteger(fontset->fonts[i], FC_SLANT, 0, &slant) != FcResultMatch) >+ slant = FC_SLANT_ROMAN; >+ > res = FcPatternGetString (fontset->fonts[i], FC_STYLE, 0, &s); >- if (res != FcResultMatch) >- s = "Regular"; > >- fcfamily->faces[i] = create_face (fcfamily, s); >+ if (weight <= FC_WEIGHT_MEDIUM && slant == FC_SLANT_ROMAN) >+ { >+ face_state[0] = TRUE; >+ if (res != FcResultMatch) s = "Regular"; >+ } >+ else if (weight <= FC_WEIGHT_MEDIUM && slant > FC_SLANT_ROMAN) >+ { >+ face_state[1] = TRUE; >+ if (res != FcResultMatch) s = "Italic"; >+ } >+ else if (weight > FC_WEIGHT_MEDIUM && slant == FC_SLANT_ROMAN) >+ { >+ face_state[2] = TRUE; >+ if (res != FcResultMatch) s = "Bold"; >+ } >+ else if (weight > FC_WEIGHT_MEDIUM && slant > FC_SLANT_ROMAN) >+ { >+ face_state[3] = TRUE; >+ if (res != FcResultMatch) s = "Bold Italic"; >+ } >+ >+ tmp_faces[num++] = create_face (fcfamily, s, FALSE); > } > >+ /* we need artifical Italic face */ >+ if (face_state[0] && !face_state[1]) >+ tmp_faces[num++] = create_face (fcfamily, "Italic", TRUE); >+ /* we need artifical Bold face */ >+ if (face_state[0] && !face_state[2]) >+ tmp_faces[num++] = create_face (fcfamily, "Bold", TRUE); >+ /* we need artifical Bold Italic face */ >+ if ((face_state[0] || face_state[1] || face_state[2]) && !face_state[3]) >+ tmp_faces[num++] = create_face (fcfamily, "Bold Italic", TRUE); >+ >+ fcfamily->n_faces = num; >+ fcfamily->faces = g_memdup (tmp_faces, num * sizeof (PangoFontFace *)); >+ >+ g_free (tmp_faces); >+ > FcFontSetDestroy (fontset); > } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
|
Diff
Attachments on
bug 53228
:
17836
| 54869 |
61826
|
61827