Table of Contents
For many, the best way to become familiar with the capabilities of the SGL library is through examples. This chapter provides several simple examples that showcase the SGL's capabilities.
Example 4.1 models a simple traffic light. The signal changes when the user depresses the mouse button over the window. The program provides a good example of drawing simple shapes and responding to user input via a pointing device.
Example 4.1. Traffic Light Simulation
#include <GL/sgl.hpp>
// Color constants used by the traffic light
const int red = 0,
green = 1,
yellow = 2;
class TrafficLightWindow : public sgl::Window {
int color; // Traffic light's current color
public:
// Light's initial color is red
TrafficLightWindow() : sgl::Window("Traffic Light", 300, 600),
color(red) {}
void paint() override {
// Draw the frame
sgl::set_color(sgl::GRAY);
sgl::fill_rectangle(50, 25, 200, 550);
// Draw the red lamp
if (color == red)
sgl::set_color(sgl::RED);
else
sgl::set_color(sgl::BLACK);
sgl::fill_circle(150, 475, 70);
// Draw the yellow lamp
if (color == yellow)
sgl::set_color(sgl::YELLOW);
else
sgl::set_color(sgl::BLACK);
sgl::fill_circle(150, 300, 70);
// Draw the green lamp
if (color == green)
sgl::set_color(sgl::GREEN);
else
sgl::set_color(sgl::BLACK);
sgl::fill_circle(150, 125, 70);
}
void mouse_pressed(double, double, sgl::MouseButton) override {
// Update light's current color
color = (color + 1) % 3;
repaint();
}
};
int main() {
sgl::run<TrafficLightWindow>();
}
Figure 4.1 is a screenshot of the
traffic light application.
Figure 4.2 illustrates the design of the traffic light
layout. Compare the numbers on the diagram to the arguments passed in the
fill_rectangle and fill_circle function calls.
| Copyright ©2019 Richard L. Halterman | Version 0.9.5 | February 17, 2019 |