void cdSimInitText(cdSimulation* simulation) { if (!simulation->tt_text) simulation->tt_text = cdTT_create(); cdRegisterAttribute(simulation->canvas, &addfontmap_attrib); cdRegisterAttribute(simulation->canvas, &version_attrib); }
cdCtxCanvas *cdgdkCreateCanvas(cdCanvas* canvas, GdkDrawable* wnd, GdkScreen* scr, GdkVisual* vis) { cdCtxCanvas *ctxcanvas = (cdCtxCanvas *)malloc(sizeof(cdCtxCanvas)); memset(ctxcanvas, 0, sizeof(cdCtxCanvas)); ctxcanvas->scr = scr; ctxcanvas->vis = vis; ctxcanvas->wnd = wnd; ctxcanvas->gc = gdk_gc_new(wnd); if (!ctxcanvas->gc) { free(canvas); return NULL; } ctxcanvas->fontcontext = gdk_pango_context_get(); #if PANGO_VERSION_CHECK(1,16,0) pango_context_set_language(ctxcanvas->fontcontext, pango_language_get_default()); #endif ctxcanvas->canvas = canvas; canvas->ctxcanvas = ctxcanvas; gdk_drawable_get_size(wnd, &ctxcanvas->canvas->w, &ctxcanvas->canvas->h); ctxcanvas->depth = gdk_drawable_get_depth(wnd); canvas->bpp = ctxcanvas->depth; canvas->xres = ((double)gdk_screen_get_width(scr) / (double)gdk_screen_get_width_mm(scr)); canvas->yres = ((double)gdk_screen_get_height(scr) / (double)gdk_screen_get_height_mm(scr)); canvas->w_mm = ((double)canvas->w) / canvas->xres; canvas->h_mm = ((double)canvas->h) / canvas->yres; canvas->invert_yaxis = 1; if (canvas->bpp <= 8) { ctxcanvas->colormap = gdk_gc_get_colormap(ctxcanvas->gc); if (!ctxcanvas->colormap) { ctxcanvas->colormap = gdk_colormap_get_system(); gdk_gc_set_colormap(ctxcanvas->gc, ctxcanvas->colormap); } ctxcanvas->num_colors = ctxcanvas->colormap->size; } cdRegisterAttribute(canvas, &gc_attrib); cdRegisterAttribute(canvas, &rotate_attrib); cdRegisterAttribute(canvas, &pangoversion_attrib); cdRegisterAttribute(canvas, &imgdither_attrib); cdRegisterAttribute(canvas, &interp_attrib); return ctxcanvas; }
static void cdcreatecanvas(cdCanvas* canvas, void *data) { cdCtxCanvas* ctxcanvas; int w = 0, h = 0; double res = 3.78; char* str_data = (char*)data; sscanf(str_data, "%dx%d %lg", &w, &h, &res); if (w == 0 || h == 0) return; ctxcanvas = (cdCtxCanvas *)malloc(sizeof(cdCtxCanvas)); memset(ctxcanvas, 0, sizeof(cdCtxCanvas)); canvas->w = w; canvas->h = h; canvas->xres = res; canvas->yres = res; canvas->w_mm = ((double)canvas->w) / canvas->xres; canvas->h_mm = ((double)canvas->h) / canvas->yres; ctxcanvas->canvas = canvas; canvas->ctxcanvas = ctxcanvas; ctxcanvas->utf8_buffer = NULL; cdRegisterAttribute(canvas, &rotate_attrib); cdRegisterAttribute(canvas, &version_attrib); cdRegisterAttribute(canvas, &poly_attrib); cdRegisterAttribute(canvas, &size_attrib); cdRegisterAttribute(canvas, &alpha_attrib); cdRegisterAttribute(canvas, &aa_attrib); cdRegisterAttribute(canvas, &txtaa_attrib); cdRegisterAttribute(canvas, &utf8mode_attrib); cdCanvasSetAttribute(canvas, "ALPHA", "1"); cdCanvasSetAttribute(canvas, "ANTIALIAS", "1"); cdCanvasSetAttribute(canvas, "TEXTANTIALIAS", "1"); }
static void cdcreatecanvas(cdCanvas* canvas, void* data) { cdCtxCanvas* ctxcanvas; cairo_surface_t *surface; int w = 0, h = 0, use_alpha = 0; double res = 3.78; unsigned char *rgb = NULL; char* str_data = (char*)data; char* res_ptr = NULL; cairo_format_t format = CAIRO_FORMAT_RGB24; /* Starting parameters */ if (str_data == NULL) return; if (strstr(str_data, "-a")) use_alpha = 1; res_ptr = strstr(str_data, "-r"); if (res_ptr) sscanf(res_ptr+2, "%lg", &res); /* size and rgb */ #ifdef SunOS_OLD sscanf(str_data, "%dx%d %d", &w, &h, &rgb); #else sscanf(str_data, "%dx%d %p", &w, &h, &rgb); #endif if (w == 0) w = 1; if (h == 0) h = 1; canvas->w = w; canvas->h = h; canvas->yres = res; canvas->xres = res; canvas->w_mm = ((double)w) / res; canvas->h_mm = ((double)h) / res; if (use_alpha) { canvas->bpp = 32; format = CAIRO_FORMAT_ARGB32; } else canvas->bpp = 24; /* fake value, image bpp is always 32 */ if (rgb) surface = cairo_image_surface_create_for_data(rgb, format, w, h, w*32); else surface = cairo_image_surface_create(format, canvas->w, canvas->h); /* Starting Cairo driver */ ctxcanvas = cdcairoCreateCanvas(canvas, cairo_create(surface)); cairo_surface_destroy(surface); if (rgb) { ctxcanvas->user_image = 1; ctxcanvas->rgb = rgb; } else { ctxcanvas->user_image = 0; ctxcanvas->rgb = cairo_image_surface_get_data(cairo_get_target(ctxcanvas->cr)); /* fill with white */ /* transparent, this is the normal alpha coding */ cairo_set_source_rgba(ctxcanvas->cr, 1.0, 1.0, 1.0, 0.0); cairo_rectangle(ctxcanvas->cr, 0, 0, canvas->w, canvas->h); cairo_fill(ctxcanvas->cr); } cdRegisterAttribute(canvas, &stride_attrib); cdRegisterAttribute(canvas, &write2png_attrib); cdRegisterAttribute(canvas, &data_attrib); }