Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вт мар 28, 2017 3:34 am

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




Начать новую тему  Ответить на тему  [ 12 сообщений ] 
Автор Сообщение
СообщениеДобавлено: Вт дек 02, 2014 11:19 am 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 25, 2014 5:08 pm
Сообщения: 109
Здравствуйте. Пишу игру на конкурс. Вчера наконец-то скомпилировал Hello World и это радует. Сейчас готовлюсь к выводу графики и столкнулся с нестыковкой в один пиксель с границей окна. Окно со скином, и, согласно документации, система рисует его так:
Цитата:
- рисуется внешняя рамка шириной 1 пиксель цвета 'outer' из скина
- рисуется промежуточная рамка шириной 3 пикселя цвета 'frame' из скина
- рисуется внутренняя рамка шириной 1 пиксель цвета 'inner' из скина
- рисуется заголовок (по картинкам из скина) в прямоугольнике (0,0) - (xsize,_skinh-1)

Итого получается, что рамка слева, справа и снизу имеет толщину 1+3+1=5 пикселей, сверху - _skinh пикселей.

Я хочу получить рабочую область 400х250, поэтому создаю окно на 10 пикселей шире и на 5+_skinh пикселей выше, вот так:
Код:
   area_width = 400;
   area_height = 250;

   window_width = area_width + 10; // 5px border (left + right)
   window_height = kol_skin_height() + area_height + 5; // bottom 5px border + title

Создаю окно, вывожу прямоугольник 400х250 в точке (0,0) и получаю:

Изображение

Справа и снизу имеется нестыковка в один пиксель. То есть окно получилось на 1 пиксель шире и выше, чем надо (видно, как просвечивает фон и окно на заднем плане). Это баг или так задумано? Мне не тяжело отнять единичку при создании окна, но я не уверен, правильный ли это будет поступок.

Второй вопрос про события клавиатуры.

Я правильно понимаю, что ловится только событие нажатия? Отжатия (KeyUp) в принципе нет? Если это так, то я буду пытаться "угадать" отжатие в момент, когда прекратится поток событий от зажатой клавиши, но для этого мне нужно знать задержку перед авто-повтором и период авто-повтора. Я кажется нашёл их в /kernel/branches/Kolibri-acpi/drivers/usbhid, это они? Они всегда будут фиксированными?
Цитата:
; 1h. Start the new autorepeat timer with 250 ms initial delay
; and 50 ms subsequent delays.

_________________
Roman Shuvalov


Последний раз редактировалось ALPINE Вт дек 02, 2014 6:37 pm, всего редактировалось 1 раз.

Вернуться к началу
СообщениеДобавлено: Вт дек 02, 2014 11:35 am 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
1) Добро пожаловать в порочный и удивительный мир legacy кода. Это унаследовано от MenuetOS. Не правим ядро потому что нужно править 100500 приложений. Причем изменения будут не совсем тривиальными. Еще такая же фигня есть с размерами кнопки - ф.8.
2) Читать описание ф.2 и ф.66 - в части касающейся сканкодов.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
СообщениеДобавлено: Вт дек 02, 2014 1:58 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 25, 2014 5:08 pm
Сообщения: 109
1) То есть нужно отнимать единицу и таким образом фиксить неисправимый баг, правильно?
2) Ага. Я про сканкоды сначала не стал читать, решив, что там только про их преобразование в ASCII. А оказалось, что в 15-м бите информация о том, нажат он или нет. Спасибо.

А сканкоды безопасно использовать? На других клавиатурах с другими драйверами сканкоды останутся прежними?

_________________
Roman Shuvalov


Вернуться к началу
СообщениеДобавлено: Вт дек 02, 2014 2:04 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
1) Да.
2) Да.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
СообщениеДобавлено: Ср дек 03, 2014 1:09 pm 
Не в сети

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Цитата:
Добро пожаловать в порочный и удивительный мир legacy кода. Это унаследовано от MenuetOS. Не правим ядро потому что нужно править 100500 приложений. Причем изменения будут не совсем тривиальными. Еще такая же фигня есть с размерами кнопки - ф.8.

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

_________________
Чудеса случаются! Это вам любой программист скажет! :)


Вернуться к началу
СообщениеДобавлено: Ср дек 03, 2014 1:26 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Nikolai1 писал(а):
В разработке ядра и в ассемблере я конечно мало что понимаю, но ведь можно создать новую системную функцию на основе существующей для создания окна, в ней уже исправить баги. старые приложения будут работать, используя старую функцию, а в тех, что будут создаваться можно пользоваться новой.

Можно. Создавайте.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
СообщениеДобавлено: Ср дек 03, 2014 5:06 pm 
Не в сети

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Цитата:
Можно. Создавайте.

Да я бы с радостью :wink: но в ассемблере почти не разбираюсь. куда уж мне в ядре копаться

_________________
Чудеса случаются! Это вам любой программист скажет! :)


Вернуться к началу
СообщениеДобавлено: Ср дек 03, 2014 5:29 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Nikolai1 писал(а):
Да я бы с радостью :wink: но в ассемблере почти не разбираюсь. куда уж мне в ядре копаться

Не боги горшки обжигают.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
СообщениеДобавлено: Ср дек 03, 2014 11:18 pm 
Не в сети
Public Relations
Аватара пользователя

Зарегистрирован: Пн июн 07, 2010 12:01 pm
Сообщения: 1879
Nikolai1 писал(а):
Цитата:
Можно. Создавайте.
Да я бы с радостью :wink: но в ассемблере почти не разбираюсь. куда уж мне в ядре копаться
Пришли мыши к мудрой сове попросить совета, как им избежать участи быть съеденными обнаглевшими котами. Сова говорит им:
- Станьте ежиками. Если вы будете колючими, вас никто не съест!
Обалдевшие от восторга мыши побежали домой, там опомнились и снова вернулись к сове:
- Сова, расскажи - а как нам стать ежиками?
А Сова им в ответ:
- Мыши! Как – разбирайтесь сами! Мое дело – стратегия!


Вернуться к началу
СообщениеДобавлено: Вт янв 27, 2015 4:44 pm 
Не в сети

Зарегистрирован: Сб ноя 30, 2013 4:07 pm
Сообщения: 39
"Вопрос про нестыковку в 1 пиксель"
Цитата:
Создаю окно, вывожу прямоугольник 400х250 в точке (0,0) и получаю:
Изображение
Справа и снизу имеется нестыковка в один пиксель. ...
Таким образом, вы сделали окно, содержащее градиент цвета - вместо
сделать это содержащий сетку (для удобства просмотра сделать линии сетки
есть цвет, например, зеленый), линии сетки в первом положении пикселя, на
десятая позиция пикселей, на двадцатой позиции пикселя.
Затем проверьте - может видеть десятый и двадцатый линии сетки? Да -
то линии сетки работает. Теперь, мы можем увидеть первые линии сетки?
Если нет, то, возможно, первой сетки линия покрыта какой-то «внешней рамы /
промежуточный кадр / внутренняя рама» элементов. Если это так, увеличить
Размер линии сетки вверх от одного пикселя, до, возможно,
появляется первая позиция линии сетки.
также (так как ширина и высота установлен).
Такая процедура может служить, чтобы дать подсказки о том, где искать
для устранения неисправности в коде.
So you made a window containing a colour gradient - instead
make it containing a grid (for ease of viewing make grid lines
have colour e.g. green), grid lines at the first pixel position, at
the tenth pixel position, at the twentieth pixel position.
Then check - can see the tenth and twentieth grid lines? Yes -
then grid lines are working. Now, can we see the first grid line?
If no, then perhaps the first grid line is covered by some 'outer
frame/intermediate frame/inner frame' elements . If so, increase
the size of the grid line upwards from one pixel, until perhaps
first position grid line appears.
These grid lines vertical, concurrently make horizontal grid lines
also (so both the width and height are checked).
Such procedure may serve to give clues as to where to look
for the fault in the code.


Вернуться к началу
СообщениеДобавлено: Пт янв 30, 2015 7:54 am 
Не в сети

Зарегистрирован: Сб ноя 30, 2013 4:07 pm
Сообщения: 39
Цитата:
- рисуется внешняя рамка шириной 1 пиксель цвета 'outer' из скина
- рисуется промежуточная рамка шириной 3 пикселя цвета 'frame' из скина
- рисуется внутренняя рамка шириной 1 пиксель цвета 'inner' из скина
- рисуется заголовок (по картинкам из скина) в прямоугольнике (0,0) - (xsize,_skinh-1)
На самом деле, глядя теперь на картинке под XP лупа, не вижу какой-либо
"рисуется внутренняя рамка шириной 1 пиксель цвета 'inner' из скина".
Сравнение с внутренняя рамка окна Eolite, которая рядом с ним,
по-видимому, показывают, что ваше окно отсутствует внутренняя рамка на
правой и нижней, и, возможно, слева, а. (Верхний внутренний линию рамки,
кажется, присутствует.)
Если вы обнаружите в коде этого окна, причины неисправности, пожалуйста,
поделиться. Причина не смущать, но, скорее, похожи или же вина
- в программах TABLE и TANKS (не LaserTank).


Последний раз редактировалось buyerninety Сб янв 31, 2015 4:07 pm, всего редактировалось 2 раза.

Вернуться к началу
СообщениеДобавлено: Сб янв 31, 2015 3:50 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 25, 2014 5:08 pm
Сообщения: 109
Please write in English only. Google Translate sucks.

I don't have time to debug this code, but maybe one day I will code some stuff for KolibriOS and figure out what's going on about this 1-pixel glitch.

_________________
Roman Shuvalov


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

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


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

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


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

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