On Sat, Sep 01, 2007 at 07:00:30PM +0200, Lars Clausen wrote:
> On Sat, 2007-09-01 at 15:43 +0200, Thomas Harding wrote:
> > Hello,
> > I make tests on Firefox, and found appropriates values for text
> I'd be a lot more enthusiastic about improving SVG if a) different
Forgotten the patch !
--
Thomas Harding
Index: plug-ins/svg/render_svg.c
===================================================================
--- plug-ins/svg/render_svg.c (révision 3769)
+++ plug-ins/svg/render_svg.c (copie de travail)
@@ -44,6 +44,7 @@
#include "diagramdata.h"
#include "dia_xml_libxml.h"
#include "object.h"
+#include "textline.h"
G_BEGIN_DECLS
@@ -52,6 +53,9 @@
#define SVG_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
SVG_TYPE_RENDERER, SvgRendererClass))
#define SVG_IS_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
SVG_TYPE_RENDERER))
#define SVG_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
SVG_TYPE_RENDERER, SvgRendererClass))
+#define DTOSTR_BUF_SIZE G_ASCII_DTOSTR_BUF_SIZE
+#define dia_svg_dtostr(buf,d) \
+ g_ascii_formatd(buf,sizeof(buf),"%g",d)
GType svg_renderer_get_type (void) G_GNUC_CONST;
@@ -80,7 +84,10 @@
static void fill_rounded_rect (DiaRenderer *renderer,
Point *ul_corner, Point *lr_corner,
Color *colour, real rounding);
+static void draw_text_line (DiaRenderer *self, TextLine *text_line,
+ Point *pos, Color *colour);
+
static void svg_renderer_class_init (SvgRendererClass *klass);
static gpointer parent_class = NULL;
@@ -132,6 +139,7 @@
renderer_class->draw_object = draw_object;
renderer_class->draw_rounded_rect = draw_rounded_rect;
renderer_class->fill_rounded_rect = fill_rounded_rect;
+ renderer_class->draw_text_line = draw_text_line;
}
@@ -278,6 +286,55 @@
}
static void
+draw_text_line(DiaRenderer *self, TextLine *text_line,
+ Point *pos, Color *colour)
+{
+ DiaSvgRenderer *renderer = DIA_SVG_RENDERER (self);
+ xmlNodePtr node;
+ char *style, *tmp;
+ real saved_width;
+ gchar d_buf[DTOSTR_BUF_SIZE];
+ DiaFont *font;
+
+ node = xmlNewChild(renderer->root, renderer->svg_name_space, (const xmlChar
*)"text",
+ (xmlChar *) text_line_get_string(text_line));
+
+ saved_width = renderer->linewidth;
+ renderer->linewidth = 0.001;
+ style = (const xmlChar *)
DIA_SVG_RENDERER_GET_CLASS(self)->get_fill_style(renderer, colour);
+ /* return value must not be freed */
+ renderer->linewidth = saved_width;
+ tmp = g_strdup_printf("%s; font-size: %spt", style,
+
dia_svg_dtostr(d_buf,text_line_get_height(text_line)/1.84));
+ style = tmp;
+
+ tmp = g_strdup_printf("%s; length: %s", style,
+ dia_svg_dtostr(d_buf, text_line_get_width(text_line)));
+ g_free (style);
+ style = tmp;
+
+ font = text_line_get_font(text_line);
+ tmp = g_strdup_printf("%s; font-family: %s; font-style: %s; "
+ "font-weight: %s",style,
+ dia_font_get_family(font),
+ dia_font_get_slant_string(font),
+ dia_font_get_weight_string(font));
+ g_free(style);
+ style = tmp;
+
+ /* have to do something about fonts here ... */
+
+ xmlSetProp(node, (const xmlChar *)"style", (xmlChar *) style);
+ g_free(style);
+
+ dia_svg_dtostr(d_buf, pos->x);
+ xmlSetProp(node, (const xmlChar *)"x", (xmlChar *) d_buf);
+ dia_svg_dtostr(d_buf, pos->y);
+ xmlSetProp(node, (const xmlChar *)"y", (xmlChar *) d_buf);
+}
+
+
+static void
export_svg(DiagramData *data, const gchar *filename,
const gchar *diafilename, void* user_data)
{
_______________________________________________
Dia-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/dia-list
FAQ at http://live.gnome.org/Dia/Faq
Main page at http://live.gnome.org/Dia