From eead9b084f72cf89f747f0fdcb884b8b8137403e Mon Sep 17 00:00:00 2001 From: Graeme Geldenhuys Date: Mon, 19 Mar 2012 11:42:52 +0200 Subject: agg: moves all platform independent code into Agg2D.pas unit. There was no need for so much code in the agg_platform_xxx.inc units. --- src/corelib/render/software/Agg2D.pas | 211 +++++++++++++++++++++++ src/corelib/render/software/agg_platform_gdi.inc | 5 +- src/corelib/render/software/agg_platform_x11.inc | 201 --------------------- 3 files changed, 212 insertions(+), 205 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/render/software/Agg2D.pas b/src/corelib/render/software/Agg2D.pas index 9a153aa8..cfc0e5e0 100644 --- a/src/corelib/render/software/Agg2D.pas +++ b/src/corelib/render/software/Agg2D.pas @@ -338,6 +338,7 @@ type m_ifSpline36 : image_filter_spline36; m_ifBlackman144 : image_filter_blackman144; protected + FImg: TfpgImage; {$undef uses_interface} {$define agg_platform_interface} @@ -3519,6 +3520,216 @@ begin end; +procedure TAgg2D.DoSetFontRes(fntres: TfpgFontResourceBase); +begin + {$NOTE This is only temporary until I can correctly query font names } + {$IFDEF WINDOWS} + Font('Arial', 13); + {$ELSE} + Font('/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Regular.ttf', 13); + {$ENDIF} +end; + +procedure TAgg2D.DoSetTextColor(cl: TfpgColor); +var + t: TRGBTriple; + c: TfpgColor; +begin + c := fpgColorToRGB(cl); + t := fpgColorToRGBTriple(c); + + FillColor(t.Red, t.Green, t.Blue{, t.Alpha}); +end; + +procedure TAgg2D.DoSetColor(cl: TfpgColor); +var + t: TRGBTriple; + c: TfpgColor; +begin + c := fpgColorToRGB(cl); + t := fpgColorToRGBTriple(c); + + LineColor(t.Red, t.Green, t.Blue{, t.Alpha}); +end; + +procedure TAgg2D.DoSetLineStyle(awidth: integer; astyle: TfpgLineStyle); +begin +// LineWidth(awidth); + case astyle of + lsSolid: + begin + m_convDash.remove_all_dashes; + m_convDash.add_dash(600, 0); {$NOTE Find a better way to prevent dash generation } + end; + lsDash: + begin + m_convDash.remove_all_dashes; + m_convDash.add_dash(3, 3); + end; + lsDot: + begin + m_convDash.remove_all_dashes; + m_convDash.add_dash(1, 1.5); + end; + lsDashDot: + begin + m_convDash.remove_all_dashes; + m_convDash.add_dash(3, 1); + end; + lsDashDotDot: + begin + m_convDash.add_dash(3, 1); + m_convDash.add_dash(1, 1); + end; + end; +end; + +procedure TAgg2D.DoGetWinRect(out r: TfpgRect); +begin + r.Left := 0; + r.Top := 0; + r.Width := FWindow.Width; + r.Height := FWindow.Height; +end; + +procedure TAgg2D.DoFillRectangle(x, y, w, h: TfpgCoord); +begin + FillColor(LineColor); + LineColor(LineColor); +// NoLine; + LineWidth(1); + if (w = 1) or (h = 1) then + begin + // we have a line + LineCap(AGG_CapButt); + if w = 1 then + Line(x, y, x, y+h, True) + else + Line(x, y, x+w, y, True); + end + else + Rectangle(x, y, x+w-1, y+h-1, True); +end; + +procedure TAgg2D.DoXORFillRectangle(col: TfpgColor; x, y, w, h: TfpgCoord); +begin + +end; + +procedure TAgg2D.DoFillTriangle(x1, y1, x2, y2, x3, y3: TfpgCoord); +begin + +end; + +procedure TAgg2D.DoDrawRectangle(x, y, w, h: TfpgCoord); +begin +// LineWidth(FLineWidth); + DoSetColor(FColor); + NoFill; + if (w = 1) or (h = 1) then + begin + // we have a line + LineCap(AGG_CapButt); + if w = 1 then + Line(x, y, x, y+h, True) + else + Line(x, y, x+w, y, True); + end + else + Rectangle(x, y, x+w-1, y+h-1, True); +end; + +procedure TAgg2D.DoDrawLine(x1, y1, x2, y2: TfpgCoord); +begin + Line(x1, y1, x2, y2, True); +end; + +procedure TAgg2D.DoDrawImagePart(x, y: TfpgCoord; img: TfpgImageBase; xi, yi, + w, h: integer); +begin +// ImageFilter(AGG_NoFilter); + CopyImage(TfpgImage(img), xi, yi, xi+w, yi+h, x, y); +end; + +procedure TAgg2D.DoDrawString(x, y: TfpgCoord; const txt: string); +begin + DoSetTextColor(FTextColor); + NoLine; + TextHints(True); + Text(x, y+FontHeight, txt); +end; + +procedure TAgg2D.DoSetClipRect(const ARect: TfpgRect); +begin + +end; + +function TAgg2D.DoGetClipRect: TfpgRect; +begin + +end; + +procedure TAgg2D.DoAddClipRect(const ARect: TfpgRect); +begin + +end; + +procedure TAgg2D.DoClearClipRect; +begin + +end; + +procedure TAgg2D.DoBeginDraw(awin: TfpgWindowBase; buffered: boolean); +begin + if Assigned(FImg) then + begin + { if the window was resized } + if (FImg.Width <> FWindow.Width) or (FImg.Height <> FWindow.Height) then + begin + FImg.Free; + FImg := nil; + end; + end; + + if not Assigned(FImg) then + begin + FImg := TfpgImage.Create; + FImg.AllocateImage(32, FWindow.Width, FWindow.Height); + Attach(FImg); + end; +end; + +procedure TAgg2D.DoEndDraw; +begin + // nothing to do here +end; + +function TAgg2D.GetPixel(X, Y: integer): TfpgColor; +begin + Result := FImg.Colors[y, y]; +end; + +procedure TAgg2D.SetPixel(X, Y: integer; const AValue: TfpgColor); +begin + FImg.Colors[x, y] := AValue; +end; + +procedure TAgg2D.DoDrawArc(x, y, w, h: TfpgCoord; a1, a2: Extended); +begin + +end; + +procedure TAgg2D.DoFillArc(x, y, w, h: TfpgCoord; a1, a2: Extended); +begin + +end; + +procedure TAgg2D.DoDrawPolygon(Points: PPoint; NumPts: Integer; Winding: boolean); +begin + +end; + + { BITMAPALPHATRANSPARENCY } function BitmapAlphaTransparency(bitmap : TfpgImage; alpha : byte ) : boolean; var diff --git a/src/corelib/render/software/agg_platform_gdi.inc b/src/corelib/render/software/agg_platform_gdi.inc index d6052d6e..e33ed09d 100644 --- a/src/corelib/render/software/agg_platform_gdi.inc +++ b/src/corelib/render/software/agg_platform_gdi.inc @@ -18,13 +18,10 @@ {$ifdef agg_platform_implementation} -procedure TAgg2D.DoBeginDraw(awin: TfpgWindowBase; buffered: boolean); +procedure TAgg2D.DoPutBufferToScreen(x, y, w, h: TfpgCoord); begin -end; -procedure TAgg2D.DoEndDraw; -begin end; diff --git a/src/corelib/render/software/agg_platform_x11.inc b/src/corelib/render/software/agg_platform_x11.inc index 880dde06..b14c33bd 100644 --- a/src/corelib/render/software/agg_platform_x11.inc +++ b/src/corelib/render/software/agg_platform_x11.inc @@ -16,7 +16,6 @@ // m_bpp: unsigned; // m_byte_order: int; // m_gc: TGC; - FImg: TfpgImage; {$endif} @@ -33,176 +32,6 @@ type TX11ImageHack = class(TfpgImage); TX11WindowHack = class(TfpgWindow); -procedure TAgg2D.DoSetFontRes(fntres: TfpgFontResourceBase); -begin - Font('/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Regular.ttf', 13); -end; - -procedure TAgg2D.DoSetTextColor(cl: TfpgColor); -var - t: TRGBTriple; - c: TfpgColor; -begin - c := fpgColorToRGB(cl); - t := fpgColorToRGBTriple(c); - - FillColor(t.Red, t.Green, t.Blue{, t.Alpha}); -end; - -procedure TAgg2D.DoSetColor(cl: TfpgColor); -var - t: TRGBTriple; - c: TfpgColor; -begin - c := fpgColorToRGB(cl); - t := fpgColorToRGBTriple(c); - - LineColor(t.Red, t.Green, t.Blue{, t.Alpha}); -end; - -procedure TAgg2D.DoSetLineStyle(awidth: integer; astyle: TfpgLineStyle); -begin -// LineWidth(awidth); - case astyle of - lsSolid: - begin - m_convDash.remove_all_dashes; - m_convDash.add_dash(600, 0); {$NOTE Find a better way to prevent dash generation } - end; - lsDash: - begin - m_convDash.remove_all_dashes; - m_convDash.add_dash(3, 3); - end; - lsDot: - begin - m_convDash.remove_all_dashes; - m_convDash.add_dash(1, 1.5); - end; - lsDashDot: - begin - m_convDash.remove_all_dashes; - m_convDash.add_dash(3, 1); - end; - lsDashDotDot: - begin - m_convDash.add_dash(3, 1); - m_convDash.add_dash(1, 1); - end; - end; -end; - -procedure TAgg2D.DoGetWinRect(out r: TfpgRect); -begin - r.Left := 0; - r.Top := 0; - r.Width := FWindow.Width; - r.Height := FWindow.Height; -end; - -procedure TAgg2D.DoFillRectangle(x, y, w, h: TfpgCoord); -begin - FillColor(LineColor); - NoLine; -// LineWidth(FLineWidth); - if (w = 1) or (h = 1) then - begin - // we have a line - LineCap(AGG_CapButt); - if w = 1 then - Line(x, y, x, y+h, True) - else - Line(x, y, x+w, y, True); - end - else - Rectangle(x, y, x+w-1, y+h-1, True); -end; - -procedure TAgg2D.DoXORFillRectangle(col: TfpgColor; x, y, w, h: TfpgCoord); -begin - -end; - -procedure TAgg2D.DoFillTriangle(x1, y1, x2, y2, x3, y3: TfpgCoord); -begin - -end; - -procedure TAgg2D.DoDrawRectangle(x, y, w, h: TfpgCoord); -begin -// LineWidth(FLineWidth); - DoSetColor(FColor); - NoFill; - if (w = 1) or (h = 1) then - begin - // we have a line - LineCap(AGG_CapButt); - if w = 1 then - Line(x, y, x, y+h, True) - else - Line(x, y, x+w, y, True); - end - else - Rectangle(x, y, x+w-1, y+h-1, True); -end; - -procedure TAgg2D.DoDrawLine(x1, y1, x2, y2: TfpgCoord); -begin - Line(x1, y1, x2, y2, True); -end; - -procedure TAgg2D.DoDrawImagePart(x, y: TfpgCoord; img: TfpgImageBase; xi, yi, - w, h: integer); -begin - ImageFilter(AGG_NoFilter); - TransformImage( - TfpgImage(img) , - xi ,yi , - xi+w-1 , - yi+h-1 , - x ,y , - x+w-1 , - y+h-1 ); -end; - -procedure TAgg2D.DoDrawString(x, y: TfpgCoord; const txt: string); -begin - DoSetTextColor(FTextColor); - NoLine; - TextHints(True); - Text(x, y+FontHeight, txt); -end; - -procedure TAgg2D.DoSetClipRect(const ARect: TfpgRect); -begin - -end; - -function TAgg2D.DoGetClipRect: TfpgRect; -begin - -end; - -procedure TAgg2D.DoAddClipRect(const ARect: TfpgRect); -begin - -end; - -procedure TAgg2D.DoClearClipRect; -begin - -end; - -procedure TAgg2D.DoBeginDraw(awin: TfpgWindowBase; buffered: boolean); -begin - if not Assigned(FImg) then - begin - FImg := TfpgImage.Create; - FImg.AllocateImage(32, FWindow.Width, FWindow.Height); - Attach(FImg); - end; -end; - procedure TAgg2D.DoPutBufferToScreen(x, y, w, h: TfpgCoord); var drawgc: Tgc; @@ -225,36 +54,6 @@ begin XFreeGc(fpgApplication.Display, drawgc); end; -procedure TAgg2D.DoEndDraw; -begin - // nothing to do here -end; - -function TAgg2D.GetPixel(X, Y: integer): TfpgColor; -begin - Result := FImg.Colors[y, y]; -end; - -procedure TAgg2D.SetPixel(X, Y: integer; const AValue: TfpgColor); -begin - FImg.Colors[x, y] := AValue; -end; - -procedure TAgg2D.DoDrawArc(x, y, w, h: TfpgCoord; a1, a2: Extended); -begin - -end; - -procedure TAgg2D.DoFillArc(x, y, w, h: TfpgCoord; a1, a2: Extended); -begin - -end; - -procedure TAgg2D.DoDrawPolygon(Points: PPoint; NumPts: Integer; Winding: boolean - ); -begin - -end; {$endif} -- cgit v1.2.3-70-g09d2