cairo 教程四

7 篇文章 0 订阅

编译可参考教程二

GTK 窗口

在这个示例中,演示如何在GTK窗口中使用Cairo绘制图形。基于GTK后端的Cairo绘图模型将贯穿于本指南。

#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.627, 0, 0);
cairo_select_font_face
(cr, "AdobeHeiti Std", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL
);
cairo_set_font_size
(cr, 24.0);

cairo_move_to
(cr, 10.0, 34.0);
cairo_show_text
(cr, "Iam a Chinese.");

cairo_destroy
(cr);

returnFALSE;
}


int
main
(intargc, 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), 320, 48);
gtk_widget_set_app_paintable
(window, TRUE);

gtk_widget_show_all
(window);

gtk_main
();

return0;
}

这个示例程序运行后,会在屏幕中央跳出一个GTK+窗口,上面绘制了一串文本.

#include<cairo.h>
#include<gtk/gtk.h>

首先要包含cairogtk+库的头文件。

g_signal_connect(window, "expose-event",
G_CALLBACK
(on_expose_event), NULL);

GTK+窗口被重绘时,会发出expose-event信号,我们可将这一信号连接到on_expose_event() 回调函数上。

gtk_widget_set_app_paintable(window, TRUE);

要在GTK+窗口中绘制Cairo图形,可以使用GtkDrawingAreawidget 或者更为简单的GtkWindowwidget,本例选择GtkWindow。由GtkWindowwidget expose-event信号处理后,默认要重新绘制窗口背景,这会将我们在on_expose_event() 函数中定义的Cairo图形覆盖掉,因此需要调用gtk_widget_set_app_paintable() 函数通知GTK+不要这么干。如果是在GtkDrawingAreawidget 中绘制Cairo图形,则可省去这一步。

cairo_t*cr;

cr = gdk_cairo_create
(widget->window);

Cairo图形绘制工作是在on_expose_event() 函数中进行的,在该函数中,我们为GTK+系统创建了一个Cairo环境,并在该环境中绘制了一行文本。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值