summaryrefslogtreecommitdiff
path: root/src/corelib
diff options
context:
space:
mode:
authorgraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2007-08-08 14:26:10 +0000
committergraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2007-08-08 14:26:10 +0000
commite94ba620f4168468bb3e1826cac641bb4a369c09 (patch)
tree1fb70141bff75e93e279b498f057d52b6cf90aa2 /src/corelib
parentb19a28c30e51a0603560b7d24fc7fae887400790 (diff)
downloadfpGUI-e94ba620f4168468bb3e1826cac641bb4a369c09.tar.xz
* Finally fixed all painting issues with rectangles and clipping.
* Reverted the methods back to using TfpgRect instead of TRect. TfpgRect has better support for Width and Heigh - required by many Canvas methods. * Implemented helper functions like InflateRect but support TfpgRect * Fixed all painting issues and rectangle sizes in all components. * Fixed up all examples and test projects to compile and work correctly. * Fixes some clip rectangle issues under Linux. TfpgRect was a big help. * Changed the method signatures of many Canvas methods to rather use x, y, width and height. This causes much less confusion and actually less coding in widgets.
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/fpgfx.pas117
-rw-r--r--src/corelib/gdi/gfx_gdi.pas49
-rw-r--r--src/corelib/gfxbase.pas74
-rw-r--r--src/corelib/x11/gfx_x11.pas48
4 files changed, 178 insertions, 110 deletions
diff --git a/src/corelib/fpgfx.pas b/src/corelib/fpgfx.pas
index a9dddf07..c98dc8ae 100644
--- a/src/corelib/fpgfx.pas
+++ b/src/corelib/fpgfx.pas
@@ -136,8 +136,11 @@ type
constructor Create(awin: TfpgWindow); reintroduce;
destructor Destroy; override;
procedure DrawButtonFace(x, y, w, h: TfpgCoord; AFlags: TFButtonFlags);
+ procedure DrawButtonFace(r: TfpgRect; AFlags: TFButtonFlags);
procedure DrawControlFrame(x, y, w, h: TfpgCoord);
+ procedure DrawControlFrame(r: TfpgRect);
procedure DrawDirectionArrow(x, y, w, h: TfpgCoord; direction: integer);
+ procedure DrawDirectionArrow(r: TfpgRect; direction: integer);
end;
@@ -153,10 +156,10 @@ type
MenuDisabledFont: TfpgFont;
public
constructor Create; virtual;
- procedure DrawButtonFace(ACanvas: TfpgCanvas; x, y, w, h: integer; AFlags: TFButtonFlags); virtual;
- procedure DrawControlFrame(ACanvas: TfpgCanvas; x, y, w, h: integer); virtual;
- procedure DrawDirectionArrow(ACanvas: TfpgCanvas; x, y, w, h: integer; direction: integer); virtual;
- procedure DrawString(ACanvas: TfpgCanvas; x, y: integer; AText: string; AEnabled: boolean = True); virtual;
+ procedure DrawButtonFace(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord; AFlags: TFButtonFlags); virtual;
+ procedure DrawControlFrame(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord); virtual;
+ procedure DrawDirectionArrow(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord; direction: integer); virtual;
+ procedure DrawString(ACanvas: TfpgCanvas; x, y: TfpgCoord; AText: string; AEnabled: boolean = True); virtual;
end;
@@ -264,11 +267,15 @@ function fpgClosestTimer(ctime: TDateTime; amaxtime: integer): integer;
// Rectangle routines
function InflateRect(var Rect: TRect; dx: Integer; dy: Integer): Boolean;
+function InflateRect(var Rect: TfpgRect; dx: Integer; dy: Integer): Boolean;
function OffsetRect(var Rect: TRect; dx: Integer; dy: Integer): Boolean;
+function OffsetRect(var Rect: TfpgRect; dx: Integer; dy: Integer): Boolean;
function CenterPoint(const Rect: TRect): TPoint;
+function fpgRect(ALeft, ATop, AWidth, AHeight: integer): TfpgRect;
// Debug rountines
procedure PrintRect(var Rect: TRect);
+procedure PrintRect(var Rect: TfpgRect);
implementation
@@ -367,6 +374,20 @@ begin
Result := False;
end;
+function InflateRect(var Rect: TfpgRect; dx: Integer; dy: Integer): Boolean;
+begin
+ if Assigned(@Rect) then
+ begin
+ dec(Rect.Left, dx);
+ dec(Rect.Top, dy);
+ inc(Rect.Width, 2*dx);
+ inc(Rect.Height, 2*dy);
+ Result := True;
+ end
+ else
+ Result := False;
+end;
+
function OffsetRect(var Rect: TRect; dx: Integer; dy: Integer): Boolean;
begin
if Assigned(@Rect) then
@@ -384,6 +405,21 @@ begin
OffsetRect := False;
end;
+function OffsetRect(var Rect: TfpgRect; dx: Integer; dy: Integer): Boolean;
+begin
+ if Assigned(@Rect) then
+ begin
+ with Rect do
+ begin
+ inc(Left, dx);
+ inc(Top, dy);
+ end;
+ OffsetRect := True;
+ end
+ else
+ OffsetRect := False;
+end;
+
function CenterPoint(const Rect: TRect): TPoint;
begin
with Rect do
@@ -393,9 +429,21 @@ begin
end;
end;
+function fpgRect(ALeft, ATop, AWidth, AHeight: integer): TfpgRect;
+begin
+ Result.SetRect(ALeft, ATop, AWidth, AHeight);
+end;
+
procedure PrintRect(var Rect: TRect);
begin
- writeln('Rect x1=', Rect.Left, ' y1=', Rect.Top, ' x2=', Rect.Right, ' y2=', Rect.Bottom);
+ writeln('Rect left=', Rect.Left, ' top=', Rect.Top, ' right=', Rect.Right,
+ ' bottom=', Rect.Bottom);
+end;
+
+procedure PrintRect(var Rect: TfpgRect);
+begin
+ writeln('Rect left=', Rect.Left, ' top=', Rect.Top, ' right=', Rect.Right,
+ ' bottom=', Rect.Bottom, ' width=', Rect.Width, ' height=', Rect.Height);
end;
{ TfpgTimer }
@@ -716,16 +764,32 @@ begin
fpgStyle.DrawButtonFace(self, x, y, w, h, AFlags);
end;
+procedure TfpgCanvas.DrawButtonFace(r: TfpgRect; AFlags: TFButtonFlags);
+begin
+ DrawButtonFace(r.Left, r.Top, r.Width, r.Height, AFlags);
+end;
+
procedure TfpgCanvas.DrawControlFrame(x, y, w, h: TfpgCoord);
begin
fpgStyle.DrawControlFrame(self, x, y, w, h);
end;
+procedure TfpgCanvas.DrawControlFrame(r: TfpgRect);
+begin
+ PrintRect(r);
+ DrawControlFrame(r.Left, r.Top, r.Width, r.Height);
+end;
+
procedure TfpgCanvas.DrawDirectionArrow(x, y, w, h: TfpgCoord; direction: integer);
begin
fpgStyle.DrawDirectionArrow(self, x, y, w, h, direction);
end;
+procedure TfpgCanvas.DrawDirectionArrow(r: TfpgRect; direction: integer);
+begin
+ DrawDirectionArrow(r.Left, r.Top, r.Width, r.Height, direction);
+end;
+
{ TfpgWindow }
constructor TfpgWindow.Create(AOwner: TComponent);
@@ -824,19 +888,19 @@ begin
MenuDisabledFont := fpgGetFont(fpgGetNamedFontDesc('MenuDisabled'));
end;
-procedure TfpgStyle.DrawButtonFace(ACanvas: TfpgCanvas; x, y, w, h: integer; AFlags: TFButtonFlags);
+procedure TfpgStyle.DrawButtonFace(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord; AFlags: TFButtonFlags);
var
- r: TRect;
+ r: TfpgRect;
begin
+ r.SetRect(x, y, w, h);
if btnIsDefault in AFlags then
begin
- r := Rect(x, y, x+w+1, y+h+1);
ACanvas.SetColor(clBlack);
ACanvas.SetLineStyle(1, lsSolid);
ACanvas.DrawRectangle(r);
InflateRect(r, -1, -1);
Exclude(AFlags, btnIsDefault);
- fpgStyle.DrawButtonFace(ACanvas, r.Left, r.Top, r.Right-r.Left-1, r.Bottom-r.Top-1, AFlags);
+ fpgStyle.DrawButtonFace(ACanvas, r.Left, r.Top, r.Width, r.Height, AFlags);
Exit; //==>
end;
@@ -854,8 +918,8 @@ begin
end
else
ACanvas.SetColor(clHilite1);
- ACanvas.DrawLine(x, y+h-1, x, y); // left
- ACanvas.DrawLine(x, y, x+w, y); // top
+ ACanvas.DrawLine(r.Left, r.Bottom, r.Left, r.Top); // left
+ ACanvas.DrawLine(r.Left, r.Top, r.Right, r.Top); // top
// Left and Top (inner)
//if btnIsPressed in AFlags then
@@ -875,8 +939,8 @@ begin
end
else
ACanvas.SetColor(clShadow2);
- ACanvas.DrawLine(x+w, y, x+w, y+h); // right
- ACanvas.DrawLine(x+w, y+h, x-1, y+h); // bottom
+ ACanvas.DrawLine(r.Right, r.Top, r.Right, r.Bottom); // right
+ ACanvas.DrawLine(r.Right, r.Bottom, r.Left-1, r.Bottom); // bottom
// Right and Bottom (inner)
if btnIsPressed in AFlags then
@@ -888,30 +952,33 @@ begin
end
else
ACanvas.SetColor(clShadow1);
- ACanvas.DrawLine(x+w-1, y+1, x+w-1, y+h-1); // right
- ACanvas.DrawLine(x+w-1, y+h-1, x, y+h-1); // bottom
+ ACanvas.DrawLine(r.Right-1, r.Top+1, r.Right-1, r.Bottom-1); // right
+ ACanvas.DrawLine(r.Right-1, r.Bottom-1, r.Left, r.Bottom-1); // bottom
end;
-procedure TfpgStyle.DrawControlFrame(ACanvas: TfpgCanvas; x, y, w, h: integer);
+procedure TfpgStyle.DrawControlFrame(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord);
+var
+ r: TfpgRect;
begin
+ r.SetRect(x, y, w, h);
ACanvas.SetColor(clShadow1);
- ACanvas.DrawLine(x, y+h, x, y); // left (outer)
- ACanvas.DrawLine(x, y, x+w, y); // top (outer)
+ ACanvas.DrawLine(r.Left, r.Bottom, r.Left, r.Top); // left (outer)
+ ACanvas.DrawLine(r.Left, r.Top, r.Right, r.Top); // top (outer)
ACanvas.SetColor(clHilite2);
- ACanvas.DrawLine(x+w, y, x+w, y+h); // right (outer)
- ACanvas.DrawLine(x+w, y+h, x, y+h); // bottom (outer)
+ ACanvas.DrawLine(r.Right, r.Top, r.Right, r.Bottom); // right (outer)
+ ACanvas.DrawLine(r.Right, r.Bottom, r.Left, r.Bottom); // bottom (outer)
ACanvas.SetColor(clShadow2);
- ACanvas.DrawLine(x+1, y+h-1, x+1, y+1); // left (inner)
- ACanvas.DrawLine(x+1, y+1, x+w-1, y+1); // top (inner)
+ ACanvas.DrawLine(r.Left+1, r.Bottom-1, r.Left+1, r.Top+1); // left (inner)
+ ACanvas.DrawLine(r.Left+1, r.Top+1, r.Right-1, r.Top+1); // top (inner)
ACanvas.SetColor(clHilite1);
- ACanvas.DrawLine(x+w-1, y+1, x+w-1, y+h-1); // right (inner)
- ACanvas.DrawLine(x+w-1, y+h-1, x+1, y+h-1); // bottom (inner)
+ ACanvas.DrawLine(r.Right-1, r.Top+1, r.Right-1, r.Bottom-1); // right (inner)
+ ACanvas.DrawLine(r.Right-1, r.Bottom-1, r.Left+1, r.Bottom-1); // bottom (inner)
end;
-procedure TfpgStyle.DrawDirectionArrow(ACanvas: TfpgCanvas; x, y, w, h: integer; direction: integer);
+procedure TfpgStyle.DrawDirectionArrow(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord; direction: integer);
var
peekx: integer;
peeky: integer;
diff --git a/src/corelib/gdi/gfx_gdi.pas b/src/corelib/gdi/gfx_gdi.pas
index d0fc1e95..ca1d97b0 100644
--- a/src/corelib/gdi/gfx_gdi.pas
+++ b/src/corelib/gdi/gfx_gdi.pas
@@ -78,7 +78,7 @@ type
FWinGC: TfpgGContext;
FBackgroundColor: TfpgColor;
FCurFontRes: TfpgFontResourceImpl;
- FClipRect: TRect;
+ FClipRect: TfpgRect;
FClipRectSet: Boolean;
FWindowsColor: longword;
FBrush: HBRUSH;
@@ -90,17 +90,17 @@ type
procedure DoSetTextColor(cl: TfpgColor); override;
procedure DoSetColor(cl: TfpgColor); override;
procedure DoSetLineStyle(awidth: integer; astyle: TfpgLineStyle); override;
- procedure DoGetWinRect(out r: TRect); override;
- procedure DoFillRectangle(x, y, w, h: integer); override;
+ procedure DoGetWinRect(out r: TfpgRect); override;
+ procedure DoFillRectangle(x, y, w, h: TfpgCoord); override;
procedure DoXORFillRectangle(col: TfpgColor; x, y, w, h: TfpgCoord); override;
procedure DoFillTriangle(x1, y1, x2, y2, x3, y3: TfpgCoord); override;
- procedure DoDrawRectangle(x, y, w, h: integer); override;
- procedure DoDrawLine(x1, y1, x2, y2: integer); override;
+ procedure DoDrawRectangle(x, y, w, h: TfpgCoord); override;
+ procedure DoDrawLine(x1, y1, x2, y2: TfpgCoord); override;
procedure DoDrawImagePart(x, y: TfpgCoord; img: TfpgImageBase; xi, yi, w, h: integer); override;
procedure DoDrawString(x, y: TfpgCoord; const txt: string); override;
- procedure DoSetClipRect(const ARect: TRect); override;
- function DoGetClipRect: TRect; override;
- procedure DoAddClipRect(const ARect: TRect); override;
+ procedure DoSetClipRect(const ARect: TfpgRect); override;
+ function DoGetClipRect: TfpgRect; override;
+ procedure DoAddClipRect(const ARect: TfpgRect); override;
procedure DoClearClipRect; override;
procedure DoBeginDraw(awin: TfpgWindowBase; buffered: boolean); override;
procedure DoPutBufferToScreen(x, y, w, h: TfpgCoord); override;
@@ -1209,7 +1209,7 @@ begin
BitBlt(FWinGC, x, y, w, h, Fgc, x, y, SRCCOPY);
end;
-procedure TfpgCanvasImpl.DoAddClipRect(const ARect: TRect);
+procedure TfpgCanvasImpl.DoAddClipRect(const ARect: TfpgRect);
var
rg: HRGN;
begin
@@ -1227,21 +1227,21 @@ begin
FClipRectSet := False;
end;
-procedure TfpgCanvasImpl.DoDrawLine(x1, y1, x2, y2: integer);
+procedure TfpgCanvasImpl.DoDrawLine(x1, y1, x2, y2: TfpgCoord);
begin
Windows.MoveToEx(Fgc, x1, y1, nil);
Windows.LineTo(Fgc, x2, y2);
end;
-procedure TfpgCanvasImpl.DoDrawRectangle(x, y, w, h: integer);
+procedure TfpgCanvasImpl.DoDrawRectangle(x, y, w, h: TfpgCoord);
var
- r: TRect;
+ r: TfpgRect;
begin
if (w = 1) and (h = 1) then
SetPixel(x, y, FColor)
else
begin
- r := Rect(x, y, x+w-1, y+h-1);
+ r.SetRect(x, y, w, h);
DoDrawLine(r.Left, r.Top, r.Right, r.Top);
DoDrawLine(r.Right, r.Top, r.Right, r.Bottom);
DoDrawLine(r.Right, r.Bottom, r.Left, r.Bottom);
@@ -1264,11 +1264,13 @@ begin
{$endif}
end;
-procedure TfpgCanvasImpl.DoFillRectangle(x, y, w, h: integer);
+procedure TfpgCanvasImpl.DoFillRectangle(x, y, w, h: TfpgCoord);
var
+ fr: TfpgRect;
r: TRect;
begin
- r := Rect(x, y, x+w, y+h);
+ fr.SetRect(x, y, w, h);
+ r := Rect(fr.Left, fr.Top, fr.Right, fr.Bottom);
Windows.FillRect(Fgc, r, FBrush);
end;
@@ -1285,23 +1287,28 @@ begin
Windows.Polygon(Fgc, pts, 3);
end;
-function TfpgCanvasImpl.DoGetClipRect: TRect;
+function TfpgCanvasImpl.DoGetClipRect: TfpgRect;
begin
Result := FClipRect;
end;
-procedure TfpgCanvasImpl.DoGetWinRect(out r: TRect);
+procedure TfpgCanvasImpl.DoGetWinRect(out r: TfpgRect);
+var
+ lr: TRect;
begin
- GetClientRect(FDrawWindow.FWinHandle, r);
+ GetClientRect(FDrawWindow.FWinHandle, lr);
+ r.Left := lr.Left;
+ r.Top := lr.Top;
+ r.Right := lr.Right;
+ r.Bottom := lr.Bottom;
end;
-procedure TfpgCanvasImpl.DoSetClipRect(const ARect: TRect);
+procedure TfpgCanvasImpl.DoSetClipRect(const ARect: TfpgRect);
begin
FClipRectSet := True;
FClipRect := ARect;
DeleteObject(FClipRegion);
- // This is a bit of a hack!!! Double check this again and compare output to X11.
- FClipRegion := CreateRectRgn(ARect.Left, ARect.Top, ARect.Right+1, ARect.Bottom+1);
+ FClipRegion := CreateRectRgn(ARect.Left, ARect.Top, ARect.Width, ARect.Height);
SelectClipRgn(Fgc, FClipRegion);
end;
diff --git a/src/corelib/gfxbase.pas b/src/corelib/gfxbase.pas
index b3f4d672..e4174ef5 100644
--- a/src/corelib/gfxbase.pas
+++ b/src/corelib/gfxbase.pas
@@ -235,17 +235,17 @@ type
procedure DoSetTextColor(cl: TfpgColor); virtual; abstract;
procedure DoSetColor(cl: TfpgColor); virtual; abstract;
procedure DoSetLineStyle(awidth: integer; astyle: TfpgLineStyle); virtual; abstract;
- procedure DoGetWinRect(out r: TRect); virtual; abstract;
- procedure DoFillRectangle(x, y, w, h: integer); virtual; abstract;
+ procedure DoGetWinRect(out r: TfpgRect); virtual; abstract;
+ procedure DoFillRectangle(x, y, w, h: TfpgCoord); virtual; abstract;
procedure DoXORFillRectangle(col: TfpgColor; x, y, w, h: TfpgCoord); virtual; abstract;
procedure DoFillTriangle(x1, y1, x2, y2, x3, y3: TfpgCoord); virtual; abstract;
- procedure DoDrawRectangle(x, y, w, h: integer); virtual; abstract;
- procedure DoDrawLine(x1, y1, x2, y2: integer); virtual; abstract;
+ procedure DoDrawRectangle(x, y, w, h: TfpgCoord); virtual; abstract;
+ procedure DoDrawLine(x1, y1, x2, y2: TfpgCoord); virtual; abstract;
procedure DoDrawImagePart(x, y: TfpgCoord; img: TfpgImageBase; xi, yi, w, h: integer); virtual; abstract;
procedure DoDrawString(x, y: TfpgCoord; const txt: string); virtual; abstract;
- procedure DoSetClipRect(const ARect: TRect); virtual; abstract;
- function DoGetClipRect: TRect; virtual; abstract;
- procedure DoAddClipRect(const ARect: TRect); virtual; abstract;
+ procedure DoSetClipRect(const ARect: TfpgRect); virtual; abstract;
+ function DoGetClipRect: TfpgRect; virtual; abstract;
+ procedure DoAddClipRect(const ARect: TfpgRect); virtual; abstract;
procedure DoClearClipRect; virtual; abstract;
procedure DoBeginDraw(awin: TfpgWindowBase; buffered: boolean); virtual; abstract;
procedure DoPutBufferToScreen(x, y, w, h: TfpgCoord); virtual; abstract;
@@ -257,8 +257,8 @@ type
public
constructor Create; virtual;
destructor Destroy; override;
- procedure DrawRectangle(x, y, w, h: integer); overload;
- procedure DrawRectangle(r: TRect); overload;
+ procedure DrawRectangle(x, y, w, h: TfpgCoord); overload;
+ procedure DrawRectangle(r: TfpgRect); overload;
procedure DrawLine(x1, y1, x2, y2: TfpgCoord);
procedure DrawImage(x, y: TfpgCoord; img: TfpgImageBase);
procedure DrawImagePart(x, y: TfpgCoord; img: TfpgImageBase; xi, yi, w, h: integer);
@@ -266,19 +266,19 @@ type
procedure StretchDraw (x, y, w, h: TfpgCoord; ASource: TfpgImageBase);
procedure CopyRect(x, y: TfpgCoord; ACanvas: TfpgCanvasBase; var SourceRect: TRect);
procedure DrawString(x, y: TfpgCoord; const txt: string);
- procedure FillRectangle(x, y, w, h: integer); overload;
- procedure FillRectangle(r: TRect); overload;
+ procedure FillRectangle(x, y, w, h: TfpgCoord); overload;
+ procedure FillRectangle(r: TfpgRect); overload;
procedure FillTriangle(x1, y1, x2, y2, x3, y3: TfpgCoord);
procedure FillArc(x, y, w, h: TfpgCoord; a1, a2: double);
- procedure GradientFill(ARect: TRect; AStart, AStop: TfpgColor; ADirection: TGradientDirection);
+ procedure GradientFill(ARect: TfpgRect; AStart, AStop: TfpgColor; ADirection: TGradientDirection);
procedure XORFillRectangle(col: TfpgColor; x, y, w, h: TfpgCoord); overload;
procedure XORFillRectangle(col: TfpgColor; r: TfpgRect); overload;
- procedure SetClipRect(const ARect: TRect);
- function GetClipRect: TRect;
- procedure AddClipRect(const ARect: TRect);
+ procedure SetClipRect(const ARect: TfpgRect);
+ function GetClipRect: TfpgRect;
+ procedure AddClipRect(const ARect: TfpgRect);
procedure ClearClipRect;
procedure Clear(AColor: TfpgColor);
- procedure GetWinRect(out r: TRect);
+ procedure GetWinRect(out r: TfpgRect);
procedure SetColor(AColor: TfpgColor);
procedure SetTextColor(AColor: TfpgColor);
procedure SetLineStyle(AWidth: integer; AStyle: TfpgLineStyle);
@@ -380,7 +380,6 @@ function fpgGetAlpha(const AColor: TfpgColor): word;
{ Points }
function PtInRect(const ARect: TfpgRect; const APoint: TPoint): Boolean;
procedure SortRect(var ARect: TRect);
-procedure SortRect(var left, top, right, bottom: integer);
implementation
@@ -584,12 +583,6 @@ begin
(APoint.y < ARect.Bottom);
end;
-procedure SortRect(var ARect: TRect);
-begin
- with ARect do
- SortRect(left, top, right, bottom);
-end;
-
procedure SortRect(var left, top, right, bottom: integer);
var
r: integer;
@@ -608,6 +601,13 @@ begin
end;
end;
+procedure SortRect(var ARect: TRect);
+begin
+ with ARect do
+ SortRect(left, top, right, bottom);
+end;
+
+
{ TfpgRect }
procedure TfpgRect.SetRect(aleft, atop, awidth, aheight: TfpgCoord);
@@ -730,15 +730,14 @@ begin
inherited Destroy;
end;
-procedure TfpgCanvasBase.DrawRectangle(x, y, w, h: integer);
+procedure TfpgCanvasBase.DrawRectangle(x, y, w, h: TfpgCoord);
begin
DoDrawRectangle(x, y, w, h);
end;
-procedure TfpgCanvasBase.DrawRectangle(r: TRect);
+procedure TfpgCanvasBase.DrawRectangle(r: TfpgRect);
begin
- SortRect(r);
- DoDrawRectangle(r.Left, r.Top, r.Right-r.Left, r.Bottom-r.Top);
+ DoDrawRectangle(r.Left, r.Top, r.Width, r.Height);
end;
procedure TfpgCanvasBase.DrawLine(x1, y1, x2, y2: TfpgCoord);
@@ -823,15 +822,14 @@ begin
end;
end;
-procedure TfpgCanvasBase.FillRectangle(x, y, w, h: integer);
+procedure TfpgCanvasBase.FillRectangle(x, y, w, h: TfpgCoord);
begin
DoFillRectangle(x, y, w, h);
end;
-procedure TfpgCanvasBase.FillRectangle(r: TRect);
+procedure TfpgCanvasBase.FillRectangle(r: TfpgRect);
begin
- SortRect(r);
- DoFillRectangle(r.Left, r.Top, r.Right-r.Left, r.Bottom-r.Top);
+ DoFillRectangle(r.Left, r.Top, r.Width, r.Height);
end;
procedure TfpgCanvasBase.FillTriangle(x1, y1, x2, y2, x3, y3: TfpgCoord);
@@ -844,7 +842,7 @@ begin
DoFillArc(x, y, w, h, a1, a2);
end;
-procedure TfpgCanvasBase.GradientFill(ARect: TRect; AStart, AStop: TfpgColor;
+procedure TfpgCanvasBase.GradientFill(ARect: TfpgRect; AStart, AStop: TfpgColor;
ADirection: TGradientDirection);
var
RGBStart: TRGBTriple;
@@ -892,17 +890,17 @@ begin
DoXORFillRectangle(col, r.Left, r.Top, r.Width, r.Height);
end;
-procedure TfpgCanvasBase.SetClipRect(const ARect: TRect);
+procedure TfpgCanvasBase.SetClipRect(const ARect: TfpgRect);
begin
DoSetClipRect(ARect);
end;
-function TfpgCanvasBase.GetClipRect: TRect;
+function TfpgCanvasBase.GetClipRect: TfpgRect;
begin
Result := DoGetClipRect;
end;
-procedure TfpgCanvasBase.AddClipRect(const ARect: TRect);
+procedure TfpgCanvasBase.AddClipRect(const ARect: TfpgRect);
begin
DoAddClipRect(ARect);
end;
@@ -915,16 +913,16 @@ end;
procedure TfpgCanvasBase.Clear(AColor: TfpgColor);
var
lCol: TfpgColor;
- lWinRect: TRect;
+ lWinRect: TfpgRect;
begin
lCol := FColor;
DoSetColor(AColor);
DoGetWinRect(lWinRect);
- DoFillRectangle(0, 0, lWinRect.Right, lWinRect.Bottom);
+ DoFillRectangle(0, 0, lWinRect.Width, lWinRect.Height);
DoSetColor(lCol);
end;
-procedure TfpgCanvasBase.GetWinRect(out r: TRect);
+procedure TfpgCanvasBase.GetWinRect(out r: TfpgRect);
begin
DoGetWinRect(r);
end;
diff --git a/src/corelib/x11/gfx_x11.pas b/src/corelib/x11/gfx_x11.pas
index f41ce904..85d580cc 100644
--- a/src/corelib/x11/gfx_x11.pas
+++ b/src/corelib/x11/gfx_x11.pas
@@ -88,7 +88,7 @@ type
FDrawHandle: TXID;
Fgc: TfpgGContext;
FCurFontRes: TfpgFontResourceImpl;
- FClipRect: TRect;
+ FClipRect: TfpgRect;
FClipRectSet: boolean;
FXftDraw: PXftDraw;
FXftDrawBuffer: PXftDraw;
@@ -99,17 +99,17 @@ type
procedure DoSetTextColor(cl: TfpgColor); override;
procedure DoSetColor(cl: TfpgColor); override;
procedure DoSetLineStyle(awidth: integer; astyle: TfpgLineStyle); override;
- procedure DoGetWinRect(out r: TRect); override;
- procedure DoFillRectangle(x, y, w, h: integer); override;
+ procedure DoGetWinRect(out r: TfpgRect); override;
+ procedure DoFillRectangle(x, y, w, h: TfpgCoord); override;
procedure DoXORFillRectangle(col: TfpgColor; x, y, w, h: TfpgCoord); override;
procedure DoFillTriangle(x1, y1, x2, y2, x3, y3: TfpgCoord); override;
- procedure DoDrawRectangle(x, y, w, h: integer); override;
- procedure DoDrawLine(x1, y1, x2, y2: integer); override;
+ procedure DoDrawRectangle(x, y, w, h: TfpgCoord); override;
+ procedure DoDrawLine(x1, y1, x2, y2: TfpgCoord); override;
procedure DoDrawImagePart(x, y: TfpgCoord; img: TfpgImageBase; xi, yi, w, h: integer); override;
procedure DoDrawString(x, y: TfpgCoord; const txt: string); override;
- procedure DoSetClipRect(const ARect: TRect); override;
- function DoGetClipRect: TRect; override;
- procedure DoAddClipRect(const ARect: TRect); override;
+ procedure DoSetClipRect(const ARect: TfpgRect); override;
+ function DoGetClipRect: TfpgRect; override;
+ procedure DoAddClipRect(const ARect: TfpgRect); override;
procedure DoClearClipRect; override;
procedure DoBeginDraw(awin: TfpgWindowBase; buffered: boolean); override;
procedure DoPutBufferToScreen(x, y, w, h: TfpgCoord); override;
@@ -1418,25 +1418,21 @@ begin
y + FCurFontRes.GetAscent, PChar(txt), Length(txt));
end;
-procedure TfpgCanvasImpl.DoGetWinRect(out r: TRect);
+procedure TfpgCanvasImpl.DoGetWinRect(out r: TfpgRect);
var
rw: TfpgWinHandle;
x: integer;
y: integer;
bw: longword;
d: longword;
- w: Cardinal;
- h: Cardinal;
begin
- XGetGeometry(xapplication.display, FDrawWindow.FWinHandle, @rw, @x, @y,
- @w, @h, @bw, @d);
r.Left := 0;
r.Top := 0;
- r.Right := w;
- r.Bottom := h;
+ XGetGeometry(xapplication.display, FDrawWindow.FWinHandle, @rw, @x, @y,
+ @(r.width), @(r.height), @bw, @d);
end;
-procedure TfpgCanvasImpl.DoFillRectangle(x, y, w, h: integer);
+procedure TfpgCanvasImpl.DoFillRectangle(x, y, w, h: TfpgCoord);
begin
XFillRectangle(xapplication.display, FDrawHandle, Fgc, x, y, w, h);
end;
@@ -1464,28 +1460,28 @@ begin
XFillPolygon(xapplication.display, FDrawHandle, Fgc, @pts, 3, 0, 0);
end;
-procedure TfpgCanvasImpl.DoDrawRectangle(x, y, w, h: integer);
+procedure TfpgCanvasImpl.DoDrawRectangle(x, y, w, h: TfpgCoord);
begin
// writeln(Format('DoDrawRectangle x=%d y=%d w=%d h=%d', [x, y, w, h]));
// Same behavior as Windows. See documentation for reason.
XDrawRectangle(xapplication.display, FDrawHandle, Fgc, x, y, w-1, h-1);
end;
-procedure TfpgCanvasImpl.DoDrawLine(x1, y1, x2, y2: integer);
+procedure TfpgCanvasImpl.DoDrawLine(x1, y1, x2, y2: TfpgCoord);
begin
// Same behavior as Windows. See documentation for reason.
XDrawLine(xapplication.display, FDrawHandle, Fgc, x1, y1, x2, y2);
end;
-procedure TfpgCanvasImpl.DoSetClipRect(const ARect: TRect);
+procedure TfpgCanvasImpl.DoSetClipRect(const ARect: TfpgRect);
var
r: TXRectangle;
rg: TRegion;
begin
r.x := ARect.Left;
r.y := ARect.Top;
- r.Width := ARect.Right - ARect.Left + 1;
- r.Height := ARect.Bottom - ARect.Top + 1;
+ r.Width := ARect.Width;
+ r.Height := ARect.Height;
rg := XCreateRegion;
@@ -1498,20 +1494,20 @@ begin
XDestroyRegion(rg);
end;
-function TfpgCanvasImpl.DoGetClipRect: TRect;
+function TfpgCanvasImpl.DoGetClipRect: TfpgRect;
begin
Result := FClipRect;
end;
-procedure TfpgCanvasImpl.DoAddClipRect(const ARect: TRect);
+procedure TfpgCanvasImpl.DoAddClipRect(const ARect: TfpgRect);
var
r: TXRectangle;
rg: TRegion;
begin
r.x := ARect.Left;
r.y := ARect.Top;
- r.Width := ARect.Right - ARect.Left + 1;
- r.Height := ARect.Bottom - ARect.Top + 1;
+ r.Width := ARect.Width;
+ r.Height := ARect.Height;
rg := XCreateRegion;
XUnionRectWithRegion(@r, rg, rg);
@@ -1527,7 +1523,7 @@ end;
procedure TfpgCanvasImpl.DoClearClipRect;
var
- r: TRect;
+ r: TfpgRect;
begin
DoGetWinRect(r);
DoSetClipRect(r);