FreeBSD Bugzilla – Attachment 205950 Details for
Bug 239316
java/openjdk8 8.222.10.1 fails to build
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Fixed fontconfig.patch
fontconfig.patch (text/plain), 7.28 KB, created by
Vladimir Druzenko
on 2019-07-20 21:52:34 UTC
(
hide
)
Description:
Fixed fontconfig.patch
Filename:
MIME Type:
Creator:
Vladimir Druzenko
Created:
2019-07-20 21:52:34 UTC
Size:
7.28 KB
patch
obsolete
>--- jdk/src/share/native/sun/font/freetypeScaler.c.orig >+++ jdk/src/share/native/sun/font/freetypeScaler.c >@@ -38,6 +38,8 @@ > #include FT_SIZES_H > #include FT_OUTLINE_H > #include FT_SYNTHESIS_H >+#include FT_LCD_FILTER_H >+#include <fontconfig/fontconfig.h> > > #include "fontscaler.h" > >@@ -665,7 +667,133 @@ > } > } > >+typedef struct { >+ FT_Render_Mode ftRenderMode; >+ int ftLoadFlags; >+ FT_LcdFilter ftLcdFilter; >+} RenderingProperties; > >+static FcPattern* matchedPattern(const FcChar8* family, double ptSize) { >+ FcPattern* pattern = FcPatternCreate(); >+ if (!pattern) >+ return 0; >+ >+ FcPatternAddString(pattern, FC_FAMILY, family); >+ FcPatternAddBool(pattern, FC_SCALABLE, FcTrue); >+ FcPatternAddDouble(pattern, FC_SIZE, ptSize); >+ >+ FcConfigSubstitute(0, pattern, FcMatchPattern); >+ FcDefaultSubstitute(pattern); >+ >+ FcResult res; >+ FcPattern *match = FcFontMatch(0, pattern, &res); >+ FcPatternDestroy(pattern); >+ return (res == FcResultMatch) ? match : NULL; >+} >+ >+static void readFontconfig(const FcChar8* family, double ptSize, jint aaType, RenderingProperties* rp) { >+ FcPattern *pattern = matchedPattern(family, ptSize); >+ >+ FT_Render_Mode ftRenderMode = FT_RENDER_MODE_NORMAL; >+ int ftLoadFlags = FT_LOAD_DEFAULT; >+ FT_LcdFilter ftLcdFilter = FT_LCD_FILTER_DEFAULT; >+ FcBool fcAntialias = 0; >+ char horizontal = 1; >+ >+ // subpixel order >+ if (aaType == TEXT_AA_ON) >+ ftRenderMode = FT_RENDER_MODE_NORMAL; >+ else if (aaType == TEXT_AA_OFF) >+ ftRenderMode = FT_RENDER_MODE_MONO; >+ else { >+ int fcRGBA = FC_RGBA_UNKNOWN; >+ if (pattern) >+ FcPatternGetInteger(pattern, FC_RGBA, 0, &fcRGBA); >+ switch (fcRGBA) { >+ case FC_RGBA_NONE: >+ ftRenderMode = FT_RENDER_MODE_NORMAL; >+ break; >+ case FC_RGBA_RGB: >+ case FC_RGBA_BGR: >+ ftRenderMode = FT_RENDER_MODE_LCD; >+ horizontal = 1; >+ break; >+ case FC_RGBA_VRGB: >+ case FC_RGBA_VBGR: >+ ftRenderMode = FT_RENDER_MODE_LCD_V; >+ horizontal = 0; >+ break; >+ default: >+ ftRenderMode = FT_RENDER_MODE_NORMAL; >+ break; >+ } >+ } >+ >+ // loading mode >+ if (aaType == TEXT_AA_OFF) >+ ftLoadFlags |= FT_LOAD_TARGET_MONO; >+ else { >+ int fcHintStyle = FC_HINT_NONE; >+ if (pattern) >+ FcPatternGetInteger(pattern, FC_HINT_STYLE, 0, &fcHintStyle); >+ switch (fcHintStyle) { >+ case FC_HINT_NONE: >+ ftLoadFlags |= FT_LOAD_NO_HINTING; >+ break; >+ case FC_HINT_SLIGHT: >+ ftLoadFlags |= FT_LOAD_TARGET_LIGHT; >+ break; >+ case FC_HINT_MEDIUM: >+ ftLoadFlags |= FT_LOAD_TARGET_NORMAL; >+ break; >+ case FC_HINT_FULL: >+ if (aaType == TEXT_AA_ON) >+ ftLoadFlags |= FT_LOAD_TARGET_NORMAL; >+ else >+ ftLoadFlags |= horizontal ? FT_LOAD_TARGET_LCD : FT_LOAD_TARGET_LCD_V; >+ break; >+ default: >+ ftLoadFlags |= FT_LOAD_TARGET_NORMAL; >+ break; >+ } >+ } >+ >+ // autohinting >+ FcBool fcAutohint = 0; >+ if (pattern && FcPatternGetBool(pattern, FC_AUTOHINT, 0, &fcAutohint) == FcResultMatch) >+ if (fcAutohint) >+ ftLoadFlags |= FT_LOAD_FORCE_AUTOHINT; >+ >+ // LCD filter >+ int fcLCDFilter = FC_LCD_DEFAULT; >+ if (pattern) >+ FcPatternGetInteger(pattern, FC_LCD_FILTER, 0, &fcLCDFilter); >+ switch (fcLCDFilter) { >+ case FC_LCD_NONE: >+ ftLcdFilter = FT_LCD_FILTER_NONE; >+ break; >+ case FC_LCD_DEFAULT: >+ ftLcdFilter = FT_LCD_FILTER_DEFAULT; >+ break; >+ case FC_LCD_LIGHT: >+ ftLcdFilter = FT_LCD_FILTER_LIGHT; >+ break; >+ case FC_LCD_LEGACY: >+ ftLcdFilter = FT_LCD_FILTER_LEGACY; >+ break; >+ default: >+ ftLcdFilter = FT_LCD_FILTER_DEFAULT; >+ break; >+ } >+ >+ if (pattern) >+ FcPatternDestroy(pattern); >+ >+ rp->ftRenderMode = ftRenderMode; >+ rp->ftLoadFlags = ftLoadFlags; >+ rp->ftLcdFilter = ftLcdFilter; >+} >+ > /* > * Class: sun_font_FreetypeFontScaler > * Method: getGlyphImageNative >@@ -698,31 +826,15 @@ > return ptr_to_jlong(getNullGlyphImage()); > } > >- if (!context->useSbits) { >- renderFlags |= FT_LOAD_NO_BITMAP; >- } >+ RenderingProperties renderingProperties; >+ readFontconfig((const FcChar8 *) scalerInfo->face->family_name, >+ context->ptsz, context->aaType, &renderingProperties); > >- /* NB: in case of non identity transform >- we might also prefer to disable transform before hinting, >- and apply it explicitly after hinting is performed. >- Or we can disable hinting. */ >- >- /* select appropriate hinting mode */ >- if (context->aaType == TEXT_AA_OFF) { >- target = FT_LOAD_TARGET_MONO; >- } else if (context->aaType == TEXT_AA_ON) { >- target = FT_LOAD_TARGET_NORMAL; >- } else if (context->aaType == TEXT_AA_LCD_HRGB || >- context->aaType == TEXT_AA_LCD_HBGR) { >- target = FT_LOAD_TARGET_LCD; >- } else { >- target = FT_LOAD_TARGET_LCD_V; >- } >- renderFlags |= target; >- > glyph_index = FT_Get_Char_Index(scalerInfo->face, glyphCode); > >- error = FT_Load_Glyph(scalerInfo->face, glyphCode, renderFlags); >+ FT_Library_SetLcdFilter(scalerInfo->library, renderingProperties.ftLcdFilter); >+ error = FT_Load_Glyph(scalerInfo->face, glyphCode, renderingProperties.ftLoadFlags); >+ > if (error) { > //do not destroy scaler yet. > //this can be problem of particular context (e.g. with bad transform) >@@ -741,9 +853,7 @@ > > /* generate bitmap if it is not done yet > e.g. if algorithmic styling is performed and style was added to outline */ >- if (ftglyph->format == FT_GLYPH_FORMAT_OUTLINE) { >- FT_Render_Glyph(ftglyph, FT_LOAD_TARGET_MODE(target)); >- } >+ FT_Render_Glyph(ftglyph, renderingProperties.ftRenderMode); > > width = (UInt16) ftglyph->bitmap.width; > height = (UInt16) ftglyph->bitmap.rows; >@@ -972,11 +1082,14 @@ > return NULL; > } > >- renderFlags = FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP; >+ RenderingProperties renderingProperties; >+ readFontconfig((const FcChar8 *) scalerInfo->face->family_name, >+ context->ptsz, context->aaType, &renderingProperties); > > glyph_index = FT_Get_Char_Index(scalerInfo->face, glyphCode); > >- error = FT_Load_Glyph(scalerInfo->face, glyphCode, renderFlags); >+ error = FT_Load_Glyph(scalerInfo->face, glyphCode, renderingProperties.ftLoadFlags); >+ > if (error) { > return NULL; > } >--- jdk/make/lib/Awt2dLibraries.gmk.orig >+++ jdk/make/lib/Awt2dLibraries.gmk >@@ -939,7 +939,7 @@ > LDFLAGS_SUFFIX_linux := -lawt $(LIBM) $(LIBCXX) -ljava -ljvm -lc, \ > LDFLAGS_SUFFIX_solaris := -lawt -lawt_headless -lc $(LIBM) $(LIBCXX) -ljava -ljvm, \ > LDFLAGS_SUFFIX_aix := -lawt -lawt_headless $(LIBM) $(LIBCXX) -ljava -ljvm,\ >- LDFLAGS_SUFFIX_bsd := -lawt $(LIBM) $(LIBCXX) -ljava -ljvm -lc, \ >+ LDFLAGS_SUFFIX_bsd := -L%%LOCALBASE%%/lib -lfontconfig -lawt $(LIBM) $(LIBCXX) -ljava -ljvm -lc, \ > LDFLAGS_SUFFIX_macosx := -lawt $(LIBM) $(LIBCXX) -undefined dynamic_lookup \ > -ljava -ljvm, \ > LDFLAGS_SUFFIX_windows := $(WIN_JAVA_LIB) advapi32.lib user32.lib gdi32.lib \
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 239316
: 205950 |
206011