📄 teradial.pas
字号:
if ActiveCorners[2] and (PrevPosition < CornerPositions[2])
then
begin
if(Position < PrevPosition) or (Position > CornerPositions[2]) then
begin
Points[Count] := CornerPoints[2];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[3] and
((Position < PrevPosition) or (Position > CornerPositions[3])) then
begin
Points[Count] := CornerPoints[3];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[4] and
(Position < PrevPosition) or (Position > CornerPositions[4]) then
begin
Points[Count] := CornerPoints[4];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[1] and
(Position < PrevPosition) and (Position > CornerPositions[1]) then
begin
Points[Count] := CornerPoints[1];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
end
else if ActiveCorners[3] and (PrevPosition < CornerPositions[3])
then
begin
if ActiveCorners[3] and
(Position < PrevPosition) or (Position > CornerPositions[3]) then
begin
Points[Count] := CornerPoints[3];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[4] and
(Position < PrevPosition) or (Position > CornerPositions[4]) then
begin
Points[Count] := CornerPoints[4];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[1] and
(Position < PrevPosition) and (Position > CornerPositions[1]) then
begin
Points[Count] := CornerPoints[1];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[2] and
(Position < PrevPosition) and (Position > CornerPositions[2]) then
begin
Points[Count] := CornerPoints[2];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
end
else if ActiveCorners[4] and (PrevPosition < CornerPositions[4])
then
begin
if ActiveCorners[4] and
(Position < PrevPosition) or (Position > CornerPositions[4]) then
begin
Points[Count] := CornerPoints[4];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[1] and
(Position < PrevPosition) and (Position > CornerPositions[1]) then
begin
Points[Count] := CornerPoints[1];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[2] and
(Position < PrevPosition) and (Position > CornerPositions[2]) then
begin
Points[Count] := CornerPoints[2];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[3] and
(Position < PrevPosition) and (Position > CornerPositions[3]) then
begin
Points[Count] := CornerPoints[3];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
end
else if ActiveCorners[1] then
begin
if ActiveCorners[1] and
(Position < PrevPosition) and (Position > CornerPositions[1]) then
begin
Points[Count] := CornerPoints[1];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[2] and
(Position < PrevPosition) and (Position > CornerPositions[2]) then
begin
Points[Count] := CornerPoints[2];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[3] and
(Position < PrevPosition) and (Position > CornerPositions[3]) then
begin
Points[Count] := CornerPoints[3];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
if ActiveCorners[4] and
(Position < PrevPosition) and (Position > CornerPositions[4]) then
begin
Points[Count] := CornerPoints[4];
AddPointToRect(Points[Count], DirtyRect);
Inc(Count);
end;
end;
Points[Count] := Point(xDst2, yDst2);
AddPointToRect(Points[Count], DirtyRect);
if Draw then
MaskBmp.Canvas.Polygon(Slice(Points, Count+1));
end;
Windows.UnionRect(Data.UpdateRect, DirtyRect, Data.UpdateRect);
if CalcDirtyRects then
Data.DirtyRects.AddRect(DirtyRect);
end;
function TRadialTransition.GetInfo(Device: TTETransitionDevice):
TTETransitionInfo;
begin
Result := inherited GetInfo(Device) +
[
tetiThreadSafe,
tetiUseDirtyRects
];
end;
procedure TRadialTransition.Style1_1Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
var
Position: Longint;
begin
Position := CurrentFrame + (CornerPoints[3].x div 2) + 1;
if Position > MaxFrames then
Dec(Position, MaxFrames);
DrawMask(Center, MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;
procedure TRadialTransition.Style1_2Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
var
Position: Longint;
begin
Position := (MaxFrames - CurrentFrame + 1) + Step;
if Position < 1 then
Inc(Position, MaxFrames);
Style1_1Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;
procedure TRadialTransition.Style1_3Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
begin
Style1_1Frame(MaskBmp, Data, CurrentFrame + MaxFrames div 4, Step, Draw, CalcDirtyRects);
end;
procedure TRadialTransition.Style1_4Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
var
Position: Longint;
begin
Position := (MaxFrames - CurrentFrame + 1) + Step;
if Position < 1 then
Inc(Position, MaxFrames);
Style1_3Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;
procedure TRadialTransition.Style1_5Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
var
Position: Longint;
begin
Position := CurrentFrame + CornerPoints[3].x + CornerPoints[3].y +
((CornerPoints[3].x - 1) div 2) + 3;
if Position > MaxFrames then
Dec(Position, MaxFrames);
DrawMask(Center, MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;
procedure TRadialTransition.Style1_6Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
var
Position: Longint;
begin
Position := (MaxFrames - CurrentFrame + 1) + Step;
if Position < 1 then
Inc(Position, MaxFrames);
Style1_5Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;
procedure TRadialTransition.Style1_7Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
var
Position: Longint;
begin
Position := CurrentFrame + (CornerPoints[3].x * 2 ) + CornerPoints[3].y +
((CornerPoints[3].y - 1) div 2) + 4;
if Position > MaxFrames then
Dec(Position, MaxFrames);
DrawMask(Center, MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;
procedure TRadialTransition.Style1_8Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
var
Position: Longint;
begin
Position := (MaxFrames - CurrentFrame + 1) + Step;
if Position < 1 then
Inc(Position, MaxFrames);
Style1_7Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;
procedure TRadialTransition.Style2_1Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
begin
if IsSmooth
then
begin
Style1_1Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
Style1_5Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
end
else
begin
if(CurrentFrame - Step + 1) mod 2 = 1
then
begin
Style1_1Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step - (Step div 2), Draw, CalcDirtyRects);
if Step > 1 then
Style1_5Frame(MaskBmp, Data, CurrentFrame div 2, Step div 2, Draw, CalcDirtyRects);
end
else
begin
Style1_5Frame(MaskBmp, Data, CurrentFrame div 2, Step - (Step div 2), Draw, CalcDirtyRects);
if Step > 1 then
Style1_1Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step div 2, Draw, CalcDirtyRects);
end;
end;
end;
procedure TRadialTransition.Style2_2Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
var
Position: Longint;
begin
if not IsSmooth
then
begin
Position := (MaxFrames - CurrentFrame + 2) + Step;
if Position < 1 then
Inc(Position, MaxFrames);
Style2_1Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end
else
begin
Style1_2Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
Style1_6Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
end;
end;
procedure TRadialTransition.Style2_3Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
begin
if IsSmooth
then
begin
Style1_3Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
Style1_7Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
end
else
begin
if(CurrentFrame - Step + 1) mod 2 = 1
then
begin
Style1_3Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step - (Step div 2), Draw, CalcDirtyRects);
if Step > 1 then
Style1_7Frame(MaskBmp, Data, CurrentFrame div 2, Step div 2, Draw, CalcDirtyRects);
end
else
begin
Style1_7Frame(MaskBmp, Data, CurrentFrame div 2, Step - (Step div 2), Draw, CalcDirtyRects);
if Step > 1 then
Style1_3Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step div 2, Draw, CalcDirtyRects);
end;
end;
end;
procedure TRadialTransition.Style2_4Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
var
Position: Longint;
begin
if not IsSmooth
then
begin
Position := (MaxFrames - CurrentFrame + 2) + Step;
if Position < 1 then
Inc(Position, MaxFrames);
Style2_3Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end
else
begin
Style1_4Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
Style1_8Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
end;
end;
procedure TRadialTransition.Style2_5Frame(MaskBmp: TBitmap;
Data: TTETransitionData; CurrentFrame, Step: Longint;
Draw, CalcDirtyRects: Boolean);
begin
if IsSmooth
then
begin
Style1_1Frame(MaskBmp, Data, CurrentFrame , Step, Draw, CalcDirtyRects);
Style1_2Frame(MaskBmp, Data, CurrentFrame + 1, Step, Draw, CalcDirtyRects);
end
else
begin
if not Odd(CurrentFrame - Step)
then
begin
Style1_1Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step - (Step div 2), Draw, CalcDirtyRects);
if Step > 1 then
Style1_2Frame(MaskBmp, Data, (CurrentFrame div 2) + 1, Step div 2, Draw, CalcDirtyRects);
end
else
begin
Style1_2Frame(MaskBmp, Data, (CurrentFrame div 2) + 1, Step - (Step div 2), Draw, CalcDirtyRects);
if Step > 1 then
Style1_1Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step div 2, Draw, CalcDirtyRects);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -