Board.KolibriOS.org
http://board.kolibrios.org/

Mirage File Manager
http://board.kolibrios.org/viewtopic.php?f=44&t=3514
Страница 2 из 2

Автор:  Pathoswithin [ Сб май 13, 2017 9:44 am ]
Заголовок сообщения:  Re: Mirage File Manager

revision #6893

Именем фейспалма, ручная инициализация кучи больше не требуется.

Автор:  theonlymirage [ Сб май 13, 2017 10:10 pm ]
Заголовок сообщения:  Re: Mirage File Manager

Ray
Извини, что отвечаю на русском языке ;)
Сейчас будет много текста...
buf2d конечно хорош, но он заточен больше под изображения. Скорее всего решить мою проблему с помощью библиотеки buf2d было нельзя.
Уточню задачу: мне нужно выводить в окно произвольную часть картинки (т.е. даны координаты и размеры, по которым нужно вырезать кусок изображения буфера). Всё, что в эту область не влазиет должно срезаться. Такой функции для работы внутри окна я не нашёл.

Ещё одна из проблем, с которой я столкнулся при рисовании в буфере, это вывод текста. Мне "хочется" уметь выводить текст как utf-8, так и cp. Система это уже умеет, и в API такой вывод в буфер предусмотрен. Но если текст длиннее области вывода, то он не обрезается на правой границе буфера - происходит его перенос на следующую строку пикселей, то есть продолжение текста вылазиет с левой стороны буфера. Причём такой проблемы нет, если текст не влазиет в буфер по высоте - в этом случае, текст корректно обрезается снизу, сверху он не выползает.
Мне понятна логика программировавшего это - если бы ему пришлось обрезать правую сторону, то алгоритм был бы геморойнее и сходу написать куда труднее, чем как сейчас.
Так как вносить правки в ядро требует сильных согласований (+может поломать программы) и это не стояло в моих планах, я решил проблему этого недостатка иначе. В koView текст печатается всё той же API функций 4, но такой длины, чтобы он не вылазил за правую границу. То есть если я понимаю, что очередной символ не влезет в ширину буфера, то я печатаю текст только до этого символа. Пока не учитывается скаллинг (т.к. это упирается на мой временный модуль fonts.inc и там ужасный код, надеюсь в ближайшее время заняться нормальной заменой этого модуля с учётом скаллинга текста).
В будущем возможно я или кто-то добавит вывод текста полностью в отдельный буфер или только не влазившего символа в отдельный буфер, а затем уже имеющимися функциями koView можно дорисовать только недостающую часть этого символа.
Поэтому koView велосипед, велосипед во спасение.

Интересно, если я ошибся и уже есть решение этих двух проблем, пожалуйста, напишите где я это просмотрел.


Pathoswithin
Отлично! Изменения на SVN увидел.

Автор:  Pathoswithin [ Вс май 14, 2017 4:15 am ]
Заголовок сообщения:  Re: Mirage File Manager

Вторую проблему решить не сложно, но если текст не влазит в буфер, то это же плохо в любом случае, а перенос в ядре делать жирно.

Автор:  Siemargl [ Вс май 14, 2017 8:08 am ]
Заголовок сообщения:  Re: Mirage File Manager

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

Автор:  Pathoswithin [ Ср май 17, 2017 11:05 am ]
Заголовок сообщения:  Re: Mirage File Manager

Исправил.
revision #6899

Автор:  theonlymirage [ Ср май 17, 2017 4:25 pm ]
Заголовок сообщения:  Re: Mirage File Manager

Обычный тест вывода старых текстов - прошёл нормально. Работу в буфере ещё тестирую, отпишусь позже.

Не знаю связано или нет, но в новой версии из косяков появился артефакт в тенях на рабочем столе. Смотрите на тень в конце буквы R на скринах ниже. Один пиксель теней справа срезался (надо сказать, что это самое длинное слово на рабочем столе - отсеклось?).

Вложения:
стало.PNG
стало.PNG [ 2.07 КБ | 261 просмотр ]
было.PNG
было.PNG [ 1.71 КБ | 261 просмотр ]

Автор:  Pathoswithin [ Чт май 18, 2017 12:28 pm ]
Заголовок сообщения:  Re: Mirage File Manager

Исправил.
revision #6900

Автор:  theonlymirage [ Чт май 18, 2017 1:43 pm ]
Заголовок сообщения:  Re: Mirage File Manager

Pathoswithin,
оперативно, спасибо!

По поводу тестов буфера:
[+] тесты с текстом превышающим ширину буфера пройдены - отсечение невлазиющих символов работает корректно
[+] аналогичные тесты текста со смещением по X (положительным > 0) - успешно пройдены
[+] тестировался даже случай, когда ни один символ не влезает в буфер - текст не отображается, всё корректно

[-] При тесте со смещением по X и по Y было обнаружено, что приложение может вылетать. Для этого нужно выводить текст внизу буфера, чтобы он не влазил по высоте. Например, для текста utf16LE (код типа шрифта 2) высота изображения буфера 50 пикселей, тогда любой текст выводимый с координатой Y > 43 пикселей приведёт к вылету. Все тексты с координатой до Y=43 включительно, выводятся корректно. Это не зависит от того влезает ли текст по ширине или нет.
На скриншоте "ВыводТекста" показан приведённый выше корректный случай с Y=43. При увеличении Y на всего единицу приложение рухнет.

[-] Попытки вывода текста за пределами области буфера приводят к вылету приложения. Например, если ширина буфера в пикселях = 150, то при попытке вывода текста по координате Х > 150 (начиная со 151) приложение крешится.
-------------------------
На этом непосредственно перехожу к основной задаче - разработка ФМ.

Возможно я где-то ошибся, но предварительно - столкнулся с тем, что 70-ая функция 1 подфункция в корне не возвращает бит метки раздела.
Он всегда не установлен, вместо него у разделов установлен бит папки.

Структура блока данных входа каталога (БДВК):
* +0: dword: атрибуты файла
бит 3 ( маска 8 ): это не файл, а метка тома
(на заданном разделе встречается не более одного раза и только в корневой папке)


Переведённые компоненты на koView достаточно хорошо показывают себя в работе, но потребуются тесты на слабеньком железе, чтобы выяснить насколько велика/затратна их нагрузка.

Пока идёт переход на koView, для любителей shell добавлен новый режим отображения "Консоль".
Теперь нажатием одной клавиши (по умолчанию F2) можно будет переключиться в консоль той же директории, в которой Вы работали.
Причём будет возможность задать цвета разным типам файлов и папок.
Надеюсь это будет востребовано и удобно. О поддерживаемых командах расскажу позже.

Вложения:
ПричёмЕстьПодсветкаТиповФайлов.PNG
ПричёмЕстьПодсветкаТиповФайлов.PNG [ 47 КБ | 226 просмотров ]
КонсольныйРежим.PNG
КонсольныйРежим.PNG [ 84.7 КБ | 226 просмотров ]
ВыводТекста.PNG
ВыводТекста.PNG [ 481 байт | 226 просмотров ]

Автор:  Pathoswithin [ Пт май 19, 2017 12:07 pm ]
Заголовок сообщения:  Re: Mirage File Manager

Исправил документацию.

Не знаю, есть ли смысл делать такую валидацию, ведь это не помешает программе указать неправильные размеры буфера.

Автор:  theonlymirage [ Пт май 19, 2017 5:37 pm ]
Заголовок сообщения:  Re: Mirage File Manager

Про 70-ую понял, тогда чуть позже (как буду добавлять в боковую панель инфу о выбранном файле) буду пробовать 5 подфункцию.

Насчёт буфера: в начале буфера есть его размеры, проверку выхода координат текста за пределы буфера сделать не сложно. Если просят рисовать за пределами, то ничего не делаем и переходим к выходу из функции.
Ширина теперь правильно отсекается (посимвольно). Кому потребуется попиксельно сможет это реализовать.

Что делать с текстом превышающим буфер по высоте - не знаю.
Если добавлять проверки, то должно быть проще всего не выводить такие тексты, которые не влезают в область. Для этого сравниваем: Ysize буфера и coordYtext+Htext (координата текста + высота текста). Если размер буфера больше или равен этой сумме параметров текста, то выводим текст в буфер, иначе к выходу из функции.
В идеале нужно рисовать только те пиксели текста, которые влезают в буфер. Для этого нужно полностью контролировать процесс вывода очередной строки пикселей символа. Тогда будет возможность понять, что очередная строка пикселей находится за пределами области и прекратить вывод/отрисовку. Для ядра это значительные лишние проверки.

Автор:  Siemargl [ Сб май 20, 2017 9:58 am ]
Заголовок сообщения:  Re: Mirage File Manager

варианты
1. не влезающую полностью строку не рисуй
2. бери больше буфер, Люк

Страница 2 из 2 Часовой пояс: UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/