Листинг 3.7. Типичное использование класса Canvas

Canvas cvs(640. 480. "try out Canvas"):
// global canvas object

// глобальный объект класса canvas

//«««««««< display »»»»»>
void display(void)
{

cvs.clearScreenO: // clear screen // очистка экрана

cvs.setWindow(-10.0. 10.0. -10.0. 10.0):
cvs.setViewportdO. 460. 10. 460):

cvs.moveTo(0. -10.0): // draw a line // рисуем линию

cvs.lineTotO. 10.0):

продолжением

Дополнительные инструменты для рисования

Листинг 3.7 (продолжение)

RealRect Ьох( -2.0. 2.0. -1.0. 1.0): // construct a box // создаем прямоугольник

box.drawO: // draw the box // рисуем прямоугольник

}
//««««««<« main »»»»»>
void main(void)
{

// the window is opened in the Canvas constructor // это окно открывается в конструкторе Canvas

cvs.setBackgroundColord.O. 1.0. 1.0): // background is white // цвет фона белый

cvs.setColor(0.0. 0.0. 0.0); // set drawing color // устанавливаем цвет рисования

glutDisplayFunc(display):
glutMalnLoopO:
}

Подпрограмма mainO не совершает никакой инициализации: все уже было сделано в конструкторе Canvas. Подпрограмма mainf) просто устанавливает цвета рисования и фона, регистрирует функцию display О и входит в главный цикл событий. (Могли бы эти специфические для OpenGL функции быть «упрятаны» среди функций-членов класса Canvas?)

3.4.2. Реализация класса Canvas

Покажем теперь некоторые подробности реализации класса Canvas для случая, когда OpenGL доступен. (В тематическом задании 3.4 рассматривается альтернативная реализация.) Конструктор, приведенный в листинге 3.8, передает желаемые ширину и высоту (в пикселах) функции glutlnitWindowSizeO. а нужную титульную строку в glutCreateWindowO. Несколько обеспокоить может передача функции glutlnitO нужных параметров, несмотря на то, что они здесь никак не используются. Обычно main О передает в glutlnitO аргументы командной строки, как мы видели раньше. Здесь этого сделать нельзя, поскольку используется глобальный объект класса Canvas cvs, который создается раньше, чем вызывается mainO.


⇐ Предыдущая| |Следующая ⇒