Browse Source

color overlay

Johann ELSASS 5 years ago
parent
commit
2064dc6736
2 changed files with 10 additions and 30 deletions
  1. 3 5
      bgrasvgtheme.pas
  2. 7 25
      bgratheme.pas

+ 3 - 5
bgrasvgtheme.pas

@@ -130,7 +130,7 @@ begin
     '<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/></svg>';
     '<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/></svg>';
   // Colorize
   // Colorize
   FColorizeNormal := BGRAPixelTransparent;
   FColorizeNormal := BGRAPixelTransparent;
-  FColorizeHover := BGRA(255, 255, 255, 175);
+  FColorizeHover := ColorToBGRA(clWhite, 100);
   FColorizeActive := BGRAPixelTransparent;
   FColorizeActive := BGRAPixelTransparent;
   FColorizeDisabled := BGRAPixelTransparent;
   FColorizeDisabled := BGRAPixelTransparent;
 end;
 end;
@@ -163,8 +163,7 @@ begin
       btbsActive: color := FColorizeActive;
       btbsActive: color := FColorizeActive;
       btbsDisabled: color := FColorizeDisabled;
       btbsDisabled: color := FColorizeDisabled;
     end;
     end;
-    if color{%H-} <> BGRAPixelTransparent then
-      Colorize(Bitmap, Bitmap, color);
+    BitmapColorOverlay(color);
     DrawBitmap;
     DrawBitmap;
 
 
     if Caption <> '' then
     if Caption <> '' then
@@ -210,8 +209,7 @@ begin
       btbsActive: color := FColorizeActive;
       btbsActive: color := FColorizeActive;
       btbsDisabled: color := FColorizeDisabled;
       btbsDisabled: color := FColorizeDisabled;
     end;
     end;
-    if color{%H-} <> BGRAPixelTransparent then
-      Colorize(Bitmap, Bitmap, color);
+    BitmapColorOverlay(color);
     DrawBitmap;
     DrawBitmap;
 
 
     if Caption <> '' then
     if Caption <> '' then

+ 7 - 25
bgratheme.pas

@@ -30,6 +30,7 @@ type
     destructor Destroy; override;
     destructor Destroy; override;
     procedure DrawBitmap;
     procedure DrawBitmap;
     procedure DiscardBitmap;
     procedure DiscardBitmap;
+    procedure BitmapColorOverlay(AColor: TBGRAPixel; AOperation: TBlendOperation = boTransparent);
     property DestCanvas: TCanvas read FDestCanvas;
     property DestCanvas: TCanvas read FDestCanvas;
     property DestCanvasDPI: integer read FLclDPI;
     property DestCanvasDPI: integer read FLclDPI;
     property Bitmap: TBGRABitmap read GetBitmap;
     property Bitmap: TBGRABitmap read GetBitmap;
@@ -51,8 +52,6 @@ type
     {%H-}Focused: boolean; Checked: boolean; ARect: TRect; ASurface: TBGRAThemeSurface); virtual;
     {%H-}Focused: boolean; Checked: boolean; ARect: TRect; ASurface: TBGRAThemeSurface); virtual;
     procedure DrawCheckBox(Caption: string; State: TBGRAThemeButtonState;
     procedure DrawCheckBox(Caption: string; State: TBGRAThemeButtonState;
     {%H-}Focused: boolean; Checked: boolean; ARect: TRect; ASurface: TBGRAThemeSurface); virtual;
     {%H-}Focused: boolean; Checked: boolean; ARect: TRect; ASurface: TBGRAThemeSurface); virtual;
-  public
-    procedure Colorize(Source, Dest: TBGRABitmap; c: TBGRAPixel);
   published
   published
 
 
   end;
   end;
@@ -129,32 +128,15 @@ begin
   FreeAndNil(FBitmap);
   FreeAndNil(FBitmap);
 end;
 end;
 
 
-{ TBGRATheme }
-
-procedure TBGRATheme.Colorize(Source, Dest: TBGRABitmap; c: TBGRAPixel);
-var
-  psource: PBGRAPixel;
-  pdest: PBGRAPixel;
-  ec: TExpandedPixel;
-  n: integer;
+procedure TBGRAThemeSurface.BitmapColorOverlay(AColor: TBGRAPixel;
+  AOperation: TBlendOperation);
 begin
 begin
-  psource := Source.Data;
-  pdest := Dest.Data;
-  ec := GammaExpansion(c);
-  for n := Source.NbPixels - 1 downto 0 do
-  begin
-    pdest^.red := GammaCompressionTab[
-      ((GammaExpansionTab[psource^.red] * ec.red + 65535) shr 16)];
-    pdest^.green := GammaCompressionTab[
-      ((GammaExpansionTab[psource^.green] * ec.green + 65535) shr 16)];
-    pdest^.blue := GammaCompressionTab[
-      ((GammaExpansionTab[psource^.blue] * ec.blue + 65535) shr 16)];
-    pdest^.alpha := (psource^.alpha * ec.alpha + 255) shr 16;
-    Inc(pdest);
-    Inc(psource);
-  end;
+  if AColor.alpha <> 0 then
+    Bitmap.BlendOver(AColor, AOperation, AColor.alpha, false, true);
 end;
 end;
 
 
+{ TBGRATheme }
+
 procedure TBGRATheme.DrawButton(Caption: string; State: TBGRAThemeButtonState;
 procedure TBGRATheme.DrawButton(Caption: string; State: TBGRAThemeButtonState;
   Focused: boolean; ARect: TRect; ASurface: TBGRAThemeSurface);
   Focused: boolean; ARect: TRect; ASurface: TBGRAThemeSurface);
 var
 var