Polygon is as the popular.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1639 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
yangjixian
2011-05-19 12:50:02 +00:00
parent 23c8164c0f
commit b6e9165a0e
5 changed files with 141 additions and 83 deletions

View File

@ -49,7 +49,7 @@
<WindowIndex Value="0"/>
<TopLine Value="1"/>
<CursorPos X="14" Y="4"/>
<UsageCount Value="90"/>
<UsageCount Value="91"/>
</Unit0>
<Unit1>
<Filename Value="main.pas"/>
@ -58,22 +58,22 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Main"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="0"/>
<WindowIndex Value="0"/>
<TopLine Value="461"/>
<CursorPos X="21" Y="473"/>
<UsageCount Value="90"/>
<TopLine Value="704"/>
<CursorPos X="28" Y="886"/>
<UsageCount Value="91"/>
<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="797"/>
<CursorPos X="53" Y="814"/>
<TopLine Value="689"/>
<CursorPos X="25" Y="715"/>
<UsageCount Value="37"/>
<Loaded Value="True"/>
</Unit2>
@ -170,8 +170,8 @@
<Filename Value="T:\fpclaz\laz\lcl\graphics.pp"/>
<UnitName Value="Graphics"/>
<WindowIndex Value="0"/>
<TopLine Value="1115"/>
<CursorPos X="15" Y="1131"/>
<TopLine Value="2644"/>
<CursorPos X="9" Y="2671"/>
<UsageCount Value="10"/>
</Unit12>
<Unit13>
@ -414,8 +414,8 @@
<Unit42>
<Filename Value="T:\fpclaz\laz\lcl\include\canvas.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="135"/>
<CursorPos X="1" Y="141"/>
<TopLine Value="857"/>
<CursorPos X="12" Y="888"/>
<UsageCount Value="10"/>
</Unit42>
<Unit43>
@ -445,123 +445,123 @@
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="picturectrls.pas"/>
<Caret Line="722" Column="37" TopLine="696"/>
<Caret Line="797" Column="27" TopLine="766"/>
</Position1>
<Position2>
<Filename Value="picturectrls.pas"/>
<Caret Line="281" Column="88" TopLine="274"/>
<Caret Line="1104" Column="44" TopLine="1073"/>
</Position2>
<Position3>
<Filename Value="picturectrls.pas"/>
<Caret Line="722" Column="37" TopLine="696"/>
<Caret Line="1115" Column="27" TopLine="1084"/>
</Position3>
<Position4>
<Filename Value="picturectrls.pas"/>
<Caret Line="752" Column="49" TopLine="726"/>
<Caret Line="1136" Column="37" TopLine="1105"/>
</Position4>
<Position5>
<Filename Value="picturectrls.pas"/>
<Caret Line="790" Column="36" TopLine="764"/>
<Caret Line="1150" Column="27" TopLine="1119"/>
</Position5>
<Position6>
<Filename Value="picturectrls.pas"/>
<Caret Line="791" Column="25" TopLine="765"/>
<Caret Line="1157" Column="38" TopLine="1142"/>
</Position6>
<Position7>
<Filename Value="picturectrls.pas"/>
<Caret Line="792" Column="25" TopLine="766"/>
<Filename Value="main.pas"/>
<Caret Line="465" Column="14" TopLine="461"/>
</Position7>
<Position8>
<Filename Value="picturectrls.pas"/>
<Caret Line="1115" Column="71" TopLine="1097"/>
<Filename Value="main.pas"/>
<Caret Line="471" Column="13" TopLine="461"/>
</Position8>
<Position9>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="738" Column="8" TopLine="716"/>
<Filename Value="main.pas"/>
<Caret Line="514" Column="13" TopLine="483"/>
</Position9>
<Position10>
<Filename Value="DLBmpUtils.inc"/>
<Caret Line="758" Column="16" TopLine="730"/>
<Filename Value="main.pas"/>
<Caret Line="521" Column="13" TopLine="490"/>
</Position10>
<Position11>
<Filename Value="picturectrls.pas"/>
<Caret Line="134" Column="96" TopLine="129"/>
<Filename Value="main.pas"/>
<Caret Line="529" Column="13" TopLine="498"/>
</Position11>
<Position12>
<Filename Value="picturectrls.pas"/>
<Caret Line="188" Column="29" TopLine="162"/>
<Filename Value="main.pas"/>
<Caret Line="588" Column="13" TopLine="557"/>
</Position12>
<Position13>
<Filename Value="picturectrls.pas"/>
<Caret Line="730" Column="18" TopLine="711"/>
<Filename Value="main.pas"/>
<Caret Line="595" Column="13" TopLine="564"/>
</Position13>
<Position14>
<Filename Value="picturectrls.pas"/>
<Caret Line="670" Column="35" TopLine="657"/>
<Filename Value="main.pas"/>
<Caret Line="616" Column="13" TopLine="585"/>
</Position14>
<Position15>
<Filename Value="picturectrls.pas"/>
<Caret Line="722" Column="37" TopLine="716"/>
<Filename Value="main.pas"/>
<Caret Line="623" Column="13" TopLine="592"/>
</Position15>
<Position16>
<Filename Value="picturectrls.pas"/>
<Caret Line="752" Column="49" TopLine="744"/>
<Filename Value="main.pas"/>
<Caret Line="630" Column="13" TopLine="599"/>
</Position16>
<Position17>
<Filename Value="main.pas"/>
<Caret Line="463" Column="30" TopLine="336"/>
<Caret Line="665" Column="13" TopLine="634"/>
</Position17>
<Position18>
<Filename Value="main.pas"/>
<Caret Line="464" Column="30" TopLine="433"/>
<Caret Line="672" Column="13" TopLine="641"/>
</Position18>
<Position19>
<Filename Value="main.pas"/>
<Caret Line="463" Column="30" TopLine="432"/>
<Caret Line="679" Column="13" TopLine="648"/>
</Position19>
<Position20>
<Filename Value="main.pas"/>
<Caret Line="464" Column="30" TopLine="433"/>
<Caret Line="693" Column="13" TopLine="662"/>
</Position20>
<Position21>
<Filename Value="picturectrls.pas"/>
<Caret Line="168" Column="27" TopLine="154"/>
<Filename Value="main.pas"/>
<Caret Line="700" Column="13" TopLine="669"/>
</Position21>
<Position22>
<Filename Value="picturectrls.pas"/>
<Caret Line="188" Column="29" TopLine="162"/>
<Filename Value="main.pas"/>
<Caret Line="870" Column="13" TopLine="839"/>
</Position22>
<Position23>
<Filename Value="picturectrls.pas"/>
<Caret Line="722" Column="37" TopLine="705"/>
<Caret Line="188" Column="15" TopLine="157"/>
</Position23>
<Position24>
<Filename Value="picturectrls.pas"/>
<Caret Line="752" Column="49" TopLine="735"/>
<Caret Line="366" Column="46" TopLine="359"/>
</Position24>
<Position25>
<Filename Value="picturectrls.pas"/>
<Caret Line="791" Column="80" TopLine="776"/>
<Caret Line="372" Column="34" TopLine="359"/>
</Position25>
<Position26>
<Filename Value="picturectrls.pas"/>
<Caret Line="564" Column="83" TopLine="549"/>
<Caret Line="373" Column="24" TopLine="359"/>
</Position26>
<Position27>
<Filename Value="picturectrls.pas"/>
<Caret Line="568" Column="35" TopLine="549"/>
<Caret Line="395" Column="39" TopLine="379"/>
</Position27>
<Position28>
<Filename Value="picturectrls.pas"/>
<Caret Line="574" Column="35" TopLine="549"/>
<Caret Line="399" Column="22" TopLine="379"/>
</Position28>
<Position29>
<Filename Value="picturectrls.pas"/>
<Caret Line="582" Column="25" TopLine="556"/>
<Caret Line="404" Column="21" TopLine="379"/>
</Position29>
<Position30>
<Filename Value="main.pas"/>
<Caret Line="465" Column="30" TopLine="434"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="713" Column="15" TopLine="690"/>
</Position30>
</JumpHistory>
</ProjectOptions>

View File

@ -1,7 +1,7 @@
object MainForm: TMainForm
Left = 150
Left = 100
Height = 718
Top = 60
Top = 30
Width = 925
Caption = 'Lazarus Image Editor'
ClientHeight = 696
@ -1421,9 +1421,9 @@
TabOrder = 5
object checkFuzzy: TCheckBox
Left = 4
Height = 23
Height = 19
Top = 5
Width = 24
Width = 20
OnChange = checkFuzzyChange
TabOrder = 0
end

View File

@ -1,27 +1,27 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TMainForm','FORMDATA',[
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3#150#0#6'Height'#3#206#2#3'Top'#2'<'
+#5'Width'#3#157#3#7'Caption'#6#20'Lazarus Image Editor'#12'ClientHeight'#3
+#184#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
+#145#10'Font.Pitch'#7#10'fpVariable'#12'Font.Quality'#7#7'fqDraft'#4'Menu'#7
+#8'MainMenu'#12'OnCloseQuery'#7#14'FormCloseQuery'#8'OnCreate'#7#10'FormCrea'
+'te'#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#6'0.9.31'#0#6'TPanel'#10'Panel'
+'Tools'#4'Left'#2#0#6'Height'#3'9'#2#3'Top'#2'i'#5'Width'#2'('#5'Align'#7#6
+'alLeft'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3'9'#2#11'ClientWidth'#2
+'('#11'ParentColor'#8#8'TabOrder'#2#0#0#8'TToolBar'#12'ToolBarTools'#4'Left'
+#2#0#6'Height'#3'9'#2#3'Top'#2#0#5'Width'#2'('#5'Align'#7#6'alLeft'#12'Butto'
+'nHeight'#2'('#11'ButtonWidth'#2'('#7'Caption'#6#12'ToolBarTools'#21'Constra'
+'ints.MinHeight'#3#146#1#6'Images'#7#14'ImageListTools'#6'Indent'#2#0#8'TabO'
+'rder'#2#0#7'OnClick'#7#17'ToolBarToolsClick'#0#11'TToolButton'#9'ToolSpray'
+#4'Left'#2#0#4'Hint'#6#5'Spray'#3'Top'#3'j'#1#7'Grouped'#9#10'ImageIndex'#2#9
+#7'OnClick'#7#14'ToolSprayClick'#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'
+#7#8'tbsCheck'#0#0#11'TToolButton'#13'ToolFloodFill'#4'Left'#2#0#4'Hint'#6#10
+'Flood Fill'#3'Top'#3'B'#1#7'Grouped'#9#10'ImageIndex'#2#8#7'OnClick'#7#18'T'
+'oolFloodFillClick'#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'
+#0#0#11'TToolButton'#10'ToolEraser'#4'Left'#2#0#4'Hint'#6#15'Eraser/Replacer'
+#3'Top'#2'z'#7'Grouped'#9#10'ImageIndex'#2#3#7'OnClick'#7#15'ToolEraserClick'
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#2'd'#6'Height'#3#206#2#3'Top'#2#30#5
+'Width'#3#157#3#7'Caption'#6#20'Lazarus Image Editor'#12'ClientHeight'#3#184
+#2#11'ClientWidth'#3#157#3#12'Font.CharSet'#7#14'GB2312_CHARSET'#11'Font.Hei'
+'ght'#2#243#9'Font.Name'#6#12#229#190#174#232#189#175#233#155#133#233#187#145
+#10'Font.Pitch'#7#10'fpVariable'#12'Font.Quality'#7#7'fqDraft'#4'Menu'#7#8'M'
+'ainMenu'#12'OnCloseQuery'#7#14'FormCloseQuery'#8'OnCreate'#7#10'FormCreate'
+#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#6'0.9.31'#0#6'TPanel'#10'PanelTool'
+'s'#4'Left'#2#0#6'Height'#3'9'#2#3'Top'#2'i'#5'Width'#2'('#5'Align'#7#6'alLe'
+'ft'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3'9'#2#11'ClientWidth'#2'('
+#11'ParentColor'#8#8'TabOrder'#2#0#0#8'TToolBar'#12'ToolBarTools'#4'Left'#2#0
+#6'Height'#3'9'#2#3'Top'#2#0#5'Width'#2'('#5'Align'#7#6'alLeft'#12'ButtonHei'
+'ght'#2'('#11'ButtonWidth'#2'('#7'Caption'#6#12'ToolBarTools'#21'Constraints'
+'.MinHeight'#3#146#1#6'Images'#7#14'ImageListTools'#6'Indent'#2#0#8'TabOrder'
+#2#0#7'OnClick'#7#17'ToolBarToolsClick'#0#11'TToolButton'#9'ToolSpray'#4'Lef'
+'t'#2#0#4'Hint'#6#5'Spray'#3'Top'#3'j'#1#7'Grouped'#9#10'ImageIndex'#2#9#7'O'
+'nClick'#7#14'ToolSprayClick'#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8
+'tbsCheck'#0#0#11'TToolButton'#13'ToolFloodFill'#4'Left'#2#0#4'Hint'#6#10'Fl'
+'ood Fill'#3'Top'#3'B'#1#7'Grouped'#9#10'ImageIndex'#2#8#7'OnClick'#7#18'Too'
+'lFloodFillClick'#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0
+#0#11'TToolButton'#10'ToolEraser'#4'Left'#2#0#4'Hint'#6#15'Eraser/Replacer'#3
+'Top'#2'z'#7'Grouped'#9#10'ImageIndex'#2#3#7'OnClick'#7#15'ToolEraserClick'
+#14'ParentShowHint'#8#8'ShowHint'#9#5'Style'#7#8'tbsCheck'#0#0#11'TToolButto'
+'n'#7'ToolPen'#4'Left'#2#0#4'Hint'#6#3'Pen'#3'Top'#2'R'#7'Grouped'#9#10'Imag'
+'eIndex'#2#2#7'OnClick'#7#12'ToolPenClick'#14'ParentShowHint'#8#8'ShowHint'#9
@ -764,8 +764,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#23#3'Top'#2
+#5#5'Width'#2#24#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#19#3'Top'#2
+#5#5'Width'#2#20#8'OnChange'#7#16'checkFuzzyChange'#8'TabOrder'#2#0#0#0#0#0#0
+#6'TPanel'#13'PanelPictures'#4'Left'#2'('#6'Height'#3'9'#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

@ -883,6 +883,8 @@ begin
YY2 := 0;
end;
ActivePictureEdit.pcount := 0;
if ActivePictureEdit.Tool = ptPolygon then
ActivePictureEdit.FinishPolygon;
ActivePictureEdit.Tool := Tool;
UpdateToolSettings;
ToolBarToolsClick(nil);

View File

@ -185,6 +185,8 @@ type
procedure Rectangle(X1, Y1, X2, Y2: integer; Shift: TShiftState = [ssLeft]);
procedure Ellipse(X1, Y1, X2, Y2: integer; Shift: TShiftState = [ssLeft]);
procedure Polygon(polyaddr: array of TPoint);
procedure FinishPolygon;
procedure PolygonWithoutEdge(polyaddr: array of TPoint);
procedure RegularPolygon(X1, Y1, X2, Y2: integer; Shift: TShiftState = [ssLeft]);
procedure ProcessEditorText(X1, Y1, X2, Y2: integer);
procedure ProcessPointAddr;
@ -681,6 +683,7 @@ begin
end;
procedure TCustomPictureEdit.PictureMouseMove(Shift: TShiftState; X, Y: integer);
var S, E, P: TPoint;
begin
inherited PictureMouseMove(Shift, X, Y);
@ -699,6 +702,21 @@ begin
end;
end;
if Tool = ptPolygon then
begin
if pcount > 0 then
begin
Canvas.Pen.Mode := pmNotXor;
Canvas.Brush.Style := bsSolid;
S := PictureToClient(FTempPos);
E := PictureToClient(Point(X, Y));
P := PictureToClient(paddr[pcount - 1]);
Canvas.Line(P.x, P.y, S.X, S.Y);
Canvas.Line(P.x, P.y, E.X, E.Y);
Canvas.Pen.Mode := pmCopy;
end;
end;
DrawToolDrag(StartPos.X, StartPos.Y, FTempPos.X, FTempPos.Y);
FTempPos := Point(X, Y);
@ -730,8 +748,11 @@ begin
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);
if Shift * [ssLeft] <> [] then
PolygonWithoutEdge(paddr);
if Shift * [ssRight] <> [] then
//Picture.Canvas.Polygon(paddr);
FinishPolygon;
end;
ptMask: begin if MaskTool <> mtFloodFill then
Mask(StartPos.X, StartPos.Y, X, Y, Shift);
@ -1149,6 +1170,41 @@ begin
InvalidatePictureRect(Rect(0, 0, Width, Height));
end;
procedure TCustomPictureEdit.FinishPolygon;
begin
if Picture = nil then
Exit;
BeginDraw;
try
Picture.Canvas.Brush.Color := FFillColor;
Picture.Canvas.Pen.Color := FOutlineColor;
Picture.Canvas.Polygon(paddr);
pcount := 0;
finally
EndDraw;
end;
InvalidatePictureRect(Rect(0, 0, Width, Height));
end;
procedure TCustomPictureEdit.PolygonWithoutEdge(polyaddr: array of TPoint);
var
i: integer;
begin
if Picture = nil then
Exit;
BeginDraw;
try
Picture.Canvas.Brush.Color := FFillColor;
Picture.Canvas.Pen.Color := FOutlineColor;
for i := 1 to pcount - 1 do
Picture.Canvas.Line(polyaddr[i - 1].x, polyaddr[i - 1].y, polyaddr[i].x, polyaddr[i].y);
finally
EndDraw;
end;
InvalidatePictureRect(Rect(0, 0, Width, Height));
end;
procedure TCustomPictureEdit.ProcessEditorText(X1, Y1, X2, Y2: integer);
var P: TRect;
begin