Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Jan 27, 2021 2:35 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 12 posts ] 
Author Message
PostPosted: Tue Dec 02, 2014 11:19 am 
Offline
User avatar

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

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

Я хочу получить рабочую область 400х250, поэтому создаю окно на 10 пикселей шире и на 5+_skinh пикселей выше, вот так:
Code:
   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) и получаю:

Image

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

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

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

_________________
Roman Shuvalov


Last edited by ALPINE on Tue Dec 02, 2014 6:37 pm, edited 1 time in total.

Top
   
PostPosted: Tue Dec 02, 2014 11:35 am 
Offline
Kernel Developer

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

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


Top
   
PostPosted: Tue Dec 02, 2014 1:58 pm 
Offline
User avatar

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

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

_________________
Roman Shuvalov


Top
   
PostPosted: Tue Dec 02, 2014 2:04 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2328
1) Да.
2) Да.

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


Top
   
PostPosted: Wed Dec 03, 2014 1:09 pm 
Offline

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

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

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


Top
   
PostPosted: Wed Dec 03, 2014 1:26 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2328
Nikolai1 wrote:
В разработке ядра и в ассемблере я конечно мало что понимаю, но ведь можно создать новую системную функцию на основе существующей для создания окна, в ней уже исправить баги. старые приложения будут работать, используя старую функцию, а в тех, что будут создаваться можно пользоваться новой.

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

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


Top
   
PostPosted: Wed Dec 03, 2014 5:06 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
Quote:
Можно. Создавайте.

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

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


Top
   
PostPosted: Wed Dec 03, 2014 5:29 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2328
Nikolai1 wrote:
Да я бы с радостью :wink: но в ассемблере почти не разбираюсь. куда уж мне в ядре копаться

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

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


Top
   
PostPosted: Wed Dec 03, 2014 11:18 pm 
Offline
Public Relations
User avatar

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


Top
   
PostPosted: Tue Jan 27, 2015 4:44 pm 
Offline

Joined: Sat Nov 30, 2013 4:07 pm
Posts: 39
"Вопрос про нестыковку в 1 пиксель"
Quote:
Создаю окно, вывожу прямоугольник 400х250 в точке (0,0) и получаю:
Image
Справа и снизу имеется нестыковка в один пиксель. ...
Таким образом, вы сделали окно, содержащее градиент цвета - вместо
сделать это содержащий сетку (для удобства просмотра сделать линии сетки
есть цвет, например, зеленый), линии сетки в первом положении пикселя, на
десятая позиция пикселей, на двадцатой позиции пикселя.
Затем проверьте - может видеть десятый и двадцатый линии сетки? Да -
то линии сетки работает. Теперь, мы можем увидеть первые линии сетки?
Если нет, то, возможно, первой сетки линия покрыта какой-то «внешней рамы /
промежуточный кадр / внутренняя рама» элементов. Если это так, увеличить
Размер линии сетки вверх от одного пикселя, до, возможно,
появляется первая позиция линии сетки.
также (так как ширина и высота установлен).
Такая процедура может служить, чтобы дать подсказки о том, где искать
для устранения неисправности в коде.
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.


Top
   
PostPosted: Fri Jan 30, 2015 7:54 am 
Offline

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


Last edited by buyerninety on Sat Jan 31, 2015 4:07 pm, edited 2 times in total.

Top
   
PostPosted: Sat Jan 31, 2015 3:50 pm 
Offline
User avatar

Joined: Tue Nov 25, 2014 5:08 pm
Posts: 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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 12 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited