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.
This commit is contained in:
ManoloFLTK 2022-06-20 12:49:38 +02:00
parent 02870242ee
commit e698af035a
3 changed files with 12 additions and 5 deletions

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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;
}