diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2002-07-26 08:37:21 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2002-07-26 08:37:21 +0000 |
commit | 6d79596d136ed47de18da06b733d5485b990a39b (patch) | |
tree | 947d377201b28046364d76fd0bd273ba77a9135c /otherlibs | |
parent | e3b65fd008faa42f6ff2b133bc2367f6eb4e9404 (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.c | 47 |
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 |