Board.KolibriOS.org

Official KolibriOS board
It is currently Sat May 25, 2019 12:19 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 34 posts ]  Go to page 1 2 3 Next

Итак, Вы
За идею 91%  91%  [ 48 ]
Против идеи 9%  9%  [ 5 ]
Total votes: 53
Author Message
PostPosted: Fri Jul 28, 2006 8:27 pm 
Offline

Joined: Fri Jan 06, 2006 6:05 am
Posts: 102
Итак, ув. девелоперы!
Кого сейчас прикалывает рисовать относительно (0,0)?
это геморно, для окон со скином, потому что нужно ко всем кооринатам прибавлять высоту скина, которая заранее неизвестна, и следовательно не может быть задана константой. Это увеличивает ваш код, как исходный, так и бинарный.

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

Мало того, mike.dld готов сделать так, чтобы в esi при вызове функции 0 с новым форматом окон можно было передавать указатель на нуль-терминированную строку заголовка, уменьшая вам головные боли ещё больше!

Но это повлечет за собой переделку всех GUI-приложений в дистрибутиве. Наша группа (mike.dld, heavyiron, mistifi(ator, Johnny_B и все кто захотят принять участие) готова переделать эти программы.

Так как GUI, у KolibriOS пока-что достаточно слаб, если вы не решитесь, то по крайней мере с окнами врядли можно будет что-то сделать, а это достаточно безперспективно.

Чем раньше мы это сделаем тем меньше будет таких вот проблем, впрочем решать вам.

_________________
Image


Top
   
 Post subject:
PostPosted: Fri Jul 28, 2006 9:07 pm 
SCRSHOOT и RUN я переделаю сам.
Не помешала бы еще функция, ограничивающая область рисования в окне.


Top
   
 Post subject:
PostPosted: Fri Jul 28, 2006 9:57 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Идея хорошая. Но может лучше добавить новые функции API не меняя старые и так обеспечить совместимость.


Top
   
 Post subject:
PostPosted: Fri Jul 28, 2006 10:06 pm 
Offline

Joined: Fri Jan 06, 2006 6:05 am
Posts: 102
Serge
Думаю не стоит особо беспокоиться, так как "пострадают" только приложения, использующие скин ;)

_________________
Image


Top
   
 Post subject:
PostPosted: Fri Jul 28, 2006 10:56 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
mistifi(ator
А сколько таких приложений ?


Top
   
 Post subject:
PostPosted: Fri Jul 28, 2006 11:34 pm 
mistifi(ator
Я против жесткого отсутствия доступа к этой области.
Я согласен с предложением Serge'а.
Я за то чтобы можно было определять местоположение начальной точки вывода специальной функцией.
Пусть изначально расположение точки вывода и начало окна совпадают, а функцией их можно изменить.
Такой подход гибче.
А поскольку такого пункта нет в топике голосования, то я относительно текущего голосования воздержусь.


Top
   
 Post subject:
PostPosted: Sat Jul 29, 2006 7:34 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Согласен с Mario79. Пусть новые программы устанавливают способ отрисовки, а для остальных сохраняется старый по умолчанию.


Top
   
 Post subject:
PostPosted: Sat Jul 29, 2006 9:55 am 
Offline
Site Founder
User avatar

Joined: Sun Aug 08, 2004 8:55 am
Posts: 689
Хочу немного прояснить ситуацию.
Новый стиль как таковой не вводится. Он заменит собой стиль №0 (окно с рамкой в 1 пиксель и неизменяемым размером), так как этот стиль используется от силы в двух-трёх программах.
Введение функции для определения так называемой точки отсчёта координат мне не нравится. Я не могу себе представить, где это можно использовать, а если и можно, то сейчас это не нужно. А вот когда станет нужно, то координаты этой точки будут задаваться относительно клиентской области.
Касаемо "недоступности" заголовка. Эти страхи совершенно беспочвенны. Хотя я и не считаю, что какой-либо программе нужно будет что-то рисовать на заголовке (учитывая, что до сегодняшнего дня программы там рисовали от силы кнопку закрытия и строку заголовка, которые после внесения изменений будут рисоваться самом системой), такая возможность будет существовать. Может быть никто и подумать об этом не может (что и неудивительно за столько лет), но это будет возможно реализовать с использованием отрицательных координат при рисовании.

Итого:
- стиль окон №0 заменяется на новый;
- старые программы, использующие стиль №0, переписываются, как, собственно, и все остальные; занимается этим инициативная группа;
- добавляется функция установки заголовка окна; это позволяет изменять заголовок без перерисовки всего окна;
- добавление функции установки точки начала координат считаю несвоевременным.


Top
   
 Post subject:
PostPosted: Sat Jul 29, 2006 1:21 pm 
ИМХО, новый стиль внятней был бы. Всё ещё бета, но обратная совместимость не помешает ;)


Top
   
 Post subject:
PostPosted: Sat Jul 29, 2006 3:08 pm 
Offline
Site Founder
User avatar

Joined: Sun Aug 08, 2004 8:55 am
Posts: 689
Я с утра придумал, как мне кажется, лучшее решение. Заключается оно в том, что в функции №0 в регистре EDX не используется 3 бита. Таким образом, их можно задействовать для передачи ядру флагов управления отрисовкой окна.
Два флага, которые интересуют нас на данный момент - вывод строки заголовка и рисование относительно клиентской области.
Если установлен флаг отрисовки ядром заголовка окна, в ESI должен содержаться адрес нуль-терминированной строки заголовка. Заголовок можно будет сменить в любой момент с помощью дополнительной функции. Если на вход этой функции передастся 0 - заголовок рисоваться не будет.
Если будет установлен флаг рисования относительно клиентской области, ко всем координатам, передаваемым в графические системные функции, будет прибавляться соответствующее смещение. Вероятно, в структуру информации о процессе будут добавлены 2 или 4 поля (координаты и размер клиентской области).
Следует заметить, что второй флаг будет работать не только для окон стиля №3, но и для окон стилей №0 и №2. Первый - только для окон стиля №3. Для того, чтобы установить заголовок для окон стилей №0 и №2, нужно будет использовать дополнительную функцию, про которую я упомянул выше. Выставлять флаг при этом необязательно.
Таким образом, обратная совместимость соблюдается, а новые программы можно писать намного комфортнее. Над теми, кто не будет выставлять эти два флага в единицы, лично я буду очень сильно смеяться.


Top
   
 Post subject:
PostPosted: Sat Jul 29, 2006 4:39 pm 
2mike
+1


Top
   
 Post subject:
PostPosted: Sun Jul 30, 2006 10:47 am 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Я за то чтобы можно было определять местоположение начальной точки вывода специальной функцией.
Это даст возможность писать универсальные процедуры для рисования GUI компонентов, каждая такая процедура будет рисовать начиная с (0, 0), а перед её вызовом просто перемещать относительные координаты.
Идею с текстом заголовка давно нужно было реализовать, я за!


Top
   
 Post subject:
PostPosted: Sun Jul 30, 2006 12:05 pm 
Offline
Site Founder
User avatar

Joined: Sun Aug 08, 2004 8:55 am
Posts: 689
Надеюсь, ты понимаешь, что придётся вызывать эту функцию перед рисованием *каждого* компонента. Может это и облегчит рисование компонентов, но мне такой подход всё равно не нравится. Извините, но если кто-то и будет это реализовывать, это буду или не я, или я, но не сейчас.


Top
   
 Post subject:
PostPosted: Sun Jul 30, 2006 8:02 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Да, я с тобой согласен на счёт того что придётся вызывать эту функцию перед рисованием *каждого* компонента, но это наиболее гибкий вариант, а для того чтобы уменьшить код помогают таблици, например так (написал на скорую руку, могут быть ошибки) :


Code:
  mov esi, comp_data
  mov eax, func_num
@@: 
  mov  ebx, [esi] ; not use in sys. call
  test  ebx, ebx
  jz @f
  mov  ecx, [esi + 4] ; new x coord
  mov  edx, [esi + 8] ; new y coord
  int  0x40
  call ebx
  add esi, 12
  jmp @b
@@:


; other code
;........
;

comp_data:
  dd component1 ; proc addr
  dd 10  ; X coord
  dd 10  ; Y coord

  dd component2
  dd 15
  dd 20

  dd 0


ИМХО иначе получится как с курсором мыши : можно загнать в центр экрана но нельзя в произвольную точку, используется только при запуске...


Top
   
 Post subject:
PostPosted: Mon Aug 21, 2006 4:15 pm 
mike.dld
Функция, выводящая число, выводит его относительно края окна.
Координаты мышки приложение получает относительно края окна.
Необходимо сделать так, чтобы это тоже делалось относительно края клиентской области.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 34 posts ]  Go to page 1 2 3 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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:  
cron
Powered by phpBB® Forum Software © phpBB Limited