From 5094ef0d00f61144a3d2f044f6699b560c9bdbb7 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 20 Mar 2022 13:02:12 +0000 Subject: [PATCH] LazBarcodes: Drop parameter ALastLine from TSimpleBarcode.RenderSymbol git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8215 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/lazbarcodes/src/ubarcodes.pas | 49 ++++++++++++++++++------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/components/lazbarcodes/src/ubarcodes.pas b/components/lazbarcodes/src/ubarcodes.pas index 39e2c836d..f09eb85f3 100644 --- a/components/lazbarcodes/src/ubarcodes.pas +++ b/components/lazbarcodes/src/ubarcodes.pas @@ -210,6 +210,7 @@ type procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); override; procedure DrawBarcode(ADrawer: TBasicBarcodeDrawer; AFactor: Double); + function GetLastLine: PZintRenderLine; procedure GetTextSize(const AText: String; out AWidth, AHeight: Integer); function InternalGenerate: Integer; override; procedure IntfPaintOnCanvas(const aTargetCanvas: TCanvas; const aRect: TRect); override; @@ -217,8 +218,7 @@ type procedure Render(AWidth, AHeight: Integer); virtual; procedure RenderBearerBars(AWidth, AHeight, ABorder: Integer; var ALastLine: PZintRenderline); procedure RenderBox(AWidth, AHeight, ABorder: Integer; var ALastLine: PZintRenderLine); - procedure RenderSymbol(xLeft, yTop, ASymbolHeight, {%H-}ATextHeight, AFactor: Integer; - var ALastLine: PZintRenderLine); virtual; + procedure RenderSymbol(xLeft, yTop, ASymbolHeight, {%H-}ATextHeight, AFactor: Integer); virtual; procedure RenderText(ASymbolWidth, ASymbolStart, ATextPos: Integer); virtual; property AddCheckSum: Boolean read FAddCheckSum write SetAddCheckSum default true; property DisplayCheckSum: Boolean read FDisplayCheckSum write SetDisplayCheckSum default false; @@ -352,8 +352,7 @@ type function GetRightText: String; function GetSampleText: String; override; function InternalGenerate: Integer; override; - procedure RenderSymbol(xLeft, yTop, AHeight, ATextHeight, AFactor: Integer; - var ALastLine: PZintRenderLine); override; + procedure RenderSymbol(xLeft, yTop, AHeight, ATextHeight, AFactor: Integer); override; procedure RenderText(ASymbolWidth, ASymbolStart, ATextPos: Integer); override; procedure SetRecommendedSymbolSizeParams; override; function UPC_EAN_Flag: Integer; @@ -610,6 +609,7 @@ type TBarcodeMaxiCode = class(TBarcodeSquare) protected function InternalGenerate: Integer; override; + procedure RenderSymbol(xLeft, yTop, ASymbolHeight, {%H-}ATextHeight, AFactor: Integer); override; public constructor Create(AOwner: TComponent); override; end; @@ -1433,6 +1433,26 @@ begin ADrawer.EndDrawing; end; +function TSimpleBarcode.GetLastLine: PZintRenderline; +var + next_line: PZintRenderline; +begin + Result := nil; + if (FSymbol <> nil) and (FSymbol^.rendered <> nil) then + begin + Result := FSymbol^.rendered^.Lines; + if Result <> nil then + begin + next_line := Result^.next; + while next_line <> nil do + begin + Result := next_line; + next_line := Result^.next; + end; + end; + end; +end; + { Measures size of the specified text in pixels using the current barcode font. } procedure TSimpleBarCode.GetTextSize(const AText: String; out AWidth, AHeight: Integer); var @@ -1587,7 +1607,7 @@ begin end; // Render bars and spaces - RenderSymbol(x, border, hsymbol, htext, factor, lastline); + RenderSymbol(x, border, hsymbol, htext, factor); // Render the human-readable text if FShowHumanReadableText then @@ -1601,6 +1621,7 @@ begin end; // Render the horizontal bearer bars + lastline := GetLastLine; if FBearerBarMode <> bbmNone then RenderBearerBars(AWidth, hsymbol, border, lastline); @@ -1651,8 +1672,7 @@ end; - ASymbolHeight: height of the entire symbol (without text) - ATextHeight: height of the human-readable text. Needed by EAN code bar extensions. - AFactor: current scaling factor with respect to pixels } -procedure TSimpleBarcode.RenderSymbol(xLeft, yTop, ASymbolHeight, ATextHeight, AFactor: Integer; - var ALastLine: PZintRenderline); +procedure TSimpleBarcode.RenderSymbol(xLeft, yTop, ASymbolHeight, ATextHeight, AFactor: Integer); var i: Integer; // general loop variable x, y: Integer; // coordinates of the left/top corner of the currently rendered bar. @@ -1661,8 +1681,10 @@ var hrow: Integer; // height of the currently rendered row wblock: Integer; // width of an individual bar or space isBar: Boolean; // flag indication whether the currently rendered feature is a bar or a space - line: PZintRenderLine; + line, lastline: PZintRenderLine; begin + lastLine := GetLastLine; + // Calculate total row height from the Zint symbol total_row_height := 0; for row := 0 to FSymbol^.rows-1 do @@ -1694,7 +1716,7 @@ begin if isBar then begin line := render_plot_create_line(x, y, wblock*AFactor, hrow); - render_plot_add_line(FSymbol, line, @ALastLine); + render_plot_add_line(FSymbol, line, @lastLine); end; // Advance to next block @@ -2181,8 +2203,7 @@ end; { Is overridden to handle the bar extensions of most of the UPC/EAN codes, i.e. some bars are drawn longer than the others.} -procedure TBarcodeEAN.RenderSymbol(xLeft, yTop, AHeight, ATextHeight, AFactor: Integer; - var ALastLine: PZintRenderLine); +procedure TBarcodeEAN.RenderSymbol(xLeft, yTop, AHeight, ATextHeight, AFactor: Integer); var i, n: Integer; line: PZintRenderLine; @@ -3171,6 +3192,10 @@ begin Move(FText[1], FSymbol^.Primary[0], Length(FText)); Result := maxicode(FSymbol, @FText[1], Length(FText)); end; - + +procedure TBarcodeMaxiCode.RenderSymbol(xLeft, yTop, ASymbolHeight, {%H-}ATextHeight, AFactor: Integer); +begin +end; + end.