Преобразование кривой в диагональную линию с помощью Cairo (в Avant Window Navigator в Linux)

В настоящее время я пытаюсь изменить код «Lucido mode» Avant Window Navigator, чтобы заменить кривые разделителя / s диагональными линиями.

Часть (каирского) кода, управляющая изгибом, представлена ​​в строках с 330 по 334 в следующем файле на GitHub: /src/awn-background-lucido.c#L330-L334" rel="nofollow noreferrer">ссылка

{ /* Oblique */
  gfloat xm = ( *xs + xf ) / 2.0;
  cairo_curve_to (cr, xm, *ys, xm, yf, xf, yf);
}

Чтобы облегчить понимание цели, вот изображение того, как AWN Lucido выглядит прямо сейчас и как я хочу, чтобы он выглядел:

Пример

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

Большое спасибо за уделенное время :)


person AZorin    schedule 13.03.2013    source источник


Ответы (1)


Информацию о рисовании кривых с помощью Cairo можно найти здесь.

Кривая Безье с четырьмя точками выглядит так:

введите здесь описание изображения

cairo_curve_to принимает текущую позицию пера для p0, а его аргументы — следующие 3 точки.

Таким образом, вы можете заставить cairo_curve_to рисовать прямую линию, передавая одну и ту же точку для каждого аргумента. Это немного расточительно, но, вероятно, не является серьезной проблемой для вас.

Похоже, что если вы передадите конечную позицию для обоих аргументов _line_from_to, она выродится в рисование прямой линии, как вы хотите. например если вызов этой функции был _line_from_to(cr, &x, &y, x2, y2), измените его на _line_from_to(cr, &x2, &y2, x2, y2).

В качестве альтернативы измените код для _line_from_to на

static void 
_line_from_to ( cairo_t *cr,
                gfloat *xs,
                gfloat *ys,
                gfloat xf,
                gfloat yf)
{
  cairo_line_to (cr, xf, yf);
  *xs = xf;
  *ys = yf;
}

Если вам нужна дополнительная информация о cairo_curve_to, см. этот пример.

person Jacob Parker    schedule 13.03.2013
comment
Большое спасибо за Ваш ответ! К сожалению, блок кода, который вы предоставили, вызывает ошибки во время компиляции, и, поскольку у меня нет опыта использования Cairo, я не смог найти исправление. Когда я пытаюсь скомпилировать AWN с этим кодом в файле awn-background-lucido.c, я получаю следующую ошибку: pastebin.com/ РФПЛ9ДЮ - person AZorin; 13.03.2013
comment
Фантастический! На этот раз это сработало как шарм! Большое спасибо за вашу помощь :) - person AZorin; 13.03.2013
comment
Готово :) Большое спасибо! - person AZorin; 13.03.2013