*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include <config.h>
-#include <gdk/gdkcolor.h>
+#include <stdlib.h>
+#include <gdk/gdk.h>
#ifdef HAVE_SPECTRE
#include <libspectre/spectre.h>
#endif
glyph = &ch->grey;
- isbox = (glyph->data == NULL || (dvi->params.flags & MDVI_PARAM_CHARBOXES));
+ isbox = (glyph->data == NULL ||
+ (dvi->params.flags & MDVI_PARAM_CHARBOXES) ||
+ MDVI_GLYPH_ISEMPTY (glyph->data));
x = - glyph->x + x0 + cairo_device->xmargin;
y = - glyph->y + y0 + cairo_device->ymargin;
unsigned char *data = NULL;
int row_length;
SpectreDocument *psdoc;
- SpectrePage *page;
SpectreRenderContext *rc;
+ int w, h;
SpectreStatus status;
cairo_surface_t *image;
spectre_document_free (psdoc);
return;
}
-
- page = spectre_document_get_page (psdoc, 0);
- if (!page) {
- spectre_document_free (psdoc);
- return;
- }
+
+ spectre_document_get_page_size (psdoc, &w, &h);
rc = spectre_render_context_new ();
- spectre_render_context_set_page_size (rc, width, height);
- spectre_page_render (page, rc, &data, &row_length);
- status = spectre_page_status (page);
- spectre_render_context_free (rc);
+ spectre_render_context_set_scale (rc,
+ (double)width / w,
+ (double)height / h);
+ spectre_document_render_full (psdoc, rc, &data, &row_length);
+ status = spectre_document_status (psdoc);
- spectre_page_free (page);
+ spectre_render_context_free (rc);
spectre_document_free (psdoc);
if (status) {
+ g_warning ("Error rendering PS document %s: %s\n",
+ filename, spectre_status_to_string (status));
free (data);
+
return;
}
static void
dvi_cairo_put_pixel (void *image, int x, int y, Ulong color)
{
- cairo_t *cr;
cairo_surface_t *surface;
gint rowstride;
- guchar *p;
+ guint32 *p;
surface = (cairo_surface_t *) image;
rowstride = cairo_image_surface_get_stride (surface);
- p = cairo_image_surface_get_data (surface) + y * rowstride + x * 4;
+ p = (guint32*) (cairo_image_surface_get_data (surface) + y * rowstride + x * 4);
- p[2] = (color >> 16) & 0xff;
- p[1] = (color >> 8) & 0xff;
- p[0] = (color >> 0) & 0xff;
+ *p = color;
}
static void
gint page_width;
gint page_height;
cairo_surface_t *surface;
- gchar *pixels;
+ guchar *pixels;
gint rowstride;
static const cairo_user_data_key_t key;
page_height = dvi->dvi_page_h * dvi->params.vconv + 2 * cairo_device->ymargin;
rowstride = page_width * 4;
- pixels = (gchar *) g_malloc (page_height * rowstride);
+ pixels = (guchar *) g_malloc (page_height * rowstride);
memset (pixels, 0xff, page_height * rowstride);
surface = cairo_image_surface_create_for_data (pixels,