summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2021-10-27 21:05:28 +0200
committerAlbrecht Schlosser <albrechts.fltk@online.de>2021-10-27 21:05:28 +0200
commit4d88fb6fbc4e5a931ad2ae4d0488bfae27629899 (patch)
treed55153132a11acb8f6e04f3be1c7d3f11d14c3c4 /src
parent14f842708d79b3fbbe212325e4a63abe07a88fa7 (diff)
Fix focus box drawing on X11 (partial fix for issue #156)
This fixes focus box drawing on X11 for some broken graphics drivers with line width zero as discussed on issue #156 titled "Incorrect rendering on Alpine Linux". This title is not entirely correct. The issue has been observed on other Linux distros as well if the "modesetting" driver is in effect. This does not fix rectangle drawing (missing pixels) in general which is obviously caused by a similar or the same driver issue.
Diffstat (limited to 'src')
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx
index df29a5dad..a72fe9d8b 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx
@@ -208,16 +208,22 @@ void Fl_Xlib_Graphics_Driver::XDestroyRegion(Fl_Region r) {
// --- line and polygon drawing
-void Fl_Xlib_Graphics_Driver::focus_rect(int x, int y, int w, int h)
-{
+void Fl_Xlib_Graphics_Driver::focus_rect(int x, int y, int w, int h) {
w = this->floor(x + w) - this->floor(x);
h = this->floor(y + h) - this->floor(y);
x = this->floor(x) + floor(offset_x_);
y = this->floor(y) + floor(offset_y_);
if (!clip_rect(x, y, w, h)) {
- line_style(FL_DOT);
+ int lw_save = line_width_; // preserve current line_width
+ if (line_width_ == 0)
+ line_style(FL_DOT, 1);
+ else
+ line_style(FL_DOT);
XDrawRectangle(fl_display, fl_window, gc_, x, y, w, h);
- line_style(FL_SOLID);
+ if (lw_save == 0)
+ line_style(FL_SOLID, 0); // restore line type and width
+ else
+ line_style(FL_SOLID);
}
}