QT implement TColorDialog.AlphaChannel and associated option cdShowAlphaChannel.

This commit is contained in:
Bart 2024-12-14 16:20:28 +01:00
parent 633cb5bbc0
commit 2753fed6e8

View File

@ -857,11 +857,11 @@ end;
class procedure TQtWSColorDialog.ShowModal(const ACommonDialog: TCommonDialog); class procedure TQtWSColorDialog.ShowModal(const ACommonDialog: TCommonDialog);
var var
AColor: TColorRef; AColor: TColorRef;
AQColor: TQColor; AQColor, AQColorRet: TQColor;
AQtColor: QColorH;
ARgb: QRgb;
ReturnBool: Boolean; ReturnBool: Boolean;
ATitle: WideString;
ColorDialog: TColorDialog absolute ACommonDialog; ColorDialog: TColorDialog absolute ACommonDialog;
AOptions: QColorDialogColorDialogOptions;
{$IFDEF HASX11} {$IFDEF HASX11}
AWND: HWND; AWND: HWND;
{$ENDIF} {$ENDIF}
@ -881,30 +881,35 @@ var
begin begin
AColor := ColorToRgb(ColorDialog.Color); AColor := ColorToRgb(ColorDialog.Color);
AQColor.Alpha := $FFFF; AQColor.Alpha := Word(ColorDialog.AlphaChannel) * $0101;
AQColor.ColorSpec := 1; AQColor.ColorSpec := 1;
AQColor.Pad := 0; AQColor.Pad := 0;
ColorRefToTQColor(AColor, AQColor); ColorRefToTQColor(AColor, AQColor);
AQtColor := QColor_create(PQColor(@AQColor));
ARgb := QColor_rgba(AQtColor);
FillCustomColors; FillCustomColors;
ARgb := QColorDialog_getRgba(ARgb, @ReturnBool, {$IFDEF HASX11}
TQtWSCommonDialog.GetDialogParent(ACommonDialog)); Clipboard.BeginX11SelectionLock;
{$ENDIF}
QColor_fromRgba(PQColor(AQtColor), ARgb); ATitle := UTF8ToUTF16(ACommonDialog.Title);
try AQColorRet := Default(TQColor);
QColor_toRgb(AQtColor, @AQColor); AOptions := 0; // here we add possible options from ColorDialog.Options, see QColorDialogColorDialogOptions for possible options.
TQColorToColorRef(AQColor, AColor); if (cdShowAlphaChannel in ColorDialog.Options) then
ColorDialog.Color := TColor(AColor); AOptions := AOptions or QColorDialogShowAlphaChannel;
finally QColorDialog_getColor(PQColor(@AQColorRet), PQColor(@AQColor), TQtWSCommonDialog.GetDialogParent(ACommonDialog), @ATitle, AOptions);
QColor_destroy(AQtColor);
end; ReturnBool := AQColorRet.ColorSpec <> 0;
if ReturnBool then if ReturnBool then
ACommonDialog.UserChoice := mrOk begin
else TQColorToColorRef(AQColorRet, AColor);
ACommonDialog.UserChoice := mrCancel; ColorDialog.Color := AColor;
ColorDialog.AlphaChannel := AQColorRet.Alpha and $FF;
ColorDialog.UserChoice := mrOk
end else
ColorDialog.UserChoice := mrCancel;
{$IFDEF HASX11} {$IFDEF HASX11}
if (QtWidgetSet.WindowManagerName = 'xfwm4') and (QApplication_activeModalWidget() <> nil) then if (QtWidgetSet.WindowManagerName = 'xfwm4') and (QApplication_activeModalWidget() <> nil) then
begin begin