class Canvas { public:
Canvas(int width, int height, char* windowTitle): // constructor // конструктор
void setWindow(float 1. float r. float b. float t);
void setViewport(int 1. int r. int b. int t):
IntRect getViewport(void): // divulge the viewport data // раскрываем данные порта просмотра
RealRect getWindow(void): // divulge the window data // раскрываем данные окна
f1 oat getWi ndowAspectRati о(void):
void clearScreenO;
void setBackgroundColor(float r. float g. float b): void setColor(float r. float g. float b);
3.4. Разработка класса Canvas
void lineTo(float x. float y):
void lineTo(Point2 p):
void moveTo(float x. float y);
void moveTo(Point2 p):
others later II остальные - позже
private:
Point2 CP : // current position in the world // текущая позиция в мировых координатах
IntRect viewport; // the current window // текущее окно
RealRect window; // the current viewport // текущий порт просмотра
others later II остальные - позже }
Конструктор класса Canvas берет в качестве аргументов ширину и высоту экранного окна, а также строку имени окна и создает нужное окно, производя при этом все необходимые инициализации. Кроме того, в Canvas также включены функции для установки и возвращения размеров окна и порта просмотра, а также для управления цветами рисования и фона. Заметим, что в этой версии класса нет явного упоминания о данных для преобразования окно - порт просмотра, поскольку это преобразование осуществляется «молча» самим OpenGL. В тематическом задании 3.4 мы добавим элементы данных для поддержки данного преобразования в средах, нуждающихся в этом. Остальные представленные функции- это варианты "lineToO и moveToO, фактически осуществляющие рисование (разумеется, в мировых координатах). В следующем разделе мы добавим еще «средства относительного рисования».
В листинге 3.7 показано, как класс Canvas обычно используется в приложениях. Создается единственный глобальный объект cvs, который инициализирует и открывает требуемое экранное окно. Данный объект сделан глобальным с той целью, чтобы его могли «видеть» функции обратного вызова, например display О. (Мы не можем передавать в такие функции cvs в качестве параметра, поскольку прототипы этих функций зафиксированы в правилах OpenGL Utility Toolkit.) Функция displayO устанавливает здесь окно и порт просмотра, а затем рисует прямую линию с помощью функций-членов класса Canvas. Тогда прямоугольник создается и рисуется посредством собственной функции-члена.