summaryrefslogtreecommitdiffstats
path: root/otherlibs
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2002-07-26 08:37:21 +0000
committerXavier Leroy <xavier.leroy@inria.fr>2002-07-26 08:37:21 +0000
commit6d79596d136ed47de18da06b733d5485b990a39b (patch)
tree947d377201b28046364d76fd0bd273ba77a9135c /otherlibs
parente3b65fd008faa42f6ff2b133bc2367f6eb4e9404 (diff)
Ajout fill_arc_nat et draw_arc_nat (PR#1263)
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@5047 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'otherlibs')
-rw-r--r--otherlibs/win32graph/draw.c47
1 files changed, 28 insertions, 19 deletions
diff --git a/otherlibs/win32graph/draw.c b/otherlibs/win32graph/draw.c
index 960eb186f..21c463b1b 100644
--- a/otherlibs/win32graph/draw.c
+++ b/otherlibs/win32graph/draw.c
@@ -30,7 +30,8 @@ static void GetCurrentPosition(HDC hDC,POINT *pt)
MoveToEx(hDC,pt->x,pt->y,0);
}
-static value gr_draw_or_fill_arc(value *argv,int argc,BOOL fill);
+static value gr_draw_or_fill_arc(value vx, value vy, value vrx, value vry,
+ value vstart, value vend, BOOL fill);
CAMLprim value gr_plot(value vx, value vy)
{
@@ -214,9 +215,15 @@ CAMLprim value gr_set_window_title(value text)
return Val_unit;
}
-CAMLprim value gr_draw_arc(value *argv ,int argc)
+CAMLprim value gr_draw_arc(value *argv, int argc)
{
- return gr_draw_or_fill_arc(argv,argc,FALSE);
+ return gr_draw_or_fill_arc(argv[0], argv[1], argv[2], argv[3],
+ argv[4], argv[5], FALSE);
+}
+
+CAMLprim value gr_draw_arc_nat(vx, vy, vrx, vry, vstart, vend)
+{
+ return gr_draw_or_fill_arc(vx, vy, vrx, vry, vstart, vend, FALSE);
}
CAMLprim value gr_set_line_width(value vwidth)
@@ -272,22 +279,21 @@ CAMLprim value gr_set_color(value vcolor)
}
-static value gr_draw_or_fill_arc(value *argv,int argc,BOOL fill)
+static value gr_draw_or_fill_arc(value vx, value vy, value vrx, value vry,
+ value vstart, value vend, BOOL fill)
{
int x, y, r_x, r_y, start, end;
int x1, y1, x2, y2, x3, y3, x4, y4;
double cvt = 3.141592653/180.0;
- // HPEN newPen = CreatePen(PS_SOLID,1,grwindow.CurrentColor);
- HPEN oldPen;
- r_x = Int_val(argv[2]);
- r_y = Int_val(argv[3]);
+ r_x = Int_val(vrx);
+ r_y = Int_val(vry);
if ((r_x < 0) || (r_y < 0))
invalid_argument("draw_arc: radius must be positive");
- x = Int_val(argv[0]);
- y = Int_val(argv[1]);
- start = Int_val(argv[4]);
- end = Int_val(argv[5]);
+ x = Int_val(vx);
+ y = Int_val(vy);
+ start = Int_val(vstart);
+ end = Int_val(vend);
// Upper-left corner of bounding rect.
x1= x - r_x;
@@ -303,7 +309,7 @@ static value gr_draw_or_fill_arc(value *argv,int argc,BOOL fill)
y4=y + (int)(100.0*sin(cvt*end));
if (grremember_mode) {
- oldPen = SelectObject(grwindow.gcBitmap,grwindow.CurrentPen);
+ SelectObject(grwindow.gcBitmap,grwindow.CurrentPen);
SelectObject(grwindow.gcBitmap,grwindow.CurrentBrush);
if( fill )
Pie(grwindow.gcBitmap,x1, UD(y1), x2, UD(y2),
@@ -311,10 +317,9 @@ static value gr_draw_or_fill_arc(value *argv,int argc,BOOL fill)
else
Arc(grwindow.gcBitmap,x1, UD(y1), x2, UD(y2),
x3, UD(y3), x4, UD(y4));
- // SelectObject(grwindow.gcBitmap,oldPen);
}
if( grdisplay_mode ) {
- oldPen = SelectObject(grwindow.gc,grwindow.CurrentPen);
+ SelectObject(grwindow.gc,grwindow.CurrentPen);
SelectObject(grwindow.gc,grwindow.CurrentBrush);
if (fill)
Pie(grwindow.gc,x1, UD(y1), x2, UD(y2),
@@ -322,9 +327,7 @@ static value gr_draw_or_fill_arc(value *argv,int argc,BOOL fill)
else
Arc(grwindow.gc,x1, UD(y1), x2, UD(y2),
x3, UD(y3), x4, UD(y4));
- // SelectObject(grwindow.gc,oldPen);
}
- // DeleteObject(newPen);
return Val_unit;
}
@@ -558,9 +561,15 @@ CAMLprim value gr_fill_poly(value vect)
return Val_unit;
}
-CAMLprim value gr_fill_arc(value *argv,int argc)
+CAMLprim value gr_fill_arc(value *argv, int argc)
+{
+ return gr_draw_or_fill_arc(argv[0], argv[1], argv[2], argv[3],
+ argv[4], argv[5], TRUE);
+}
+
+CAMLprim value gr_fill_arc_nat(vx, vy, vrx, vry, vstart, vend)
{
- return gr_draw_or_fill_arc(argv,argc,TRUE);
+ return gr_draw_or_fill_arc(vx, vy, vrx, vry, vstart, vend, TRUE);
}
// Image primitives