
//
// To jest przykładowy kod z podrozdziału 12.7.6 "Prostokąty" książki
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include "Simple_window.h"    // Dla przycisku „Next”.
#include "Graph.h" 
#include "std_lib_facilities.h"

using namespace Graph_lib;

//------------------------------------------------------------------------------

int main ()
try
{ 
    Point tl(100,100);    // Lewy górny róg naszego okna.

    Simple_window win(tl,600,400,"Canvas");
    // Współrzędna ekranu tl określająca położenie lewego górnego rogu okna.
    // Rozmiar okna 600*400.
    // Tytuł: Kanwa.

    Axis xa(Axis::x, Point(20,300), 280, 10, "x axis"); // Tworzy oś.
    // Oś jest rodzajem figury.
    // Axis::x oznacza oś poziomą.
    // Początek w punkcie (20,300),
    // długość 280 pikseli,
    // 10 kresek podziałki,
    // etykieta „oś x”.
    win.attach(xa);                      // Wiąże oś xa z oknem win.

    Axis ya(Axis::y, Point(20,300), 280, 10, "y axis");
    ya.set_color(Color::cyan);           // Wybór koloru.
    ya.label.set_color(Color::dark_red); // Wybór koloru dla tekstu.
    win.attach(ya);

    Function sine(sin,0,100,Point(20,150),1000,50,50);    // Krzywa obrazująca sinusoidę.
    // Rysuje funkcję sin() w przedziale <0,100) z punktem (0,0) w punkcie (20,150),
    // przy użyciu 1000 punktów. Skaluje wartości x i y *50.
    win.attach(sine);
    sine.set_color(Color::blue);         // Zmieniliśmy zdanie na temat koloru funkcji sinus.

    Polygon poly;                        // Wielokąt — jest rodzajem figury (Shape).
    poly.add(Point(300,200));            // Trzy punkty tworzą trójkąt.
    poly.add(Point(350,100));
    poly.add(Point(400,200));

    poly.set_color(Color::red);
    poly.set_style(Line_style::dash);
    win.attach(poly);

    Rectangle r(Point(200,200), 100, 50);// Lewy górny róg, szerokość, wysokość.
    win.attach(r); 
    win.set_label("Kanwa nr 6");
    win.wait_for_button();               // Wyświetl!
} 
catch(exception& e) {
    // Raport o błędzie.
    return 1;
}
catch(...) {
    // Raport o błędzie.
    return 2;
}

//------------------------------------------------------------------------------
