summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES1
-rw-r--r--src/Fl_Image.cxx16
2 files changed, 14 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 55e29eb11..b2b425e4b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,6 @@
CHANGES IN FLTK 1.1.8
+ - Fixed image copy code (STR #1412)
- Fixed latin-to-roman text conversion (STR #1411)
- Fixed Cygwin timeout for "select" calls (STR #1151)
- Improved Mac OS X subwindow handling (STR #1402)
diff --git a/src/Fl_Image.cxx b/src/Fl_Image.cxx
index cd992e9fc..0b844255c 100644
--- a/src/Fl_Image.cxx
+++ b/src/Fl_Image.cxx
@@ -156,9 +156,19 @@ Fl_Image *Fl_RGB_Image::copy(int W, int H) {
if (array) {
// Make a copy of the image data and return a new Fl_RGB_Image...
new_array = new uchar[w() * h() * d()];
- memcpy(new_array, array, w() * h() * d());
-
- new_image = new Fl_RGB_Image(new_array, w(), h(), d(), ld());
+ if (ld()) {
+ const uchar *src = array;
+ uchar *dst = new_array;
+ int dy, dh = h(), wd = w()*d(), wdld = wd+ld();
+ for (dy=0; dy<dh; dy++) {
+ memcpy(dst, src, wd);
+ src += wdld;
+ dst += wd;
+ }
+ } else {
+ memcpy(new_array, array, w() * h() * d());
+ }
+ new_image = new Fl_RGB_Image(new_array, w(), h(), d());
new_image->alloc_array = 1;
return new_image;