GtCanvas* gt_canvas_cairo_context_new(GtStyle *style, cairo_t *context, double offsetpos, unsigned long width, unsigned long height, GtImageInfo *image_info, GtError *err) { GtCanvas *canvas; GtCanvasCairoContext *ccc; double margins = 10.0; gt_assert(style && width > 0 && height > 0); if (gt_style_get_num(style, "format", "margins", &margins, NULL, err) == GT_STYLE_QUERY_ERROR) { return NULL; } canvas = gt_canvas_create(gt_canvas_cairo_context_class()); canvas->pvt->y += offsetpos; canvas->pvt->g = gt_graphics_cairo_new_from_context(context, width, height+offsetpos); gt_graphics_set_margins(canvas->pvt->g, margins, 0); canvas->pvt->margins = margins; if (image_info) gt_image_info_set_height(image_info, height); canvas->pvt->sty = style; canvas->pvt->y += 0.5; canvas->pvt->ii = image_info; canvas->pvt->width = width; canvas->pvt->height = height; canvas->pvt->bt = NULL; ccc = canvas_cairo_context_cast(canvas); ccc->context = context; return canvas; }
GtCanvas* gt_canvas_cairo_file_new(GtStyle *style, GtGraphicsOutType output_type, GtUword width, GtUword height, GtImageInfo *image_info, GtError *err) { GtCanvas *canvas; GtColor bgcolor = {1.0, 1.0, 1.0, 1.0}; GtCanvasCairoFile *ccf; GtStyleQueryStatus status; double margins = 10.0; gt_assert(style && width > 0 && height > 0); status = gt_style_get_color(style, "format", "background_color", &bgcolor, NULL, err); switch (status) { case GT_STYLE_QUERY_ERROR: return NULL; case GT_STYLE_QUERY_NOT_SET: bgcolor.red = bgcolor.green = bgcolor.blue = bgcolor.alpha = 1.0; break; default: break; } if (gt_style_get_num(style, "format", "margins", &margins, NULL, err) == GT_STYLE_QUERY_ERROR) { return NULL; } canvas = gt_canvas_create(gt_canvas_cairo_file_class()); canvas->pvt->g = gt_graphics_cairo_new(output_type, width, height); (void) gt_graphics_set_background_color(canvas->pvt->g, bgcolor); (void) gt_graphics_set_margins(canvas->pvt->g, margins, 0); canvas->pvt->margins = margins; if (image_info) gt_image_info_set_height(image_info, height); canvas->pvt->sty = style; canvas->pvt->y += 0.5; canvas->pvt->ii = image_info; canvas->pvt->width = width; canvas->pvt->height = height; canvas->pvt->bt = NULL; ccf = canvas_cairo_file_cast(canvas); ccf->type = output_type; return canvas; }