void verify_page(fz_context *ctx, pdf_document *doc, int n, pdf_page *page) { pdf_widget *widget; for (widget = pdf_first_widget(ctx, page); widget; widget = pdf_next_widget(ctx, widget)) if (pdf_widget_type(ctx, widget) == PDF_WIDGET_TYPE_SIGNATURE) verify_signature(ctx, doc, n, widget); }
void verify_page(fz_context *ctx, pdf_document *doc, int n, pdf_page *page) { pdf_annot *annot; for (annot = pdf_first_annot(ctx, page); annot; annot = pdf_next_annot(ctx, annot)) if (pdf_annot_type(ctx, annot) == PDF_ANNOT_WIDGET) if (pdf_widget_type(ctx, annot) == PDF_WIDGET_TYPE_SIGNATURE) verify_signature(ctx, doc, n, annot); }
void do_widget_canvas(fz_irect canvas_area) { pdf_widget *widget; fz_rect bounds; fz_irect area; if (!pdf) return; for (widget = pdf_first_widget(ctx, page); widget; widget = pdf_next_widget(ctx, widget)) { bounds = pdf_bound_widget(ctx, widget); bounds = fz_transform_rect(bounds, view_page_ctm); area = fz_irect_from_rect(bounds); if (ui_mouse_inside(&canvas_area) && ui_mouse_inside(&area)) { if (!widget->is_hot) pdf_annot_event_enter(ctx, widget); widget->is_hot = 1; ui.hot = widget; if (!ui.active && ui.down) { ui.active = widget; pdf_annot_event_down(ctx, widget); if (selected_annot != widget) { if (selected_annot && pdf_annot_type(ctx, selected_annot) == PDF_ANNOT_WIDGET) pdf_annot_event_blur(ctx, selected_annot); selected_annot = widget; pdf_annot_event_focus(ctx, widget); } } } else { if (widget->is_hot) pdf_annot_event_exit(ctx, widget); widget->is_hot = 0; } /* Set is_hot and is_active to select current appearance */ widget->is_active = (ui.active == widget && ui.down); if (showform) { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glColor4f(0, 0, 1, 0.1f); glRectf(area.x0, area.y0, area.x1, area.y1); glDisable(GL_BLEND); } if (ui.active == widget || (!ui.active && ui.hot == widget)) { glLineStipple(1, 0xAAAA); glEnable(GL_LINE_STIPPLE); glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); glEnable(GL_BLEND); glColor4f(1, 1, 1, 1); glBegin(GL_LINE_LOOP); glVertex2f(area.x0-0.5f, area.y0-0.5f); glVertex2f(area.x1+0.5f, area.y0-0.5f); glVertex2f(area.x1+0.5f, area.y1+0.5f); glVertex2f(area.x0-0.5f, area.y1+0.5f); glEnd(); glDisable(GL_BLEND); glDisable(GL_LINE_STIPPLE); } if (ui.hot == widget && ui.active == widget && !ui.down) { pdf_annot_event_up(ctx, widget); if (pdf_field_flags(ctx, widget->obj) & PDF_FIELD_IS_READ_ONLY) continue; switch (pdf_widget_type(ctx, widget)) { default: break; case PDF_WIDGET_TYPE_CHECKBOX: case PDF_WIDGET_TYPE_RADIOBUTTON: pdf_toggle_widget(ctx, widget); break; case PDF_WIDGET_TYPE_TEXT: show_tx_dialog(widget); break; case PDF_WIDGET_TYPE_COMBOBOX: case PDF_WIDGET_TYPE_LISTBOX: ui.dialog = ch_dialog; ch_widget = widget; break; case PDF_WIDGET_TYPE_SIGNATURE: show_sig_dialog(widget); break; } } } if (pdf_update_page(ctx, page)) render_page(); }