關於gtk控件上字符串像素寬度計算--Pango

在實際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

相關文章
相關標籤/搜索