LINUX.ORG.RU

Sub-pixel rendering шрифтов в GTK

 


1

2

Сколько не бьюсь, не могу заставить gtk рисовать шрифты с суб-пиксельным разрешением. В font-config выбран 10-sub-pixel-rgb.conf

$ xrdb -query
Xft.dpi:	96
Xft.antialias:	true
Xft.rgba:	rgb
Xft.hinting:	true
Xft.hintstyle:	hintfull
Xft.lcdfilter:	lcdlight

В qt все выглядит так, как и должно быть, а вот gtk что-то не очень.

Gentoo freetype-2.7.1-r1 fontconfig-2.12.1

★★★★★

Блин, не там тему создал //_-)

Наверное, стоит перенести в desktop

Waterlaz ★★★★★
() автор топика

hintfull смени на hintslight

И да, создай этот файлик, если его нет.

~/.config/fontconfig/fonts.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
 <match target="font">
  <edit mode="assign" name="hinting" >
  <bool>true</bool>
  </edit>
 </match>
 <match target="font" >
  <edit mode="assign" name="autohint" >
  <bool>true</bool>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="hintstyle" >
  <const>hintslight</const>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="rgba" >
  <const>rgb</const>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="antialias" >
  <bool>true</bool>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="lcdfilter">
  <const>lcddefault</const>
  </edit>
 </match>
</fontconfig>
enso ★★★★★
()
Последнее исправление: enso (всего исправлений: 1)
Ответ на: комментарий от enso

hintfull смени на hintslight

Не играет роли кмк. Попробовал, один черт.

И да, создай этот файлик, если его нет.

Его нет, но fontconfig первым делом грузит то, что в /etc/fontconfig. Я попробовал добавить, не помогло.

Waterlaz ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Попробуй указать субпиксельное сглаживание в файле /etc/fonts/local.conf (либо в пользовательском ~/.config/fontconfig/fonts.conf). Пример можешь посмотреть здесь:

Ну так там и указывал. Qt рисует с субпиксельным сглаживанием, а вот gtk — нет.

Waterlaz ★★★★★
() автор топика
Ответ на: комментарий от Waterlaz

Странное дело. Что за DE используешь?

На ум еще приходит вариант с симлинком что-то-там-subpixel.conf с папки conf.avial в conf.d, но вряд ли поможет, скорее всего дело в чем-то другом.

anonymous
()

Вот пример:

http://dump.bitcheese.net/images/gonawer/fonts2.png

Сверху — Qt, снизу — GTK. Настройки одни и те же. Сейчас не обсуждаем, что сверху некрасиво. Хочу понять, почему gtk игнориурует суб-пиксельную отрисовка.

Waterlaz ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Самое интересное, что настройки антиалиасинга и хинтинга влияют на отрисовку шрифтов в gtk, а вот субпиксели — нет.

Waterlaz ★★★★★
() автор топика
Ответ на: комментарий от Waterlaz

Походу какие-то специфичные генту-проблемы, попробуй погуглить что-нибудь со словам gtk ignore rgb hinting, ну или что-то подобное. Сходу всплыло вот такое например, предлагают поставить infinality:

https://lists.gt.net/gentoo/desktop/289592

anonymous
()
Ответ на: комментарий от Waterlaz

Еще, наверное, можно поставить dconf-editor, может с ним настройки подхватит, типа сейчас чего-нибудь у тебя не хватает, но это так, домыслы.

Кстати, у меня вот так выглядит, может смена rgb на rgba поможет?

http://i.imgur.com/aiteAag.png

anonymous
()

Вот странная штука. Подебажил немного сорцы cairo (gtk рендерит через него). Не могу найти ошибки.

Дошел до того, что вот этот вызов уже рендерит неправильную картинку:

   FT_Render_Glyph (face->glyph, FT_RENDER_MODE_LCD);

В доках freetype написано, что

FT_RENDER_MODE_LCD

This mode corresponds to horizontal RGB and BGR sub-pixel displays like LCD screens. It produces 8-bit bitmaps that are 3 times the width of the original glyph outline in pixels, and which use the FT_PIXEL_MODE_LCD mode.

В результате картинка действительно в три раза шире, но все тройки пикселей имеют одинаковую интенсивность.

FT_CONFIG_OPTION_SUBPIXEL_RENDERING включен.

Грешил на неправильный lcd_filter, но пробовал разные

FT_Library_SetLcdFilter (library, FT_LCD_FILTER_NONE);
FT_Library_SetLcdFilter (library, FT_LCD_FILTER_DEFAULT);
FT_Library_SetLcdFilter (library, FT_LCD_FILTER_LIGHT);
Результат одинаковый.

Waterlaz ★★★★★
() автор топика
Ответ на: комментарий от Waterlaz

мы так до сих пор и не знаем, что у тебя в системе занимается установкой настроек для gtk отличных от дефолтных и есть ли это вообще.

bass ★★★★★
()
Ответ на: комментарий от Waterlaz

Вот странно, а простенькая тестовая программка рендерит с теми же вызовами freetype все правильно.

Waterlaz ★★★★★
() автор топика
Ответ на: комментарий от bass

мы так до сих пор и не знаем, что у тебя в системе занимается установкой настроек для gtk отличных от дефолтных и есть ли это вообще.

Ничего нет. Кроме настроек в font-config и .Xresourses ничего не трогал.

DE — xmonad. Никаких гномов, кед и крыс нет.

Waterlaz ★★★★★
() автор топика
Последнее исправление: Waterlaz (всего исправлений: 1)
Ответ на: комментарий от Waterlaz

Попробуй поставить gnome-settings-daemon, тебе нужен только модуль gsd-xsettings и в его schema поменяй дефолт на интересующие тебя значения. gsd-xsettings лучше запустить до вызова gtk-шных приложений.

bass ★★★★★
()
Последнее исправление: bass (всего исправлений: 2)
Ответ на: комментарий от anonymous

О!

Еще раз внимательно перепроверил, таки было выключено.

Спасибо.

Waterlaz ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.