Я хочу перерисовать только часть виджета 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()