summaryrefslogtreecommitdiff
path: root/src/drivers/Android
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/Android')
-rw-r--r--src/drivers/Android/Fl_Android_Graphics_Driver.H4
-rw-r--r--src/drivers/Android/Fl_Android_Graphics_Driver.cxx110
2 files changed, 54 insertions, 60 deletions
diff --git a/src/drivers/Android/Fl_Android_Graphics_Driver.H b/src/drivers/Android/Fl_Android_Graphics_Driver.H
index 95d97880a..4cb20bf11 100644
--- a/src/drivers/Android/Fl_Android_Graphics_Driver.H
+++ b/src/drivers/Android/Fl_Android_Graphics_Driver.H
@@ -95,8 +95,8 @@ public:
virtual void gap() override;
virtual void transformed_vertex0(float x, float y) override;
- virtual void arc_unscaled(float x, float y, float w, float h, double a1, double a2);
- virtual void pie_unscaled(float x, float y, float w, float h, double a1, double a2);
+ virtual void arc_unscaled(float x, float y, float w, float h, double a1, double a2) override;
+ virtual void pie_unscaled(float x, float y, float w, float h, double a1, double a2) override;
// --- clipping
virtual void push_clip(int x, int y, int w, int h) override;
diff --git a/src/drivers/Android/Fl_Android_Graphics_Driver.cxx b/src/drivers/Android/Fl_Android_Graphics_Driver.cxx
index fbd85fc34..26a3aa5bd 100644
--- a/src/drivers/Android/Fl_Android_Graphics_Driver.cxx
+++ b/src/drivers/Android/Fl_Android_Graphics_Driver.cxx
@@ -414,8 +414,8 @@ void Fl_Android_Graphics_Driver::end_polygon(int begin, int end)
nodes = 0;
j = begin;
for (i = begin+1; i < end; i++) {
- if ( pVertex[i].pY < pixelY && pVertex[j].pY >= pixelY
- || pVertex[j].pY < pixelY && pVertex[i].pY >= pixelY)
+ if ( (pVertex[i].pY < pixelY && pVertex[j].pY >= pixelY)
+ || (pVertex[j].pY < pixelY && pVertex[i].pY >= pixelY))
{
float dy = pVertex[j].pY - pVertex[i].pY;
if (fabsf(dy)>.0001) {
@@ -508,8 +508,8 @@ void Fl_Android_Graphics_Driver::end_complex_polygon()
j = i-1;
if (pVertex[j].pIsGap)
continue;
- if ( pVertex[i].pY < pixelY && pVertex[j].pY >= pixelY
- || pVertex[j].pY < pixelY && pVertex[i].pY >= pixelY)
+ if ( (pVertex[i].pY < pixelY && pVertex[j].pY >= pixelY)
+ || (pVertex[j].pY < pixelY && pVertex[i].pY >= pixelY) )
{
float dy = pVertex[j].pY - pVertex[i].pY;
if (fabsf(dy)>.0001) {
@@ -573,36 +573,6 @@ void Fl_Android_Graphics_Driver::transformed_vertex0(float x, float y)
}
-//void Fl_Pico_Graphics_Driver::circle(double x, double y, double r)
-//{
-// begin_loop();
-// double X = r;
-// double Y = 0;
-// fl_vertex(x+X,y+Y);
-//
-// double rx = fabs(transform_dx(r, r));
-// double ry = fabs(transform_dy(r, r));
-//
-// double circ = M_PI*0.5*(rx+ry);
-// int segs = circ * 360 / 1000; // every line is about three pixels long
-// if (segs<16) segs = 16;
-//
-// double A = 2*M_PI;
-// int i = segs;
-//
-// if (i) {
-// double epsilon = A/i; // Arc length for equal-size steps
-// double cos_e = cos(epsilon); // Rotation coefficients
-// double sin_e = sin(epsilon);
-// do {
-// double Xnew = cos_e*X + sin_e*Y;
-// Y = -sin_e*X + cos_e*Y;
-// fl_vertex(x + (X=Xnew), y + Y);
-// } while (--i);
-// }
-// end_loop();
-//}
-
/**
* Draw an arc.
* @param xi
@@ -641,38 +611,62 @@ void Fl_Android_Graphics_Driver::arc_unscaled(float xi, float yi, float w, float
}
}
+/**
+ * Draw a piece of a pie.
+ * FIXME: this is not working very well at all.
+ * @param xi
+ * @param yi
+ * @param w
+ * @param h
+ * @param b1
+ * @param b2
+ */
void Fl_Android_Graphics_Driver::pie_unscaled(float xi, float yi, float w, float h, double b1, double b2)
{
- Fl_Color c = fl_color();
- fl_color(FL_RED);
- double a1 = b1/180*M_PI;
- double a2 = b2/180*M_PI;
+// Fl_Android_Application::log_e("------ PIE: %g %g (%g, %g)", b1, b2, b1-90, b2-90);
+// Fl_Color c = fl_color();
+// fl_color(FL_YELLOW);
+
+ if (b1>=b2) return;
+
double rx = w/2.0;
double ry = h/2.0;
double x = xi + rx;
double y = yi + ry;
- double yMin = y - sin(a1), yMax = y - sin(a2);
- if (yMin>yMax) { double s = yMin; yMin = yMax; yMax = s; }
- Fl_Android_Application::log_e("------ PI");
- for (double i=y-ry; i<=y+ry; i++) {
- double a = asin((i-y)/ry);
- double aR = a; if (aR<0.0) aR+=2*M_PI;
- double aL = M_PI-a;
- Fl_Android_Application::log_e("%g %g", aL, aR);
-#if 0
- if (aL>=a1 && aL<=a2)
- xyline_unscaled(x-cos(a)*rx, i, x);
- if (aR>=a1 && aR<=a2)
- xyline_unscaled(x, i, x+cos(a)*rx);
-#else
- xyline_unscaled(x-cos(a)*rx, i, x+cos(a)*rx);
-#endif
- //xyline_unscaled(sin(a)*rx, i, y);
+// double a1 = b1/180*M_PI;
+// double a2 = b2/180*M_PI;
+// double incr = (a2-a1)/20;
+// for (int i=0; i<20; i++) {
+// double dx = cos(a1), dy = -sin(a1);
+// line_unscaled(x+rx*dx, y+ry*dy, x+2*rx*dx, y+2*ry*dy);
+// a1 += incr;
+// }
+//
+// fl_color(FL_RED);
+
+ double at1 = (b1-90)/180*M_PI; // radians, 0 is top, CCW
+ double at2 = (b2-90)/180*M_PI; // radians, 0 is top, CCW
+ if (at2<0) { at1+=2*M_PI; at2+=2*M_PI; }
+ if (at2>2*M_PI) { at1-=2*M_PI; at2-=2*M_PI; }
+
+ for (double iy=y-ry; iy<=y+ry; iy++) {
+ double a = acos((iy-y)/ry);
+ double aL = M_PI-a; // 0..PI
+ double aR = a+M_PI; // 2PI..PI
+// Fl_Android_Application::log_e("%g %g (%g) - %g %g", aL, aR, aR-2*M_PI, at1, at2);
+
+ if ( ((at1<0) && ((at1<=aL-2*M_PI) && (at2>aL-2*M_PI) || (at1<=aL) && (at2>aL)))
+ || ((at1>=0) && (at1<=aL) && (at2>aL)))
+ xyline_unscaled(x-sin(aL)*rx, iy, x);
+
+ if ( ((at1<0) && ((at1<=aR-2*M_PI) && (at2>aR-2*M_PI) || (at1<=aR) && (at2>aR)))
+ || ((at1>=0) && (at1<=aR) && (at2>aR)))
+ xyline_unscaled(x, iy, x-sin(aR)*rx);
}
- fl_color(FL_GREEN);
- line_unscaled(x, y, x+cos(0.5*M_PI)*rx, y+sin(0.5*M_PI)*ry);
- fl_color(c);
+
+
+// fl_color(c);
}