diff --git a/src/Fl_Cairo_Graphics_Driver.cxx b/src/Fl_Cairo_Graphics_Driver.cxx index ee78948..d5bef4d 100644 --- a/src/Fl_Cairo_Graphics_Driver.cxx +++ b/src/Fl_Cairo_Graphics_Driver.cxx @@ -862,8 +862,8 @@ void Fl_Cairo_Graphics_Driver::yxline ( int x, int y, int y1, int x2, int y3 ) static int start(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int w, int h, int &cx, int &cy, int &X, int &Y, int &W, int &H) { - // account for current clip region (faster on Irix): fl_clip_box(XP,YP,WP,HP,X,Y,W,H); + cx += X-XP; cy += Y-YP; // clip the box down to the size of image, quit if empty: if (cx < 0) {W += cx; X -= cx; cx = 0;} @@ -872,6 +872,7 @@ static int start(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int w, int h if (cy < 0) {H += cy; Y -= cy; cy = 0;} if (cy+H > h) H = h-cy; if (H <= 0) return 1; + return 0; } @@ -911,13 +912,17 @@ Fl_Cairo_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP case 3: fmt = CAIRO_FORMAT_RGB24; break; + case 1: + fmt = CAIRO_FORMAT_A8; + break; } - cairo_save( cr ); + /* cairo_save( cr ); */ - cairo_reset_clip( cr ); + /* cairo_reset_clip( cr ); */ - cairo_surface_t *image = cairo_image_surface_create_for_data( (unsigned char *)img->array, fmt, img->w(), img->h( ), cairo_format_stride_for_width( fmt, img->w() ) ); + cairo_surface_t *image = cairo_image_surface_create_for_data( (unsigned char *)img->array, fmt, img->w(), img->h( ), + cairo_format_stride_for_width( fmt, img->w() ) ); /* cairo_surface_t *image = cairo_image_surface_create_for_data( (unsigned char *)img->array, fmt, img->w(), img->h(), img->ld() ); */ @@ -928,7 +933,6 @@ Fl_Cairo_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP /* cairo_matrix_scale( &matr, */ - cairo_set_source_surface( cr, image, X - cx, Y - cy ); cairo_rectangle( cr, X, Y, W, H ); @@ -937,7 +941,7 @@ Fl_Cairo_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP cairo_surface_destroy( image ); - cairo_restore( cr ); + /* cairo_restore( cr ); */ } diff --git a/src/Fl_JPEG_Image.cxx b/src/Fl_JPEG_Image.cxx index 531438e..38ad20b 100644 --- a/src/Fl_JPEG_Image.cxx +++ b/src/Fl_JPEG_Image.cxx @@ -41,7 +41,7 @@ #include #include #include - +#include // Some releases of the Cygwin JPEG libraries don't have a correctly // updated header file for the INT32 data type; the following define @@ -107,7 +107,8 @@ Fl_JPEG_Image::Fl_JPEG_Image(const char *filename) // I - File to load FILE *fp; // File pointer jpeg_decompress_struct dinfo; // Decompressor info fl_jpeg_error_mgr jerr; // Error handler info - JSAMPROW row; // Sample row pointer +// JSAMPROW row; // Sample row pointer + uint32_t *row; // the following variables are pointers allocating some private space that // is not reset by 'setjmp()' @@ -175,18 +176,31 @@ Fl_JPEG_Image::Fl_JPEG_Image(const char *filename) // I - File to load h(dinfo.output_height); d(dinfo.output_components); - array = new uchar[w() * h() * d()]; + uchar *line = new uchar[ w() * d() ]; + + array = new uchar[w() * h() * ( d() + 1 )]; alloc_array = 1; jpeg_start_decompress(&dinfo); while (dinfo.output_scanline < dinfo.output_height) { - row = (JSAMPROW)(array + - dinfo.output_scanline * dinfo.output_width * - dinfo.output_components); - jpeg_read_scanlines(&dinfo, &row, (JDIMENSION)1); + row = (uint32_t*) + (array + dinfo.output_scanline * dinfo.output_width * ( dinfo.output_components + 1 )); + + jpeg_read_scanlines(&dinfo, &line, (JDIMENSION)1); + + for ( int i = 0, j = 0; i < w() * d(); i += 3, j++ ) + { + row[ j ] = ( line[ i ] << 16 ) | + ( line[ i + 1 ] << 8 ) | + ( line[ i + 2 ] ); + } } - + + d(4); + + delete[] line; + jpeg_finish_decompress(&dinfo); jpeg_destroy_decompress(&dinfo); diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx index 66317d1..f358f9e 100644 --- a/src/Fl_x.cxx +++ b/src/Fl_x.cxx @@ -2010,12 +2010,10 @@ void Fl_Window::show() { if (Fl::scheme_bg_) { // labeltype(FL_NORMAL_LABEL); align(FL_ALIGN_IMAGE_BACKDROP); - } else { - labeltype(FL_NO_LABEL); } - - + labeltype(FL_NO_LABEL); + Fl_Tooltip::exit(this); if (!shown()) { fl_open_display(); diff --git a/src/fl_boxtype.cxx b/src/fl_boxtype.cxx index eb94fdc..6684652 100644 --- a/src/fl_boxtype.cxx +++ b/src/fl_boxtype.cxx @@ -428,7 +428,11 @@ void Fl_Widget::draw_backdrop() const { img = deimage(); if (img) { - ((Fl_Image*)img)->draw(x_+(w_-img->w())/2, y_+(h_-img->h())/2); +// ((Fl_Image*)img)->draw(x_+(w_-img->w())/2, y_+(h_-img->h())/2); + if ( type() < FL_WINDOW ) + ((Fl_Image*)img)->draw(x_+(w_-img->w())/2, y_+(h_-img->h())/2); + else + ((Fl_Image*)img)->draw(0+(w_-img->w())/2, 0+(h_-img->h())/2); } } }