Fix "Windows: dotted lines may be drawn solid when GUI is rescaled" (#1214)

This commit is contained in:
ManoloFLTK 2025-03-04 16:04:10 +01:00
parent 257435dca0
commit 880636eb12
5 changed files with 5 additions and 5 deletions

View File

@ -430,6 +430,7 @@ public:
inline int floor(int x) { return Fl_Scalable_Graphics_Driver::floor(x, scale()); }
protected:
int line_width_;
bool is_solid_;
virtual Fl_Region scale_clip(float f);
void unscale_clip(Fl_Region r);
void point(int x, int y) FL_OVERRIDE;

View File

@ -800,6 +800,7 @@ Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, Fl_Fontsize Size) {
Fl_Scalable_Graphics_Driver::Fl_Scalable_Graphics_Driver() : Fl_Graphics_Driver() {
line_width_ = 0;
fontsize_ = -1;
is_solid_ = true;
}
void Fl_Scalable_Graphics_Driver::rect(int x, int y, int w, int h)
@ -850,7 +851,7 @@ void Fl_Scalable_Graphics_Driver::xyline(int x, int y, int x1) {
int xx1 = (x < x1 ? x1 : x);
if (s != s_int && line_width_ <= s_int) {
int lwidth = this->floor((y+1)) - this->floor(y);
bool need_change_width = (lwidth != s_int);
bool need_change_width = (lwidth != s_int && is_solid_);
void *data = NULL;
if (need_change_width) data = change_pen_width(lwidth);
xyline_unscaled(this->floor(xx), this->floor(y) + int(lwidth/2.f), this->floor(xx1+1)-1);
@ -870,7 +871,7 @@ void Fl_Scalable_Graphics_Driver::yxline(int x, int y, int y1) {
int yy1 = (y < y1 ? y1 : y);
if (s != s_int && line_width_ <= s_int) {
int lwidth = (this->floor((x+1)) - this->floor(x));
bool need_change_width = (lwidth != s_int);
bool need_change_width = (lwidth != s_int && is_solid_);
void *data = NULL;
if (need_change_width) data = change_pen_width(lwidth);
yxline_unscaled(this->floor(x) + int(lwidth/2.f), this->floor(yy), this->floor(yy1+1) - 1);
@ -1050,6 +1051,7 @@ void Fl_Scalable_Graphics_Driver::draw_circle(int x0, int y0, int d, Fl_Color c)
void Fl_Scalable_Graphics_Driver::line_style(int style, int width, char* dashes) {
if (width == 0) line_width_ = int(scale() < 2 ? 0 : scale());
else line_width_ = int(width>0 ? width*scale() : -width*scale());
is_solid_ = ((style & 0xff) == FL_SOLID && (!dashes || !*dashes));
line_style_unscaled(style, line_width_, dashes);
}

View File

@ -60,7 +60,6 @@ protected:
uchar *mask_bitmap_;
uchar **mask_bitmap() FL_OVERRIDE {return &mask_bitmap_;}
POINT *long_point;
bool is_solid_;
int style_;
public:
Fl_GDI_Graphics_Driver();

View File

@ -96,7 +96,6 @@ Fl_GDI_Graphics_Driver::Fl_GDI_Graphics_Driver() {
long_point = NULL;
depth = -1;
origins = NULL;
is_solid_ = true;
style_ = FL_SOLID;
}

View File

@ -58,7 +58,6 @@ void Fl_GDI_Graphics_Driver::line_style_unscaled(int style, int width, char* das
DeleteObject(oldpen);
DeleteObject(fl_current_xmap->pen);
fl_current_xmap->pen = newpen;
is_solid_ = ((style & 0xff) == FL_SOLID && (!dashes || !*dashes));
style_ = style;
}