dia r4345 - in trunk: . lib plug-ins/postscript



Author: hans
Date: Wed Mar 25 21:59:12 2009
New Revision: 4345
URL: http://svn.gnome.org/viewvc/dia?rev=4345&view=rev

Log:
2009-03-25  Hans Breuer  <hans breuer org>

	* plug-ins/diapsrenderer.c : dont't throw away alignment information
	an don't scale text arbitrary, we can't predict the Latin-1 font size
	exactly enough. Fiyes bug #575186.
	* lib/textline.[ch] : more const correct, avoids warning above


Modified:
   trunk/ChangeLog
   trunk/lib/textline.c
   trunk/lib/textline.h
   trunk/plug-ins/postscript/diapsrenderer.c

Modified: trunk/lib/textline.c
==============================================================================
--- trunk/lib/textline.c	(original)
+++ trunk/lib/textline.c	Wed Mar 25 21:59:12 2009
@@ -159,23 +159,23 @@
 }
 
 real
-text_line_get_width(TextLine *text_line)
+text_line_get_width(const TextLine *text_line)
 {
-  text_line_cache_values(text_line);
+  text_line_cache_values((TextLine *)text_line);
   return text_line->width;
 }
 
 real
-text_line_get_ascent(TextLine *text_line)
+text_line_get_ascent(const TextLine *text_line)
 {
-  text_line_cache_values(text_line);
+  text_line_cache_values((TextLine *)text_line);
   return text_line->ascent;
 }
 
 real
-text_line_get_descent(TextLine *text_line)
+text_line_get_descent(const TextLine *text_line)
 {
-  text_line_cache_values(text_line);
+  text_line_cache_values((TextLine *)text_line);
   return text_line->descent;
 }
 

Modified: trunk/lib/textline.h
==============================================================================
--- trunk/lib/textline.h	(original)
+++ trunk/lib/textline.h	Wed Mar 25 21:59:12 2009
@@ -69,9 +69,9 @@
 DiaFont *text_line_get_font(const TextLine *text);
 real text_line_get_height(const TextLine *text);
 void text_line_calc_boundingbox_size(TextLine *text, Point *size);
-real text_line_get_width(TextLine *text);
-real text_line_get_ascent(TextLine *text);
-real text_line_get_descent(TextLine *text);
+real text_line_get_width(const TextLine *text);
+real text_line_get_ascent(const TextLine *text);
+real text_line_get_descent(const TextLine *text);
 
 void text_line_adjust_glyphs(TextLine *line,
 			     PangoGlyphString *glyphs,

Modified: trunk/plug-ins/postscript/diapsrenderer.c
==============================================================================
--- trunk/plug-ins/postscript/diapsrenderer.c	(original)
+++ trunk/plug-ins/postscript/diapsrenderer.c	Wed Mar 25 21:59:12 2009
@@ -33,11 +33,6 @@
 #include "font.h"
 #include "textline.h"
 
-static void
-draw_text_line(DiaRenderer *self,
-	       const TextLine *text_line,
-	       Point *pos, Alignment alignment, Color *color);
-
 #define DTOSTR_BUF_SIZE G_ASCII_DTOSTR_BUF_SIZE
 #define psrenderer_dtostr(buf,d) \
 	g_ascii_formatd(buf, sizeof(buf), "%f", d)
@@ -647,96 +642,57 @@
 }
 
 static void
-draw_string(DiaRenderer *self,
-	    const char *text,
-	    Point *pos, Alignment alignment,
-	    Color *color)
+put_text_alignment (DiaPsRenderer *renderer,
+		    Alignment alignment,
+		    Point *pos)
 {
-#define DRAW_STRING_WITH_TEXT_LINE
-#ifdef DRAW_STRING_WITH_TEXT_LINE
-  TextLine *text_line = text_line_new(text, self->font, self->font_height);
-  draw_text_line(self, text_line, pos, alignment, color);
-  text_line_destroy(text_line);
-#else
-  DiaPsRenderer *renderer = DIA_PS_RENDERER(self);
-  gchar *buffer;
   gchar px_buf[DTOSTR_BUF_SIZE];
   gchar py_buf[DTOSTR_BUF_SIZE];
-  GError * error = NULL;
-
-  if (1 > strlen(text))
-    return;
-
-  lazy_setcolor(renderer,color);
-
-  buffer = ps_convert_string(text);
-
-  fprintf(renderer->file, "(%s) ", buffer);
-  g_free(buffer);
 
   switch (alignment) {
   case ALIGN_LEFT:
-    fprintf(renderer->file, "%s %s m",
+    fprintf(renderer->file, "%s %s m\n",
 	    psrenderer_dtostr(px_buf, pos->x),
 	    psrenderer_dtostr(py_buf, pos->y) );
     break;
   case ALIGN_CENTER:
-    fprintf(renderer->file, "dup sw 2 div %s ex sub %s m",
+    fprintf(renderer->file, "dup sw 2 div %s ex sub %s m\n",
 	    psrenderer_dtostr(px_buf, pos->x),
 	    psrenderer_dtostr(py_buf, pos->y) );
     break;
   case ALIGN_RIGHT:
-    fprintf(renderer->file, "dup sw %s ex sub %s m",
+    fprintf(renderer->file, "dup sw %s ex sub %s m\n",
 	    psrenderer_dtostr(px_buf, pos->x),
 	    psrenderer_dtostr(py_buf, pos->y) );
     break;
-  }
-  
-  fprintf(renderer->file, " gs 1 -1 sc sh gr\n");
-#endif
+  }  
 }
 
 static void
-draw_text_line(DiaRenderer *self,
-	       const TextLine *text_line,
-	       Point *pos, Alignment alignment, Color *color)
+draw_string(DiaRenderer *self,
+	    const char *text,
+	    Point *pos, Alignment alignment,
+	    Color *color)
 {
   DiaPsRenderer *renderer = DIA_PS_RENDERER(self);
+  Point pos_adj;
   gchar *buffer;
-  gchar px_buf[DTOSTR_BUF_SIZE];
-  gchar py_buf[DTOSTR_BUF_SIZE];
-  real width;
-  gchar *text = text_line_get_string(text_line);
-  int n_chars = g_utf8_strlen(text, -1);
 
-  if (1 > n_chars)
+  if (1 > strlen(text))
     return;
 
-  set_font(self, text_line_get_font(text_line),
-	   text_line_get_height(text_line));
-
-  lazy_setcolor(renderer, color);
+  lazy_setcolor(renderer,color);
 
   buffer = ps_convert_string(text);
 
   fprintf(renderer->file, "(%s) ", buffer);
   g_free(buffer);
 
-  fprintf(renderer->file, "%s %s m \n",
-	  psrenderer_dtostr(px_buf, pos->x - text_line_get_alignment_adjustment (text_line, alignment)),
-	  psrenderer_dtostr(py_buf, pos->y - text_line_get_descent(text_line)) );
-  
-  /* Perform magic to ensure the right size */
-  width = text_line_get_width(text_line);
-  
-  /* Find the difference in length */
-  fprintf(renderer->file, "dup sw %s exch sub \n", 
-	  psrenderer_dtostr(px_buf, width));
+  pos_adj.x = pos->x;
+  pos_adj.y = pos->y - dia_font_descent("", self->font, self->font_height);
+  put_text_alignment (renderer, alignment, &pos_adj);
 
-  /* Divide by number of chars and set up for ashow */
-  fprintf(renderer->file, "%d div exch 0.0 exch \n", n_chars);
-  
-  fprintf(renderer->file, " gs 1 -1 sc ashow gr\n");
+  fprintf(renderer->file, " gs 1 -1 sc sh gr\n");
 }
 
 static void
@@ -1095,7 +1051,6 @@
   renderer_class->fill_rect = fill_rect;
   renderer_class->draw_polyline  = draw_polyline;
   renderer_class->draw_polygon   = draw_polygon;
-  renderer_class->draw_text_line = draw_text_line;
 
   /* ps specific */
   ps_renderer_class->begin_prolog = begin_prolog;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]