static VALUE page_render_selection(VALUE self, VALUE cairo, VALUE selection, VALUE rb_old_selection, VALUE style, VALUE glyph_color, VALUE background_color) { PopplerRectangle *old_selection = NULL; if (!NIL_P(rb_old_selection)) old_selection = RVAL2POPPLERRECTANGLE(rb_old_selection); poppler_page_render_selection(SELF(self), RVAL2CRCONTEXT(cairo), RVAL2POPPLERRECTANGLE(selection), old_selection, RVAL2POPPLERSELECTIONSTYLE(style), RVAL2POPPLERCOLOR(glyph_color), RVAL2POPPLERCOLOR(background_color)); return Qnil; }
static gboolean pgd_selections_render_selections (PgdSelectionsDemo *demo) { PopplerRectangle doc_area; gdouble page_width, page_height; cairo_t *cr; if (!demo->page || demo->start.x == -1) { demo->selections_idle = 0; return FALSE; } poppler_page_get_size (demo->page, &page_width, &page_height); page_width *= demo->scale; page_height *= demo->scale; doc_area.x1 = demo->start.x / demo->scale; doc_area.y1 = demo->start.y / demo->scale; doc_area.x2 = demo->stop.x / demo->scale; doc_area.y2 = demo->stop.y / demo->scale; if (demo->selection_surface) cairo_surface_destroy (demo->selection_surface); demo->selection_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, page_width, page_height); cr = cairo_create (demo->selection_surface); if (demo->scale != 1.0) cairo_scale (cr, demo->scale, demo->scale); poppler_page_render_selection (demo->page, cr, &doc_area, &demo->doc_area, demo->style, &demo->glyph_color, &demo->background_color); cairo_destroy (cr); demo->doc_area = doc_area; gtk_widget_queue_draw (demo->darea); demo->selections_idle = 0; return FALSE; }