2012-04-17 57 views
3

我在使用Pango Cairo進行自動換行時遇到了問題。以下是一些演示代碼。我將佈局的寬度設置爲與紅色矩形相同,所以我希望它可以換成紅色的矩形。事實上,它只是簡單地在每一行上放一個字,好像寬度設置得非常小。如果我使用pango.WRAP_WORD_CHAR,我只能得到一個字符。如何讓Pango Cairo正確包裝文字?

我在做什麼錯?我如何讓佈局包裹到我指定的寬度?

編輯如果我將寬度設置爲100000,單詞包裝正確。這意味着set_width和構造參數使用不同的單位。有任何想法嗎?

# -*- coding: utf-8 -*- 
import sys 

import cairo 
import pango 
import pangocairo 

SIZE = 200 
HALF = 100 
QUARTER = 50 

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, SIZE, SIZE) 

context = cairo.Context(surface) 
context.set_source_rgb(1, 0, 0) 
context.rectangle(QUARTER, QUARTER, HALF, HALF) 
context.fill() 

context.set_source_rgb(1, 1, 0) 

context.translate(QUARTER, QUARTER) 

pangocairo_context = pangocairo.CairoContext(context) 
layout = pangocairo_context.create_layout() 

layout.set_width(HALF) 
layout.set_alignment(pango.ALIGN_LEFT) 
layout.set_wrap(pango.WRAP_WORD) 
layout.set_font_description(pango.FontDescription("Arial 10")) 
layout.set_text("The Quick Brown Fox Jumps Over The Piqued Gymnast") 


pangocairo_context.update_layout(layout) 
pangocairo_context.show_layout(layout) 

context.show_page() 

with file("test.png", "w") as op: 
    surface.write_to_png(op) 

word wrapping

+0

對不起,我很難理解這個評論。你能改述一下嗎? – Joe 2012-04-17 22:46:34

回答

4

我找到了答案。該值必須乘以pango.SCALE。這似乎沒有在C API中的函數的文檔中提及。

+0

也許手冊已經更新了,但是現在它提到這些值是** Pango單元**,它們與cairo上下文使用的像素值不同:https://developer.gnome.org/pango/stable/pango- Layout-Objects.html#pango-layout-set-width – 2014-03-06 20:42:53

+0

謝謝。這是近兩年前,如果文檔沒有改變,我會感到驚訝。 – Joe 2014-03-07 11:14:50