? autom4te.cache ? gtk2 ? lib/font.E ? lib/stCFJvM7 ? lib/styJrClm ? lib/text.c.heldoff.patch ? plug-ins/metapost/Makefile ? plug-ins/metapost/Makefile.in ? po/POTFILES.in.new ? po/fr.po.utf ? samples/ER-demo.png ? samples/SADT.png ? samples/UML-demo.png ? samples/chronograms.png ? samples/grafcet.png ? shapes/Misc/Makefile ? shapes/Misc/Makefile.in Index: app/render_gdk.c =================================================================== RCS file: /cvs/gnome/dia/app/render_gdk.c,v retrieving revision 1.37 diff -u -r1.37 render_gdk.c --- app/render_gdk.c 12 Jun 2002 18:49:03 -0000 1.37 +++ app/render_gdk.c 21 Jun 2002 16:27:24 -0000 @@ -26,6 +26,8 @@ #include "render_gdk.h" #include "message.h" +#include + static void begin_render(RendererGdk *renderer, DiagramData *data); static void end_render(RendererGdk *renderer); static void set_linewidth(RendererGdk *renderer, real linewidth); @@ -941,7 +943,50 @@ } #endif -static void +static void set_layout_font(PangoLayout* layout, const char* text, + guint font_height) +{ + PangoAttribute* attr; + PangoAttrList* list; + PangoFontDescription* desc; + guint len = strlen(text); + + desc = pango_font_description_new(); + pango_font_description_set_family_static(desc,"Courier"); + pango_font_description_set_style(desc,PANGO_STYLE_NORMAL); + pango_font_description_set_variant(desc,PANGO_VARIANT_NORMAL); + pango_font_description_set_weight(desc,PANGO_WEIGHT_NORMAL); + pango_font_description_set_stretch(desc,PANGO_STRETCH_NORMAL); + + pango_font_description_set_size(desc,font_height * 1000); + + attr = pango_attr_font_desc_new(desc); + pango_font_description_free(desc); + + attr->start_index = 0; + attr->end_index = len; + + list = pango_attr_list_new(); + pango_attr_list_insert(list,attr); + + pango_layout_set_attributes(layout,list); + pango_attr_list_unref(list); + + pango_layout_set_indent(layout,0); + pango_layout_set_justify(layout,FALSE); + pango_layout_set_alignment(layout,PANGO_ALIGN_LEFT); + +} + +static gint get_layout_first_baseline(PangoLayout* layout) { + PangoLayoutIter* iter = pango_layout_get_iter(layout); + gint result = pango_layout_iter_get_baseline(iter) / PANGO_SCALE; + pango_layout_iter_free(iter); + return result; +} + + +void draw_string (RendererGdk *renderer, const char *text, Point *pos, Alignment alignment, @@ -983,10 +1028,12 @@ gdk_gc_set_function(renderer->render_gc, GDK_COPY); #else DDisplay *ddisp = renderer->ddisp; + GtkWidget* widget = ddisp->canvas; GdkGC *gc = renderer->render_gc; GdkColor gdkcolor; int x,y; int iwidth; + PangoLayout* layout; ddisplay_transform_coords(ddisp, pos->x, pos->y, &x, &y); @@ -1003,13 +1050,17 @@ x -= iwidth; break; } - + color_convert(color, &gdkcolor); gdk_gc_set_foreground(gc, &gdkcolor); - - gdk_draw_string(renderer->pixmap, - renderer->gdk_font, gc, - x,y, text); + + layout = gtk_widget_create_pango_layout(widget,text); + set_layout_font(layout,text,renderer->font_height); + + gdk_draw_layout(renderer->pixmap,gc, + x,y - get_layout_first_baseline(layout), + layout); + g_object_unref(G_OBJECT(layout)); #endif }