Polygon finished.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1635 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
yangjixian
2011-05-19 03:37:23 +00:00
parent 3820f12b27
commit 8d775b4c49
4 changed files with 87 additions and 100 deletions

View File

@ -49,7 +49,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<CursorPos X="14" Y="4"/> <CursorPos X="14" Y="4"/>
<UsageCount Value="84"/> <UsageCount Value="86"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
@ -62,17 +62,18 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1266"/> <TopLine Value="1266"/>
<CursorPos X="24" Y="1279"/> <CursorPos X="24" Y="1279"/>
<UsageCount Value="84"/> <UsageCount Value="86"/>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/> <LoadedDesigner Value="True"/>
</Unit1> </Unit1>
<Unit2> <Unit2>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<UnitName Value="PictureCtrls"/> <UnitName Value="PictureCtrls"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1411"/> <TopLine Value="1100"/>
<CursorPos X="27" Y="1432"/> <CursorPos X="1" Y="1123"/>
<UsageCount Value="35"/> <UsageCount Value="35"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit2> </Unit2>
@ -169,8 +170,8 @@
<Filename Value="T:\fpclaz\laz\lcl\graphics.pp"/> <Filename Value="T:\fpclaz\laz\lcl\graphics.pp"/>
<UnitName Value="Graphics"/> <UnitName Value="Graphics"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1078"/> <TopLine Value="1115"/>
<CursorPos X="15" Y="1094"/> <CursorPos X="15" Y="1131"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit12> </Unit12>
<Unit13> <Unit13>
@ -357,7 +358,6 @@
<Unit35> <Unit35>
<Filename Value="DLBitmap.pas"/> <Filename Value="DLBitmap.pas"/>
<UnitName Value="DLBitmap"/> <UnitName Value="DLBitmap"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="4"/> <EditorIndex Value="4"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="259"/> <TopLine Value="259"/>
@ -447,123 +447,123 @@
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1060" Column="31" TopLine="1034"/> <Caret Line="724" Column="14" TopLine="707"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1167" Column="42" TopLine="1153"/> <Caret Line="745" Column="35" TopLine="731"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1175" Column="29" TopLine="1153"/> <Caret Line="784" Column="14" TopLine="763"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="982" Column="47" TopLine="973"/> <Caret Line="1095" Column="37" TopLine="1069"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1039" Column="39" TopLine="1028"/> <Caret Line="37" Column="94" TopLine="34"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1052" Column="29" TopLine="1028"/> <Caret Line="114" Column="32" TopLine="88"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1057" Column="60" TopLine="1046"/> <Caret Line="117" Column="54" TopLine="91"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1058" Column="21" TopLine="1046"/> <Caret Line="186" Column="22" TopLine="160"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1060" Column="31" TopLine="1046"/> <Caret Line="678" Column="15" TopLine="665"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1167" Column="42" TopLine="1153"/> <Caret Line="707" Column="15" TopLine="681"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1175" Column="29" TopLine="1162"/> <Caret Line="710" Column="15" TopLine="684"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="150" Column="91" TopLine="145"/> <Caret Line="792" Column="7" TopLine="768"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="182" Column="24" TopLine="156"/> <Caret Line="791" Column="31" TopLine="765"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="229" Column="57" TopLine="203"/> <Caret Line="729" Column="1" TopLine="712"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="230" Column="23" TopLine="204"/> <Caret Line="702" Column="13" TopLine="659"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="717" Column="27" TopLine="703"/> <Caret Line="1090" Column="38" TopLine="1076"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="6" Column="94" TopLine="1"/> <Caret Line="188" Column="31" TopLine="172"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="187" Column="20" TopLine="161"/> <Caret Line="702" Column="28" TopLine="679"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="665" Column="16" TopLine="639"/> <Caret Line="1091" Column="16" TopLine="1076"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="733" Column="14" TopLine="707"/> <Caret Line="630" Column="44" TopLine="620"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1178" Column="30" TopLine="1165"/> <Caret Line="735" Column="9" TopLine="709"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="864" Column="16" TopLine="843"/> <Caret Line="186" Column="22" TopLine="167"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="main.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1279" Column="24" TopLine="1266"/> <Caret Line="700" Column="22" TopLine="674"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="205" Column="19" TopLine="189"/> <Caret Line="725" Column="14" TopLine="699"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="788" Column="28" TopLine="762"/> <Caret Line="735" Column="14" TopLine="709"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1177" Column="30" TopLine="1151"/> <Caret Line="752" Column="35" TopLine="726"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1180" Column="25" TopLine="1154"/> <Caret Line="790" Column="27" TopLine="764"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1184" Column="38" TopLine="1158"/> <Caret Line="778" Column="40" TopLine="764"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="picturectrls.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="1432" Column="27" TopLine="1411"/> <Caret Line="920" Column="49" TopLine="902"/>
</Position29> </Position29>
<Position30> <Position30>
<Filename Value="DLBitmap.pas"/> <Filename Value="picturectrls.pas"/>
<Caret Line="76" Column="33" TopLine="60"/> <Caret Line="1123" Column="36" TopLine="1106"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>

View File

@ -1,7 +1,7 @@
object MainForm: TMainForm object MainForm: TMainForm
Left = 135 Left = 150
Height = 681 Height = 681
Top = 90 Top = 60
Width = 925 Width = 925
Caption = 'Lazarus Image Editor' Caption = 'Lazarus Image Editor'
ClientHeight = 659 ClientHeight = 659
@ -1391,9 +1391,9 @@
TabOrder = 5 TabOrder = 5
object checkFuzzy: TCheckBox object checkFuzzy: TCheckBox
Left = 4 Left = 4
Height = 19 Height = 23
Top = 5 Top = 5
Width = 20 Width = 24
OnChange = checkFuzzyChange OnChange = checkFuzzyChange
TabOrder = 0 TabOrder = 0
end end

View File

@ -1,7 +1,7 @@
{ This is an automatically generated lazarus resource file } { This is an automatically generated lazarus resource file }
LazarusResources.Add('TMainForm','FORMDATA',[ LazarusResources.Add('TMainForm','FORMDATA',[
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3#135#0#6'Height'#3#169#2#3'Top'#2'Z' 'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3#150#0#6'Height'#3#169#2#3'Top'#2'<'
+#5'Width'#3#157#3#7'Caption'#6#20'Lazarus Image Editor'#12'ClientHeight'#3 +#5'Width'#3#157#3#7'Caption'#6#20'Lazarus Image Editor'#12'ClientHeight'#3
+#147#2#11'ClientWidth'#3#157#3#12'Font.CharSet'#7#14'GB2312_CHARSET'#11'Font' +#147#2#11'ClientWidth'#3#157#3#12'Font.CharSet'#7#14'GB2312_CHARSET'#11'Font'
+'.Height'#2#243#9'Font.Name'#6#12#229#190#174#232#189#175#233#155#133#233#187 +'.Height'#2#243#9'Font.Name'#6#12#229#190#174#232#189#175#233#155#133#233#187
@ -757,8 +757,8 @@ LazarusResources.Add('TMainForm','FORMDATA',[
+'ayout'#7#8'tlCenter'#11'ParentColor'#8#0#0#6'TPanel'#15'PanelTolerance2'#4 +'ayout'#7#8'tlCenter'#11'ParentColor'#8#0#0#6'TPanel'#15'PanelTolerance2'#4
+'Left'#3#134#2#6'Height'#2'"'#3'Top'#2#0#5'Width'#2#30#5'Align'#7#6'alLeft' +'Left'#3#134#2#6'Height'#2'"'#3'Top'#2#0#5'Width'#2#30#5'Align'#7#6'alLeft'
+#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'"'#11'ClientWidth'#2#30#8'Tab' +#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'"'#11'ClientWidth'#2#30#8'Tab'
+'Order'#2#5#0#9'TCheckBox'#10'checkFuzzy'#4'Left'#2#4#6'Height'#2#19#3'Top'#2 +'Order'#2#5#0#9'TCheckBox'#10'checkFuzzy'#4'Left'#2#4#6'Height'#2#23#3'Top'#2
+#5#5'Width'#2#20#8'OnChange'#7#16'checkFuzzyChange'#8'TabOrder'#2#0#0#0#0#0#0 +#5#5'Width'#2#24#8'OnChange'#7#16'checkFuzzyChange'#8'TabOrder'#2#0#0#0#0#0#0
+#6'TPanel'#13'PanelPictures'#4'Left'#2'('#6'Height'#3#20#2#3'Top'#2'i'#5'Wid' +#6'TPanel'#13'PanelPictures'#4'Left'#2'('#6'Height'#3#20#2#3'Top'#2'i'#5'Wid'
+'th'#3'*'#3#5'Align'#7#8'alClient'#10'BevelOuter'#7#9'bvLowered'#8'TabOrder' +'th'#3'*'#3#5'Align'#7#8'alClient'#10'BevelOuter'#7#9'bvLowered'#8'TabOrder'
+#2#3#0#0#9'TMainMenu'#8'MainMenu'#6'Images'#7#16'ImageListActions'#4'left'#2 +#2#3#0#0#9'TMainMenu'#8'MainMenu'#6'Images'#7#16'ImageListActions'#4'left'#2

View File

@ -151,6 +151,8 @@ type
procedure SetTool(const AValue: TPictureEditTool); procedure SetTool(const AValue: TPictureEditTool);
protected protected
FromColor, ToColor: TColor; FromColor, ToColor: TColor;
paddr: array of TPoint;
pcount: integer;
procedure Change; dynamic; procedure Change; dynamic;
procedure ColorChange; dynamic; procedure ColorChange; dynamic;
procedure PictureSizeChange; dynamic; procedure PictureSizeChange; dynamic;
@ -181,9 +183,9 @@ type
procedure Line(X1, Y1, X2, Y2: integer; Shift: TShiftState = [ssLeft]); procedure Line(X1, Y1, X2, Y2: integer; Shift: TShiftState = [ssLeft]);
procedure Rectangle(X1, Y1, X2, Y2: integer; Shift: TShiftState = [ssLeft]); procedure Rectangle(X1, Y1, X2, Y2: integer; Shift: TShiftState = [ssLeft]);
procedure Ellipse(X1, Y1, X2, Y2: integer; Shift: TShiftState = [ssLeft]); procedure Ellipse(X1, Y1, X2, Y2: integer; Shift: TShiftState = [ssLeft]);
procedure Polygon(X1, Y1, X2, Y2: integer; Shift: TShiftState); procedure Polygon(polyaddr: array of TPoint);
procedure ProcessEditorText(X1, Y1, X2, Y2: integer); procedure ProcessEditorText(X1, Y1, X2, Y2: integer);
procedure ProcessPointAddr(X1, Y1, X2, Y2: integer; Points: array of TPoint; PCount: integer); procedure ProcessPointAddr;
procedure Mask(X1, Y1, X2, Y2: integer; Shift: TShiftState = [ssLeft]); procedure Mask(X1, Y1, X2, Y2: integer; Shift: TShiftState = [ssLeft]);
procedure FlipHorizontally; procedure FlipHorizontally;
@ -695,6 +697,11 @@ begin
end; end;
end; end;
if Tool = ptPolygon then
if pcount > 0 then begin
//ProcessPointAddr;
end;
DrawToolDrag(StartPos.X, StartPos.Y, FTempPos.X, FTempPos.Y); DrawToolDrag(StartPos.X, StartPos.Y, FTempPos.X, FTempPos.Y);
FTempPos := Point(X, Y); FTempPos := Point(X, Y);
@ -703,8 +710,7 @@ end;
procedure TCustomPictureEdit.PictureMouseUp(Button: TMouseButton; procedure TCustomPictureEdit.PictureMouseUp(Button: TMouseButton;
Shift: TShiftState; X, Y: integer); Shift: TShiftState; X, Y: integer);
var var S, E: TPoint;
paddr: array of TPoint; i, pXUnit, pYUnit: integer;
begin begin
inherited PictureMouseUp(Button, Shift, X, Y); inherited PictureMouseUp(Button, Shift, X, Y);
if Button = mbLeft then if Button = mbLeft then
@ -718,16 +724,16 @@ begin
ptEllipse: Ellipse(StartPos.X, StartPos.Y, X, Y, Shift); ptEllipse: Ellipse(StartPos.X, StartPos.Y, X, Y, Shift);
ptPolygon: ptPolygon:
begin begin
SetLength(paddr, 3); pcount := pcount + 1;
ProcessPointAddr(StartPos.X, StartPos.Y, X, Y, paddr, 3); SetLength(paddr, pcount);
pXUnit := (X - StartPos.X) div (3 - 1); paddr[pcount - 1].x := X;
pYUnit := (Y - StartPos.Y) div (3 - 1); paddr[pcount - 1].y := Y;
for i := 0 to 3 - 1 do S := PictureToClient(Point(StartPos.X, StartPos.Y));
begin E := PictureToClient(Point(X, Y));
paddr[i].x := StartPos.X + pXUnit * i; //Canvas.Pen.Color := OutLineColor;
paddr[i].y := StartPos.Y + pYUnit * i; //Canvas.Line(S.X, S.Y, E.X, E.Y);
end; Polygon(paddr);
Canvas.Polygon(paddr); //Picture.Canvas.Polygon(paddr);
end; end;
ptMask: begin if MaskTool <> mtFloodFill then ptMask: begin if MaskTool <> mtFloodFill then
Mask(StartPos.X, StartPos.Y, X, Y, Shift); Mask(StartPos.X, StartPos.Y, X, Y, Shift);
@ -783,8 +789,11 @@ begin
if FToolDrag = tdEllipse then if FToolDrag = tdEllipse then
Canvas.Ellipse(S.X, S.Y, E.X, E.Y); Canvas.Ellipse(S.X, S.Y, E.X, E.Y);
if FToolDrag = tdPolygon then if FToolDrag = tdPolygon then
Polygon(S.X, S.Y, E.X, E.Y, [ssLeft]); begin
Canvas.Pen.Color := OutLineColor;
//Picture.Canvas.Line(paddr[pcount - 1].x, paddr[pcount - 1].y, X, Y);
Canvas.Line(S.X, S.Y, E.X, E.Y);
end;
Canvas.Pen.Mode := pmCopy; Canvas.Pen.Mode := pmCopy;
Canvas.Brush.Style := bsSolid; Canvas.Brush.Style := bsSolid;
end; end;
@ -1085,59 +1094,37 @@ begin
InvalidatePictureRect(Rect(X1, Y1, X2, Y2)); InvalidatePictureRect(Rect(X1, Y1, X2, Y2));
end; end;
procedure TCustomPictureEdit.ProcessPointAddr(X1, Y1, X2, Y2: integer; procedure TCustomPictureEdit.ProcessPointAddr;
Points: array of TPoint; PCount: integer); var i: integer; E, F: TPoint;
var i, pXUnit, pYUnit: integer;
begin begin
{ pXUnit := (X2 - X1) div (PCount - 1); if pcount > 2 then
pYUnit := (Y2 - Y1) div (PCount - 1);
for i := 0 to PCount - 1 do
begin begin
Points[i].x := X1 + pXUnit * i; E := PictureToClient(paddr[i]);
Points[i].y := Y1 + pYUnit * i; F := PictureToClient(paddr[i + 1]);
end; } for i := 0 to pcount - 2 do
Points[0].x := X1 + (X2 - X1) div 2; Canvas.Line(E.x, E.y, F.x, F.y);
Points[0].y := Y1; end;
Points[1].x := X1;
Points[1].y := Y2;
Points[2].x := X2;
Points[2].y := Y2;
end; end;
procedure TCustomPictureEdit.Polygon(X1, Y1, X2, Y2: integer; Shift: TShiftState); procedure TCustomPictureEdit.Polygon(polyaddr: array of TPoint);
var var
paddr: array of TPoint; i, pXUnit, pYUnit: integer; i: integer; tempaddr: array of TPoint;
begin begin
if Picture = nil then if Picture = nil then
Exit; Exit;
BeginDraw; BeginDraw;
if not (ssLeft in Shift) then
Picture.EraseMode := ermErase;
try try
SetLength(tempaddr, pcount);
Picture.Canvas.Brush.Color := FFillColor; Picture.Canvas.Brush.Color := FFillColor;
Picture.Canvas.Pen.Color := FOutlineColor; Picture.Canvas.Pen.Color := FOutlineColor;
SetLength(paddr, 3); for i := 0 to pcount - 1 do
ProcessPointAddr(X1, Y1, X2, Y2, paddr, 3); tempaddr[i] := polyaddr[i]; //PictureToClient(polyaddr[i]);
pXUnit := (X2 - X1) div (3 - 1); Picture.Canvas.Polygon(tempaddr);
pYUnit := (Y2 - Y1) div (3 - 1);
for i := 0 to 3 - 1 do
begin
paddr[i].x := X1 + pXUnit * i;
paddr[i].y := Y1 + pYUnit * i;
end;
{ paddr[0].x := X1 + (X2 - X1) div 2;
paddr[0].y := Y1;
paddr[1].x := X1;
paddr[1].y := Y2;
paddr[2].x := X2;
paddr[2].y := Y2; }
Picture.Canvas.Polygon(paddr);
finally finally
Picture.EraseMode := ermNone;
EndDraw; EndDraw;
end; end;
InvalidatePictureRect(Rect(X1, Y1, X2, Y2)); InvalidatePictureRect(Rect(0, 0, Width, Height));
end; end;
procedure TCustomPictureEdit.ProcessEditorText(X1, Y1, X2, Y2: integer); procedure TCustomPictureEdit.ProcessEditorText(X1, Y1, X2, Y2: integer);