]> www.fi.muni.cz Git - evince.git/blobdiff - backend/dvi/mdvi-lib/bitmap.c
dvi: Add image_done method to DviDevice to notify that the image is finished
[evince.git] / backend / dvi / mdvi-lib / bitmap.c
index 9014dba6000d821cf7e3f4ca42061fa76c19cdcf..6edec1dfea2036bb0d8f78800d7a5aad40ab3285 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
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 /* Bitmap manipulation routines */
 
+#include <config.h>
 #include <stdlib.h>
 
 #include "mdvi.h"
@@ -124,7 +125,7 @@ static Uchar bit_swap[] = {
  * hopelessly slow.
  */
 
-BITMAP *bitmap_convert_lsb8(Uchar *bits, int w, int h)
+BITMAP *bitmap_convert_lsb8(Uchar *bits, int w, int h, int stride)
 {
        BITMAP  *bm;
        int     i;
@@ -146,12 +147,13 @@ BITMAP    *bitmap_convert_lsb8(Uchar *bits, int w, int h)
        for(i = 0; i < h; i++) {
 #ifdef WORD_LITTLE_ENDIAN
                memcpy(unit, curr, bytes);
-               curr += bytes;
+               curr += stride;
 #else
                int     j;
                
                for(j = 0; j < bytes; curr++, j++)
                        unit[j] = bit_swap[*curr];
+               cur += stride - bytes;
 #endif
                memzero(unit + bytes, bm->stride - bytes);
                unit  += bm->stride;
@@ -161,7 +163,7 @@ BITMAP      *bitmap_convert_lsb8(Uchar *bits, int w, int h)
        return bm;
 }
 
-BITMAP *bitmap_convert_msb8(Uchar *data, int w, int h)
+BITMAP *bitmap_convert_msb8(Uchar *data, int w, int h, int stride)
 {
        BITMAP  *bm;
        Uchar   *unit;
@@ -179,9 +181,10 @@ BITMAP     *bitmap_convert_msb8(Uchar *data, int w, int h)
                
                for(j = 0; j < bytes; curr++, j++)
                        unit[j] = bit_swap[*curr];
+               curr += stride - bytes;
 #else
                memcpy(unit, curr, bytes);
-               curr += bytes;
+               curr += stride;
 #endif
                memzero(unit + bytes, bm->stride - bytes);
                unit += bm->stride;
@@ -1025,6 +1028,8 @@ void      mdvi_shrink_glyph_grey(DviContext *dvi, DviFont *font,
                for(x = 0; x < w; x++)
                        dev->put_pixel(image, x, y, pixels[0]);
        }
+
+        dev->image_done(image);
        DEBUG((DBG_BITMAPS, "shrink_glyph_grey: (%dw,%dh,%dx,%dy) -> (%dw,%dh,%dx,%dy)\n",
                glyph->w, glyph->h, glyph->x, glyph->y,
                dest->w, dest->h, dest->x, dest->y));