Remove platform-dependent code from Fl_PNG_Image.cxx
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11574 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
f9369a74ef
commit
c3f1877fd1
@ -145,6 +145,8 @@ public:
|
||||
virtual int preferences_need_protection_check() {return 0;}
|
||||
// implement to support Fl_Plugin_Manager::load()
|
||||
virtual void *dlopen(const char *filename) {return NULL;}
|
||||
// the default implementation is most probably enough
|
||||
virtual void png_extra_rgba_processing(unsigned char *array, int w, int h) {}
|
||||
};
|
||||
|
||||
#endif // FL_SYSTEM_DRIVER_H
|
||||
|
||||
@ -26,10 +26,11 @@
|
||||
// Include necessary header files...
|
||||
//
|
||||
|
||||
#include <config.h>
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_System_Driver.H>
|
||||
#include <FL/Fl_PNG_Image.H>
|
||||
#include <FL/Fl_Shared_Image.H>
|
||||
#include <config.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <FL/fl_utf8.h>
|
||||
@ -206,15 +207,7 @@ void Fl_PNG_Image::load_png_(const char *name_png, const unsigned char *buffer_p
|
||||
for (i = png_set_interlace_handling(pp); i > 0; i --)
|
||||
png_read_rows(pp, rows, NULL, h());
|
||||
|
||||
#ifdef WIN32
|
||||
// Some Windows graphics drivers don't honor transparency when RGB == white
|
||||
if (channels == 4) {
|
||||
// Convert RGB to 0 when alpha == 0...
|
||||
uchar *ptr = (uchar *)array;
|
||||
for (i = w() * h(); i > 0; i --, ptr += 4)
|
||||
if (!ptr[3]) ptr[0] = ptr[1] = ptr[2] = 0;
|
||||
}
|
||||
#endif // WIN32
|
||||
if (channels == 4) Fl::system_driver()->png_extra_rgba_processing((uchar*)array, w(), h());
|
||||
|
||||
// Free memory and return...
|
||||
delete[] rows;
|
||||
|
||||
@ -83,6 +83,7 @@ public:
|
||||
virtual char *preference_rootnode(Fl_Preferences *prefs, Fl_Preferences::Root root, const char *vendor,
|
||||
const char *application);
|
||||
virtual void *dlopen(const char *filename);
|
||||
virtual void png_extra_rgba_processing(unsigned char *array, int w, int h);
|
||||
};
|
||||
|
||||
#endif // FL_WINAPI_SYSTEM_DRIVER_H
|
||||
|
||||
@ -868,6 +868,14 @@ void *Fl_WinAPI_System_Driver::dlopen(const char *filename)
|
||||
return LoadLibrary(filename);
|
||||
}
|
||||
|
||||
void Fl_WinAPI_System_Driver::png_extra_rgba_processing(unsigned char *ptr, int w, int h)
|
||||
{
|
||||
// Some Windows graphics drivers don't honor transparency when RGB == white
|
||||
// Convert RGB to 0 when alpha == 0...
|
||||
for (int i = w * h; i > 0; i --, ptr += 4) {
|
||||
if (!ptr[3]) ptr[0] = ptr[1] = ptr[2] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
|
||||
Loading…
Reference in New Issue
Block a user