The selection works with bug.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1614 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
yangjixian
2011-05-05 16:42:48 +00:00
parent c98b7de06a
commit 6d9bc2805b
7 changed files with 192 additions and 119 deletions

View File

@ -141,6 +141,7 @@ procedure DLBMPColorReplace(aBitmap: TDLBitmap; ColorFrom, ColorTo: TColor);
operator + (const A, B: TRGBATriple): TRGBATriple;
operator - (const A, B: TRGBATriple): TRGBATriple;
operator * (const A, B: TRGBATriple): TRGBATriple;
operator = (A, B: TRGBATriple): Boolean;
operator div (const A, B: TRGBATriple): TRGBATriple;
function DWordTrans(SrcRow: TRGBATriple): DWORD;
function DWordToTriple(SrcRow: DWORD): TRGBATriple;
@ -179,6 +180,14 @@ begin
Result.rgbtGreen := A.rgbtBlue div B.rgbtGreen;
end;
operator = (A, B: TRGBATriple): Boolean;
begin
A.rgbtBlue := B.rgbtBlue;
A.rgbtRed := B.rgbtRed;
A.rgbtBlue := B.rgbtGreen;
Result := True;
end;
function DWordTrans(SrcRow: TRGBATriple): DWORD;
var RR, GG, BB: integer;
begin

View File

@ -677,7 +677,7 @@ end;
procedure StretchDLBMP(ACanvas: TCanvas; Src: TDLBitmap; NewLeft, NewTop, NewWidth, NewHeight: integer);
var
dw, dh, i, j: DWord; Dest: TDLBitmap; sw, sh: Float;
dw, dh, i, j, temph: DWord; Dest: TDLBitmap; sw, sh: Float;
begin
Dest := TDLBitmap.Create;
dw := NewWidth - NewLeft;
@ -691,8 +691,11 @@ begin
Dest.Width := dw;
Dest.Height := dh;
for i := 0 to dh - 1 do
begin
temph := Trunc(i / sh);
for j := 0 to dw - 1 do
Dest.Pixels[j, i] := Src.Pixels[Trunc(j / sw), Trunc(i / sh)];
Dest.Pixels[j, i] := Src.Pixels[Trunc(j / sw), temph];
end;
Dest.InvalidateScanLine;
ACanvas.Draw(NewLeft, NewTop, Dest);
Dest.Free;

View File

@ -41,7 +41,7 @@
<PackageName Value="LCL"/>
</Item3>
</RequiredPackages>
<Units Count="45">
<Units Count="46">
<Unit0>
<Filename Value="lazimageeditor.pas"/>
<IsPartOfProject Value="True"/>
@ -49,7 +49,7 @@
<WindowIndex Value="0"/>
<TopLine Value="1"/>
<CursorPos X="14" Y="4"/>
<UsageCount Value="78"/>
<UsageCount Value="83"/>
</Unit0>
<Unit1>
<Filename Value="main.pas"/>
@ -58,11 +58,12 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Main"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="0"/>
<WindowIndex Value="0"/>
<TopLine Value="1348"/>
<CursorPos X="87" Y="1356"/>
<UsageCount Value="78"/>
<TopLine Value="843"/>
<CursorPos X="28" Y="860"/>
<UsageCount Value="83"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit1>
@ -71,9 +72,9 @@
<UnitName Value="PictureCtrls"/>
<EditorIndex Value="2"/>
<WindowIndex Value="0"/>
<TopLine Value="897"/>
<CursorPos X="41" Y="904"/>
<UsageCount Value="33"/>
<TopLine Value="1168"/>
<CursorPos X="1" Y="1193"/>
<UsageCount Value="35"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
@ -169,8 +170,8 @@
<Filename Value="T:\fpclaz\laz\lcl\graphics.pp"/>
<UnitName Value="Graphics"/>
<WindowIndex Value="0"/>
<TopLine Value="1083"/>
<CursorPos X="15" Y="1098"/>
<TopLine Value="129"/>
<CursorPos X="3" Y="149"/>
<UsageCount Value="10"/>
</Unit12>
<Unit13>
@ -180,7 +181,7 @@
<WindowIndex Value="0"/>
<TopLine Value="30"/>
<CursorPos X="53" Y="46"/>
<UsageCount Value="33"/>
<UsageCount Value="35"/>
<Loaded Value="True"/>
</Unit13>
<Unit14>
@ -244,16 +245,16 @@
<UnitName Value="BmpRGBTypes"/>
<EditorIndex Value="3"/>
<WindowIndex Value="0"/>
<TopLine Value="1"/>
<CursorPos X="97" Y="5"/>
<UsageCount Value="29"/>
<TopLine Value="502"/>
<CursorPos X="39" Y="527"/>
<UsageCount Value="31"/>
<Loaded Value="True"/>
</Unit21>
<Unit22>
<Filename Value="T:\fpclaz\laz\lcl\include\winapih.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="93"/>
<CursorPos X="10" Y="109"/>
<TopLine Value="157"/>
<CursorPos X="10" Y="176"/>
<UsageCount Value="10"/>
</Unit22>
<Unit23>
@ -284,8 +285,8 @@
<Filename Value="T:\fpclaz\fpc\2.5\packages\fcl-image\src\fpcanvas.pp"/>
<UnitName Value="FPCanvas"/>
<WindowIndex Value="0"/>
<TopLine Value="286"/>
<CursorPos X="5" Y="302"/>
<TopLine Value="123"/>
<CursorPos X="3" Y="142"/>
<UsageCount Value="10"/>
</Unit26>
<Unit27>
@ -357,12 +358,11 @@
<Unit35>
<Filename Value="DLBitmap.pas"/>
<UnitName Value="DLBitmap"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="4"/>
<WindowIndex Value="0"/>
<TopLine Value="541"/>
<CursorPos X="69" Y="558"/>
<UsageCount Value="17"/>
<TopLine Value="239"/>
<CursorPos X="36" Y="259"/>
<UsageCount Value="19"/>
<Loaded Value="True"/>
</Unit35>
<Unit36>
@ -393,9 +393,9 @@
<Filename Value="DLBmpUtils.inc"/>
<EditorIndex Value="5"/>
<WindowIndex Value="0"/>
<TopLine Value="672"/>
<CursorPos X="11" Y="686"/>
<UsageCount Value="15"/>
<TopLine Value="669"/>
<CursorPos X="48" Y="680"/>
<UsageCount Value="17"/>
<Loaded Value="True"/>
</Unit39>
<Unit40>
@ -436,127 +436,134 @@
<CursorPos X="14" Y="444"/>
<UsageCount Value="10"/>
</Unit44>
<Unit45>
<Filename Value="T:\fpclaz\fpc\2.5\rtl\objpas\classes\classesh.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="84"/>
<CursorPos X="3" Y="103"/>
<UsageCount Value="10"/>
</Unit45>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="main.pas"/>
<Caret Line="3" Column="95" TopLine="1"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="187" Column="20" TopLine="155"/>
</Position1>
<Position2>
<Filename Value="main.pas"/>
<Caret Line="503" Column="8" TopLine="487"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="656" Column="53" TopLine="630"/>
</Position2>
<Position3>
<Filename Value="main.pas"/>
<Caret Line="308" Column="22" TopLine="292"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="664" Column="14" TopLine="632"/>
</Position3>
<Position4>
<Filename Value="picturectrls.pas"/>
<Caret Line="123" Column="21" TopLine="113"/>
<Caret Line="732" Column="14" TopLine="700"/>
</Position4>
<Position5>
<Filename Value="picturemanager.pas"/>
<Caret Line="3" Column="93" TopLine="34"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="1175" Column="26" TopLine="1147"/>
</Position5>
<Position6>
<Filename Value="picturemanager.pas"/>
<Caret Line="46" Column="30" TopLine="34"/>
<Filename Value="DLBitmap.pas"/>
<Caret Line="75" Column="30" TopLine="55"/>
</Position6>
<Position7>
<Filename Value="main.pas"/>
<Caret Line="308" Column="22" TopLine="292"/>
<Filename Value="DLBitmap.pas"/>
<Caret Line="255" Column="18" TopLine="223"/>
</Position7>
<Position8>
<Filename Value="main.pas"/>
<Caret Line="503" Column="7" TopLine="487"/>
<Caret Line="611" Column="13" TopLine="591"/>
</Position8>
<Position9>
<Filename Value="main.pas"/>
<Caret Line="308" Column="22" TopLine="292"/>
<Caret Line="646" Column="13" TopLine="615"/>
</Position9>
<Position10>
<Filename Value="picturemanager.pas"/>
<Caret Line="98" Column="41" TopLine="87"/>
<Filename Value="main.pas"/>
<Caret Line="653" Column="13" TopLine="622"/>
</Position10>
<Position11>
<Filename Value="picturemanager.pas"/>
<Caret Line="40" Column="3" TopLine="24"/>
<Filename Value="main.pas"/>
<Caret Line="660" Column="13" TopLine="629"/>
</Position11>
<Position12>
<Filename Value="main.pas"/>
<Caret Line="308" Column="22" TopLine="292"/>
<Caret Line="674" Column="13" TopLine="643"/>
</Position12>
<Position13>
<Filename Value="main.pas"/>
<Caret Line="503" Column="49" TopLine="487"/>
<Caret Line="681" Column="13" TopLine="650"/>
</Position13>
<Position14>
<Filename Value="main.pas"/>
<Caret Line="1123" Column="10" TopLine="1106"/>
<Caret Line="851" Column="13" TopLine="820"/>
</Position14>
<Position15>
<Filename Value="main.pas"/>
<Caret Line="324" Column="41" TopLine="308"/>
<Caret Line="1384" Column="1" TopLine="1347"/>
</Position15>
<Position16>
<Filename Value="picturectrls.pas"/>
<Caret Line="174" Column="28" TopLine="163"/>
<Filename Value="main.pas"/>
<Caret Line="862" Column="38" TopLine="843"/>
</Position16>
<Position17>
<Filename Value="picturectrls.pas"/>
<Caret Line="644" Column="35" TopLine="618"/>
<Caret Line="1149" Column="73" TopLine="1144"/>
</Position17>
<Position18>
<Filename Value="picturectrls.pas"/>
<Caret Line="666" Column="37" TopLine="640"/>
<Filename Value="main.pas"/>
<Caret Line="862" Column="9" TopLine="843"/>
</Position18>
<Position19>
<Filename Value="main.pas"/>
<Caret Line="324" Column="41" TopLine="308"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="187" Column="19" TopLine="168"/>
</Position19>
<Position20>
<Filename Value="main.pas"/>
<Caret Line="4" Column="101" TopLine="1"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="199" Column="30" TopLine="168"/>
</Position20>
<Position21>
<Filename Value="main.pas"/>
<Caret Line="156" Column="58" TopLine="150"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="640" Column="78" TopLine="633"/>
</Position21>
<Position22>
<Filename Value="main.pas"/>
<Caret Line="176" Column="22" TopLine="150"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="664" Column="14" TopLine="633"/>
</Position22>
<Position23>
<Filename Value="main.pas"/>
<Caret Line="278" Column="32" TopLine="252"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="732" Column="14" TopLine="701"/>
</Position23>
<Position24>
<Filename Value="main.pas"/>
<Caret Line="69" Column="94" TopLine="66"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="259" Column="85" TopLine="247"/>
</Position24>
<Position25>
<Filename Value="main.pas"/>
<Caret Line="503" Column="37" TopLine="480"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="578" Column="90" TopLine="562"/>
</Position25>
<Position26>
<Filename Value="main.pas"/>
<Caret Line="29" Column="75" TopLine="23"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="170" Column="101" TopLine="162"/>
</Position26>
<Position27>
<Filename Value="main.pas"/>
<Caret Line="45" Column="17" TopLine="23"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="414" Column="39" TopLine="383"/>
</Position27>
<Position28>
<Filename Value="picturectrls.pas"/>
<Caret Line="904" Column="41" TopLine="899"/>
<Caret Line="425" Column="32" TopLine="394"/>
</Position28>
<Position29>
<Filename Value="picturectrls.pas"/>
<Caret Line="214" Column="38" TopLine="198"/>
<Caret Line="733" Column="1" TopLine="719"/>
</Position29>
<Position30>
<Filename Value="main.pas"/>
<Caret Line="503" Column="87" TopLine="80"/>
<Filename Value="picturectrls.pas"/>
<Caret Line="791" Column="39" TopLine="769"/>
</Position30>
</JumpHistory>
</ProjectOptions>

View File

@ -1,7 +1,7 @@
object MainForm: TMainForm
Left = 90
Left = 519
Height = 681
Top = 90
Top = 272
Width = 920
Caption = 'Lazarus Image Editor'
ClientHeight = 659
@ -1385,9 +1385,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'#2'Z'#6'Height'#3#169#2#3'Top'#2'Z'#5
+'Width'#3#152#3#7'Caption'#6#20'Lazarus Image Editor'#12'ClientHeight'#3#147
+#2#11'ClientWidth'#3#152#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#20#2#3'Top'#2'i'#5'Width'#2'('#5'Align'#7#6'alLe'
+'ft'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3#20#2#11'ClientWidth'#2'('
+#11'ParentColor'#8#8'TabOrder'#2#0#0#8'TToolBar'#12'ToolBarTools'#4'Left'#2#0
+#6'Height'#3#20#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'
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3#7#2#6'Height'#3#169#2#3'Top'#3#16#1
+#5'Width'#3#152#3#7'Caption'#6#20'Lazarus Image Editor'#12'ClientHeight'#3
+#147#2#11'ClientWidth'#3#152#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#20#2#3'Top'#2'i'#5'Width'#2'('#5'Align'#7#6
+'alLeft'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3#20#2#11'ClientWidth'#2
+'('#11'ParentColor'#8#8'TabOrder'#2#0#0#8'TToolBar'#12'ToolBarTools'#4'Left'
+#2#0#6'Height'#3#20#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'
+#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
@ -756,7 +756,7 @@ LazarusResources.Add('TMainForm','FORMDATA',[
+'rentColor'#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'TabOrder'#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'
+'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#20#2#3'Top'#2'i'#5'Width'#3'%'#3#5'Align'#7#8'alCl'
+'ient'#10'BevelOuter'#7#9'bvLowered'#8'TabOrder'#2#3#0#0#9'TMainMenu'#8'Main'

View File

@ -263,8 +263,8 @@ type
procedure PanelFillDblClick(Sender: TObject);
procedure PanelOutlineDblClick(Sender: TObject);
procedure PanelPaperDblClick(Sender: TObject);
procedure PanelPaperDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure PanelPaperDragOver(Sender, Source: TObject; X, Y: integer;
State: TDragState; var Accept: boolean);
procedure PicturePageChange(Sender: TObject);
procedure PictureChange(Sender: TObject);
procedure PicturePageClose(Sender: TObject);
@ -812,14 +812,14 @@ begin
end;
end;
procedure TMainForm.PanelPaperDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure TMainForm.PanelPaperDragOver(Sender, Source: TObject;
X, Y: integer; State: TDragState; var Accept: boolean);
begin
if not Pictures.CanEdit then
Exit;
if Source is TColorPalette then
begin
TPanel(Sender).Color:=Palette.PickedColor;
TPanel(Sender).Color := Palette.PickedColor;
if Sender = PanelPaper then
ActivePictureEdit.PaperColor := Palette.PickedColor;
if Sender = PanelFill then
@ -853,6 +853,12 @@ end;
procedure TMainForm.ChangeTool(Tool: TPictureEditTool);
begin
if ActivePictureEdit.IsSelection then
with ActivePictureEdit do
begin
Mask(XX1, YY1, XX2, YY2, [ssLeft]);
IsSelection := False;
end;
ActivePictureEdit.Tool := Tool;
UpdateToolSettings;
ToolBarToolsClick(nil);
@ -1059,7 +1065,7 @@ begin
EditUndo.Hint := lieHintEditUndo;
//Labels
// LabelZoom.Caption := lieLabelZoom;
// LabelZoom.Caption := lieLabelZoom;
LabelShape.Caption := lieLabelShape;
LabelFillOutline.Caption := lieLabelFillOutline;
LabelMaskTool.Caption := lieLabelMaskTool;

View File

@ -71,6 +71,9 @@ type
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: integer); override;
procedure UpdatePictureRect;
public
SeleLeft, SeleTop, XX1, XX2, YY1, YY2: integer;
SelectedDLBMP: TDLBitmap;
IsSelection: Boolean;
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure Paint; override;
@ -161,6 +164,7 @@ type
procedure DrawToolDrag(X1, Y1, X2, Y2: integer); virtual;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure NewPicture(AWidth, AHeight: integer; APaperColor: TColor);
procedure LoadPicture(const FileName: string); override;
@ -468,6 +472,18 @@ begin
Application.QueueAsyncCall(@MaskDraw, FPaintIndex);
end;
end;
{if IsSelection then
begin
Canvas.Pen.Mode:=pmNotXor;
if SeleLeft < FPictureRect.Left then
SeleLeft := FPictureRect.Left;
if SeleTop < FPictureRect.Top then
SeleTop := FPictureRect.Top;
if (Seleleft >= FPictureRect.Left) and (SeleTop >= FPictureRect.Top){ and
(SeleLeft + SelectedDLBMP.Width <= FPictureRect.Right) and
(SeleTop + SelectedDLBMP.Height <= FPictureRect.Bottom)} then
Canvas.Draw(SeleLeft, SeleTop, SelectedDLBMP);
end; }
end;
end;
@ -634,11 +650,19 @@ begin
inherited PictureMouseDown(Button, Shift, X, Y);
FTempPos := Point(X, Y);
IsSelection := False;
case Tool of
ptPen: Line(X, Y, X, Y, Shift);
ptFloodFill: FloodFill(X, Y, Shift);
ptMask: if MaskTool = mtFloodFill then
ptMask: begin if MaskTool = mtFloodFill then
MaskFloodFill(X, Y, Shift);
Canvas.Pen.Style := psDot;
Canvas.Pen.Mode := pmXor;
IsSelection := True;
SeleLeft := X;
SeleTop := Y;
Mask(XX1, YY1, XX2, YY2, Shift);
end;
ptColorPick: ColorPick(X, Y, Shift);
ptEraser: Eraser(X, Y, Shift);
ptColorReplacer: ColorReplacer(X, Y, Shift);
@ -704,8 +728,10 @@ begin
end;
Canvas.Polygon(paddr);
end;
ptMask: if MaskTool <> mtFloodFill then
ptMask: begin if MaskTool <> mtFloodFill then
Mask(StartPos.X, StartPos.Y, X, Y, Shift);
IsSelection := True;
end;
end;
FToolDrag := tdNone;
@ -778,6 +804,14 @@ begin
FloodFillTolerance := 0;
Cursor := crCross;
SelectedDLBMP := TDLBitmap.Create;
end;
destructor TCustomPictureEdit.Destroy;
begin
SelectedDLBMP.Free;
inherited;
end;
procedure TCustomPictureEdit.NewPicture(AWidth, AHeight: integer; APaperColor: TColor);
@ -942,16 +976,8 @@ begin
Exit;
BeginDraw;
// if not (ssLeft in Shift) then Picture.EraseMode := ermErase;
// Picture.RandomEnabled := True;
try
// Picture.Canvas.Pen.Color:=FFillColor;
// Picture.Canvas.Brush.Color:=FFillColor;
R := Bounds(X - FSize div 2, Y - FSize div 2, FSize, FSize);
{case Shape of
psRect: Picture.Canvas.FillRect(R.Left, R.Top, R.Right, R.Bottom);
psCircle: Picture.FillEllipse(R.Left, R.Top, R.Right, R.Bottom);
end; }
Picture.Spray(X, Y, 11, FFillColor);
finally
Picture.EraseMode := ermNone;
@ -1139,6 +1165,28 @@ begin
mtEllipse: Picture.Mask.Ellipse(X1, Y1, X2, Y2);
mtRectangle: Picture.Mask.Rectangle(X1, Y1, X2, Y2);
end;
Picture.Canvas.Pen.Style := psSolid; //psDot;
Picture.Canvas.Pen.Color := clGray;
Picture.Canvas.Pen.Mode := pmNotXor;
Picture.Canvas.Brush.Color := $00EACAB6;
//Canvas.Brush.Style := bsClear;
Picture.Canvas.Rectangle(X1, Y1, X2, Y2);
SelectedDLBMP.Width := Abs(X2 - X1);
SelectedDLBMP.Height := Abs(Y2 - Y1);
SelectedDLBMP.Canvas.CopyRect(Rect(0, 0, SelectedDLBMP.Width, SelectedDLBMP.Height),
Picture.Canvas, Rect(X1, Y1, X2, Y2));
// if SelectedDLBMP <> nil then
// SelectedDLBMP.CopyToClipboard;
// Picture.Canvas.Draw(0,0,SelectedDLBMP);
Picture.Canvas.Pen.Mode := pmCopy;
Picture.Canvas.Pen.Style := psSolid;
SeleLeft := X1;
SeleTop := Y1;
XX1 := X1;
XX2 := X2;
YY1 := Y1;
YY2 := Y2;
finally
Picture.Mask.FillMode := mfAdd;
EndDraw;