• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rozjeżdżające się GUI

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
324 wizyt
pytanie zadane 24 marca 2021 w C i C++ przez mattaha Użytkownik (690 p.)

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;
}

2 odpowiedzi

+3 głosów
odpowiedź 24 marca 2021 przez tangarr Mędrzec (155,180 p.)
wybrane 24 marca 2021 przez mattaha
 
Najlepsza
Podczas rysowania górnej i dolnej krawędzi używasz wysokości zamiast szerokości w obliczeniach.
komentarz 24 marca 2021 przez mattaha Użytkownik (690 p.)
Dzięki koleś!
0 głosów
odpowiedź 24 marca 2021 przez Xames Nowicjusz (240 p.)
Nie znam tej biblioteki, ale prawdopodobnie problem jest w tym, że ustawiasz rozmiar okna który jedyne co ci robi to rozciąga obraz. Musisz poszukać jakiegoś view, gdzie ustawiasz skalę.

Podobne pytania

0 głosów
2 odpowiedzi 686 wizyt
0 głosów
1 odpowiedź 323 wizyt
0 głosów
1 odpowiedź 1,391 wizyt
pytanie zadane 1 grudnia 2015 w Java przez Mikrokontroler xD Stary wyjadacz (13,500 p.)

93,441 zapytań

142,434 odpowiedzi

322,681 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...