diff options
author | Andrejs Mivreņiks | 2016-10-20 14:24:26 +0300 |
---|---|---|
committer | Andrejs Mivreņiks | 2016-10-20 14:24:26 +0300 |
commit | 4208dd0bf008e7111a990802b4dba06997cfcb64 (patch) | |
tree | 602d011211a1a59f7628ad402109d8f3ee9e9b9a /enable-infinality.patch | |
parent | f5bac38a052c69fa1b34a41ab27d60f22fd72646 (diff) | |
download | aur-4208dd0bf008e7111a990802b4dba06997cfcb64.tar.gz |
Remove order number from patch file name
Diffstat (limited to 'enable-infinality.patch')
-rw-r--r-- | enable-infinality.patch | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/enable-infinality.patch b/enable-infinality.patch new file mode 100644 index 000000000000..ce3e610f843a --- /dev/null +++ b/enable-infinality.patch @@ -0,0 +1,259 @@ +diff -rupN a/src/share/native/sun/font/freetypeScaler.c b/src/share/native/sun/font/freetypeScaler.c +--- a/src/share/native/sun/font/freetypeScaler.c 2014-09-14 16:28:06.108295959 +0200 ++++ b/src/share/native/sun/font/freetypeScaler.c 2014-09-14 16:28:45.569693174 +0200 +@@ -23,6 +23,9 @@ + * questions. + */ + ++/* Use Infinality patches as default */ ++#define INFINALITY ++ + #include "jni.h" + #include "jni_util.h" + #include "jlong.h" +@@ -38,6 +41,10 @@ + #include FT_SIZES_H + #include FT_OUTLINE_H + #include FT_SYNTHESIS_H ++#ifdef INFINALITY ++#include FT_LCD_FILTER_H ++#include <fontconfig/fontconfig.h> ++#endif + + #include "fontscaler.h" + +@@ -676,6 +683,147 @@ static void CopyFTSubpixelVToSubpixel(co + } + } + ++#ifdef INFINALITY ++typedef struct { ++ FT_Render_Mode ftRenderMode; ++ int ftLoadFlags; ++ FT_LcdFilter ftLcdFilter; ++} RenderingProperties; ++ ++static FcPattern* matchedPattern(const FcChar8* family, double ptSize) { ++ /* ++ we will create pattern to find our family and size in ++ fontconfig configuration, and then will return it's ++ properties: ++ */ ++ FcPattern* fcPattern = 0; ++ fcPattern = FcPatternCreate(); ++ FcValue fcValue; ++ fcValue.type = FcTypeString; ++ fcValue.u.s = family; ++ FcPatternAdd(fcPattern, FC_FAMILY, fcValue, FcTrue); ++ FcPatternAddBool(fcPattern, FC_SCALABLE, FcTrue); ++ FcPatternAddDouble(fcPattern, FC_SIZE, ptSize); ++ // TODO FcPatternAddInteger(pattern, FC_WEIGHT, weight_value); ++ // TODO FcPatternAddInteger(pattern, FC_SLANT, slant_value); ++ // TODO FcPatternAddDouble(pattern, FC_PIXEL_SIZE, size_value); ++ // TODO FcPatternAddInteger(pattern, FC_WIDTH, stretch); 100 in most cases ++ FcConfigSubstitute(0, fcPattern, FcMatchPattern); ++ FcConfigSubstitute(0, fcPattern, FcMatchFont); ++ FcDefaultSubstitute(fcPattern); ++ FcResult res; ++ ++ FcPattern *pattern = 0; ++ pattern = FcFontMatch(0, fcPattern, &res); ++ FcPatternDestroy(fcPattern); ++ return pattern; ++} ++ ++static void readFontconfig(const FcChar8* family, double ptSize, jint aaType, RenderingProperties* rp) { ++ ++ FcPattern *pattern = matchedPattern(family, ptSize); ++ ++ int ftLoadFalgs = FT_LOAD_DEFAULT; ++ FT_Render_Mode ftRenderMode; ++ FT_LcdFilter ftLcdFilter; ++ char horizontal = 1; ++ FcBool b; ++ ++ // subpixel order: ++ if (aaType == TEXT_AA_ON) ++ ftRenderMode = FT_RENDER_MODE_NORMAL; ++ else if (aaType == TEXT_AA_OFF) ++ ftRenderMode = FT_RENDER_MODE_MONO; ++ else if (FcPatternGetBool(pattern, FC_ANTIALIAS, 0, &b) == FcResultMatch) ++ if (b) { ++ int subpixel = FC_RGBA_UNKNOWN; ++ FcPatternGetInteger(pattern, FC_RGBA, 0, &subpixel); ++ if (subpixel == FC_RGBA_UNKNOWN) ++ subpixel = FC_RGBA_NONE; ++ switch (subpixel) { ++ 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: ++ break; ++ } ++ } else { ++ ftRenderMode = FT_RENDER_MODE_NORMAL; ++ } ++ ++ // loading mode: ++ if (aaType == TEXT_AA_OFF) ++ ftLoadFalgs |= FT_LOAD_TARGET_MONO; ++ else { ++ int hint_style = FC_HINT_NONE; ++ FcPatternGetInteger(pattern, FC_HINT_STYLE, 0, &hint_style); ++ switch (hint_style) { ++ case FC_HINT_NONE: ++ ftLoadFalgs |= FT_LOAD_NO_HINTING; ++ break; ++ case FC_HINT_SLIGHT: ++ ftLoadFalgs |= FT_LOAD_TARGET_LIGHT; ++ break; ++ case FC_HINT_MEDIUM: ++ ftLoadFalgs |= FT_LOAD_TARGET_NORMAL; ++ break; ++ case FC_HINT_FULL: ++ if (aaType == TEXT_AA_ON) ++ ftLoadFalgs |= FT_LOAD_TARGET_NORMAL; ++ else ++ ftLoadFalgs |= horizontal ? FT_LOAD_TARGET_LCD : FT_LOAD_TARGET_LCD_V; ++ break; ++ default: ++ // what else to use as default? ++ ftLoadFalgs |= FT_LOAD_TARGET_NORMAL; ++ break; ++ } ++ } ++ ++ // autohinting: ++ if (FcPatternGetBool(pattern, FC_AUTOHINT, 0, &b) == FcResultMatch) ++ if (b) ++ ftLoadFalgs |= FT_LOAD_FORCE_AUTOHINT; ++ ++ // LCD filter: ++ int filter = FC_LCD_DEFAULT; ++ FcPatternGetInteger(pattern, FC_LCD_FILTER, 0, &filter); ++ switch (filter) { ++ 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: ++ // new unknown lcd filter type?! will use default one: ++ ftLcdFilter = FT_LCD_FILTER_DEFAULT; ++ break; ++ } ++ ++ FcPatternDestroy(pattern); ++ ++ rp->ftRenderMode = ftRenderMode; ++ rp->ftLoadFlags = ftLoadFalgs; ++ rp->ftLcdFilter = ftLcdFilter; ++} ++#endif + + /* + * Class: sun_font_FreetypeFontScaler +@@ -691,7 +839,9 @@ Java_sun_font_FreetypeFontScaler_getGlyp + UInt16 width, height; + GlyphInfo *glyphInfo; + int glyph_index; ++#ifndef INFINALITY + int renderFlags = FT_LOAD_RENDER, target; ++#endif + FT_GlyphSlot ftglyph; + + FTScalerContext* context = +@@ -709,6 +859,11 @@ Java_sun_font_FreetypeFontScaler_getGlyp + return ptr_to_jlong(getNullGlyphImage()); + } + ++#ifdef INFINALITY ++ RenderingProperties renderingProperties; ++ readFontconfig((const FcChar8 *) scalerInfo->face->family_name, ++ context->ptsz, context->aaType, &renderingProperties); ++#else + /* if algorithmic styling is required then we do not request bitmap */ + if (context->doBold || context->doItalize) { + renderFlags = FT_LOAD_DEFAULT; +@@ -731,10 +886,17 @@ Java_sun_font_FreetypeFontScaler_getGlyp + target = FT_LOAD_TARGET_LCD_V; + } + renderFlags |= target; ++#endif + + glyph_index = FT_Get_Char_Index(scalerInfo->face, glyphCode); + ++#ifdef INFINALITY ++ FT_Library_SetLcdFilter(scalerInfo->library, renderingProperties.ftLcdFilter); ++ error = FT_Load_Glyph(scalerInfo->face, glyphCode, renderingProperties.ftLoadFlags); ++#else + error = FT_Load_Glyph(scalerInfo->face, glyphCode, renderFlags); ++#endif ++ + if (error) { + //do not destroy scaler yet. + //this can be problem of particular context (e.g. with bad transform) +@@ -753,9 +915,13 @@ Java_sun_font_FreetypeFontScaler_getGlyp + + /* generate bitmap if it is not done yet + e.g. if algorithmic styling is performed and style was added to outline */ ++#ifdef INFINALITY ++ FT_Render_Glyph(ftglyph, renderingProperties.ftRenderMode); ++#else + if (ftglyph->format == FT_GLYPH_FORMAT_OUTLINE) { + FT_Render_Glyph(ftglyph, FT_LOAD_TARGET_MODE(target)); + } ++#endif + + width = (UInt16) ftglyph->bitmap.width; + height = (UInt16) ftglyph->bitmap.rows; +@@ -969,7 +1135,9 @@ Java_sun_font_FreetypeFontScaler_getGlyp + static FT_Outline* getFTOutline(JNIEnv* env, jobject font2D, + FTScalerContext *context, FTScalerInfo* scalerInfo, + jint glyphCode, jfloat xpos, jfloat ypos) { ++#ifndef INFINALITY + int renderFlags; ++#endif + int glyph_index; + FT_Error error; + FT_GlyphSlot ftglyph; +@@ -984,11 +1152,22 @@ static FT_Outline* getFTOutline(JNIEnv* + return NULL; + } + ++#ifdef INFINALITY ++ RenderingProperties renderingProperties; ++ readFontconfig((const FcChar8 *) scalerInfo->face->family_name, ++ context->ptsz, context->aaType, &renderingProperties); ++#else + renderFlags = FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP; ++#endif + + glyph_index = FT_Get_Char_Index(scalerInfo->face, glyphCode); + ++#ifdef INFINALITY ++ error = FT_Load_Glyph(scalerInfo->face, glyphCode, renderingProperties.ftLoadFlags); ++#else + error = FT_Load_Glyph(scalerInfo->face, glyphCode, renderFlags); ++#endif ++ + if (error) { + return NULL; + } |