Программирование. Принципы и практика использования C++ Исправленное издание, стр. 177
13.4. Класс Color
Colorgrid.set_color(Color::red);Эта инструкция окрашивает линии, определенные в объекте
gridКласс
Color
struct Color { enum Color_type { red=FL_RED, blue=FL_BLUE, green=FL_GREEN, yellow=FL_YELLOW, white=FL_WHITE, black=FL_BLACK, magenta=FL_MAGENTA, cyan=FL_CYAN, dark_red=FL_DARK_RED, dark_green=FL_DARK_GREEN, dark_yellow=FL_DARK_YELLOW, dark_blue=FL_DARK_BLUE, dark_magenta=FL_DARK_MAGENTA, dark_cyan=FL_DARK_CYAN }; enum Transparency { invisible = 0, visible=255 }; Color(Color_type cc) :c(Fl_Color(cc)), v(visible) { } Color(Color_type cc, Transparency vv) :c(Fl_Color(cc)), v(vv) { } Color(int cc) :c(Fl_Color(cc)), v(visible) { } Color(Transparency vv) :c(Fl_Color()), v(vv) { } // цвет по // умолчанию int as_int() const { return c; } char visibility() const { return v; } void set_visibility(Transparency vv) { v=vv; }private: char v; // видимый или невидимый Fl_Color c;}; Предназначение класса
Color• Скрыть реализацию цвета в классе
Fl_Color• Задать константы, соответствующие разным цветам.
• Обеспечить простую реализацию прозрачности (видимый или невидимый).
Цвет можно выбрать следующим образом.
• Выбрать константу из списка, например
Color::dark_blue• Выбрать цвет из небольшой палитры, которую большинство программ выводит на экран (им соответствуют значения в диапазоне от 0–255; например, выражение
Color(99)• Выбрать значение в системе RGB (Red, Green, Blue — красный, зеленый, синий), которую мы здесь обсуждать не будем. При необходимости читатели сами в ней разберутся. В частности, можно просто ввести запрос “RGB color” в поисковую веб-машину. Среди прочих вы получите ссылки www.hyperso-lutions.org/rgb.html и www.pitt.edu/~nisg/cis/web/cgi/rgb.html. См. также упр. 13 и 14.
ColorColor_typeintcColorcFl_Coloras_int()as_int()ColorПрозрачность задается членом
vColor::visibleColor::invisible13.5. Класс Line_style
Нарисовав на экране несколько линий, мы можем различать их по цвету, стилю или по обоим этим признакам. Стиль линии — это шаблон, задающий ее внешний вид. Класс
Line_stylegrid.set_style(Line_style::dot);Эта инструкция выводит на экран линии, заданные в объекте
grid
Это сделает сетку немного тоньше, зато более незаметной. Настраивая ширину (толщину) линий, можем придать сетке требуемый вид.
Класс
Line_stylestruct Line_style { enum Line_style_type { solid=FL_SOLID, // ------- dash=FL_DASH, // - - - - dot=FL_DOT, // ....... dashdot=FL_DASHDOT, // - . - . dashdotdot=FL_DASHDOTDOT, // -..-..