绘图区构件和绘图
现在,我们开始向屏幕绘图。我们使用的构件是绘图区构件。一个绘图区构件本质上是一个 X 窗口,没有其它的东西。它是一个空白的画布,我们可以在其上绘制需要的东西。一个绘图区构件用如下函数创建:
GtkWidget* gtk_drawing_area_new (void); |
void gtk_drawing_area_size (GtkDrawingArea *darea, |
当调用函数gtk_widget_set_size_request() 或用户手动调整包含绘图区的窗口的大小时,默认大小可以无效,这对所有的构件都是一样的。
当我们创建绘图区构件时应该注意,我们完全 负责绘制其上的内容。如果我们的窗口被遮住后暴露出来,我们得到一个暴露事件,我们必须重绘先前被遮住的部分。
GdkPixmap* gdk_pixmap_new (GdkWindow *window, |
我们在事件"configure_event"的处理函数中创建位图。这个事件会在我们改变窗口大小时产生,包括窗口创建时。
/* 绘制区的后端位图 */ |
调用函数gdk_draw_rectangle() 清除位图,并初始化为白色。后面我们会详细讲解。
我们的暴露事件处理函数只是简单复制相应部分的位图到屏幕上(用暴露事件的event->area来确定重绘区域):
/* 从后端位图重新绘制屏幕 */ |
gdk_draw_line () |
详见参考文档或头文件<gdk/gdk.h> 。这些函数的头两个参数都相同。第一个参数是可绘区域。第二个参数是图像关联 (GC)。
widget->style->white_gc |
域值fg_gc 、bg_gc 、dark_gc 和light_gc 索引取值靠一个GtkStateType 类型的参数,该类型可以取如下值:
GTK_STATE_NORMAL, |
例如,GTK_STATE_SELECTED 默认的前景色是白色,默认的背景色是暗蓝色。
我们的函数draw_brush() 做实际的屏幕绘制工作。函数如下:
/* 在屏幕上绘制一个矩形 */ |
void gtk_widget_draw (GtkWidget *widget, |
它会通知X参数area 给定的区域需要更新。 X 会最终会产生一个暴露事件(混合区域需要多次调用函数gtk_widget_draw() ),然后会调用暴露事件处理函数,复制相应的部分到屏幕上。
<<< Previous | Home | Next >>> |
事件处理 | Up | 添加XInput支持 |