在實際Gtk圖形開發過程當中,常常有計算控件上字符串顯示的像素寬度的需求,如何能正確計算出實際寬度? 模塊化
Pango的出現解決了這一問題! 字體
Pango以模塊化,跨平臺,跨控件庫的形式實現,能夠應用於各類不一樣的環境之中,Pango一樣與Gtk+和Gnome項目有着緊密的關聯。它的出如今於在Gtk+和Gnome項目中須要對國際化文本進行高質量的處理。經過Pango來計算字符串的寬度只是其中一小部分應用。 開發
能夠方便獲取其源碼:
sudo apt-get source libpango1.0-dev 字符串
Pango基於PangoLayout結構,在PangoLayout結構建立過程當中會建立一以合適字體映射爲基礎的PangoContext結構,經過計算文本區的矩形區域大小來計算字符串像素的寬度。 get
簡單應用樣例以下(string_pixel_width.c):
#include <gtk/gtk.h>
int main (int argc, char *argv[])
{
gtk_init (&argc, &argv);
int width = 0;
GtkWidget *label = NULL;
PangoLayout *layout = NULL;
label = gtk_label_new ("");
gchar *s1 = "hello";
gchar *s2 = "@@@@@";
gchar *s3 = "字符串像素";
layout = gtk_widget_create_pango_layout (label, s1);
pango_layout_get_pixel_size(layout, &width, NULL);
g_print ("%s pixel size is: %d/n", s1, width);
pango_layout_set_text (layout, s2, -1);
pango_layout_get_pixel_size(layout, &width, NULL);
g_print ("%s pixel size is: %d/n", s2, width);
pango_layout_set_text (layout, s3, -1);
pango_layout_get_pixel_size(layout, &width, NULL);
g_print ("%s pixel size is: %d/n", s3, width); 源碼
g_object_unref (layout);
gtk_main ();
return 0;
}
編譯運行:
$gcc `pkg-config --cflags --libs gtk+-2.0` string_pixel_width.c -o width
$./width
輸出以下:
hello pixel size is: 30
@@@@@ pixel size is: 65
字符串像素 pixel size is: 65 string