ctrl+drag gradient to stretch it
This commit is contained in:
parent
7ef860f019
commit
d2d4a62a61
@ -277,9 +277,10 @@ type
|
|||||||
scrollMode: (modeRotate,
|
scrollMode: (modeRotate,
|
||||||
modeHue, modeSaturation, modeBrightness, modeContrast,
|
modeHue, modeSaturation, modeBrightness, modeContrast,
|
||||||
modeBlur, modeFrequency);
|
modeBlur, modeFrequency);
|
||||||
imgDrag, GradientChanged: boolean;
|
GradientChanged: boolean;
|
||||||
|
imgDragMode: (imgDragNone, imgDragRotate, imgDragStretch);
|
||||||
dragX, oldX: integer;
|
dragX, oldX: integer;
|
||||||
offset: integer; // for display...? :-\
|
oldpos, offset: integer; // for display...? :-\
|
||||||
|
|
||||||
procedure Apply;
|
procedure Apply;
|
||||||
function Blur(const radius: integer; const pal: TColorMap): TColorMap;
|
function Blur(const radius: integer; const pal: TColorMap): TColorMap;
|
||||||
@ -1618,18 +1619,63 @@ begin
|
|||||||
begin
|
begin
|
||||||
dragX:=x;
|
dragX:=x;
|
||||||
oldX:=x; // hmmm
|
oldX:=x; // hmmm
|
||||||
|
oldpos := ( ((x) shl 8) div GradientImage.Width) mod 256;
|
||||||
|
if oldpos = 0 then oldpos := 1;
|
||||||
tmpBackupPal := BackupPal;
|
tmpBackupPal := BackupPal;
|
||||||
imgDrag:=true;
|
if ssCtrl in Shift then
|
||||||
|
imgDragMode := imgDragStretch
|
||||||
|
else
|
||||||
|
imgDragMode := imgDragRotate;
|
||||||
GradientChanged:=false;
|
GradientChanged:=false;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TAdjustForm.GradImageMouseMove(Sender: TObject;
|
procedure TAdjustForm.GradImageMouseMove(Sender: TObject;
|
||||||
Shift: TShiftState; X, Y: Integer);
|
Shift: TShiftState; X, Y: Integer);
|
||||||
|
procedure StretchGradient(i0, i1, j0, j1: integer);
|
||||||
|
var
|
||||||
|
k, f: double;
|
||||||
|
i, j, jj, n: integer;
|
||||||
|
begin
|
||||||
|
k := (j1 - j0) / (i1 - i0);
|
||||||
|
|
||||||
|
if k >= 1 then
|
||||||
|
begin
|
||||||
|
for i := i0 to i1-1 do
|
||||||
|
begin
|
||||||
|
j := j0 + round((i - i0) * k);
|
||||||
|
|
||||||
|
assert(j >= 0);
|
||||||
|
assert(j < 256);
|
||||||
|
|
||||||
|
cp.cmap[i] := Palette[j];
|
||||||
|
BackupPal[i] := tmpBackupPal[j]; //?
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
for i := i0 to i1-1 do
|
||||||
|
begin
|
||||||
|
f := (i - i0) * k;
|
||||||
|
j := j0 + trunc(f);
|
||||||
|
f := frac(f);
|
||||||
|
|
||||||
|
assert(j >= 0);
|
||||||
|
assert(j < 256);
|
||||||
|
|
||||||
|
if j < 255 then jj := j + 1
|
||||||
|
else jj := 0;
|
||||||
|
for n := 0 to 2 do begin
|
||||||
|
cp.cmap[i][n] := round( Palette[j][n]*(1-f) + Palette[jj][n]*f );
|
||||||
|
BackupPal[i][n] := round( tmpBackupPal[j][n]*(1-f) + tmpBackupPal[jj][n]*f ); //?
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
var
|
var
|
||||||
i: integer;
|
i, j: integer;
|
||||||
|
k: double;
|
||||||
begin
|
begin
|
||||||
if imgDrag and (oldX<>x) then
|
if (imgDragMode <> imgDragNone) and (oldX<>x) then
|
||||||
begin
|
begin
|
||||||
oldX:=x;
|
oldX:=x;
|
||||||
offset := ( ((x - dragX) shl 8) div GradientImage.Width) mod 256;
|
offset := ( ((x - dragX) shl 8) div GradientImage.Width) mod 256;
|
||||||
@ -1637,35 +1683,22 @@ begin
|
|||||||
lblOffset.Refresh;
|
lblOffset.Refresh;
|
||||||
GradientChanged := true;
|
GradientChanged := true;
|
||||||
|
|
||||||
|
if imgDragmode = imgDragRotate then begin
|
||||||
for i := 0 to 255 do
|
for i := 0 to 255 do
|
||||||
begin
|
begin
|
||||||
cp.cmap[i][0] := Palette[(256 + i - offset) and $FF][0];
|
cp.cmap[i] := Palette[(256 + i - offset) and $FF];
|
||||||
cp.cmap[i][1] := Palette[(256 + i - offset) and $FF][1];
|
|
||||||
cp.cmap[i][2] := Palette[(256 + i - offset) and $FF][2];
|
|
||||||
|
|
||||||
BackupPal[i][0] := tmpBackupPal[(256 + i - offset) and $FF][0];
|
BackupPal[i] := tmpBackupPal[(256 + i - offset) and $FF];
|
||||||
BackupPal[i][1] := tmpBackupPal[(256 + i - offset) and $FF][1];
|
|
||||||
BackupPal[i][2] := tmpBackupPal[(256 + i - offset) and $FF][2];
|
|
||||||
end;
|
end;
|
||||||
//? cp.CmapIndex := cmbPalette.ItemIndex;
|
|
||||||
//cp.cmap := Palette;
|
|
||||||
|
|
||||||
(*
|
|
||||||
if scrollMode = modeRotate then
|
|
||||||
begin
|
|
||||||
Resetting := true;
|
|
||||||
if offset < -128 then ScrollBar.Position := offset+256
|
|
||||||
else if offset > 128 then ScrollBar.Position := offset-256
|
|
||||||
else ScrollBar.Position := offset;
|
|
||||||
Resetting := false;
|
|
||||||
end
|
end
|
||||||
else for i := 0 to 255 do
|
else begin
|
||||||
begin
|
offset := ( (x shl 8) div GradientImage.Width);
|
||||||
BackupPal[i][0] := tmpBackupPal[(256 + i - offset) and $FF][0];
|
if offset <= 0 then offset := 1
|
||||||
BackupPal[i][1] := tmpBackupPal[(256 + i - offset) and $FF][1];
|
else if offset > 255 then offset := 255;
|
||||||
BackupPal[i][2] := tmpBackupPal[(256 + i - offset) and $FF][2];
|
|
||||||
|
StretchGradient(0, offset, 0, oldpos);
|
||||||
|
StretchGradient(offset, 256, oldpos, 256);
|
||||||
end;
|
end;
|
||||||
*)
|
|
||||||
|
|
||||||
DrawPreview;
|
DrawPreview;
|
||||||
end;
|
end;
|
||||||
@ -1674,9 +1707,9 @@ end;
|
|||||||
procedure TAdjustForm.GradImageMouseUp(Sender: TObject;
|
procedure TAdjustForm.GradImageMouseUp(Sender: TObject;
|
||||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||||
begin
|
begin
|
||||||
if imgDrag then
|
if imgDragMode <> imgDragNone then
|
||||||
begin
|
begin
|
||||||
imgDrag := false;
|
imgDragMode := imgDragNone;
|
||||||
lblOffset.Caption:='';
|
lblOffset.Caption:='';
|
||||||
|
|
||||||
Palette := cp.cmap;
|
Palette := cp.cmap;
|
||||||
|
Loading…
Reference in New Issue
Block a user