dia r4345 - in trunk: . lib plug-ins/postscript
- From: hans svn gnome org
- To: svn-commits-list gnome org
- Subject: dia r4345 - in trunk: . lib plug-ins/postscript
- Date: Wed, 25 Mar 2009 21:59:12 +0000 (UTC)
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]