2

我正在创建一个应用程序,它使用 Cairo 在图像上显示文本等。

有没有办法在不修改高度的情况下更改文本宽度?我已经可以根据宽度缩放字体大小。

一种管理跟踪和学习的方法将是理想的。它看起来不像是内置的,但我想知道我将使用哪些部分来构建该功能(或仅修改宽度的任何功能)。

4

1 回答 1

2

Pango / PangoCairo

Pango似乎提供了很多自定义功能。

它的标记格式允许您指定letter_spacing.

我还没有深入了解该框架,但值得研究。

制作自己的功能

您还可以创建一个函数将文本拆分为字符,显示每个字符,在显示每个字符后将上下文向后移动一点。类似于以下内容:

# This is just an example. It could definitely use improvement.
def foo(cr, text, tracking): 
    # Normal tracking = 0. Negative spacing shrinks, positive expands.

    i = 0
    for c in text:
        x, y = cr.get_current_point()
        cr.show_text(c)
        counter += 1
        cr.move_to( x - i*tracking, y)

你也可以在你自己的 Context 子类中定义这个方法:

class myContext(Context):
    def foo(self, text, spacing):
        # replace every cr above with self
        

一旦你设置了一个方法,你就可以为更苗条的鲍勃做 foo(cr, "bob", -3) 。

您还可以cr.text_extents(text)在代码中使用来计算文本大小和比例间距。据我所知,从 Cairo 的 Context 获取字体大小并不容易。

于 2014-08-07T23:02:04.950 回答