如何只重画GtkWidget的一部分

时间:2019-06-25 19:38:57

标签: c gtk cairo

我只想重绘GtkTextView小部件的一部分。在绘制信号处理程序中,我尝试了很多事情,例如:

GdkRectangle rect;

gdk_cairo_get_clip_rectangle(cr, &rect);

cairo_surface_t* surface = cairo_get_target(cr);
cairo_surface_t* newsurf = cairo_surface_create_similar(surface, cairo_surface_get_content(surface), rect.width - 50, rect.height);

cairo_push_group(cr);
cairo_set_source_surface(cr, newsurf, rect.x + 10, rect.y + 40);
cairo_fill_preserve(cr);
cairo_stroke(cr);
cairo_pop_group_to_source(cr);
cairo_paint(cr);

除了什么都没有发生。如何仅重绘cr中脏片段区域的矩形,或者如何(按照我的尝试)修改cr,以使表面积具有不同的尺寸?


为进一步澄清-我不画自己的东西。我想在GtkTextView的draw回调中传递的cairo_t中设置自己的表面,以更好地控制小部件的自然呈现方式。此新表面可能与cr中的源表面相同,但已裁剪或使用gtk_widget_draw()获得的窗口小部件的早期“快照”

0 个答案:

没有答案