1

Всем привет. Существующая проблема не раз встречалась в инете, я бы даже сказал, что это одна из самых популярных вопросов в linux. Меня она тоже не обошла стороной. Единственной проблемой полностью пересеть на linux для меня являются шрифты. Могу сказать, что в ubuntu они хороши, но я выбрал gentoo.
Вот так у меня сейчас http://pic.lg.ua/x/5/0e5a62/06a9d80e.png

Шрифты мыльные с артефактами, что жутко не привычно.

[1]   10-autohint.conf
  [2]   10-no-sub-pixel.conf
  [3]   10-sub-pixel-bgr.conf
  [4]   10-sub-pixel-rgb.conf
  [5]   10-sub-pixel-vbgr.conf
  [6]   10-sub-pixel-vrgb.conf
  [7]   10-unhinted.conf
  [8]   20-fix-globaladvance.conf *
  [9]   20-unhint-small-dejavu-sans-mono.conf
  [10]  20-unhint-small-dejavu-sans.conf
  [11]  20-unhint-small-dejavu-serif.conf
  [12]  20-unhint-small-vera.conf *
  [13]  25-unhint-nonlatin.conf
  [14]  30-metric-aliases.conf *
  [15]  30-urw-aliases.conf *
  [16]  40-nonlatin.conf *
  [17]  42-luxi-mono.conf *
  [18]  45-latin.conf *
  [19]  49-sansserif.conf *
  [20]  50-user.conf *
  [21]  51-local.conf *
  [22]  57-dejavu-sans-mono.conf
  [23]  57-dejavu-sans.conf
  [24]  57-dejavu-serif.conf
  [25]  60-latin.conf *
  [26]  60-liberation.conf
  [27]  65-fonts-persian.conf *
  [28]  65-khmer.conf
  [29]  65-nonlatin.conf *
  [30]  69-unifont.conf *
  [31]  70-no-bitmaps.conf
  [32]  70-yes-bitmaps.conf
  [33]  80-delicious.conf *
  [34]  90-synthetic.conf *

fonts.conf

<!--
  Accept deprecated 'mono' alias, replacing it with 'monospace'
-->
    <match target="pattern">
        <test qual="any" name="family">
            <string>mono</string>
        </test>
        <edit name="family" mode="assign">
            <string>monospace</string>
        </edit>
    </match>

<!--
  Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
-->
    <match target="pattern">
        <test qual="any" name="family">
            <string>sans serif</string>
        </test>
        <edit name="family" mode="assign">
            <string>sans-serif</string>
        </edit>
    </match>

<!--
  Accept deprecated 'sans' alias, replacing it with 'sans-serif'
-->
    <match target="pattern">
        <test qual="any" name="family">
            <string>sans</string>
        </test>
        <edit name="family" mode="assign">
            <string>sans-serif</string>
        </edit>
    </match>

<!--
  Load local system customization file
-->
    <include ignore_missing="yes">conf.d</include>

<!-- Font cache directory list -->

    <cachedir>/var/cache/fontconfig</cachedir>
    <cachedir>~/.fontconfig</cachedir>

    <config>

freetype собран с auto-hinter , прописаны use флаги type1 truetype.
Я встречал в инете посты про оверлей devnull, но его уже не существует. Там был use флаг ubuntu.

Больше всего меня растраивают шрифты в chromium, точнее отображение шрифтов на сайтах
Подскажите что еще можно сделать для улучшение шрифтов ?

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

2

если именно бубунтовские хотите, то media-fonts/ubuntu-font-family
есть в основном дереве...
не?

95% процентов проблем находятся между клавиатурой и стулом.

3

нет, я хочу что бы шрифты были читабельными и не резали глаз. Имелось ввиду, что в ubuntu  хорошая отрисовка и сглаживание.

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

4

У меня так, пришлось наложить патчи на cairo

http://i036.radikal.ru/1109/0f/84deb85e4331t.jpg

http://i024.radikal.ru/1109/4c/0e802857c461t.jpg

Был, был и весь вышел...

5

простите, что вмешиваюсь, просто несколько раз видел посты про "что-то не так со шрифтами", а у меня всё из коробки работало... или это я такой нетребовательный и не вижу, что у меня что-то не так?
http://storage1.static.itmages.ru/i/11/0901/s_1314872681_1892829_ffc744c890.png

95% процентов проблем находятся между клавиатурой и стулом.

6

Ничего тоже особо не делал, anti-aliasing в настройках кед включил и поменял все шрифты на Droid Sans /Terminus - вроде нормально.
http://storage8.static.itmages.ru/i/11/0901/s_1314873730_1402586_b5b6d9fc1a.png

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

7

Lupo Alberto пишет:

У меня так, пришлось наложить патчи на cairo

Просто шикарно, можно подробней про патчи ??

newzenon мне бы резали глаза.

Fat-Zer Вроде норм, но шрифты с белыми пробелами в буквах, не знаю как это называется.

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

8

Почему резали, всё ровно, чётко.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

9

не знаю, здесь на вкус и цвет.

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

10

Шрифты это больное место.. Сколько не пытался их настраивать все равно не идеал )
Для себя подобрал наиболее подходящий вариант: шрифт Droid Sans (общесистемный и для браузера) + убунтовские патчи из aur, в терминале - Terminus.

11

Ну так давайте рецепты патчей попробовать надо.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

12 (01.09.2011 15:20:28 отредактировано Nokman)

Ну для arch linux рецепт прост, но как он Вам поможет.. Хотя конфиги можно посмотреть  )
Все необходимое описано в wiki - "LCD" пакеты c патчами Ubuntu

upd:
Вот так они выглядят:
http://storage3.static.itmages.ru/i/11/0826/s_1314355401_3551315_9133608270.png http://storage4.static.itmages.ru/i/11/0901/s_1314875895_2724565_2856848b4a.png

13

Незаметил... арчевское тут не прокатит.  smile

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

14

Я делал так:
Создать файл /etc/portage/bashrc

+ открыть спойлер
# /etc/portage/bashrc
# echo 'PATCH_OVERLAY=/etc/portage/autopatch' >> /etc/make.conf
# mkdir -p /etc/portage/autopatch

autopatch() {
        local diff level p patches patched 

        [[ ! -d "$PATCH_OVERLAY" ]] && return 0

        patches=$(ls -1 ${PATCH_OVERLAY}/${CATEGORY}/${PN}/*.{patch,diff} 2>/dev/null)
        [[ $patches == "" ]] && return 0

        if ! cd ${S}; then
                echo ">>> FAILED TO cd $S"
                return 1
        fi

        for p in ${patches}; do
                p=$(basename $p)
                diff=${PATCH_OVERLAY}/${CATEGORY}/${PN}/${p}
                if [[ -e $diff ]] && [ ! -e ${S}/.${p} ]; then
                        patched=0
                        for level in 0 1 2 3 4; do
                                if [[ $patched == 0 ]]; then
                                        patch -g0 --dry -p${level} >/dev/null < $diff
                                        if [ $? = 0 ]; then
                                                echo -e ' \e[0;36m*\e[0m '"auto patching (-p${level}) ${p}"
                                                patch -g0 -p${level} < $diff > /dev/null && patched=1
                                                touch ${S}/.${p}
                                        fi
                                fi
                        done
                        [[ $patched != 1 ]] && echo "!!! FAILED auto patching $p" && return 1
                else
                        [[ ! -e $diff ]] && echo "!!! $diff does not exist, unable to auto patch"
                fi
        done
        cd $OLDPWD
}

if [[ $EBUILD_PHASE == prepare ]]; then
        PATH=$PATH:/usr/sbin:/usr/bin:/bin:/sbin
        autopatch || exit
fi

Создать каталог /etc/portage/autopatch/x11-libs/cairo, в который поместить патч:

+ открыть спойлер
diff -rupN cairo-9999.new/src/cairo-ft-font.c cairo-9999/src/cairo-ft-font.c
--- cairo-9999.new/src/cairo-ft-font.c    2010-08-06 21:51:21.603000022 +0300
+++ cairo-9999/src/cairo-ft-font.c    2010-08-06 21:52:00.926000031 +0300
@@ -57,6 +57,8 @@
 #include FT_SYNTHESIS_H
 #endif
 
+#define FIR_FILTER 1
+
 #if HAVE_FT_LIBRARY_SETLCDFILTER
 #include FT_LCD_FILTER_H
 #endif
@@ -607,6 +609,8 @@ _cairo_ft_unscaled_font_destroy (void *a
     _cairo_ft_unscaled_font_fini (unscaled);
 }
 
+static const int   fir_filter[5] = { 0x1C, 0x38, 0x55, 0x38, 0x1C };
+
 static cairo_bool_t
 _has_unlocked_face (const void *entry)
 {
@@ -1114,6 +1118,7 @@ _get_bitmap_surface (FT_Bitmap             *bi
     unsigned char *data;
     int format = CAIRO_FORMAT_A8;
     cairo_image_surface_t *image;
+    cairo_bool_t subpixel = FALSE;
 
     width = bitmap->width;
     height = bitmap->rows;
@@ -1183,7 +1188,220 @@ _get_bitmap_surface (FT_Bitmap             *bi
         }
 
     format = CAIRO_FORMAT_A8;
-    } else {
+    } else
+#ifdef FIR_FILTER
+    {
+        unsigned char*  line;
+        unsigned char*  bufBitmap;
+        int            pitch;
+        unsigned char   *data_rgba;
+        unsigned int    width_rgba, stride_rgba;
+        int            vmul = 1;
+        int            hmul = 1;
+
+        switch (font_options->subpixel_order) {
+        case CAIRO_SUBPIXEL_ORDER_DEFAULT:
+        case CAIRO_SUBPIXEL_ORDER_RGB:
+        case CAIRO_SUBPIXEL_ORDER_BGR:
+        default:
+        width /= 3;
+        hmul = 3;
+        break;
+        case CAIRO_SUBPIXEL_ORDER_VRGB:
+        case CAIRO_SUBPIXEL_ORDER_VBGR:
+        vmul = 3;
+        height /= 3;
+        break;
+        }
+        /*
+         * Filter the glyph to soften the color fringes
+         */
+        width_rgba = width;
+        stride = bitmap->pitch;
+        stride_rgba = (width_rgba * 4 + 3) & ~3;
+        data_rgba = calloc (1, stride_rgba * height);
+
+        /* perform in-place FIR filtering in either the horizontal or
+         * vertical direction. We're going to modify the RGB graymap,
+         * but that's ok, because we either own it, or its part of
+         * the FreeType glyph slot, which will not be used anymore.
+         */
+        pitch  = bitmap->pitch;
+        line   = (unsigned char*)bitmap->buffer;
+        if ( pitch < 0 )
+        line -= pitch*(height-1);
+
+        bufBitmap = line;
+
+        switch (font_options->subpixel_order) {
+        case CAIRO_SUBPIXEL_ORDER_DEFAULT:
+        case CAIRO_SUBPIXEL_ORDER_RGB:
+        case CAIRO_SUBPIXEL_ORDER_BGR:
+        {
+        int  h;
+
+        for ( h = height; h > 0; h--, line += pitch ) {
+            int             pix[6] = { 0, 0, 0, 0, 0, 0 };
+            unsigned char*  p      = line;
+            unsigned char*  limit  = line + width*3;
+            int             nn, val, val2;
+
+            val = p[0];
+            for (nn = 0; nn < 3; nn++)
+            pix[2 + nn] += val * fir_filter[nn];
+
+            val = p[1];
+            for (nn = 0; nn < 4; nn++)
+            pix[1 + nn] += val * fir_filter[nn];
+
+            p += 2;
+
+            for ( ; p  < limit; p++ ) {
+            val = p[0];
+            for (nn = 0; nn < 5; nn++)
+                pix[nn] += val * fir_filter[nn];
+
+            val2  = pix[0] / 256;
+            val2 |= -(val2 >> 8);
+            p[-2]  = (unsigned char)val2;
+
+            for (nn = 0; nn < 5; nn++)
+                pix[nn] = pix[nn + 1];
+            }
+            for (nn = 0; nn < 2; nn++ ) {
+            val2  = pix[nn] / 256;
+            val2 |= -(val2 >> 8);
+            p[nn - 2] = (unsigned char)val2;
+            }
+        }
+        }
+        break;
+        case CAIRO_SUBPIXEL_ORDER_VRGB:
+        case CAIRO_SUBPIXEL_ORDER_VBGR:
+        {
+        int  w;
+
+        for (w = 0; w < width; w++ ) {
+            int  pix[6] = { 0, 0, 0, 0, 0, 0 };
+            unsigned char*  p     = bufBitmap + w;
+            unsigned char*  limit = bufBitmap + w + height*3*pitch;
+            int             nn, val, val2;
+
+            val = p[0];
+            for (nn = 0; nn < 3; nn++)
+            pix[2 + nn] += val*fir_filter[nn];
+
+            val = p[pitch];
+            for (nn = 0; nn < 4; nn++ )
+            pix[1 + nn] += val * fir_filter[nn];
+
+            p += 2*pitch;
+            for ( ; p < limit; p += pitch ) {
+            val = p[0];
+            for (nn = 0; nn < 5; nn++ )
+                pix[nn] += val * fir_filter[nn];
+
+            val2  = pix[0] / 256;
+            val2 |= -(val2 >> 8);
+            p[-2 * pitch] = (unsigned char)val2;
+
+            for (nn = 0; nn < 5; nn++)
+                pix[nn] = pix[nn+1];
+            }
+
+            for (nn = 0; nn < 2; nn++) {
+            val2  = pix[nn] / 256;
+            val2 |= -(val2 >> 8);
+            p[(nn - 2) * pitch] = (unsigned char)val2;
+            }
+        }
+        }
+        break;
+        default:  /* shouldn't happen */
+        break;
+        }
+
+        /* now copy the resulting graymap into an ARGB32 image */
+        {
+        unsigned char*  in_line  = bufBitmap;
+        unsigned char*  out_line = data_rgba;
+        int             h        = height;
+
+        switch (font_options->subpixel_order) {
+        case CAIRO_SUBPIXEL_ORDER_DEFAULT:
+        case CAIRO_SUBPIXEL_ORDER_RGB:
+            for ( ; h > 0; h--, in_line += pitch, out_line += stride_rgba) {
+            unsigned char*  in  = in_line;
+            int*            out = (int*)out_line;
+            int             w;
+
+            for (w = width; w > 0; w--, in += 3, out += 1) {
+                int  r = in[0];
+                int  g = in[1];
+                int  b = in[2];
+
+                out[0] = (g << 24) | (r << 16) | (g << 8) | b;
+            }
+            }
+            break;
+        case CAIRO_SUBPIXEL_ORDER_BGR:
+            for ( ; h > 0; h--, in_line += pitch, out_line += stride_rgba) {
+            unsigned char*  in  = in_line;
+            int*            out = (int*)out_line;
+            int             w;
+
+            for (w = width; w > 0; w--, in += 3, out += 1) {
+                int  r = in[2];
+                int  g = in[1];
+                int  b = in[0];
+
+                out[0] = (g << 24) | (r << 16) | (g << 8) | b;
+            }
+            }
+            break;
+        case CAIRO_SUBPIXEL_ORDER_VRGB:
+            for ( ; h > 0; h--, in_line += pitch*3, out_line += stride_rgba) {
+            unsigned char*  in  = in_line;
+            int*            out = (int*)out_line;
+            int             w;
+
+            for (w = width; w > 0; w--, in += 1, out += 1) {
+                int  r = in[0];
+                int  g = in[pitch];
+                int  b = in[pitch*2];
+
+                out[0] = (g << 24) | (r << 16) | (g << 8) | b;
+            }
+            }
+            break;
+        case CAIRO_SUBPIXEL_ORDER_VBGR:
+            for ( ; h > 0; h--, in_line += pitch*3, out_line += stride_rgba) {
+            unsigned char*  in  = in_line;
+            int*            out = (int*)out_line;
+            int             w;
+
+            for (w = width; w > 0; w--, in += 1, out += 1) {
+                int  r = in[2*pitch];
+                int  g = in[pitch];
+                int  b = in[0];
+
+                out[0] = (g << 24) | (r << 16) | (g << 8) | b;
+            }
+            }
+            break;
+        }
+        }
+
+        if (own_buffer)
+        free (bitmap->buffer);
+        data = data_rgba;
+        stride = stride_rgba;
+        format = CAIRO_FORMAT_ARGB32;
+        subpixel = TRUE;
+        break;
+    }
+#else /* !FIR_FILTER */
+    {
         /* if we get there, the  data from the source bitmap
          * really comes from _fill_xrender_bitmap, and is
          * made of 32-bit ARGB or ABGR values */
@@ -1194,6 +1412,7 @@ _get_bitmap_surface (FT_Bitmap             *bi
         stride = bitmap->pitch;
         format = CAIRO_FORMAT_ARGB32;
     }
+#endif /* !FIR_FILTER */
     break;
     case FT_PIXEL_MODE_GRAY2:
     case FT_PIXEL_MODE_GRAY4:
@@ -1244,59 +1463,16 @@ _render_glyph_outline (FT_Face          
                cairo_font_options_t     *font_options,
                cairo_image_surface_t    **surface)
 {
-    int rgba = FC_RGBA_UNKNOWN;
-    int lcd_filter = FT_LCD_FILTER_LEGACY;
-    FT_GlyphSlot glyphslot = face->glyph;
+   FT_GlyphSlot glyphslot = face->glyph;
     FT_Outline *outline = &glyphslot->outline;
     FT_Bitmap bitmap;
     FT_BBox cbox;
-    unsigned int width, height;
+    FT_Matrix matrix;
+    int hmul = 1;
+    int vmul = 1;
+    unsigned int width, height, stride;
+    cairo_bool_t subpixel = FALSE;
     cairo_status_t status;
-    FT_Error fterror;
-    FT_Library library = glyphslot->library;
-    FT_Render_Mode render_mode = FT_RENDER_MODE_NORMAL;
-
-    switch (font_options->antialias) {
-    case CAIRO_ANTIALIAS_NONE:
-    render_mode = FT_RENDER_MODE_MONO;
-    break;
-
-    case CAIRO_ANTIALIAS_SUBPIXEL:
-    switch (font_options->subpixel_order) {
-        case CAIRO_SUBPIXEL_ORDER_DEFAULT:
-        case CAIRO_SUBPIXEL_ORDER_RGB:
-        case CAIRO_SUBPIXEL_ORDER_BGR:
-        render_mode = FT_RENDER_MODE_LCD;
-        break;
-
-        case CAIRO_SUBPIXEL_ORDER_VRGB:
-        case CAIRO_SUBPIXEL_ORDER_VBGR:
-        render_mode = FT_RENDER_MODE_LCD_V;
-        break;
-    }
-
-    switch (font_options->lcd_filter) {
-    case CAIRO_LCD_FILTER_NONE:
-        lcd_filter = FT_LCD_FILTER_NONE;
-        break;
-    case CAIRO_LCD_FILTER_DEFAULT:
-    case CAIRO_LCD_FILTER_INTRA_PIXEL:
-        lcd_filter = FT_LCD_FILTER_LEGACY;
-        break;
-    case CAIRO_LCD_FILTER_FIR3:
-        lcd_filter = FT_LCD_FILTER_LIGHT;
-        break;
-    case CAIRO_LCD_FILTER_FIR5:
-        lcd_filter = FT_LCD_FILTER_DEFAULT;
-        break;
-    }
-
-    break;
-
-    case CAIRO_ANTIALIAS_DEFAULT:
-    case CAIRO_ANTIALIAS_GRAY:
-    render_mode = FT_RENDER_MODE_NORMAL;
-    }
 
     FT_Outline_Get_CBox (outline, &cbox);
 
@@ -1307,21 +1483,20 @@ _render_glyph_outline (FT_Face          
 
     width = (unsigned int) ((cbox.xMax - cbox.xMin) >> 6);
     height = (unsigned int) ((cbox.yMax - cbox.yMin) >> 6);
+    stride = (width * hmul + 3) & ~3;
 
     if (width * height == 0) {
     cairo_format_t format;
     /* Looks like fb handles zero-sized images just fine */
-    switch (render_mode) {
-    case FT_RENDER_MODE_MONO:
+    switch (font_options->antialias) {
+    case CAIRO_ANTIALIAS_NONE:
         format = CAIRO_FORMAT_A1;
         break;
-    case FT_RENDER_MODE_LCD:
-    case FT_RENDER_MODE_LCD_V:
+    case CAIRO_ANTIALIAS_SUBPIXEL:
         format= CAIRO_FORMAT_ARGB32;
         break;
-    case FT_RENDER_MODE_LIGHT:
-    case FT_RENDER_MODE_NORMAL:
-    case FT_RENDER_MODE_MAX:
+    case CAIRO_ANTIALIAS_DEFAULT:
+    case CAIRO_ANTIALIAS_GRAY:
     default:
         format = CAIRO_FORMAT_A8;
         break;
@@ -1331,75 +1506,86 @@ _render_glyph_outline (FT_Face          
         cairo_image_surface_create_for_data (NULL, format, 0, 0, 0);
     if ((*surface)->base.status)
         return (*surface)->base.status;
-    } else {
+    } else  {
 
-    int bitmap_size;
+    matrix.xx = matrix.yy = 0x10000L;
+    matrix.xy = matrix.yx = 0;
 
-    switch (render_mode) {
-    case FT_RENDER_MODE_LCD:
-        if (font_options->subpixel_order == CAIRO_SUBPIXEL_ORDER_BGR) {
-        rgba = FC_RGBA_BGR;
-        } else {
-        rgba = FC_RGBA_RGB;
-        }
-    case FT_RENDER_MODE_LCD_V:
-        if (font_options->subpixel_order == CAIRO_SUBPIXEL_ORDER_VBGR) {
-        rgba = FC_RGBA_VBGR;
-        } else {
-        rgba = FC_RGBA_VRGB;
-        }
-        break;
-    case FT_RENDER_MODE_MONO:
-    case FT_RENDER_MODE_LIGHT:
-    case FT_RENDER_MODE_NORMAL:
-    case FT_RENDER_MODE_MAX:
-    default:
+    switch (font_options->antialias) {
+    case CAIRO_ANTIALIAS_NONE:
+        bitmap.pixel_mode = FT_PIXEL_MODE_MONO;
+        bitmap.num_grays  = 1;
+        stride = ((width + 31) & -32) >> 3;
+        break;
+    case CAIRO_ANTIALIAS_DEFAULT:
+    case CAIRO_ANTIALIAS_GRAY:
+        bitmap.pixel_mode = FT_PIXEL_MODE_GRAY;
+        bitmap.num_grays  = 256;
+        stride = (width + 3) & -4;
         break;
-        }
-
-#if HAVE_FT_LIBRARY_SETLCDFILTER
-    FT_Library_SetLcdFilter (library, lcd_filter);
+    case CAIRO_ANTIALIAS_SUBPIXEL:
+        switch (font_options->subpixel_order) {
+        case CAIRO_SUBPIXEL_ORDER_RGB:
+        case CAIRO_SUBPIXEL_ORDER_BGR:
+        case CAIRO_SUBPIXEL_ORDER_DEFAULT:
+        default:
+        matrix.xx *= 3;
+        hmul = 3;
+        subpixel = TRUE;
+#ifdef FIR_FILTER
+        cbox.xMin -= 64;
+        cbox.xMax += 64;
+        width    += 2;
 #endif
-
-    fterror = FT_Render_Glyph (face->glyph, render_mode);
-
-#if HAVE_FT_LIBRARY_SETLCDFILTER
-    FT_Library_SetLcdFilter (library, FT_LCD_FILTER_NONE);
+        break;
+        case CAIRO_SUBPIXEL_ORDER_VRGB:
+        case CAIRO_SUBPIXEL_ORDER_VBGR:
+        matrix.yy *= 3;
+        vmul = 3;
+        subpixel = TRUE;
+#ifdef FIR_FILTER
+        cbox.yMin -= 64;
+        cbox.yMax += 64;
+        height    += 2;
 #endif
+        break;
+        }
+        FT_Outline_Transform (outline, &matrix);
 
-    if (fterror != 0)
-        return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+        bitmap.pixel_mode = FT_PIXEL_MODE_GRAY;
+        bitmap.num_grays  = 256;
+        stride = (width * hmul + 3) & -4;
+    }
 
-    bitmap_size = _compute_xrender_bitmap_size (&bitmap,
-                            face->glyph,
-                            render_mode);
-    if (bitmap_size < 0)
+    bitmap.pitch = stride;
+    bitmap.width = width * hmul;
+    bitmap.rows = height * vmul;
+    bitmap.buffer = calloc (stride, bitmap.rows);
+    if (bitmap.buffer == NULL)
         return _cairo_error (CAIRO_STATUS_NO_MEMORY);
 
-    bitmap.buffer = calloc (1, bitmap_size);
-    if (bitmap.buffer == NULL)
-        return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+    FT_Outline_Translate (outline, -cbox.xMin*hmul, -cbox.yMin*vmul);
 
-    _fill_xrender_bitmap (&bitmap, face->glyph, render_mode,
-                  (rgba == FC_RGBA_BGR || rgba == FC_RGBA_VBGR));
+    if (FT_Outline_Get_Bitmap (glyphslot->library, outline, &bitmap) != 0) {
+        free (bitmap.buffer);
+        return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+    }
 
-    /* Note:
-     * _get_bitmap_surface will free bitmap.buffer if there is an error
-     */
     status = _get_bitmap_surface (&bitmap, TRUE, font_options, surface);
-    if (unlikely (status))
+    if (status)
         return status;
-
-    /* Note: the font's coordinate system is upside down from ours, so the
-     * Y coordinate of the control box needs to be negated.  Moreover, device
-     * offsets are position of glyph origin relative to top left while xMin
-     * and yMax are offsets of top left relative to origin.  Another negation.
-     */
-    cairo_surface_set_device_offset (&(*surface)->base,
-                     (double)-glyphslot->bitmap_left,
-                     (double)+glyphslot->bitmap_top);
     }
 
+    /*
+     * Note: the font's coordinate system is upside down from ours, so the
+     * Y coordinate of the control box needs to be negated.  Moreover, device
+     * offsets are position of glyph origin relative to top left while xMin
+     * and yMax are offsets of top left relative to origin.  Another negation.
+     */
+    cairo_surface_set_device_offset (&(*surface)->base,
+                     floor (-(double) cbox.xMin / 64.0),
+                     floor (+(double) cbox.yMax / 64.0));
+
     return CAIRO_STATUS_SUCCESS;
 }

Добавить в /etc/make.conf строку

PATCH_OVERLAY=/etc/portage/autopatch

Пересобрать x11-libs/cairo, убедившись, в наложении патча:

 Консоль:
gentoo-laptop cairo # emerge cairo
Calculating dependencies... done!

>>> Verifying ebuild manifests

>>> Emerging (1 of 1) x11-libs/cairo-1.10.2-r1
* cairo-1.10.2.tar.gz RMD160 SHA1 SHA256 size ;-) ...                                                                                [ ok ]
* Package:    x11-libs/cairo-1.10.2-r1
* Repository: gentoo
* Maintainer: cardoe@gentoo.org spatz@gentoo.org,x11@gentoo.org
* USE:        X elibc_glibc glib kernel_linux opengl qt4 svg userland_GNU x86 xcb
* FEATURES:   preserve-libs sandbox
>>> Unpacking source...
>>> Unpacking cairo-1.10.2.tar.gz to /home/users/tmp/portage/x11-libs/cairo-1.10.2-r1/work
>>> Source unpacked in /home/users/tmp/portage/x11-libs/cairo-1.10.2-r1/work
* auto patching (-p1) cairo-9999-cleartype.patch
>>> Preparing source in /home/users/tmp/portage/x11-libs/cairo-1.10.2-r1/work/cairo-1.10.2 ...

Был, был и весь вышел...

15

Lupo Alberto Спасибо, результат отличный, инструкцию в закладки, в который раз вы меня выручаете ) Еще один вопрос, какой шрифт у вас в firefox ?

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

16

Чет не пойму, вроде лучше стало:
http://storage2.static.itmages.ru/i/11/0901/s_1314884070_7822715_77d51dfdfe.png

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

17

riso пишет:

Еще один вопрос, какой шрифт у вас в firefox ?

media-fonts/ubuntu-font-family

Был, был и весь вышел...

18

Ну тогда для большей радости можно наложить патчи на libXft и freetype
тот же самый рецепт от Lupo Alberto
Вот в статье блога указываются адреса от куда качать патчи.
Для freetype только не нужен патч freetype-2.2.1-enable-valid.patch, так как он и так присутствует в ебилде

19

Спасибо, хорошая статья.

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

20

Lupo Alberto, зачем вы подпёрли такими костылями вместо того, чтобы ебилд подправить О_О

95% процентов проблем находятся между клавиатурой и стулом.

21

Fat-Zer, IMHO, не «костыли», а реализованная в portage возможность наложения пользовательских патчей.
P.S. Я ни разу не программист. Об этом «костыле», я уверен, знают программисты, но не торопятся. Будем ждать?

Был, был и весь вышел...

22

newzenon пишет:

Чет не пойму, вроде лучше стало:
http://storage2.static.itmages.ru/i/11/0901/s_1314884070_7822715_77d51dfdfe.png

Слишком размыто как-то все и не четко. Особенно шрифты в браузере.

23

А мне понравилось такое авто наложение патчей.  smile

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

24

Действительно не понятна ситуация. Почему разработчики не могут внести исправления. Я так понимаю все дело в патентах, но ведь они распространяются на США, сделали бы привязку по timezone.

— Ты кто?
— Часть силы той, что без числа
Творит добро, всему желая зла. © Фауст

25 (02.09.2011 12:17:23 отредактировано metra)

riso пишет:

Действительно не понятна ситуация. Почему разработчики не могут внести исправления. Я так понимаю все дело в патентах, но ведь они распространяются на США, сделали бы привязку по timezone.

все гораздо проще. Линукс такой продукт, в котором ничего никому не навязывается изначально (в идеале). Т.е. если вам нужны шрифты с ClearType иди LCDFilter - пожалуйста накладывайте патчи, но мы вам эти "улучшения" навязывать не будем.

И я очень рад, что дела так обстоят. И что линукс надо допиливать практически любой (кроме всяких убунт и пр., где навязывается очень многое), ибо мне на пример эти прибамбасы к шрифтам не нужны по объективным причинам (видеокарта старая и интерфейс начинает подтормаживать при улучшении шрифтов этими патчами, да и не вижу особого смысла, ибо компьютер и линукс использую для работы).

26

Можно ли сменить системный моноширинный шрифт?
По-умолчанию вот так:

 Консоль:
$ fc-match monospace
unifont.ttf: "unifont" "Medium"

А хотелось бы "DejaVu Sans Mono" ну или "Droid Sans Mono".
Debian по-умолчанию выдает "DejaVu Sans Mono Book"

UNIX: Live Free OR Die

27 (20.11.2011 20:53:41 отредактировано EsTaF)

Lupo Alberto пишет:

Я делал так:
Создать файл /etc/portage/bashrc

гм..
cairo нужно размаскировать. в смысле, эту самую 999 версию.

ибо, если та же x11-libs/cairo-1.10.2-r1 )) начнет пересобираться, то ничего из этого хорошего не выйдет. либо патч менять, либо размаскировка.

иначе:

>>> Emerging (1 of 1) x11-libs/cairo-1.10.2-r1
 * cairo-1.10.2.tar.gz RMD160 SHA1 SHA256 size ;-) ...                                                              [ ok ]
>>> Unpacking source...
>>> Unpacking cairo-1.10.2.tar.gz to /var/tmp/portage/x11-libs/cairo-1.10.2-r1/work
>>> Source unpacked in /var/tmp/portage/x11-libs/cairo-1.10.2-r1/work
!!! FAILED auto patching cairo-9999-cleartype.patch
 * The ebuild phase 'prepare' has exited unexpectedly. This type of
 * behavior is known to be triggered by things such as failed variable
 * assignments (bug #190128) or bad substitution errors (bug #200313).
 * Normally, before exiting, bash should have displayed an error message
 * above. If bash did not produce an error message above, it's possible
 * that the ebuild has called `exit` when it should have called `die`
 * instead. This behavior may also be triggered by a corrupt bash binary or
 * a hardware problem such as memory or cpu malfunction. If the problem is
 * not reproducible or it appears to occur randomly, then it is likely to
 * be triggered by a hardware problem. If you suspect a hardware problem
 * then you should try some basic hardware diagnostics such as memtest.
 * Please do not report this as a bug unless it is consistently
 * reproducible and you are sure that your bash binary and hardware are
 * functioning properly.

>>> Failed to emerge x11-libs/cairo-1.10.2-r1, Log file:

>>>  '/var/tmp/portage/x11-libs/cairo-1.10.2-r1/temp/build.log'

 * Messages for package x11-libs/cairo-1.10.2-r1:

 * The ebuild phase 'prepare' has exited unexpectedly. This type of
 * behavior is known to be triggered by things such as failed variable
 * assignments (bug #190128) or bad substitution errors (bug #200313).
 * Normally, before exiting, bash should have displayed an error message
 * above. If bash did not produce an error message above, it's possible
 * that the ebuild has called `exit` when it should have called `die`
 * instead. This behavior may also be triggered by a corrupt bash binary or
 * a hardware problem such as memory or cpu malfunction. If the problem is
 * not reproducible or it appears to occur randomly, then it is likely to
 * be triggered by a hardware problem. If you suspect a hardware problem
 * then you should try some basic hardware diagnostics such as memtest.
 * Please do not report this as a bug unless it is consistently
 * reproducible and you are sure that your bash binary and hardware are
 * functioning properly.

 * IMPORTANT: 1 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.
Opened problems: 5. closed: 1.

28

Lupo Alberto а можно посмотреть ваш ~/.fonts.conf

29

Lupo Alberto ушёл с форума...

95% процентов проблем находятся между клавиатурой и стулом.

30 (19.12.2011 00:43:27 отредактировано Lupo Alberto)

vux пишет:

Lupo Alberto а можно посмотреть ваш ~/.fonts.conf

+ открыть спойлер
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
 <match target="font">
  <edit mode="assign" name="rgba">
   <const>rgb</const>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="hinting">
   <bool>true</bool>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="hintstyle">
   <const>hintfull</const>
  </edit>
 </match>
 <dir>~/.fonts</dir>
 <match target="font">
  <edit mode="assign" name="antialias">
   <bool>true</bool>
  </edit>
 </match>
</fontconfig>
Был, был и весь вышел...