static void draw_image(DiaRenderer *self, Point *point, real width, real height, DiaImage *image) { DiaSvgRenderer *renderer = DIA_SVG_RENDERER (self); xmlNodePtr node; gchar d_buf[DTOSTR_BUF_SIZE]; gchar *uri; node = xmlNewChild(renderer->root, NULL, (const xmlChar *)"image", NULL); dia_svg_dtostr(d_buf, point->x); xmlSetProp(node, (const xmlChar *)"x", (xmlChar *) d_buf); dia_svg_dtostr(d_buf, point->y); xmlSetProp(node, (const xmlChar *)"y", (xmlChar *) d_buf); dia_svg_dtostr(d_buf, width); xmlSetProp(node, (const xmlChar *)"width", (xmlChar *) d_buf); dia_svg_dtostr(d_buf, height); xmlSetProp(node, (const xmlChar *)"height", (xmlChar *) d_buf); uri = g_filename_to_uri(dia_image_filename(image), NULL, NULL); if (uri) xmlSetProp(node, (const xmlChar *)"xlink:href", (xmlChar *) uri); else /* not sure if this fallbach is better than nothing */ xmlSetProp(node, (const xmlChar *)"xlink:href", (xmlChar *) dia_image_filename(image)); g_free (uri); }
/* * GetAttr */ static PyObject * PyDiaImage_GetAttr(PyDiaImage *self, gchar *attr) { if (!strcmp(attr, "__members__")) return Py_BuildValue("[ssssss]", "width", "height", "rgb_data", "mask_data", "filename", "uri"); else if (!strcmp(attr, "width")) return PyInt_FromLong(dia_image_width(self->image)); else if (!strcmp(attr, "height")) return PyInt_FromLong(dia_image_height(self->image)); else if (!strcmp(attr, "filename")) { return PyString_FromString(dia_image_filename(self->image)); } else if (!strcmp(attr, "uri")) { GError* error = NULL; char* s = g_filename_to_uri(dia_image_filename(self->image), NULL, &error); if (s) { PyObject* py_s = PyString_FromString(s); g_free(s); return py_s; } else { PyErr_SetString(PyExc_RuntimeError, error->message); g_error_free (error); return NULL; } } else if (!strcmp(attr, "rgb_data")) { unsigned char* s = dia_image_rgb_data(self->image); int len = dia_image_width(self->image) * dia_image_height(self->image) * 3; PyObject* py_s; if (!s) return PyErr_NoMemory(); py_s = PyString_FromStringAndSize((const char *)s, len); g_free (s); return py_s; } else if (!strcmp(attr, "mask_data")) { unsigned char* s = dia_image_mask_data(self->image); int len = dia_image_width(self->image) * dia_image_height(self->image); PyObject* py_s; if (!s) return PyErr_NoMemory(); py_s = PyString_FromStringAndSize((const char *)s, len); g_free (s); return py_s; } PyErr_SetString(PyExc_AttributeError, attr); return NULL; }
static void draw_image(DiaRenderer *self, Point *point, real width, real height, DiaImage *image) { DiaSvgRenderer *renderer = DIA_SVG_RENDERER (self); xmlNodePtr node; gchar d_buf[DTOSTR_BUF_SIZE]; gchar *uri = NULL; node = xmlNewChild(renderer->root, NULL, (const xmlChar *)"image", NULL); dia_svg_dtostr(d_buf, point->x); xmlSetProp(node, (const xmlChar *)"x", (xmlChar *) d_buf); dia_svg_dtostr(d_buf, point->y); xmlSetProp(node, (const xmlChar *)"y", (xmlChar *) d_buf); dia_svg_dtostr(d_buf, width); xmlSetProp(node, (const xmlChar *)"width", (xmlChar *) d_buf); dia_svg_dtostr(d_buf, height); xmlSetProp(node, (const xmlChar *)"height", (xmlChar *) d_buf); /* if the image file location is relative to the SVG file's store * a relative path - if it does not have a path: inline it */ if (strcmp (dia_image_filename(image), "(null)") == 0) { gchar *b64 = pixbuf_encode_base64 (dia_image_pixbuf (image)); gchar *uri; if (b64) uri = g_strdup_printf ("data:image/png;base64,%s", b64); else uri = g_strdup ("(null)"); xmlSetProp(node, (const xmlChar *)"xlink:href", (xmlChar *) uri); g_free (b64); } else if ((uri = dia_relativize_filename (renderer->filename, dia_image_filename(image))) != NULL) xmlSetProp(node, (const xmlChar *)"xlink:href", (xmlChar *) uri); else if ((uri = g_filename_to_uri(dia_image_filename(image), NULL, NULL)) != NULL) xmlSetProp(node, (const xmlChar *)"xlink:href", (xmlChar *) uri); else /* not sure if this fallback is better than nothing */ xmlSetProp(node, (const xmlChar *)"xlink:href", (xmlChar *) dia_image_filename(image)); g_free (uri); }
/* * Repr / _Str */ static PyObject * PyDiaImage_Str(PyDiaImage *self) { PyObject* py_s; const gchar* name = dia_image_filename(self->image); gchar* s = g_strdup_printf("%ix%i,%s", dia_image_width(self->image), dia_image_height(self->image), name ? name : "(null)"); py_s = PyString_FromString(s); g_free (s); return py_s; }
static void draw_image(DiaRenderer *self, Point *point, real width, real height, DiaImage *image) { DrsRenderer *renderer = DRS_RENDERER (self); xmlNodePtr node; gchar *uri; node = xmlNewChild(renderer->root, NULL, (const xmlChar *)"draw-image", NULL); _node_set_point (node, "point", point); _node_set_real (node, "width", width); _node_set_real (node, "height", height); /* TODO: also save the data? */ uri = g_filename_to_uri (dia_image_filename(image), NULL, NULL); if (uri) xmlSetProp (node, (const xmlChar *)"uri", (xmlChar *) uri); g_free (uri); }
void shape_info_print(ShapeInfo *info) { GList *tmp; int i; g_print("Name : %s\n", info->name); g_print("Connections :\n"); for (i = 0; i < info->nconnections; i++) g_print(" (%g, %g)\n", info->connections[i].x, info->connections[i].y); g_print("Shape bounds: (%g, %g) - (%g, %g)\n", info->shape_bounds.left, info->shape_bounds.top, info->shape_bounds.right, info->shape_bounds.bottom); if (info->has_text) g_print("Text bounds : (%g, %g) - (%g, %g)\n", info->text_bounds.left, info->text_bounds.top, info->text_bounds.right, info->text_bounds.bottom); g_print("Aspect ratio: "); switch (info->aspect_type) { case SHAPE_ASPECT_FREE: g_print("free\n"); break; case SHAPE_ASPECT_FIXED: g_print("fixed\n"); break; case SHAPE_ASPECT_RANGE: g_print("range %g - %g\n", info->aspect_min, info->aspect_max); break; } g_print("Display list:\n"); for (tmp = info->display_list; tmp; tmp = tmp->next) { GraphicElement *el = tmp->data; int i; switch (el->type) { case GE_LINE: g_print(" line: (%g, %g) (%g, %g)\n", el->line.p1.x, el->line.p1.y, el->line.p2.x, el->line.p2.y); break; case GE_POLYLINE: g_print(" polyline:"); for (i = 0; i < el->polyline.npoints; i++) g_print(" (%g, %g)", el->polyline.points[i].x, el->polyline.points[i].y); g_print("\n"); break; case GE_POLYGON: g_print(" polygon:"); for (i = 0; i < el->polygon.npoints; i++) g_print(" (%g, %g)", el->polygon.points[i].x, el->polygon.points[i].y); g_print("\n"); break; case GE_RECT: g_print(" rect: (%g, %g) (%g, %g)\n", el->rect.corner1.x, el->rect.corner1.y, el->rect.corner2.x, el->rect.corner2.y); break; case GE_TEXT: g_print(" text: (%g, %g)\n", el->text.anchor.x, el->text.anchor.y); break; case GE_ELLIPSE: g_print(" ellipse: center=(%g, %g) width=%g height=%g\n", el->ellipse.center.x, el->ellipse.center.y, el->ellipse.width, el->ellipse.height); break; case GE_PATH: g_print(" path:"); for (i = 0; i < el->path.npoints; i++) switch (el->path.points[i].type) { case BEZ_MOVE_TO: g_print(" M (%g, %g)", el->path.points[i].p1.x, el->path.points[i].p1.y); break; case BEZ_LINE_TO: g_print(" L (%g, %g)", el->path.points[i].p1.x, el->path.points[i].p1.y); break; case BEZ_CURVE_TO: g_print(" C (%g, %g) (%g, %g) (%g, %g)", el->path.points[i].p1.x, el->path.points[i].p1.y, el->path.points[i].p2.x, el->path.points[i].p2.y, el->path.points[i].p3.x, el->path.points[i].p3.y); break; } break; case GE_SHAPE: g_print(" shape:"); for (i = 0; i < el->path.npoints; i++) switch (el->path.points[i].type) { case BEZ_MOVE_TO: g_print(" M (%g, %g)", el->path.points[i].p1.x, el->path.points[i].p1.y); break; case BEZ_LINE_TO: g_print(" L (%g, %g)", el->path.points[i].p1.x, el->path.points[i].p1.y); break; case BEZ_CURVE_TO: g_print(" C (%g, %g) (%g, %g) (%g, %g)", el->path.points[i].p1.x, el->path.points[i].p1.y, el->path.points[i].p2.x, el->path.points[i].p2.y, el->path.points[i].p3.x, el->path.points[i].p3.y); break; } break; case GE_IMAGE : g_print(" image topleft=(%g, %g) width=%g height=%g file=%s\n", el->image.topleft.x, el->image.topleft.y, el->image.width, el->image.height, el->image.image ? dia_image_filename(el->image.image) : "(nil)"); break; default: break; } } g_print("\n"); }