Как мне перерисовать только часть GtkWidget - PullRequest
1 голос
/ 25 июня 2019

Я хочу перерисовать только часть виджета 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 так, чтобы площадь поверхности имела разные размеры?


Toуточнить далее - я не рисую свои собственные вещи.Я хочу установить свою собственную поверхность в cairo_t, переданном в обратном вызове draw в GtkTextView, для большего контроля над тем, как виджет отображается естественным образом.Эта новая поверхность может быть такой же, как исходная поверхность в cr, но обрезанная или более ранний «снимок» виджета, полученный с gtk_widget_draw()

...