Страниц: [1]
  Печать  
Автор Тема: PtDamageExtent и координаты Rect'ов  (Прочитано 7093 раз)
Absolut
Full Member
***
Offline Offline

Сообщений: 179


Просмотр профиля
« : Июля 25, 2006, 05:49:22 pm »

Доброго времени суток.

Ситуация такая: в программе имеется несколько разных PtRaw на разных окнах. Прорисовка осуществляется как надо. Однако при вызовах PtDamageExtent, чтобы обновлялось как надо, в одном случае прямоугольники необходимо задавать с координатами относительно повреждаемого виджета, в другом - относительно родительского окна. Почему такая неразбериха, как понять где  задавать координаты относительно виджета, где относительно окна?
Записан
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #1 : Июля 25, 2006, 07:26:32 pm »

Я клипаю поврежденный рект и отрисовываю целиком. Ленивый я...
Записан

Absolut
Full Member
***
Offline Offline

Сообщений: 179


Просмотр профиля
« Ответ #2 : Июля 25, 2006, 07:37:52 pm »

Не вижу тут ответа на поставленный вопрос.
Записан
яков
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #3 : Июля 25, 2006, 09:41:26 pm »

Absolut
Не вижу тут ответа на поставленный вопрос.


А что тут непонятного - на damage рисуется все не обращая внимания на список _действительно_ запорченных квадратов для draw_fun

PS Как я понимаю вы делаете custom widget

PSS странно, никогда не было проблемы в этих damage, разве если вам нужно быстро отрисовываться и не рисавать лишнее (если оно тяжеловесное)..

wbr,
Записан
gleb
Участник
*
Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #4 : Июля 26, 2006, 08:14:17 am »

Из хелпа: The rectangle specified by the PhRect_t structure pointed to by extent is relative to the widget's origin.

Короче говоря, прямоуголькики задаются относительно региона, в котором рисуется виджет. Поэтому считайте координаты относительно контейнера, в котором находится обновляемый виджет. Если PtRaw помещено непосредственно в окно - то относительно окна, если в PtPane - то относительно PtPane и т.д. Относительно самого виджета координаты задаются только в одном случае - если этот самый виджет является контейнером, т.е. у него есть свой собственный регион.
Записан
gleb
Участник
*
Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #5 : Июля 26, 2006, 08:18:30 am »

яков: целиком все отрисовывать можно, например, в кнопке или в лабеле. А вот если надо перерисовать одну ячейку в таблице, которая занимает весь экран - там надо бы рисовать действительно только одну ячейку, а то получится нехилая мигалка
Записан
gleb
Участник
*
Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #6 : Июля 26, 2006, 01:37:20 pm »

Прошу прощения, насчет регионов - я погорячился. Регион есть только у окна, у контейнеров его нету (PtWidgetRid() возвращает 0). Более того, в хелпе про координаты виджетов написано следующее:
The origin of the widget (for the purposes of any drawing it performs or positioning of any children) is the upper left corner of the canvas. All coordinates specified for the widget are relative to this location, as are the coordinates of all events that the widget receives.

Получается, что координаты, передаваемые в PtDamageExtent теоретически должны быть заданы относительно левого верхнего угла виджета. Но если проверить на практике - функция работает правильно только если эти координаты заданы относительно верхнего левего угла родительского контейнера, как я и писал. Что-то с хелпом не так.
Записан
Absolut
Full Member
***
Offline Offline

Сообщений: 179


Просмотр профиля
« Ответ #7 : Июля 26, 2006, 03:28:56 pm »

Оказалось, что действительно координаты надо задавать относительно родителя. Просто в одном случае PtRaw лежал в (0,0). Однако, с хелпом действительно что-то не так, как сказал gleb
Записан
Страниц: [1]
  Печать  
 
Перейти в: