int calculate_drawing_range(GtLineBreakerCaptions *lbc, GtDrawingRange *rng, GtBlock* block, GtError *err) { double textwidth = 0.0; GtDrawingRange drange; gt_assert(block && lbc); drange = gt_coords_calc_generic_range(gt_block_get_range(block), gt_layout_get_range(lbc->layout)); drange.start *= lbc->width-2*lbc->margins; drange.end *= lbc->width-2*lbc->margins; if (gt_block_get_caption(block)) { textwidth = gt_text_width_calculator_get_text_width( gt_layout_get_twc(lbc->layout), gt_str_get(gt_block_get_caption(block)), err); if (gt_double_smaller_double(textwidth, 0)) return -1; if (gt_double_smaller_double(gt_drawing_range_length(drange), textwidth)) drange.end = drange.start + textwidth; } rng->start = drange.start; rng->end = drange.end; return 0; }
int gt_canvas_cairo_visit_layout_pre(GtCanvas *canvas, GtLayout *layout, GtError *err) { double head_track_space = HEAD_TRACK_SPACE_DEFAULT; /* get displayed range for internal use */ canvas->pvt->viewrange = gt_layout_get_range(layout); if (gt_canvas_draw_ruler(canvas, canvas->pvt->viewrange, err)) { return -1; } if (gt_style_get_num(canvas->pvt->sty, "format", "ruler_space", &head_track_space, NULL,err) == GT_STYLE_QUERY_ERROR) { return -1; } canvas->pvt->y += HEADER_SPACE + head_track_space; return 0; }