>мультиокна - сразу нет. Я не буду разбивать средства работы на два-три и более контекстов. Если какие-то дополнительные окна, то только стандартные.
Это тоже не проблема - всегда можно в основном окне открыть люк а потом закрыть.
Для этого, уже почти всё сделано. )))
Всем привет! Обновил версию ZenGL до 3.28.
И с данного момента (так то и раньше уже было) теперь параллельно идёт разработка собственной библиотеки Green Engine. Она основана на ZenGL и больше её ни куда не прицепить (у меня и не было желания это всё ещё и с остальным состыковывать и так убил тонну времени на всю мелочёвку).
GE - предоставляет в данное время только возможность работать с полем ввода, и виртуальной клавиатурой, которую ещё надо доделывать... Для мобильных систем пока ни как не состыкована эта клавиатура, хотя для неё изначально только и делал.
твою дивизию... я это сделал... столько нервов на эти мелочи потратил... И ни кому не пригодится. )))))
Поле ввода пока только проверены на Windows и Linux. На MacOS должно работать, но пока не проверял.
В дальнейших планах доработать клавиатуру и джойстики, и уже доводить до ума Android-версию. (где-то там на проходил слушок, что надо отделить многое от рендериндга... как раз есть возможность заняться).
Пока занимаюсь переделкой всякой мелочёвки, добавляю комментарии к процедурам/функциям. Глядишь людям удобнее при работе будет.
Надеюсь полезное видео, где я переделываю 3-ю демо-версию. В конце видео показываю, как можно использовать несколько полей ввода.
Вот что про поле ввода вспомнил. Программная переноска курсора в нужное место окна там есть? Так чтобы нажал что-то и курсор прыгнул куда надо. В зенгл с этим не во всех видеорежимах хорошо. Потому что прыжок надо делать по экрану и ещё правильно вычислить в каком месте экрана находится нужное место окна, не ошибиться.
Точнее, что именно? Для поля ввода стандартное поведение (кроме некоторых мелочей). Щёлкаешь по символу и курсор переходит именно на тот символ по которому щёлкнул. Home/End работают. Стрелки с кОнтролом работают.
Не работает выделение текста. Мы можем получить только весь текст, который есть в поле ввода, но не часть его.
Собери 3-ю демку, да посмотри. )))
>Точнее, что именно?
Это скакание курсора ОС в движке по координатам в пределах всего окна. Например, нажал на кнопку мыши и курсор прыжком переместился по оси X или Y в нужное место. Это не столько к полю ввода относится, как ко всему движку. Нужны 3 процедуры. Одна перемещает курсор по X, вторая по Y, а третья по X и Y.
Я тебя не понимаю. Пример есть какой-нибудь, визуальный?
Пример есть, но не покажу:) Лучше схему нарисую.
На картинке изображено 3 события:
1 - исходное положение курсора.
2 - клик на колёсиковую кнопку мыши (можно жать на любую другую кнопку или их комбинацию).
3 - куда после нажатия на кнопку мыши переместился курсор, сама мышь с места не сдвинулась.
понял, восстанавливать координаты мыши (застопорить), но учитывать, что смещение происходило. Это что-то вроде жеста. Нет, не сделано. Ввести, думаю, не сложно, но надо будет учитывать, что это только по определённому запросу делаться должно: определённое состояние окна или определённое место окна.
Я подумаю над этим. Это ведь для каждой системы отдельно надо делать. )))
Обычный жест вещь свинская и применима ограниченно, потому что вызывает глюки в программах. Рисуешь в гимпе, сделал кистью завиток, а винда с радостью переключила тебе активный слой, и ты его запортил. Потому внутрипрограммые жесты лучше - они в другие программы не лезут и ничего там не похабят.
Я и имею в виду, что для разных систем, надо будет отлавливать системные перемещения мыши, и обнулять их (хотя бы в пределах нашего окна). Тут два выхода, забить на эти отлавливания и просто выключить курсор мышки. И самому прорисовывать мышь. Ну или связать всё с системой (что писал выше). )))
Пока оставлю на заметку. Не обещаю что займусь в ближайшее время. Но идея интересная.
Конечно, если народ будет активно использовать ZenGL и попросят побыстрее ввести подобное, то конечно сделаю. ))) А пока свои дела... всё развивается на расслабоне. )))
>Я и имею в виду, что для разных систем, надо будет отлавливать системные перемещения мыши, и обнулять их (хотя бы в пределах нашего окна). Тут два выхода, забить на эти отлавливания и просто выключить курсор мышки. И самому прорисовывать мышь. Ну или связать всё с системой (что писал выше). )))
Всё намного проще. Рассчитал куда нужно прыгнуть и в модуле zgl_mouse прыгнул через процедуру SetCursorPos( X, Y ); Ничего отлавливать, прорисовывать и отключать не надо. Прыгнул, а дальше всё идёт как шло до этого. Это работает только когда используешь системный курсор мышки, как в зенгл и есть по умолчанию.
Из кода модуля можно надёргать нужные куски, главное в координатах прыжка не ошибиться.
procedure mouse_SetPos(X,Y:longint); {$IFDEF MACOSX} var Point : CGPoint; {$ENDIF} begin {$IFDEF LINUX} XWarpPointer( scrDisplay, None, wndHandle, 0, 0, 0, 0, X, Y ); {$ENDIF} {$IFDEF WINDOWS} SetCursorPos( X, Y ); {$ENDIF} {$IFDEF MACOSX} Point.X := X; Point.Y := Y; CGWarpMouseCursorPosition( Point ); {$ENDIF} end;
Вот только if wndFullScreen then вычисление других реальных координат для прыжка.
Я не так тебя изначально понял. ...и... зачем это?
Какая разница, плавно перемещается курсор или прыжком?
Я пойму, если это делать для выделения области. Но там просто начальную координату надо запомнить. То, что ты предлагаешь, я считаю достаточно банальным, чтоб каждый мог сам это сделать, отключив системный курсор и рисуя свой курсор.
Не надо для этого внутрь библиотеки лезть. Всё решается достаточно просто и быстро просто используя координаты переданные ZenGL.
Самое главное, где это использовать?!
Я подумал про функцию мыши, когда нажимаешь в определённом месте мышкой, перемещаешь её (производится в связи с этим определённые действия, например вращение камеры) сам курсор остаётся на месте, а смотрится только смещение до момента отпускания клавиши мыши. Это реализовать сложнее. Но так же мало где пригодится.
Но! Тут возникает другой вопрос. Нам надо определять "вечное" движение мыши в окне. В данном случае оно стопорится... Вот это надо решить, чтоб пользователь мог "вечно" двигать мышь, но она не вылезала за пределы окна и реагировала на движение мыши. Так что подобные диалоги всё равно полезны! )))
>Я не так тебя изначально понял. ...и... зачем это?
>Какая разница, плавно перемещается курсор или прыжком?
Допустим, с края окна есть управляющая хреновина. Один клик и курсор там, можно колбасить, не надо попадать в пиксель. Курсор часто теряется на экране, нужно им трясти чтобы заметить, а тут он сам перемещается в нужное место.
>Не надо для этого внутрь библиотеки лезть. Всё решается достаточно просто и быстро просто используя координаты переданные ZenGL.
Надо. Относительные координаты для перемещения курсора не всегда подходят, нужно прописать в ZenGL получение реальных, тем более что они там есть - относительные из реальных делаются.
>Самое главное, где это использовать?!
В игре, содержащей выезжающее окошко с кучей хреновин. Нажал на колесо, курсор упал вниз, покрутил колесо - окно вылезло, нажал что-то ещё - курсор перелетел влево или вправо, можно опять колесо крутить. Мышевозность 200% Это реально прикольно.