From 8ac0fa2e9521f311b95b9e1e7321306e9e174095 Mon Sep 17 00:00:00 2001 From: zeljan1 Date: Fri, 10 Jan 2025 16:19:02 +0100 Subject: [PATCH] Gtk3: fixed selecting and returning proper color from TColorDialog. --- lcl/interfaces/gtk3/gtk3procs.pas | 11 ++++++----- lcl/interfaces/gtk3/gtk3widgets.pas | 13 ++----------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/lcl/interfaces/gtk3/gtk3procs.pas b/lcl/interfaces/gtk3/gtk3procs.pas index c80be2ea75..0a568f6e86 100644 --- a/lcl/interfaces/gtk3/gtk3procs.pas +++ b/lcl/interfaces/gtk3/gtk3procs.pas @@ -295,7 +295,7 @@ function Gtk3ScrollTypeToScrollCode(ScrollType: TGtkScrollType): LongWord; function TGDKColorToTColor(const value : TGDKColor) : TColor; function TColorToTGDKColor(const value : TColor) : TGDKColor; -function TGdkRGBAToTColor(const value : TGdkRGBA) : TColor; +function TGdkRGBAToTColor(const value : TGdkRGBA; IgnoreAlpha: Boolean = True) : TColor; function TColortoTGdkRGBA(const value : TColor; IgnoreAlpha: Boolean = True) : TGdkRGBA; function ColorToCairoRGB(AColor: TColor; out ARed, AGreen, ABlue: Double): Boolean; function RectFromGtkAllocation(AGtkAllocation: TGtkAllocation): TRect; @@ -348,15 +348,16 @@ begin Result:=((d + 512) shr 10); end; -function TGdkRGBAToTColor(const value: TGdkRGBA): TColor; +function TGdkRGBAToTColor(const value: TGdkRGBA; IgnoreAlpha: Boolean): TColor; begin Result := Trunc(value.red * $FF) or (Trunc(value.green * $FF) shl 8) - or (Trunc(value.blue * $FF) shl 16) - or (Trunc(value.alpha * $FF) shl 24); + or (Trunc(value.blue * $FF) shl 16); + if not IgnoreAlpha then + Result := Result or (Trunc(value.alpha * $FF) shl 24); end; -function TColortoTGdkRGBA(const value: TColor; IgnoreAlpha: Boolean = True): TGdkRGBA; +function TColortoTGdkRGBA(const value: TColor; IgnoreAlpha: Boolean): TGdkRGBA; begin Result.red := (value and $FF) / 255; Result.green := ((value shr 8) and $FF) / 255; diff --git a/lcl/interfaces/gtk3/gtk3widgets.pas b/lcl/interfaces/gtk3/gtk3widgets.pas index e1bb4cabe0..2b80e83e29 100644 --- a/lcl/interfaces/gtk3/gtk3widgets.pas +++ b/lcl/interfaces/gtk3/gtk3widgets.pas @@ -8366,22 +8366,13 @@ end; class procedure TGtk3newColorSelectionDialog.color_to_rgba(clr: TColor; out rgba: TgdkRGBA); begin - clr:=ColorToRgb(clr); - rgba.red:=Red(clr)/255; - rgba.blue:=Blue(clr)/255; - rgba.green:=Green(clr)/255; - rgba.alpha:=(clr shl 24)/255; + rgba := TColortoTGdkRGBA(clr); end; class function TGtk3newColorSelectionDialog.rgba_to_color(const rgba: TgdkRGBA ): TColor; -var - q:array[0..3] of byte absolute Result; begin - q[0]:= round(255*rgba.red); - q[1]:= round(255*rgba.green); - q[2]:= round(255*rgba.blue); - q[3]:= round(255*rgba.alpha); + Result := TGdkRGBAToTColor(rgba); end;