You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Структурные паттерны<br />
class XWindowImp : public Windowlmp {<br />
public:<br />
XWindowImp();<br />
virtual void DeviceRect(Coord, Coord, Coord, Coord);<br />
// прочие операции открытого интерфейса...<br />
private:<br />
// переменные, описывающие специфичное для X Window состояние,<br />
// в том числе:<br />
Display* _dpy;<br />
Drawable _winid; // идентификатор окна<br />
GC _gc;<br />
// графический контекст окна<br />
};<br />
Для Presentation Manager (РМ) мы определяем класс PMWindowImp:<br />
class PMWindowImp : public Windowlmp {<br />
public:<br />
PMWindowImp () ;<br />
virtual void DeviceRect(Coord, Coord, Coord, Coord);<br />
// прочие операции открытого интерфейса...<br />
private:<br />
// переменные, описывающие специфичное для РМ Window состояние,<br />
// в том числе:<br />
HPS _hps;<br />
};<br />
Эти подклассы реализуют операции Windowlmp в терминах примитивов<br />
оконной системы. Например, DeviceRect для X Window реализуется так:<br />
void XWindowImp::DeviceRect (<br />
Coord xO, Coord yO, Coord xl, Coord yl<br />
) {<br />
int x = round(min(xO, xl));<br />
int у = rpund(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 />
}<br />
А для РМ - так:<br />
void PMWindowImp::DeviceRect (<br />
Coord xO, Coord yO, Coord xl, Coord yl<br />
) {<br />
Coord left = min(xO, xl) ;<br />
Coord right = max(xO, xl);<br />
Coord bottom = min(yO, yl) ;<br />
Coord top = max(yO, yl);<br />
PPOINTL point[4];