Browse Source

* Add clipping

git-svn-id: trunk@37308 -
michael 8 years ago
parent
commit
d4deaa39ca
1 changed files with 11 additions and 4 deletions
  1. 11 4
      packages/fcl-image/src/fpimgbarcode.pp

+ 11 - 4
packages/fcl-image/src/fpimgbarcode.pp

@@ -31,6 +31,7 @@ Type
   TFPDrawBarCode = Class
   private
     FCanvas: TFPCustomCanvas;
+    FClipping: Boolean;
     FEncoding: TBarcodeEncoding;
     FImage: TFPCustomImage;
     FRect: TRect;
@@ -71,6 +72,8 @@ Type
     Property Encoding : TBarcodeEncoding Read FEncoding Write SetEncoding;
     // Text to draw.
     Property Text : String Read FText Write FText;
+    // If true, the barcode will be clipped if it falls outside rect.
+    Property Clipping : Boolean Read FClipping Write FClipping;
   end;
 
 Function DrawBarCode(Img : TFPCustomImage; S : String; E : TBarcodeEncoding; aWidth : Integer = 1; AWeight : Double = 2.0) : Boolean;
@@ -191,9 +194,8 @@ Function TFPDrawBarCode.Draw : Boolean;
 
 Var
   Cnv : TFPCustomCanvas;
-  i: integer;
+  I,L,MaxWidth, W, H : integer;
   xOffset: integer;
-  w, h: integer;
   BarRect : TRect;
   BP : TBarParams;
   Data : TBarTypeArray;
@@ -210,7 +212,10 @@ begin
   Cnv.Brush.Style:=bsSolid;
   Cnv.FillRect(Rect);
   Cnv.Pen.Width := 1;
-  for i:=0 to Length(Data)-1 do
+  I:=0;
+  L:=Length(Data);
+  MaxWidth:=Rect.Right-Rect.Left;
+  While (I<L) and (Not Clipping or (XOffset<MaxWidth))  do
     begin
     BP:=BarTypeToBarParams(Data[i]);
     case BP.c of
@@ -226,8 +231,10 @@ begin
     BarRect.Top:=Rect.Top;
     BarRect.Bottom:=Rect.Top+H;
     BarRect.Right:=BarRect.Left + W-1;
-    Cnv.FillRect(BarRect);
+    if (Not Clipping or (BarRect.Right<=MaxWidth)) then
+      Cnv.FillRect(BarRect);
     xOffset:=xOffset + W;
+    Inc(I);
     end;
 end;