]> www.fi.muni.cz Git - evince.git/blobdiff - backend/dvi/cairo-device.c
[dvi] Test glyph->data for MDVI_GLYPH_EMPTY
[evince.git] / backend / dvi / cairo-device.c
index b8ec39e6877c904b8a9ff0f69635a52c8ce6c362..47425cad7e0be21a503a449c8fff618f525c35bb 100644 (file)
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  *
  * 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 <config.h>
 
-#include <gdk/gdkcolor.h>
+#include <stdlib.h>
+#include <gdk/gdk.h>
 #ifdef HAVE_SPECTRE
 #include <libspectre/spectre.h>
 #endif
 #ifdef HAVE_SPECTRE
 #include <libspectre/spectre.h>
 #endif
@@ -54,7 +55,9 @@ dvi_cairo_draw_glyph (DviContext  *dvi,
 
        glyph = &ch->grey;
 
 
        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;
 
        x = - glyph->x + x0 + cairo_device->xmargin;
        y = - glyph->y + y0 + cairo_device->ymargin;
@@ -244,19 +247,16 @@ dvi_cairo_free_image (void *ptr)
 static void
 dvi_cairo_put_pixel (void *image, int x, int y, Ulong color)
 {
 static void
 dvi_cairo_put_pixel (void *image, int x, int y, Ulong color)
 {
-       cairo_t         *cr;
        cairo_surface_t *surface;
        gint             rowstride;
        cairo_surface_t *surface;
        gint             rowstride;
-       guchar          *p;
+       guint32         *p;
 
        surface = (cairo_surface_t *) image;
 
        rowstride = cairo_image_surface_get_stride (surface);
 
        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
 }
 
 static void
@@ -319,7 +319,7 @@ mdvi_cairo_device_render (DviContext* dvi)
        gint             page_width;
        gint             page_height;
        cairo_surface_t *surface;
        gint             page_width;
        gint             page_height;
        cairo_surface_t *surface;
-       gchar           *pixels;
+       guchar          *pixels;
        gint             rowstride;
        static const cairo_user_data_key_t key;
 
        gint             rowstride;
        static const cairo_user_data_key_t key;
 
@@ -332,7 +332,7 @@ mdvi_cairo_device_render (DviContext* dvi)
        page_height = dvi->dvi_page_h * dvi->params.vconv + 2 * cairo_device->ymargin;
 
        rowstride = page_width * 4;
        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,
        memset (pixels, 0xff, page_height * rowstride);
 
        surface = cairo_image_surface_create_for_data (pixels,