Remove duplicated code between derived classes of Fl_Graphics_Driver - cont'd.

This commit is contained in:
ManoloFLTK
2021-03-01 15:47:23 +01:00
parent 0623a8d4b9
commit b771ee53b9
8 changed files with 24 additions and 69 deletions
+1
View File
@@ -311,6 +311,7 @@ public:
virtual void end_points();
virtual void end_line();
virtual void end_loop();
virtual void fixloop();
virtual void end_polygon();
virtual void end_complex_polygon();
virtual void gap();
+22 -3
View File
@@ -496,7 +496,10 @@ int Fl_Graphics_Driver::clip_box(int x, int y, int w, int h, int &X, int &Y, int
int Fl_Graphics_Driver::not_clipped(int x, int y, int w, int h) {return 1;}
/** see fl_begin_complex_polygon() */
void Fl_Graphics_Driver::begin_complex_polygon() {}
void Fl_Graphics_Driver::begin_complex_polygon() {
begin_polygon();
gap_ = 0;
}
/** see fl_transformed_vertex() */
void Fl_Graphics_Driver::transformed_vertex(double xf, double yf) {
@@ -514,8 +517,16 @@ void Fl_Graphics_Driver::end_points() {}
/** see fl_end_line() */
void Fl_Graphics_Driver::end_line() {}
void Fl_Graphics_Driver::fixloop() { // remove equal points from closed path
while (n>2 && p[n-1].x == p[0].x && p[n-1].y == p[0].y) n--;
}
/** see fl_end_loop() */
void Fl_Graphics_Driver::end_loop() {}
void Fl_Graphics_Driver::end_loop() {
fixloop();
if (n>2) transformed_vertex((float)p[0].x, (float)p[0].y);
end_line();
}
/** see fl_end_polygon() */
void Fl_Graphics_Driver::end_polygon() {}
@@ -524,7 +535,15 @@ void Fl_Graphics_Driver::end_polygon() {}
void Fl_Graphics_Driver::end_complex_polygon() {}
/** see fl_gap() */
void Fl_Graphics_Driver::gap() {}
void Fl_Graphics_Driver::gap() {
while (n>gap_+2 && p[n-1].x == p[gap_].x && p[n-1].y == p[gap_].y) n--;
if (n > gap_+2) {
transformed_vertex((float)p[gap_].x, (float)p[gap_].y);
gap_ = n;
} else {
n = gap_;
}
}
/** see fl_circle() */
void Fl_Graphics_Driver::circle(double x, double y, double r) {}
@@ -59,8 +59,7 @@ void Fl_GDI_Graphics_Driver::end_polygon() {
}
void Fl_GDI_Graphics_Driver::begin_complex_polygon() {
begin_polygon();
gap_ = 0;
Fl_Graphics_Driver::begin_complex_polygon();
numcount = 0;
}
@@ -87,7 +87,6 @@ public:
void XDestroyRegion(Fl_Region r);
void high_resolution(bool b) { high_resolution_ = b; }
protected:
void fixloop();
void point(int x, int y);
void rect(int x, int y, int w, int h);
void focus_rect(int x, int y, int w, int h);
@@ -109,13 +108,10 @@ protected:
int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
int not_clipped(int x, int y, int w, int h);
void restore_clip();
void begin_complex_polygon();
void end_points();
void end_line();
void end_loop();
void end_polygon();
void end_complex_polygon();
void gap();
void circle(double x, double y, double r);
void arc(int x, int y, int w, int h, double a1, double a2);
void pie(int x, int y, int w, int h, double a1, double a2);
@@ -51,12 +51,6 @@ void Fl_Quartz_Graphics_Driver::end_line() {
CGContextSetShouldAntialias(gc_, false);
}
void Fl_Quartz_Graphics_Driver::end_loop() {
fixloop();
if (n>2) transformed_vertex((float)p[0].x, (float)p[0].y);
end_line();
}
void Fl_Quartz_Graphics_Driver::end_polygon() {
fixloop();
if (n < 3) {
@@ -73,21 +67,6 @@ void Fl_Quartz_Graphics_Driver::end_polygon() {
CGContextSetShouldAntialias(gc_, false);
}
void Fl_Quartz_Graphics_Driver::begin_complex_polygon() {
begin_polygon();
gap_ = 0;
}
void Fl_Quartz_Graphics_Driver::gap() {
while (n>gap_+2 && p[n-1].x == p[gap_].x && p[n-1].y == p[gap_].y) n--;
if (n > gap_+2) {
transformed_vertex((float)p[gap_].x, (float)p[gap_].y);
gap_ = n;
} else {
n = gap_;
}
}
void Fl_Quartz_Graphics_Driver::end_complex_polygon() {
gap();
if (n < 3) {
@@ -121,7 +100,3 @@ void Fl_Quartz_Graphics_Driver::circle(double x, double y,double r) {
(what == POLYGON ? CGContextFillPath : CGContextStrokePath)(gc_);
CGContextSetShouldAntialias(gc_, false);
}
void Fl_Quartz_Graphics_Driver::fixloop() { // remove equal points from closed path
while (n>2 && p[n-1].x == p[0].x && p[n-1].y == p[0].y) n--;
}
-29
View File
@@ -112,11 +112,7 @@ protected:
void point(int x, int y);
void end_points();
void end_line();
void fixloop();
void end_loop();
void end_polygon();
void begin_complex_polygon();
void gap();
void end_complex_polygon();
void circle(double x, double y,double r);
void arc(int x,int y,int w,int h,double a1,double a2);
@@ -876,16 +872,6 @@ void Fl_SVG_Graphics_Driver::end_line() {
red_, green_, blue_, width_, dasharray_, linecap_, linejoin_);
}
void Fl_SVG_Graphics_Driver::fixloop() { // remove equal points from closed path
while (n>2 && p[n-1].x == p[0].x && p[n-1].y == p[0].y) n--;
}
void Fl_SVG_Graphics_Driver::end_loop() {
fixloop();
if (n>2) transformed_vertex((float)p[0].x, (float)p[0].y);
end_line();
}
void Fl_SVG_Graphics_Driver::end_polygon() {
fixloop();
if (n < 3) {
@@ -916,21 +902,6 @@ void Fl_SVG_Graphics_Driver::circle(double x, double y, double r) {
fprintf(out_, "=\"rgb(%u,%u,%u)\" />\n", red_, green_, blue_);
}
void Fl_SVG_Graphics_Driver::begin_complex_polygon() {
begin_polygon();
gap_ = 0;
}
void Fl_SVG_Graphics_Driver::gap() {
while (n>gap_+2 && p[n-1].x == p[gap_].x && p[n-1].y == p[gap_].y) n--;
if (n > gap_+2) {
transformed_vertex((float)p[gap_].x, (float)p[gap_].y);
gap_ = n;
} else {
n = gap_;
}
}
void Fl_SVG_Graphics_Driver::end_complex_polygon() {
gap();
if (n < 3) {
@@ -187,7 +187,6 @@ protected:
int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
int not_clipped(int x, int y, int w, int h);
void restore_clip();
void begin_complex_polygon();
void end_points();
void end_line();
void end_loop();
@@ -57,11 +57,6 @@ void Fl_Xlib_Graphics_Driver::end_polygon() {
if (n>2) XFillPolygon(fl_display, fl_window, gc_, (XPoint*)p, n, Convex, 0);
}
void Fl_Xlib_Graphics_Driver::begin_complex_polygon() {
begin_polygon();
gap_ = 0;
}
void Fl_Xlib_Graphics_Driver::gap() {
while (n>gap_+2 && p[n-1].x == p[gap_].x && p[n-1].y == p[gap_].y) n--;
if (n > gap_+2) {