diff options
author | graemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf> | 2007-07-25 09:29:31 +0000 |
---|---|---|
committer | graemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf> | 2007-07-25 09:29:31 +0000 |
commit | 1a5fd690766d2dd1805a9b9d0b76d5caa9ffe528 (patch) | |
tree | 83ad623610c5e4b90aef852a994e5d48643e7f15 /src/corelib/gdi/gfx_gdi.pas | |
parent | 083bdeb224ff6a54a0b494f3a08b067d1d478981 (diff) | |
download | fpGUI-1a5fd690766d2dd1805a9b9d0b76d5caa9ffe528.tar.xz |
* Implemented two new canvas functions. DrawArc() and FillArc()
Diffstat (limited to 'src/corelib/gdi/gfx_gdi.pas')
-rw-r--r-- | src/corelib/gdi/gfx_gdi.pas | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/src/corelib/gdi/gfx_gdi.pas b/src/corelib/gdi/gfx_gdi.pas index 6aa7f910..8912957c 100644 --- a/src/corelib/gdi/gfx_gdi.pas +++ b/src/corelib/gdi/gfx_gdi.pas @@ -107,6 +107,8 @@ type procedure DoEndDraw; override; function GetPixel(X, Y: integer): TfpgColor; override; procedure SetPixel(X, Y: integer; const AValue: TfpgColor); override; + procedure DoDrawArc(x, y, w, h: TfpgCoord; a1, a2: double); override; + procedure DoFillArc(x, y, w, h: TfpgCoord; a1, a2: double); override; public constructor Create; override; destructor Destroy; override; @@ -1063,6 +1065,48 @@ begin Windows.SetPixel(Fgc, X, Y, fpgColorToWin(AValue)); end; +procedure TfpgCanvasImpl.DoDrawArc(x, y, w, h: TfpgCoord; a1, a2: double); +var + xr: double; + yr: double; +begin + xr := w / 2; + yr := h / 2; + Arc(Fgc, x, y, x+w, y+h, + Trunc(0.5 + x + xr + cos(a1)*xr), + Trunc(0.5 + y + yr - sin(a1)*yr), + Trunc(0.5 + x + xr + cos(a1+a2)*xr), + Trunc(0.5 + y + yr - sin(a1+a2)*yr) + ); +(* +var + SX, SY, EX, EY : Longint; +begin + {$Warning DoDrawArc needs testing. } + Angles2Coords(ARect.Left, ARect.Top, ARect.Right - ARect.Left, + ARect.Bottom - ARect.Top, StartAngle, EndAngle, SX, SY, EX, EY); + {$ifndef wince} + Windows.Arc(Handle, ARect.Left, ARect.Top, ARect.Right, + ARect.Bottom, SX, SY, EX, EY) + {$endif} +*) +end; + +procedure TfpgCanvasImpl.DoFillArc(x, y, w, h: TfpgCoord; a1, a2: double); +var + xr: double; + yr: double; +begin + xr := w / 2; + yr := h / 2; + Pie(Fgc, x, y, x+w, y+h, + Trunc(0.5 + x + xr + cos(a1)*xr), + Trunc(0.5 + y + yr - sin(a1)*yr), + Trunc(0.5 + x + xr + cos(a1+a2)*xr), + Trunc(0.5 + y + yr - sin(a1+a2)*yr) + ); +end; + procedure TfpgCanvasImpl.DoPutBufferToScreen(x, y, w, h: TfpgCoord); begin if FBufferBitmap > 0 then @@ -1250,7 +1294,7 @@ begin SelectObject(tmpdc, TfpgImageImpl(img).BMPHandle); if TfpgImageImpl(img).FIsTwoColor then - rop := PATCOPY //ROP_DSPDxax + rop := PATCOPY else rop := SRCCOPY; |