09.04.2016 Views

Priemioop

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];

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!