Page 3 of 4

Posted: Tue Jul 24, 2007 10:08 pm
by Pavia
'display_data' где определяется принадлежность точки процессу, к сожалению все биты заняты под номер процесса
Хорошая идея. Нужно просто сделать процесс курсор. Тогда проверка будет коректной. И работать будет быстро.

Posted: Wed Jul 25, 2007 8:18 pm
by Alver
Разобрался как проверяются боксы и рисунки, там используется 'WinMapAddress' имеющий тот же адрес что и 'display_data'.

Pavia
Я бы не стал выносить курсор из ядра, номер процесса нужен только для идентификации точки как курсорной. Если ядро не имеет своих точек на экране, то никаких новых процессов фиксировать не зачем.

Вопрос: незанятые приложениями точки рабочего стола имеют нулевой идентификатор процесса или ядра?

Posted: Thu Jul 26, 2007 11:49 am
by diamond
Незанятые приложениями точки экрана заняты ядром - оно там, между прочим, рисует фон, и код отрисовки фона работает только с пикселами процесса 1 (aka OS/IDLE).
Если увеличить размер данных точки в display_data до двух байт, то и памяти этот буфер будет жрать в два раза больше.

Posted: Thu Jul 26, 2007 7:50 pm
by Alver
А процесс с 0-м номером существует? (По крайней мере используется в WinMapAddress?)

Posted: Fri Jul 27, 2007 7:31 pm
by Leency
Люди, знаете или нет что если демки из папки "3D" закрывать по крестику (соответствующей кнопке), то курсор не исчезает. А вот если закрывать по Alt+F4 (как все и делают, т.к. в окне курсор слишком сильно мерцает), то курсор исчезает с некоторой вероятностью ~50x50.

Posted: Fri Jul 27, 2007 11:30 pm
by camper
вроде бы замечал такое

Posted: Sat Jul 28, 2007 11:59 am
by diamond
Alver
Процесса с номером 0 не существует.
Leency
Знаем. Это объясняется тем, что закрытие по крестику - корректное закрытие, поскольку в этом случае система всего лишь сообщает программе, что пользователь приказывает программе закрыться (а программа вольна уточнить у пользователя, действительно ли он этого хочет, что делать с несохранёнными данными, а в принципе может вообще это игнорировать), а при нажатии на Alt+F4 панель безусловно прибивает процесс, не давая ему никаких шансов на очистку - в результате с некоторой вероятностью процесс был в процессе отрисовки, когда курсор выключен, и тогда курсор уже не включается.

Posted: Sun Jul 29, 2007 11:12 am
by mistifi(ator
А если приложения прибивает @Panel, нельзя ли сделать что-бы оно само восстанавливало курсор?

Posted: Sun Jul 29, 2007 3:06 pm
by Alver
Понял откуда иногда выскакивают некоторые артефакты.
(Например затирание куска сноски 'end' на панели при выборе меню выход, или перекрытие хвоста курсора приложением и т.п.)
В проце '__sys_disable_mouse' (и возможно не только) при проверки на необходимость стирания курсора проверяется вариант курсора 16x16,
в то время как на самом деле он 32x32.:roll:

mistifi(ator
А если приложения прибивает @Panel, нельзя ли сделать что-бы оно само восстанавливало курсор?
Половинчатая мера - процесс можно будет убить и другими приложениями.:(
Чтобы грамотно закрывать процесс необходимо сопоставить ему еще один флаг на состояние курсора, хотябы 1 бит а лучше 2 : 1 - включен/нет а 2 - заморожен/нет( если будет вариант с отрисовкой точек в буфере курсора) :wink:

Posted: Sun Jul 29, 2007 10:45 pm
by Alver
Я ошибся, '__sys_disable_mouse' не проверяет 16x16, но очепятка кажется есть.

Code: Select all

 
      mov   ebx,[ScreenWidth]
      inc   ebx
      imul  ebx,10
Мне думается надо 'imul ebx, 24'
Кроме того интересно, так как нет проверки на зашкаливание хвоста курсора за границы экрана, не случаются ли глюки с курсором на максимальном разрешении kolibri?

Posted: Mon Jul 30, 2007 7:09 am
by Mario79
Alver
Кроме того интересно, так как нет проверки на зашкаливание хвоста курсора за границы экрана, не случаются ли глюки с курсором на максимальном разрешении kolibri?
Нет.

Posted: Mon Jul 30, 2007 2:48 pm
by mike.dld
Проверка есть, в функции рисования пиксела.

Posted: Wed Aug 08, 2007 8:03 pm
by DmitrySokolowsky
diamond wrote:Alver
Процесса с номером 0 не существует.
Leency
Знаем. Это объясняется тем, что закрытие по крестику - корректное закрытие, поскольку в этом случае система всего лишь сообщает программе, что пользователь приказывает программе закрыться (а программа вольна уточнить у пользователя, действительно ли он этого хочет, что делать с несохранёнными данными, а в принципе может вообще это игнорировать), а при нажатии на Alt+F4 панель безусловно прибивает процесс, не давая ему никаких шансов на очистку - в результате с некоторой вероятностью процесс был в процессе отрисовки, когда курсор выключен, и тогда курсор уже не включается.
Мне кажется, если сделать так, чтобы нажатие Alt+F4 посылало тот же сигнал, что и нажатие кнопки закрытия, то это поможет.

Re: Курсоры

Posted: Mon Feb 09, 2009 4:33 am
by Rock_maniak_forever
Я рылся в старых доках и случайно наткнулся на одну статью.Читайте вырезку ниже.
Мужики возможно я ошибаюсь,но мне кажется что мышь мерцает из-за того что в Колибри нет двойной буферизации видео памяти.Если я не прав то оъясните в чем.

Re: Курсоры

Posted: Mon Feb 09, 2009 5:07 am
by mike.dld
Rock_maniak_forever
Нам достаточно сказать "двойная буферизация", чтобы всё было понятно. Не обязательно приводить никому не нужную цитату и выделять её синим цветом.