Browse Source

Remove FL_CFG_SYS_WIN32 preprocessor variable from fl_draw_pixmap.cxx

pull/194/head
ManoloFLTK 4 years ago
parent
commit
d51481f95e
  1. 2
      FL/Fl_Graphics_Driver.H
  2. 2
      src/Fl_Graphics_Driver.cxx
  3. 2
      src/drivers/GDI/Fl_GDI_Graphics_Driver.H
  4. 32
      src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx
  5. 43
      src/fl_draw_pixmap.cxx

2
FL/Fl_Graphics_Driver.H

@ -141,7 +141,7 @@ private: @@ -141,7 +141,7 @@ private:
virtual void draw_fixed(Fl_Bitmap *bm,int XP, int YP, int WP, int HP, int cx, int cy);
virtual void draw_fixed(Fl_RGB_Image *rgb,int XP, int YP, int WP, int HP, int cx, int cy);
// the default implementation of make_unused_color_() is most probably enough
virtual void make_unused_color_(unsigned char &r, unsigned char &g, unsigned char &b);
virtual void make_unused_color_(unsigned char &r, unsigned char &g, unsigned char &b, int color_count, void **data);
// some platforms may need to reimplement this
virtual void set_current_();
float scale_; // scale between FLTK and drawing coordinates: drawing = FLTK * scale_

2
src/Fl_Graphics_Driver.cxx

@ -413,7 +413,7 @@ void Fl_Graphics_Driver::draw_fixed(Fl_Bitmap *bm,int XP, int YP, int WP, int HP @@ -413,7 +413,7 @@ void Fl_Graphics_Driver::draw_fixed(Fl_Bitmap *bm,int XP, int YP, int WP, int HP
void Fl_Graphics_Driver::draw_fixed(Fl_RGB_Image *rgb,int XP, int YP, int WP, int HP, int cx, int cy) {}
void Fl_Graphics_Driver::make_unused_color_(unsigned char &r, unsigned char &g, unsigned char &b) {}
void Fl_Graphics_Driver::make_unused_color_(unsigned char &r, unsigned char &g, unsigned char &b, int color_count, void **data) {}
/** Support function for Fl_Pixmap drawing */
void Fl_Graphics_Driver::cache(Fl_Pixmap *img) { }

2
src/drivers/GDI/Fl_GDI_Graphics_Driver.H

@ -40,7 +40,7 @@ private: @@ -40,7 +40,7 @@ private:
void set_current_();
void draw_fixed(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
void draw_fixed(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
virtual void make_unused_color_(unsigned char &r, unsigned char &g, unsigned char &b);
virtual void make_unused_color_(unsigned char &r, unsigned char &g, unsigned char &b, int color_count, void **data);
protected:
void draw_fixed(Fl_RGB_Image *rgb, int XP, int YP, int WP, int HP, int cx, int cy);
void cache(Fl_RGB_Image *rgb);

32
src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx

@ -700,6 +700,38 @@ void Fl_GDI_Printer_Graphics_Driver::draw_pixmap(Fl_Pixmap *pxm, int XP, int YP, @@ -700,6 +700,38 @@ void Fl_GDI_Printer_Graphics_Driver::draw_pixmap(Fl_Pixmap *pxm, int XP, int YP,
}
}
// Makes an RGB triplet different from all the colors used in the pixmap
// and computes Fl_Graphics_Driver::need_pixmap_bg_color from this triplet
void Fl_GDI_Graphics_Driver::make_unused_color_(uchar &r, uchar &g, uchar &b, int color_count, void **data) {
typedef struct { uchar r; uchar g; uchar b; } UsedColor;
UsedColor *used_colors = *(UsedColor**)data;
int i;
r = 2; g = 3; b = 4;
while (1) {
for ( i=0; i<color_count; i++ )
if ( used_colors[i].r == r &&
used_colors[i].g == g &&
used_colors[i].b == b )
break;
if (i >= color_count) {
free((void*)used_colors);
*(UsedColor**)data = NULL;
need_pixmap_bg_color = RGB(r, g, b);
return;
}
if (r < 255) {
r++;
} else {
r = 0;
if (g < 255) {
g++;
} else {
g = 0;
b++;
}
}
}
}
void Fl_GDI_Graphics_Driver::cache(Fl_Pixmap *img) {
Fl_Image_Surface *surf = new Fl_Image_Surface(img->data_w(), img->data_h());

43
src/fl_draw_pixmap.cxx

@ -30,12 +30,8 @@ @@ -30,12 +30,8 @@
// The above comments were checked in as r2, and much has changed since then;
// transparency added, color cube not required, etc. -erco Oct 20 2013
#include "config_lib.h"
#include <FL/Fl.H>
#include "Fl_System_Driver.H"
#if defined(FL_CFG_SYS_WIN32)
#include "drivers/GDI/Fl_GDI_Graphics_Driver.H"
#endif
#include <FL/platform.H>
#include <FL/fl_draw.H>
#include <stdio.h>
@ -72,41 +68,6 @@ int fl_measure_pixmap(const char * const *cdata, int &w, int &h) { @@ -72,41 +68,6 @@ int fl_measure_pixmap(const char * const *cdata, int &w, int &h) {
return 1;
}
#if defined(FL_CFG_SYS_WIN32)
// Makes an RGB triplet different from all the colors used in the pixmap
// and compute Fl_Graphics_Driver::need_pixmap_bg_color from this triplet
void Fl_GDI_Graphics_Driver::make_unused_color_(uchar &r, uchar &g, uchar &b) {
int i;
r = 2; g = 3; b = 4;
while (1) {
for ( i=0; i<color_count; i++ )
if ( used_colors[i].r == r &&
used_colors[i].g == g &&
used_colors[i].b == b )
break;
if (i >= color_count) {
free((void*)used_colors); used_colors = NULL;
need_pixmap_bg_color = RGB(r, g, b);
return;
}
if (r < 255) {
r++;
} else {
r = 0;
if (g < 255) {
g++;
} else {
g = 0;
b++;
}
}
}
}
#endif // FL_CFG_SYS_WIN32
int fl_convert_pixmap(const char*const* cdata, uchar* out, Fl_Color bg) {
int w, h;
const uchar*const* data = (const uchar*const*)(cdata+1);
@ -194,10 +155,10 @@ int fl_convert_pixmap(const char*const* cdata, uchar* out, Fl_Color bg) { @@ -194,10 +155,10 @@ int fl_convert_pixmap(const char*const* cdata, uchar* out, Fl_Color bg) {
} // if ncolors
if (Fl_Graphics_Driver::need_pixmap_bg_color) {
if (transparent_c) {
fl_graphics_driver->make_unused_color_(transparent_c[0], transparent_c[1], transparent_c[2]);
fl_graphics_driver->make_unused_color_(transparent_c[0], transparent_c[1], transparent_c[2], color_count, (void**)&used_colors);
} else {
uchar r, g, b;
fl_graphics_driver->make_unused_color_(r, g, b);
fl_graphics_driver->make_unused_color_(r, g, b, color_count, (void**)&used_colors);
}
}

Loading…
Cancel
Save