You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Проектирование редактора документов<br />
Подклассы Windowlmp<br />
Подклассы Windowlmp преобразуют запросы в операции, характерные для<br />
конкретной оконной системы. Рассмотрим пример из раздела 2.2. Мы определили<br />
Rectangle: : Draw в терминах операции DrawRect над экземпляром класса<br />
Window:<br />
void Rectangle::Draw (Window* w) {<br />
w->DrawRect(_xO, _yO, _xl, _yl);<br />
}<br />
В реализации DrawRect по умолчанию используется абстрактная операция<br />
рисования прямоугольников, объявленная в Windowlmp:<br />
void Window: : DrawRect (<br />
Coord xO, Coord yO, Coord xl, Coord yl<br />
) {<br />
_imp->DeviceRect (xO , yO , xl , yl) ;<br />
}<br />
где _imp - переменная-член класса Window, в которой хранится указатель на<br />
объект Windowlmp, использованный при конфигурировании Window. Реализация<br />
окна определяется тем экземпляром подкласса Windowlmp, на который указывает<br />
_imp. Для XWindowImp (то есть подкласса Windowlmp для оконной системы<br />
X Window System) реализация DeviceRect могла бы выглядеть так:<br />
void XWindowImp::DeviceRect (<br />
Coord xO, Coord yO', Coord xl, Coord yl<br />
) {<br />
int x = round(min(xO, xl));<br />
int у = round(min(yO, yl));<br />
int w = round(abs(xO - xl));<br />
int h = round(abs(yO - yl));<br />
XDrawRectangle(_dpy, _winid, _gc, x, y, w, h) ;<br />
}