Как использовать Каир для рисования прямоугольника с верхним левым и нижним правым срезанным углом? - PullRequest
1 голос
/ 26 сентября 2019

Я попытался с помощью cairo нарисовать прямоугольник с вырезанным верхним левым и нижним правым углом, аналогично логотипу Qt.

Вот что я хочу: enter image description here Вот чтоЯ получаю:

enter image description here

Вот код:

#include <stdio.h>
#include <stdlib.h>
#include <cairo.h>

int main()
{
    double height = 500, width = 250;

    cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 500, 500);
    cairo_t *cr = cairo_create (surface);

    cairo_move_to(cr,0,0);
    cairo_line_to(cr,width,0);
    cairo_line_to(cr,width,height - height/4);
    cairo_line_to(cr,width - height/4,height);
    cairo_line_to(cr,0,height);

    cairo_set_line_width (cr, 10.0);
    cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
    cairo_stroke (cr);

    cairo_destroy (cr);
    cairo_surface_write_to_png (surface, "hello.png");
    cairo_surface_destroy (surface);

    return 0;
}

Я не получаю желаемый результат, кто-то можетдать совет?Какой бы язык программирования я не выбрал.

1 Ответ

3 голосов
/ 26 сентября 2019

С вашей обновленной формой вы просто пропускаете первый удар.Оставшиеся штрихи необходимо сместить вправо соответственно.

double cutoff = height/4.0;
cairo_move_to(cr, 0, cutoff);
cairo_line_to(cr, cutoff, 0);
cairo_line_to(cr, width + cutoff, 0);
cairo_line_to(cr, width + cutoff, height - cutoff);
cairo_line_to(cr, width, height);
cairo_line_to(cr, cutoff, height);
...