diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2018-03-13 22:11:17 +0000 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2018-03-13 22:11:17 +0000 |
| commit | c023f26fb0fd5107d520c2170c975d27ab7260f9 (patch) | |
| tree | 5b2c44e9627df1406ca815f93a9d02f2461d4d6e /src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H | |
| parent | ac04494e913d6091704ea0fcdfc1a164c3c176cb (diff) | |
Improve and simplify X line and rect 16-bit clipping.
Back to 16-bit coordinate limit clipping (actually +/- (2**15 - 8).
The clipping range is now constant, symmetrical, and stored in the
driver object.
Also fixed a bug in Liang-Barsky line clipping algorithm.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12744 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H')
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H index 0870ebb2f..66b270b05 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H @@ -59,8 +59,7 @@ private: int stack_x_[20], stack_y_[20]; // translation stack allowing cumulative translations int line_delta_; virtual void set_current_(); -protected: - int xmin, ymin, xmax, ymax; // ranges of valid x/y coordinates, see set_clip_range() + int clip_max_; // +/- x/y coordinate limit (16-bit coordinate space) protected: virtual void draw_unscaled(Fl_Pixmap *pxm, float s, int XP, int YP, int WP, int HP, int cx, int cy); virtual void draw_unscaled(Fl_Bitmap *pxm, float s, int XP, int YP, int WP, int HP, int cx, int cy); @@ -155,9 +154,12 @@ protected: // --- clipped drawing (after scaling, with real screen coordinates) // --- currently specific to Fl_Xlib_Graphics_Driver (16-bit coordinate clipping) - // clip one coordinate (x or y) --- correct axis (x/y) is important ! - virtual int clip_x(int x); - virtual int clip_y(int y); + // clipping limits + virtual int clip_max() { return clip_max_; } + virtual int clip_min() { return -clip_max_; } + + // clip one coordinate (x or y) + virtual int clip_xy(int x); // clip one line virtual int clip_line(int &x1, int &y1, int &x2, int &y2); @@ -168,9 +170,6 @@ protected: // draw a line after clipping (if visible) virtual void draw_clipped_line(int x1, int y1, int x2, int y2); - // set_clip_range() - set valid coordinate range (16-bit or current window) - virtual void set_clip_range(); - // --- clipping void push_clip(int x, int y, int w, int h); int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H); |
