Cześć
Gdy odpalam program i mam ustawioną szerokość Box na 150 oraz wysokość na tę samą wartość to program działa jak powinien, tzn. wyświetla ładny kwadrat o zaokrąglonych rogach:

Jeśli podstawie sobie w konstruktorze klasy Box wartości
Box box {Point{100, 100}, 150, 300};
to otrzymuję

Co jest nie tak? Dlaczego mi się to rozjeżdża? Jakieś protipy jak to ogarnąć?
Kod:
#include "Simple_window.h"
#include "Graph.h"
struct Arc : Shape {
Arc(Point p, int w, int h, int a1, int a2)
: w{w}, h{h}, a1{a1}, a2{a2} {
add(Point{p.x, p.y});
}
void draw_lines() const;
private:
int w;
int h;
int a1;
int a2;
};
void Arc::draw_lines() const {
if (color().visibility()) {
fl_arc(point(0).x, point(0).y, w, h, a1, a2);
}
}
struct Box : Shape {
Box(Point p, int w, int h)
: w{w}, h{h} {
add(p);
}
void draw_lines() const;
private:
int w;
int h;
};
void Box::draw_lines() const {
Arc arc1(Point(point(0).x, point(0).y),w/3.0, h/3.0, 180, 90);
arc1.draw_lines();
Line side1(Point(point(0).x, point(0).y + h/6.0), Point(point(0).x, point(0).y + h/2.0));
side1.draw();
Arc arc2(Point(point(0).x, point(0).y + h/3.0),w/3.0, h/3.0, 270, 180);
arc2.draw_lines();
Line side2(Point(point(0).x + h/6.0, point(0).y + 2*h/3.0),
Point(point(0).x + h/2.0, point(0).y + 2*h/3.0));
side2.draw();
Arc arc3(Point(point(0).x + w/3.0, point(0).y + h/3.0),w/3.0, h/3, 360, 270);
arc3.draw_lines();
Line side3(Point(point(0).x + 2*w/3.0, point(0).y + h/6.0),
Point(point(0).x + 2*w/3.0, point(0).y + h/2.0));
side3.draw();
Arc arc4(Point(point(0).x + w/3.0, point(0).y), w/3.0, h/3.0, 90, 0);
arc4.draw_lines();
Line side4(Point(point(0).x + h/6.0, point(0).y),
Point(point(0).x + h/2.0, point(0).y));
side4.draw();
}
int main() {
using namespace Graph_lib;
Simple_window win{Point{100, 100}, 600, 400, "Moje okno"};
Box box {Point{100, 100}, 150, 300};
win.attach(box);
win.wait_for_button();
return 0;
}