From e698af035a8d9363ac6d212a8e986e1f4fdac969 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Mon, 20 Jun 2022 12:49:38 +0200 Subject: Fix issue #427 - 2nd part Fix Fl_Tiled_Image made from scaled source image. Fix Fl_Shared_Image::update() to allow scaled source image. Correct handling of default value (-1) of 3rd argument of 3-argument Fl_BMP_Image constructor. --- src/Fl_BMP_Image.cxx | 3 ++- src/Fl_Shared_Image.cxx | 6 ++++-- src/Fl_Tiled_Image.cxx | 8 ++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/Fl_BMP_Image.cxx b/src/Fl_BMP_Image.cxx index 8b326ede4..de444f99b 100644 --- a/src/Fl_BMP_Image.cxx +++ b/src/Fl_BMP_Image.cxx @@ -103,7 +103,8 @@ Fl_BMP_Image::Fl_BMP_Image(const char *imagename, const unsigned char *data, con : Fl_RGB_Image(0,0,0) { Fl_Image_Reader rdr; - if (rdr.open(imagename, data, length) == -1) { + int retval = (length < 0 ? rdr.open(imagename, data) : rdr.open(imagename, data, (size_t)length)); + if (retval == -1) { ld(ERR_FILE_ACCESS); } else { load_bmp_(rdr); diff --git a/src/Fl_Shared_Image.cxx b/src/Fl_Shared_Image.cxx index 91e093b6f..6c14b9c12 100644 --- a/src/Fl_Shared_Image.cxx +++ b/src/Fl_Shared_Image.cxx @@ -190,10 +190,12 @@ Fl_Shared_Image::add() { void Fl_Shared_Image::update() { if (image_) { - w(image_->w()); - h(image_->h()); + int W = w(), H = h(); + w(image_->data_w()); + h(image_->data_h()); d(image_->d()); data(image_->data(), image_->count()); + if (W && H) scale(W, H, 0, 1); } } diff --git a/src/Fl_Tiled_Image.cxx b/src/Fl_Tiled_Image.cxx index da1ed5531..2ec62e79a 100644 --- a/src/Fl_Tiled_Image.cxx +++ b/src/Fl_Tiled_Image.cxx @@ -92,7 +92,9 @@ void Fl_Tiled_Image::color_average(Fl_Color c, // I - Color to blend with float i) { // I - Blend fraction if (!alloc_image_) { - image_ = image_->copy(); + int W = image_->w(), H = image_->h(); + image_ = image_->copy(image_->data_w(), image_->data_h()); + image_->scale(W, H, 0, 1); alloc_image_ = 1; } @@ -107,7 +109,9 @@ Fl_Tiled_Image::color_average(Fl_Color c, // I - Color to blend with void Fl_Tiled_Image::desaturate() { if (!alloc_image_) { - image_ = image_->copy(); + int W = image_->w(), H = image_->h(); + image_ = image_->copy(image_->data_w(), image_->data_h()); + image_->scale(W, H, 0, 1); alloc_image_ = 1; } -- cgit v1.2.3