diff options
Diffstat (limited to 'src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx')
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx | 80 |
1 files changed, 43 insertions, 37 deletions
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx index 3b0a0cae2..464420086 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx @@ -164,107 +164,109 @@ void Fl_Xlib_Graphics_Driver::XDestroyRegion(Fl_Region r) { // --- line and polygon drawing with integer coordinates void Fl_Xlib_Graphics_Driver::point(int x, int y) { - XDrawPoint(fl_display, fl_window, gc_, clip_x(x), clip_x(y)); + XDrawPoint(fl_display, fl_window, gc_, clip_x(x+offset_x_), clip_x(y+offset_y_)); } void Fl_Xlib_Graphics_Driver::rect(int x, int y, int w, int h) { if (w<=0 || h<=0) return; + x+=offset_x_; y+=offset_y_; if (!clip_to_short(x, y, w, h, line_width_)) XDrawRectangle(fl_display, fl_window, gc_, x, y, w-1, h-1); } void Fl_Xlib_Graphics_Driver::rectf(int x, int y, int w, int h) { if (w<=0 || h<=0) return; + x+=offset_x_; y+=offset_y_; if (!clip_to_short(x, y, w, h, line_width_)) XFillRectangle(fl_display, fl_window, gc_, x, y, w, h); } void Fl_Xlib_Graphics_Driver::line(int x, int y, int x1, int y1) { - XDrawLine(fl_display, fl_window, gc_, x, y, x1, y1); + XDrawLine(fl_display, fl_window, gc_, x+offset_x_, y+offset_y_, x1+offset_x_, y1+offset_y_); } void Fl_Xlib_Graphics_Driver::line(int x, int y, int x1, int y1, int x2, int y2) { XPoint p[3]; - p[0].x = x; p[0].y = y; - p[1].x = x1; p[1].y = y1; - p[2].x = x2; p[2].y = y2; + p[0].x = x+offset_x_; p[0].y = y+offset_y_; + p[1].x = x1+offset_x_; p[1].y = y1+offset_y_; + p[2].x = x2+offset_x_; p[2].y = y2+offset_y_; XDrawLines(fl_display, fl_window, gc_, p, 3, 0); } void Fl_Xlib_Graphics_Driver::xyline(int x, int y, int x1) { - XDrawLine(fl_display, fl_window, gc_, clip_x(x), clip_x(y), clip_x(x1), clip_x(y)); + XDrawLine(fl_display, fl_window, gc_, clip_x(x+offset_x_), clip_x(y+offset_y_), clip_x(x1+offset_x_), clip_x(y+offset_y_)); } void Fl_Xlib_Graphics_Driver::xyline(int x, int y, int x1, int y2) { XPoint p[3]; - p[0].x = clip_x(x); p[0].y = p[1].y = clip_x(y); - p[1].x = p[2].x = clip_x(x1); p[2].y = clip_x(y2); + p[0].x = clip_x(x+offset_x_); p[0].y = p[1].y = clip_x(y+offset_y_); + p[1].x = p[2].x = clip_x(x1+offset_x_); p[2].y = clip_x(y2+offset_y_); XDrawLines(fl_display, fl_window, gc_, p, 3, 0); } void Fl_Xlib_Graphics_Driver::xyline(int x, int y, int x1, int y2, int x3) { XPoint p[4]; - p[0].x = clip_x(x); p[0].y = p[1].y = clip_x(y); - p[1].x = p[2].x = clip_x(x1); p[2].y = p[3].y = clip_x(y2); - p[3].x = clip_x(x3); + p[0].x = clip_x(x+offset_x_); p[0].y = p[1].y = clip_x(y+offset_y_); + p[1].x = p[2].x = clip_x(x1+offset_x_); p[2].y = p[3].y = clip_x(y2+offset_y_); + p[3].x = clip_x(x3+offset_x_); XDrawLines(fl_display, fl_window, gc_, p, 4, 0); } void Fl_Xlib_Graphics_Driver::yxline(int x, int y, int y1) { - XDrawLine(fl_display, fl_window, gc_, clip_x(x), clip_x(y), clip_x(x), clip_x(y1)); + XDrawLine(fl_display, fl_window, gc_, clip_x(x+offset_x_), clip_x(y+offset_y_), clip_x(x+offset_x_), clip_x(y1+offset_y_)); } void Fl_Xlib_Graphics_Driver::yxline(int x, int y, int y1, int x2) { XPoint p[3]; - p[0].x = p[1].x = clip_x(x); p[0].y = clip_x(y); - p[1].y = p[2].y = clip_x(y1); p[2].x = clip_x(x2); + p[0].x = p[1].x = clip_x(x+offset_x_); p[0].y = clip_x(y+offset_y_); + p[1].y = p[2].y = clip_x(y1+offset_y_); p[2].x = clip_x(x2+offset_x_); XDrawLines(fl_display, fl_window, gc_, p, 3, 0); } void Fl_Xlib_Graphics_Driver::yxline(int x, int y, int y1, int x2, int y3) { XPoint p[4]; - p[0].x = p[1].x = clip_x(x); p[0].y = clip_x(y); - p[1].y = p[2].y = clip_x(y1); p[2].x = p[3].x = clip_x(x2); - p[3].y = clip_x(y3); + p[0].x = p[1].x = clip_x(x+offset_x_); p[0].y = clip_x(y+offset_y_); + p[1].y = p[2].y = clip_x(y1+offset_y_); p[2].x = p[3].x = clip_x(x2+offset_x_); + p[3].y = clip_x(y3+offset_y_); XDrawLines(fl_display, fl_window, gc_, p, 4, 0); } void Fl_Xlib_Graphics_Driver::loop(int x, int y, int x1, int y1, int x2, int y2) { XPoint p[4]; - p[0].x = x; p[0].y = y; - p[1].x = x1; p[1].y = y1; - p[2].x = x2; p[2].y = y2; - p[3].x = x; p[3].y = y; + p[0].x = x+offset_x_; p[0].y = y+offset_y_; + p[1].x = x1+offset_x_; p[1].y = y1+offset_y_; + p[2].x = x2+offset_x_; p[2].y = y2+offset_y_; + p[3].x = x+offset_x_; p[3].y = y+offset_y_; XDrawLines(fl_display, fl_window, gc_, p, 4, 0); } void Fl_Xlib_Graphics_Driver::loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) { XPoint p[5]; - p[0].x = x; p[0].y = y; - p[1].x = x1; p[1].y = y1; - p[2].x = x2; p[2].y = y2; - p[3].x = x3; p[3].y = y3; - p[4].x = x; p[4].y = y; + p[0].x = x+offset_x_; p[0].y = y+offset_y_; + p[1].x = x1+offset_x_; p[1].y = y1+offset_y_; + p[2].x = x2+offset_x_; p[2].y = y2+offset_y_; + p[3].x = x3+offset_x_; p[3].y = y3+offset_y_; + p[4].x = x+offset_x_; p[4].y = y+offset_y_; XDrawLines(fl_display, fl_window, gc_, p, 5, 0); } void Fl_Xlib_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, int y2) { XPoint p[4]; - p[0].x = x; p[0].y = y; - p[1].x = x1; p[1].y = y1; - p[2].x = x2; p[2].y = y2; - p[3].x = x; p[3].y = y; + p[0].x = x+offset_x_; p[0].y = y+offset_y_; + p[1].x = x1+offset_x_; p[1].y = y1+offset_y_; + p[2].x = x2+offset_x_; p[2].y = y2+offset_y_; + p[3].x = x+offset_x_; p[3].y = y+offset_y_; XFillPolygon(fl_display, fl_window, gc_, p, 3, Convex, 0); XDrawLines(fl_display, fl_window, gc_, p, 4, 0); } void Fl_Xlib_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) { XPoint p[5]; - p[0].x = x; p[0].y = y; - p[1].x = x1; p[1].y = y1; - p[2].x = x2; p[2].y = y2; - p[3].x = x3; p[3].y = y3; - p[4].x = x; p[4].y = y; + p[0].x = x+offset_x_; p[0].y = y+offset_y_; + p[1].x = x1+offset_x_; p[1].y = y1+offset_y_; + p[2].x = x2+offset_x_; p[2].y = y2+offset_y_; + p[3].x = x3+offset_x_; p[3].y = y3+offset_y_; + p[4].x = x+offset_x_; p[4].y = y+offset_y_; XFillPolygon(fl_display, fl_window, gc_, p, 4, Convex, 0); XDrawLines(fl_display, fl_window, gc_, p, 5, 0); } @@ -274,7 +276,7 @@ void Fl_Xlib_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, int void Fl_Xlib_Graphics_Driver::push_clip(int x, int y, int w, int h) { Fl_Region r; if (w > 0 && h > 0) { - r = XRectangleRegion(x,y,w,h); + r = XRectangleRegion(x+offset_x_,y+offset_y_,w,h); Fl_Region current = rstack[rstackptr]; if (current) { Fl_Region temp = XCreateRegion(); @@ -292,6 +294,8 @@ void Fl_Xlib_Graphics_Driver::push_clip(int x, int y, int w, int h) { int Fl_Xlib_Graphics_Driver::clip_box(int x, int y, int w, int h, int& X, int& Y, int& W, int& H){ X = x; Y = y; W = w; H = h; + x += offset_x_; + y += offset_y_; Fl_Region r = rstack[rstackptr]; if (!r) return 0; switch (XRectInRegion(r, x, y, w, h)) { @@ -308,13 +312,15 @@ int Fl_Xlib_Graphics_Driver::clip_box(int x, int y, int w, int h, int& X, int& Y XIntersectRegion(r, rr, temp); XRectangle rect; XClipBox(temp, &rect); - X = rect.x; Y = rect.y; W = rect.width; H = rect.height; + X = rect.x - offset_x_; Y = rect.y - offset_y_; W = rect.width; H = rect.height; XDestroyRegion(temp); XDestroyRegion(rr); return 1; } int Fl_Xlib_Graphics_Driver::not_clipped(int x, int y, int w, int h) { + x += offset_x_; + y += offset_y_; if (x+w <= 0 || y+h <= 0) return 0; Fl_Region r = rstack[rstackptr]; if (!r) return 1; |
