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

View File

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

View File

@ -1,7 +1,7 @@
{ This is an automatically generated lazarus resource file }
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
+#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
@ -757,8 +757,8 @@ LazarusResources.Add('TMainForm','FORMDATA',[
+'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'
+#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
+#5#5'Width'#2#20#8'OnChange'#7#16'checkFuzzyChange'#8'TabOrder'#2#0#0#0#0#0#0
+'Order'#2#5#0#9'TCheckBox'#10'checkFuzzy'#4'Left'#2#4#6'Height'#2#23#3'Top'#2
+#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'
+'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

View File

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