Как сбросить текущую точку в каире?

Из документации cairo я вижу, что для некоторых функций, например Text toy-API cairo_show_text(), требуется установить текущую точку. Мы можем установить текущую точку с помощью cairo_move_to(), а затем, вызвав cairo_show_text(), он растрирует текст в желаемом месте.

Кстати, это вызвало ошибку, потому что после растеризации текста я обводил путь, который (с этим начальным вызовом cairo_move_to() для установки текущей точки текста) имел неправильные точки.

Я решил эту ошибку, вызвав cairo_stroke() сразу после вызова cairo_show_text(), и, похоже, он работает, поскольку сбрасывает текущую точку.

Похоже, что вызов cairo_close_path() вместо cairo_stroke() не помог. Это не сбросило текущую точку. И я считаю это довольно странным. Почему?

Мой последний вопрос: есть ли правильный способ сбросить текущую точку? Думаю, должно быть.


person Marco Pagliaricci    schedule 14.08.2020    source источник


Ответы (1)


Из https://www.cairographics.org/manual/cairo-Paths.html#cairo-new-path

cairo_new_path ()

Очищает текущий путь. После этого вызова не будет ни пути, ни текущей точки.

Для полноты: также есть эта функция, которая не очищает текущий путь:

Из https://www.cairographics.org/manual/cairo-Paths.html#cairo-new-sub-path

cairo_new_sub_path ()

Начните новый дополнительный путь. Обратите внимание, что существующий путь не изменяется. После этого вызова не будет текущей точки.

Во многих случаях в этом вызове нет необходимости, поскольку новые подпути часто запускаются с помощью cairo_move_to ().

Вызов cairo_new_sub_path() особенно полезен при начале нового подпути одним из вызовов cairo_arc(). Это упрощает задачу, поскольку больше не нужно вручную вычислять начальные координаты дуги для вызова cairo_move_to().

person Uli Schlachter    schedule 15.08.2020