From d24a6b2633664959d0b0ab5fd1ab3aa140ab877f Mon Sep 17 00:00:00 2001
From: Albrecht Schlosser
Since the Fl_Image class does not support image + Since the Fl_Image class does not support image drawing by itself, calling the draw() method results in a box with an X in it being drawn instead. */ class FL_EXPORT Fl_Image { int w_, h_, d_, ld_, count_; const char * const *data_; + static Fl_RGB_Scaling RGB_scaling_; - // Forbid use of copy contructor and assign operator + // Forbid use of copy constructor and assign operator Fl_Image & operator=(const Fl_Image &); Fl_Image(const Fl_Image &); @@ -152,15 +161,12 @@ class FL_EXPORT Fl_Image { */ void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);} // platform dependent virtual void uncache(); -}; -/** \enum Fl_RGB_Scaling - The image-scaling algorithm to use. - */ + // set RGB image scaling method + static void RGB_scaling(Fl_RGB_Scaling); -enum Fl_RGB_Scaling { - FL_SCALING_NEAREST = 0, ///< default RGB image-scaling algorithm - FL_SCALING_BILINEAR ///< alternative, slower and more accurate RGB image-scaling algorithm + // get RGB image scaling method + static Fl_RGB_Scaling RGB_scaling(); }; /** @@ -168,9 +174,9 @@ enum Fl_RGB_Scaling { of full-color images with 1 to 4 channels of color information. Images with an even number of channels are assumed to contain alpha information, which is used to blend the image with the - contents of the screen.
- -Fl_RGB_Image is defined in + contents of the screen. + + Fl_RGB_Image is defined in <FL/Fl_Image.H>, however for compatibility reasons <FL/Fl_RGB_Image.H> should be included. */ @@ -179,7 +185,6 @@ class FL_EXPORT Fl_RGB_Image : public Fl_Image { friend class Fl_GDI_Graphics_Driver; friend class Fl_Xlib_Graphics_Driver; static size_t max_size_; - static Fl_RGB_Scaling scaling_; public: const uchar *array; @@ -240,14 +245,6 @@ public: \sa void Fl_RGB_Image::max_size(size_t) */ static size_t max_size() {return max_size_;} - - /** Sets the scaling method used for copy(int, int). - Applies to all RGB images, defaults to FL_SCALING_NEAREST. - */ - static void scaling(Fl_RGB_Scaling); - - /** Returns the currently used scaling method. */ - static Fl_RGB_Scaling scaling(); }; #endif // !Fl_Image_H diff --git a/examples/clipboard.cxx b/examples/clipboard.cxx index 6518ff308..f72eaabf5 100644 --- a/examples/clipboard.cxx +++ b/examples/clipboard.cxx @@ -162,6 +162,8 @@ int main(int argc, char **argv) clip_callback(1, tabs); // use clipboard content at start #endif Fl::add_clipboard_notify(clip_callback, tabs); // will update with new clipboard content immediately or at application activation + + Fl_Image::RGB_scaling(FL_RGB_SCALING_BILINEAR); // set bilinear image scaling method return Fl::run(); } diff --git a/src/Fl_Image.cxx b/src/Fl_Image.cxx index 71e117799..73eec41b8 100644 --- a/src/Fl_Image.cxx +++ b/src/Fl_Image.cxx @@ -3,7 +3,7 @@ // // Image drawing code for the Fast Light Tool Kit (FLTK). // -// Copyright 1998-2012 by Bill Spitzak and others. +// Copyright 1998-2014 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this @@ -34,6 +34,8 @@ void fl_restore_clip(); // from fl_rect.cxx // Base image class... // +Fl_RGB_Scaling Fl_Image::RGB_scaling_ = FL_RGB_SCALING_NEAREST; + /** The destructor is a virtual method that frees all memory used by the image. @@ -159,12 +161,23 @@ Fl_Image::measure(const Fl_Label *lo, // I - Label lh = img->h(); } +/** Sets the RGB image scaling method used for copy(int, int). + Applies to all RGB images, defaults to FL_RGB_SCALING_NEAREST. +*/ +void Fl_Image::RGB_scaling(Fl_RGB_Scaling method) { + RGB_scaling_ = method; +} + +/** Returns the currently used RGB image scaling method. */ +Fl_RGB_Scaling Fl_Image::RGB_scaling() { + return RGB_scaling_; +} + // // RGB image class... // size_t Fl_RGB_Image::max_size_ = ~((size_t)0); -Fl_RGB_Scaling Fl_RGB_Image::scaling_ = FL_SCALING_NEAREST; int fl_convert_pixmap(const char*const* cdata, uchar* out, Fl_Color bg); @@ -261,7 +274,7 @@ Fl_Image *Fl_RGB_Image::copy(int W, int H) { new_image = new Fl_RGB_Image(new_array, W, H, d()); new_image->alloc_array = 1; - if (scaling_ == FL_SCALING_NEAREST) { + if (Fl_Image::RGB_scaling() == FL_RGB_SCALING_NEAREST) { // Scale the image using a nearest-neighbor algorithm... for (dy = H, sy = 0, yerr = H, new_ptr = new_array; dy > 0; dy --) { for (dx = W, xerr = W, old_ptr = array + sy * line_d; dx > 0; dx --) { @@ -284,7 +297,7 @@ Fl_Image *Fl_RGB_Image::copy(int W, int H) { } } } else { - // Bilinear scaling + // Bilinear scaling (FL_RGB_SCALING_BILINEAR) const float xscale = (w() - 1) / (float) W; const float yscale = (h() - 1) / (float) H; for (dy = 0; dy < H; dy++) { @@ -679,14 +692,6 @@ void Fl_RGB_Image::label(Fl_Menu_Item* m) { m->label(_FL_IMAGE_LABEL, (const char*)this); } -void Fl_RGB_Image::scaling(Fl_RGB_Scaling method) { - scaling_ = method; -} - -Fl_RGB_Scaling Fl_RGB_Image::scaling() { - return scaling_; -} - // // End of "$Id$". // diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index 3f26f3342..fee2ed45a 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -3,7 +3,7 @@ // // MacOS-Cocoa specific code for the Fast Light Tool Kit (FLTK). // -// Copyright 1998-2013 by Bill Spitzak and others. +// Copyright 1998-2014 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this @@ -3857,10 +3857,10 @@ unsigned char *Fl_X::bitmap_from_window_rect(Fl_Window *win, int x, int y, int w unsigned char *data; if (ww > w) { // with a retina display Fl_RGB_Image *rgb = new Fl_RGB_Image([bitmap bitmapData], ww, hh, 4); - Fl_RGB_Scaling save_scaling =Fl_RGB_Image::scaling(); - Fl_RGB_Image::scaling(FL_SCALING_BILINEAR); + Fl_RGB_Scaling save_scaling = Fl_Image::RGB_scaling(); + Fl_Image::RGB_scaling(FL_RGB_SCALING_BILINEAR); Fl_RGB_Image *rgb2 = (Fl_RGB_Image*)rgb->copy(w, h); - Fl_RGB_Image::scaling(save_scaling); + Fl_Image::RGB_scaling(save_scaling); delete rgb; rgb2->alloc_array = 0; data = (uchar*)rgb2->array;