|
@@ -30,6 +30,7 @@ type
|
|
|
FTextStyle: TFontStyles;
|
|
FTextStyle: TFontStyles;
|
|
|
FTimer: TTimer;
|
|
FTimer: TTimer;
|
|
|
FBGRA: TBGRABitmap;
|
|
FBGRA: TBGRABitmap;
|
|
|
|
|
+ FBGRAShadow: TBGRABitmap;
|
|
|
FMousePos: TPoint;
|
|
FMousePos: TPoint;
|
|
|
FCircleSize: single;
|
|
FCircleSize: single;
|
|
|
FCircleAlpha: byte;
|
|
FCircleAlpha: byte;
|
|
@@ -54,6 +55,7 @@ type
|
|
|
X, Y: integer); override;
|
|
X, Y: integer); override;
|
|
|
class function GetControlClassDefaultSize: TSize; override;
|
|
class function GetControlClassDefaultSize: TSize; override;
|
|
|
procedure TextChanged; override;
|
|
procedure TextChanged; override;
|
|
|
|
|
+ procedure UpdateShadow;
|
|
|
public
|
|
public
|
|
|
constructor Create(AOwner: TComponent); override;
|
|
constructor Create(AOwner: TComponent); override;
|
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
@@ -139,6 +141,7 @@ begin
|
|
|
if FShadowColor = AValue then
|
|
if FShadowColor = AValue then
|
|
|
Exit;
|
|
Exit;
|
|
|
FShadowColor := AValue;
|
|
FShadowColor := AValue;
|
|
|
|
|
+ UpdateShadow;
|
|
|
Invalidate;
|
|
Invalidate;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
@@ -147,6 +150,7 @@ begin
|
|
|
if FShadowSize = AValue then
|
|
if FShadowSize = AValue then
|
|
|
Exit;
|
|
Exit;
|
|
|
FShadowSize := AValue;
|
|
FShadowSize := AValue;
|
|
|
|
|
+ UpdateShadow;
|
|
|
Invalidate;
|
|
Invalidate;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
@@ -171,6 +175,7 @@ begin
|
|
|
if FTextShadowColor = AValue then
|
|
if FTextShadowColor = AValue then
|
|
|
Exit;
|
|
Exit;
|
|
|
FTextShadowColor := AValue;
|
|
FTextShadowColor := AValue;
|
|
|
|
|
+ UpdateShadow;
|
|
|
Invalidate;
|
|
Invalidate;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
@@ -250,22 +255,16 @@ var
|
|
|
temp: TBGRABitmap;
|
|
temp: TBGRABitmap;
|
|
|
begin
|
|
begin
|
|
|
if (FBGRA.Width <> Width) or (FBGRA.Height <> Height) then
|
|
if (FBGRA.Width <> Width) or (FBGRA.Height <> Height) then
|
|
|
|
|
+ begin
|
|
|
FBGRA.SetSize(Width, Height);
|
|
FBGRA.SetSize(Width, Height);
|
|
|
|
|
+ FBGRAShadow.SetSize(Width, Height);
|
|
|
|
|
+ UpdateShadow;
|
|
|
|
|
+ end;
|
|
|
|
|
|
|
|
- { Shadow }
|
|
|
|
|
- FBGRA.Fill(BGRAPixelTransparent);
|
|
|
|
|
- FBGRA.RoundRectAntialias(FShadowSize, FShadowSize, Width - FShadowSize,
|
|
|
|
|
- Height - FShadowSize, FRoundBorders, FRoundBorders,
|
|
|
|
|
- ColorToBGRA(FShadowColor), 1, ColorToBGRA(FShadowColor), [rrDefault]);
|
|
|
|
|
-
|
|
|
|
|
- temp := FBGRA.FilterBlurRadial(FShadowSize, FShadowSize, rbFast) as TBGRABitmap;
|
|
|
|
|
- FBGRA.Fill(BGRAPixelTransparent);
|
|
|
|
|
- FBGRA.PutImage(0, 0, temp, dmDrawWithTransparency);
|
|
|
|
|
- temp.Free;
|
|
|
|
|
|
|
+ FBGRA.FillTransparent;
|
|
|
|
|
+ FBGRA.PutImage(0, 0, FBGRAShadow, dmDrawWithTransparency);
|
|
|
|
|
|
|
|
- { Round Rectangle }
|
|
|
|
|
temp := TBGRABitmap.Create(Width, Height, FNormalColor);
|
|
temp := TBGRABitmap.Create(Width, Height, FNormalColor);
|
|
|
- { Circle Effect }
|
|
|
|
|
temp.EllipseAntialias(FMousePos.X, FMousePos.Y, FCircleSize, FCircleSize,
|
|
temp.EllipseAntialias(FMousePos.X, FMousePos.Y, FCircleSize, FCircleSize,
|
|
|
ColorToBGRA(FNormalColorEffect, FCircleAlpha), 1,
|
|
ColorToBGRA(FNormalColorEffect, FCircleAlpha), 1,
|
|
|
ColorToBGRA(FNormalColorEffect, FCircleAlpha));
|
|
ColorToBGRA(FNormalColorEffect, FCircleAlpha));
|
|
@@ -273,7 +272,6 @@ begin
|
|
|
FRoundBorders, FRoundBorders, temp, [rrDefault], False);
|
|
FRoundBorders, FRoundBorders, temp, [rrDefault], False);
|
|
|
temp.Free;
|
|
temp.Free;
|
|
|
|
|
|
|
|
- { Text }
|
|
|
|
|
if Caption <> '' then
|
|
if Caption <> '' then
|
|
|
begin
|
|
begin
|
|
|
temp := TextShadow(Width, Height - FShadowSize, Caption, FTextSize,
|
|
temp := TextShadow(Width, Height - FShadowSize, Caption, FTextSize,
|
|
@@ -307,6 +305,16 @@ begin
|
|
|
Invalidate;
|
|
Invalidate;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
+procedure TBCMaterialDesignButton.UpdateShadow;
|
|
|
|
|
+begin
|
|
|
|
|
+ FBGRAShadow.FillTransparent;
|
|
|
|
|
+ FBGRAShadow.RoundRectAntialias(FShadowSize, FShadowSize, Width - FShadowSize,
|
|
|
|
|
+ Height - FShadowSize, FRoundBorders, FRoundBorders,
|
|
|
|
|
+ ColorToBGRA(FShadowColor), 1, ColorToBGRA(FShadowColor), [rrDefault]);
|
|
|
|
|
+ BGRAReplace(FBGRAShadow, FBGRAShadow.FilterBlurRadial(FShadowSize,
|
|
|
|
|
+ FShadowSize, rbFast) as TBGRABitmap);
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
constructor TBCMaterialDesignButton.Create(AOwner: TComponent);
|
|
constructor TBCMaterialDesignButton.Create(AOwner: TComponent);
|
|
|
begin
|
|
begin
|
|
|
inherited Create(AOwner);
|
|
inherited Create(AOwner);
|
|
@@ -318,6 +326,7 @@ begin
|
|
|
FTimer.OnStartTimer := @OnStartTimer;
|
|
FTimer.OnStartTimer := @OnStartTimer;
|
|
|
FTimer.OnTimer := @OnTimer;
|
|
FTimer.OnTimer := @OnTimer;
|
|
|
FBGRA := TBGRABitmap.Create(Width, Height);
|
|
FBGRA := TBGRABitmap.Create(Width, Height);
|
|
|
|
|
+ FBGRAShadow := TBGRABitmap.Create(Width, Height);
|
|
|
FRoundBorders := 5;
|
|
FRoundBorders := 5;
|
|
|
FNormalColor := clWhite;
|
|
FNormalColor := clWhite;
|
|
|
FNormalColorEffect := clSilver;
|
|
FNormalColorEffect := clSilver;
|
|
@@ -340,6 +349,7 @@ begin
|
|
|
FTimer.OnStartTimer := nil;
|
|
FTimer.OnStartTimer := nil;
|
|
|
FTimer.OnTimer := nil;
|
|
FTimer.OnTimer := nil;
|
|
|
FreeAndNil(FBGRA);
|
|
FreeAndNil(FBGRA);
|
|
|
|
|
+ FreeAndNil(FBGRAShadow);
|
|
|
inherited Destroy;
|
|
inherited Destroy;
|
|
|
end;
|
|
end;
|
|
|
|
|
|