Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[patch] Rudimentary BDF support #511

Closed
Maximus5 opened this issue Jul 31, 2015 · 18 comments
Closed

[patch] Rudimentary BDF support #511

Maximus5 opened this issue Jul 31, 2015 · 18 comments

Comments

@Maximus5
Copy link
Owner

Originally reported on Google Code with ID 511

Advantages:
1) Unicode+Bitmap (Windows supports either, not both)
2) Faster rendering

Reported by thecybershadow on 2012-03-19 08:11:09


- _Attachment: [0001-Increase-assert-width-height-limits.patch](https://storage.googleapis.com/google-code-attachments/conemu-maximus5/issue-511/comment-0/0001-Increase-assert-width-height-limits.patch)_ - _Attachment: [0002-Add-rudimentary-BDF-support.patch](https://storage.googleapis.com/google-code-attachments/conemu-maximus5/issue-511/comment-0/0002-Add-rudimentary-BDF-support.patch)_ - _Attachment: [0003-Optimize-text-drawing-for-FixFarBorders-false.patch](https://storage.googleapis.com/google-code-attachments/conemu-maximus5/issue-511/comment-0/0003-Optimize-text-drawing-for-FixFarBorders-false.patch)_ - _Attachment: [0004-Optimize-BDF-rendering-by-using-memory-bitmap.patch](https://storage.googleapis.com/google-code-attachments/conemu-maximus5/issue-511/comment-0/0004-Optimize-BDF-rendering-by-using-memory-bitmap.patch)_
@Maximus5
Copy link
Owner Author

Продолжение будет?
Сходу:
* при выборе bdf ломается шрифт при курсиве (в панелях для группы файлов настроен курсив,
отрисовка похоже идет системным шрифтом)
* слетают цвета в редакторе при Colorer-TrueMod-Far3. (если не bdf - все ок)
* шрифты не различимы в списке (окно настроек). рядом может и ttf лежать. наверное
логично было бы для bdf добавить суффикс, типа "Small [bdf]"

Reported by ConEmu.Maximus5 on 2012-03-19 11:34:58

@Maximus5
Copy link
Owner Author

ОК, сделаем.

Reported by thecybershadow on 2012-03-19 19:49:54

@Maximus5
Copy link
Owner Author

> при выборе bdf ломается шрифт при курсиве

У меня не воспроизводится, но патч может поможет. Если нет, прошу шаги для воспроизведения.

Остается вопрос с рамочным шрифтом. Там в CreateFontIndirectMy довольно запутанная
логика, и я даже не знаю как правильно к этому подобраться. "Правильно" тут означало
бы позволить пользователю указать BDF-шрифт и как рамочный шрифт, но я не представляю
как это можно обобщить, и боюсь логику кода трогать. Может вы посмотрите?

Reported by thecybershadow on 2012-03-20 03:20:24


- _Attachment: [0005-BDF-fixes.patch](https://storage.googleapis.com/google-code-attachments/conemu-maximus5/issue-511/comment-3/0005-BDF-fixes.patch)_

@Maximus5
Copy link
Owner Author

All OK

Рамки посмотрю.

Reported by ConEmu.Maximus5 on 2012-03-20 06:23:28

@Maximus5
Copy link
Owner Author

Не, пока не ОК

Can't retrieve font family from file:
C:\Far3\ConEmu\unifont-5.1.20080820.bdf
Continue?

Family может быть и не указан. Используем имя файла?
Шрифт качал как unifont-5.1.20080820.bdf.gz

Кроме того, зачем проверка "if (familyName.size() >= LF_FACESIZE)"?
Обрезать наверное в этом случае нужно?


Reported by ConEmu.Maximus5 on 2012-03-20 13:07:27

@Maximus5
Copy link
Owner Author

Более того. Распаковал комплект gohufont.
Получил 8 одинаковых "GohuFont [BDF]". Как-то не айс. Таки склоняюсь к имени файла
вместо опционального FAMILY_NAME

Reported by ConEmu.Maximus5 on 2012-03-20 13:12:33

@Maximus5
Copy link
Owner Author

Хотя не... если есть семейство - наверное лучше показывать одно имя, чтобы разные шрифты
можно было создавать (GohuFont - italic/bold/...)

Reported by ConEmu.Maximus5 on 2012-03-20 15:24:16

@Maximus5
Copy link
Owner Author

> Обрезать наверное в этом случае нужно?

Да, обрезать думаю было бы лучше. Проблема с обрезанием - если есть несколько шрифтов,
с названием отличающимся только после 31й буквы. "Bitstream Vera Sans Mono" - уже 24
буквы (LF_FACESIZE=32).

> Используем имя файла?

Да. Сделаем.

> если есть семейство - наверное лучше показывать одно имя

Поддержка семейств изначально не входило в план "rudimentary", но ладно, я сделаю.

Reported by thecybershadow on 2012-03-21 01:12:32

@Maximus5
Copy link
Owner Author

UniFont только частично monospace, между прочим. Не знаю, если стоит поддерживать растерные
не-monospace шрифты.

Reported by thecybershadow on 2012-03-21 05:29:43


- _Attachment: [0006-BDF-name-and-sorting-fixes.patch](https://storage.googleapis.com/google-code-attachments/conemu-maximus5/issue-511/comment-9/0006-BDF-name-and-sorting-fixes.patch)_ - _Attachment: [0007-Add-support-for-custom-font-families.patch](https://storage.googleapis.com/google-code-attachments/conemu-maximus5/issue-511/comment-9/0007-Add-support-for-custom-font-families.patch)_

@Maximus5
Copy link
Owner Author

Выкинул тормознутый std, скорость загрузки bdf-шрифтов увеличилась вдвое. Исходники
на svn.

На очереди.
Есть подозрение, что нужно выкинуть SetPixel.
Нет смысла грузить (инициализировать) шрифт, если он не используется в настройках.
Т.е. при регистрации - смотрим только параметры шрифта, а уж если он используется -
тогда уж полный цикл.
А потом будет виртуальный underline/bold/italic.

Reported by ConEmu.Maximus5 on 2012-03-21 21:30:34

@Maximus5
Copy link
Owner Author

Вот без setpixel, на базе svn еще не пробовал.

Часть параметров шрифта - если он рамочный, а это без просмотра всего файла не узнать.

Reported by thecybershadow on 2012-03-21 23:20:39


- _Attachment: [no-setpixel.patch](https://storage.googleapis.com/google-code-attachments/conemu-maximus5/issue-511/comment-11/no-setpixel.patch)_

@Maximus5
Copy link
Owner Author

Т.е. не весь, но хотя бы до первого рамочного символа. Что может означать весь.
Можно кэш сделать, если до этого дойдет.

Для скорости в теории можно добавить поддержку формата PCF, он двоичный.

Reported by thecybershadow on 2012-03-21 23:25:22

@Maximus5
Copy link
Owner Author

На счет просмотра всего файла.
Мысль была такая. Даже если его весь просматривать, ну или до первого BITMAP, или (как
вариант) до тех пор, пока не будут найдены (по количеству) все искомые параметры,
НО если НЕ звать при этом CreateBitmap() и пропускать обработку блока BITMAP - должно
быть а) быстрее; б) экономнее по памяти. Это может стать особо актуально, если шрифтов
в папке много.

Reported by ConEmu.Maximus5 on 2012-03-22 05:50:44

@Maximus5
Copy link
Owner Author

Надо посмотреть где время выполнение проводит.

При запуске с холодным дисковым кешем, большинство времени пройдет именно на чтение
файла, а не на анализе содержимого. Думаю следует либо кеш шрифтов делать, либо в документации
указывать, что не следует оставлять неиспользуемые шрифты в папке ConEmu.

Reported by thecybershadow on 2012-03-22 05:54:46

@Maximus5
Copy link
Owner Author

Если шрифт большой - тот же unifont 10M - то основное время было в getline, впрочем
и осталось в цикле обработки. Ну, допустим, на холодной машине - секунда на чтение,
остальные 5 - на сканирование строк.

На счет кеша - это хорошая мысль. Сделаю, и не только для bdf, но и остальных шрифтов
(они тоже ведь сканируются).

Reported by ConEmu.Maximus5 on 2012-03-22 06:00:47

@Maximus5
Copy link
Owner Author

После убиения SetPixel время запуска еще в 2 раза сократилось.

Reported by ConEmu.Maximus5 on 2012-03-22 12:23:00

@Maximus5
Copy link
Owner Author

теперь можно и в "рамках" использовать

Reported by ConEmu.Maximus5 on 2012-04-17 21:05:13

@Maximus5
Copy link
Owner Author

Reported by ConEmu.Maximus5 on 2013-10-23 23:18:20

  • Status changed: Done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant