Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб дек 16, 2017 12:38 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 26 сообщений ]  На страницу Пред. 1 2
Автор Сообщение
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Сб май 13, 2017 9:44 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1195
revision #6893

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


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Сб май 13, 2017 10:10 pm 
Не в сети

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

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

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


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


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Вс май 14, 2017 4:15 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1195
Вторую проблему решить не сложно, но если текст не влазит в буфер, то это же плохо в любом случае, а перенос в ядре делать жирно.


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Вс май 14, 2017 8:08 am 
Не в сети

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


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Ср май 17, 2017 11:05 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1195
Исправил.
revision #6899


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Ср май 17, 2017 4:25 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 11
Обычный тест вывода старых текстов - прошёл нормально. Работу в буфере ещё тестирую, отпишусь позже.

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


Вложения:
стало.PNG
стало.PNG [ 2.07 КБ | 505 просмотров ]
было.PNG
было.PNG [ 1.71 КБ | 505 просмотров ]
Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Чт май 18, 2017 12:28 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1195
Исправил.
revision #6900


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Чт май 18, 2017 1:43 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 11
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 КБ | 470 просмотров ]
КонсольныйРежим.PNG
КонсольныйРежим.PNG [ 84.7 КБ | 470 просмотров ]
ВыводТекста.PNG
ВыводТекста.PNG [ 481 байт | 470 просмотров ]
Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Пт май 19, 2017 12:07 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1195
Исправил документацию.

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


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Пт май 19, 2017 5:37 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 11
Про 70-ую понял, тогда чуть позже (как буду добавлять в боковую панель инфу о выбранном файле) буду пробовать 5 подфункцию.

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

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


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Сб май 20, 2017 9:58 am 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 269
варианты
1. не влезающую полностью строку не рисуй
2. бери больше буфер, Люк


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 26 сообщений ]  На страницу Пред. 1 2

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB