Fix for Windows and X11: Rounding issues with Fl_RGB_Image::draw() (#1120)
This commit is contained in:
parent
0d4c8c8534
commit
2337214e4e
@ -413,10 +413,7 @@ class FL_EXPORT Fl_Scalable_Graphics_Driver : public Fl_Graphics_Driver {
|
|||||||
Fl_Fontsize fontsize_; // scale-independent font size value
|
Fl_Fontsize fontsize_; // scale-independent font size value
|
||||||
public:
|
public:
|
||||||
Fl_Scalable_Graphics_Driver();
|
Fl_Scalable_Graphics_Driver();
|
||||||
// This function aims to compute accurately int(x * s) in
|
static int floor(int x, float s);
|
||||||
// presence of rounding errors existing with floating point numbers
|
|
||||||
// and that sometimes differ between 32 and 64 bits.
|
|
||||||
static inline int floor(int x, float s) { return int(x * s + 0.001f); }
|
|
||||||
inline int floor(int x) { return Fl_Scalable_Graphics_Driver::floor(x, scale()); }
|
inline int floor(int x) { return Fl_Scalable_Graphics_Driver::floor(x, scale()); }
|
||||||
protected:
|
protected:
|
||||||
int line_width_;
|
int line_width_;
|
||||||
|
@ -759,6 +759,15 @@ void Fl_Scalable_Graphics_Driver::rect(int x, int y, int w, int h)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This function aims to compute accurately int(x * s) in
|
||||||
|
// presence of rounding errors existing with floating point numbers
|
||||||
|
// and that sometimes differ between 32 and 64 bits.
|
||||||
|
int Fl_Scalable_Graphics_Driver::floor(int x, float s) {
|
||||||
|
if (s == 1) return x;
|
||||||
|
int retval = int(abs(x) * s + 0.001f);
|
||||||
|
return (x >= 0 ? retval : -retval);
|
||||||
|
}
|
||||||
|
|
||||||
void Fl_Scalable_Graphics_Driver::rectf(int x, int y, int w, int h)
|
void Fl_Scalable_Graphics_Driver::rectf(int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
if (w <= 0 || h <= 0) return;
|
if (w <= 0 || h <= 0) return;
|
||||||
|
Loading…
Reference in New Issue
Block a user