summaryrefslogtreecommitdiff
path: root/src/corelib/gdi/gfx_gdi.pas
diff options
context:
space:
mode:
authorgraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2007-07-25 09:29:31 +0000
committergraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2007-07-25 09:29:31 +0000
commit1a5fd690766d2dd1805a9b9d0b76d5caa9ffe528 (patch)
tree83ad623610c5e4b90aef852a994e5d48643e7f15 /src/corelib/gdi/gfx_gdi.pas
parent083bdeb224ff6a54a0b494f3a08b067d1d478981 (diff)
downloadfpGUI-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.pas46
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;