Подтверждаю. OSD вновь появляется при развороте окна пустого плеера, и при этом остается на месте при перемещении окна плеера.
Aleksoid1978,
ЦитироватьА если так - https://yadi.sk/d/mbWv4SyUHn03FA
Проверил тестовый билд. Теперь, вместо "OSD: Local Time", отображается просто OSD "Stop" за пределами основного окна плеера.
Вы движетесь в верном направлении, только по идее (по логике), никаких OSD повторно отображаться не должно, тем более за пределами основного окна плеера. У вас практически получилось исправить проблему. Еще подкорректируйте, пожалуйста.
Aleksoid1978,
ЦитироватьМожно записать видео всего процесса.
Пожалуйста (https://yadi.sk/i/tlJqZyvPEE-9QQ).
Сделал для вас краткую видеозапись всего процесса. Все строго по алгоритму, описанному в первом посте.
Чтобы у вас не возникло лишних вопросов, я скажу вам сразу, что на данной видеозаписи у меня уже было включено "OSD: Local Time".
Aleksoid1978,
ЦитироватьА если после такого сдвинуть окно - восстановиться положение OSD ?
Нет. Положение OSD
не восстановится (https://yadi.sk/i/NXa8sGu3EeFGiA).
Aleksoid1978,
ЦитироватьВот еще пробуем - https://yadi.sk/d/ihYp6FyRw43BFg
Проверил второй тестовый билд.
Теперь полный порядок (https://yadi.sk/i/rVKrqj2cP8qoUw).
Проблема устранена (https://yadi.sk/i/zpGOSR_K4Y1b7g). :)
Ну погоняй его ещё немного по всякому, все ли будет корректно с ОСД. Помню ещё были какие то случаи когда за окно уезжало.
Aleksoid1978,
ЦитироватьНу погоняй его ещё немного по всякому, все ли будет корректно с ОСД. Помню ещё были какие то случаи когда за окно уезжало.
Прогнал немного второй тестовый билд. Проверил всевозможные имеющиеся OSD. Все они отрабатывают корректно, не выходят за пределы основного окна плеера, при данном алгоритме воспроизведения.
При сравнении с SVN-билдом, заметил, что в вашем тестовом билде, при ПКМ на долю секунды выскакивает OSD: Stop, хотя по логике должно быть OSD: Closed и оно не должно отображаться долю секунды, а должно отображаться несколько подольше, чтобы его можно было успеть прочитать, но это уже совсем другая история и об этом далее...
А вот если говорить про взаимодействия различных OSD друг с другом, то тут далеко не все в порядке. Но, не путайте! Это не имеет никакого отношения к первоначальной проблеме, описанной в первом посте.
Что значит взаимодействия различных OSD друг с другом?
Дело в том, что сейчас различные OSD "
конфликтуют" друг с другом. Если выразиться иначе, то одно OSD мешает отображению другого OSD, при определенных условиях.
И вот вам пример - допустим, у нас включено "OSD: Local Time" и во время воспроизведения произвольного видео файла мы перематываем его несколько раз. Во время перемотки, по логике, "OSD: Local Time" должно переключаться на "OSD: Show seek time", а после перемотки должно обратно возвращаться на "OSD: Local Time". Но, по факту, этого не происходит.
Получается, что "OSD: Local Time" не дает возможности отобразиться "OSD: Show seek time". Или можно предположить, что оно ("OSD: Local Time") перекрывает отображение "OSD: Show seek time", так как является приоритетным.
И это только один из всевозможных примеров "конфликтов" различных OSD. А их далеко не один...
Другим примером может служить время отображения различных OSD. Например, возьмем все то же "OSD: Local Time".
Во время воспроизведения мы меняем громкость, неважно выше, или ниже, главное что OSD с уровнем громкости, при "OSD: Local Time", присутствует лишь доли секунды и лишь едва удается его рассмотреть и прочитать. И это еще одна проблема.
То есть, при взаимодействии различных OSD между собой, при определенных условиях, необходимо продлить время их показа, т.е. их отображения.
Как вы уже поняли, подобных различных примеров предостаточно. Хватит на "целую поэму".
Aleksoid1978, в свое время, когда вы занимались глобальными переделками OSD, вы почему-то, или по какой-то причине не учли все вот эти моменты взаимодействия различных OSD друг с другом, при определенных условиях. Только не подумайте, что я сейчас вас в этом обвиняю, вовсе нет. Возможно, вы просто о них не знали, или же не были в курсе.
В результате чего, сейчас происходит так называемое
доминирование одного OSD над другим. Иначе говоря, какое OSD было включено первоначально, то и будет в приоритете, т.е. будет доминирующим. Остальные же OSD или вообще не будут отображаться, при тех, или иных условиях, или же будут отображаться, но только лишь на какие-то жалкие доли секунды.
Теперь то, надеюсь, вы окончательно поняли суть проблемы взаимодействия различных OSD друг с другом. А ведь это довольно обширная тема, которая в свое время даже не была рассмотрена, проверена и учтена, при глобальной переделке OSD.
По поводу "OSD: Stop" - ну сперва же срабатывает команда стоп, а потом закрытие файла(при этом OSD "обнуляется") - поэтому оно и мелькает. Если оно будет "лишнее" - можно будет со временем и убрать.
По поводу "перекрытия" сообщений в OSD все проще - те что показываются все время, они просто выводят свою информацию по таймеру, вот и получается что когда срабатывает таймер, эти сообщения выводятся "опять", ессно текущие сообщения в OSD затираются. Чтобы этого избежать - надо "думать" :). Но такое поведение было всегда - т.к. сам принцип формирования/вывода сообщений не менялся.