From 4904b590306c2d2858de8900f6a373cef9a75438 Mon Sep 17 00:00:00 2001 From: Richard Hult Date: Mon, 10 Jul 2006 09:54:21 +0000 Subject: [PATCH] Account for alignment when reading xbm data. (#346721, patch by Dave 2006-07-10 Richard Hult * gdk/quartz/gdkpixmap-quartz.c: (gdk_bitmap_create_from_data): Account for alignment when reading xbm data. (#346721, patch by Dave Vasilevsky) --- ChangeLog | 6 ++++++ ChangeLog.pre-2-10 | 6 ++++++ gdk/quartz/gdkpixmap-quartz.c | 18 ++++++++++-------- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2713f797f4..cdc5adce1d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-07-10 Richard Hult + + * gdk/quartz/gdkpixmap-quartz.c: (gdk_bitmap_create_from_data): + Account for alignment when reading xbm data. (#346721, patch + by Dave Vasilevsky) + 2006-07-09 Richard Hult * gdk/quartz/gdkgeometry-quartz.c: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 2713f797f4..cdc5adce1d 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +2006-07-10 Richard Hult + + * gdk/quartz/gdkpixmap-quartz.c: (gdk_bitmap_create_from_data): + Account for alignment when reading xbm data. (#346721, patch + by Dave Vasilevsky) + 2006-07-09 Richard Hult * gdk/quartz/gdkgeometry-quartz.c: diff --git a/gdk/quartz/gdkpixmap-quartz.c b/gdk/quartz/gdkpixmap-quartz.c index 825df810a0..addeb42f17 100644 --- a/gdk/quartz/gdkpixmap-quartz.c +++ b/gdk/quartz/gdkpixmap-quartz.c @@ -201,7 +201,7 @@ gdk_bitmap_create_from_data (GdkDrawable *window, { GdkPixmap *pixmap; GdkPixmapImplQuartz *impl; - int x, y; + int x, y, bpl; g_return_val_if_fail (data != NULL, NULL); g_return_val_if_fail ((width != 0) && (height != 0), NULL); @@ -212,19 +212,21 @@ gdk_bitmap_create_from_data (GdkDrawable *window, g_assert (CGImageGetBytesPerRow (impl->image) == width); + /* Bytes per line: Each line consumes an integer number of bytes, possibly + * ignoring any excess bits. */ + bpl = (width + 7) / 8; for (y = 0; y < height; y++) { - guchar *ptr = impl->data + y * width; - gint idx; - + guchar *dst = impl->data + y * width; + const gchar *src = data + (y * bpl); for (x = 0; x < width; x++) { - if ((data[(y * width + x) / 8] >> x % 8) & 1) - *ptr = 0xff; + if ((src[x / 8] >> x % 8) & 1) + *dst = 0xff; else - *ptr = 0; + *dst = 0; - ptr++; + dst++; } }