Cairo 图形指南 (2) —— 文本

这篇博客深入介绍了如何使用Cairo图形库处理文本,包括在GTK+窗口中显示文本、逐字动画效果以及创建膨胀和淡出的文本动画。示例代码展示了字体设置、字号调整、文本位置计算以及透明度控制等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本篇讲述如何处理文本。

灵魂伙伴

第一个示例是在 GTK+ 窗口中显示《灵魂伙伴》的部分歌词。

#include <cairo.h>
#include <gtk/gtk.h>
 
staticgboolean
on_expose_event(GtkWidget *widget,
    GdkEventExpose *event,
    gpointer data)
{
  cairo_t *cr;
 
  cr = gdk_cairo_create(widget->window);
 
  cairo_set_source_rgb(cr, 0.1, 0.1, 0.1);
 
  cairo_select_font_face(cr,"Purisa",
      CAIRO_FONT_SLANT_NORMAL,
      CAIRO_FONT_WEIGHT_BOLD);
 
  cairo_set_font_size(cr, 13);
 
  cairo_move_to(cr, 20, 30);
  cairo_show_text(cr,"Most relationships seem so transitory"); 
  cairo_move_to(cr, 20, 60);
  cairo_show_text(cr,"They're all good but not the permanent one");
 
  cairo_move_to(cr, 20, 120);
  cairo_show_text(cr,"Who doesn't long for someone to hold");
 
  cairo_move_to(cr, 20, 150);
  cairo_show_text(cr,"Who knows how to love you without being told");
  cairo_move_to(cr, 20, 180);
  cairo_show_text(cr,"Somebody tell me why I'm on my own");
  cairo_move_to(cr, 20, 210);
  cairo_show_text(cr,"If there's a soulmate for everyone");
 
  cairo_destroy(cr);
 
  returnFALSE;
}
 
 
int main (int argc,char*argv[])
{
  GtkWidget *window;
 
  gtk_init(&argc, &argv);
 
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
  g_signal_connect(window,"expose-event",
      G_CALLBACK(on_expose_event), NULL);
  g_signal_connect(window,"destroy",
      G_CALLBACK(gtk_main_quit), NULL);
 
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_default_size(GTK_WINDOW(window), 420, 250);
  gtk_window_set_title(GTK_WINDOW(window),"Soulmate");
  gtk_widget_set_app_paintable(window, TRUE);
 
  gtk_widget_show_all(window);
 
  gtk_main();
 
  return0;
}

在这个示例中,显示了 Natasha Bedingfield 的《灵魂伙伴》的部分歌词。(在 这里,可以听这首歌,很美妙)


cairo_select_font_face(cr, "Purisa" ,
    CAIRO_FONT_SLANT_NORMAL,
    CAIRO_FONT_WEIGHT_BOLD);

这里设置字体。这个函数接受了三个字体参数的传入,字体的名称、样式与轻重。


cairo_set_font_size(cr, 13);

这里设定字号。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值