Qt,Qt5,Qt6: fixed color of control after enabling during runtime. issue #40471

(cherry picked from commit e1b8361cdb)
This commit is contained in:
Željan Rikalo 2023-09-02 20:06:39 +02:00
parent ca417aacb8
commit 5ed68ef9ef
No known key found for this signature in database
3 changed files with 81 additions and 18 deletions

View File

@ -149,6 +149,8 @@ type
procedure SetStyleSheet(const AValue: WideString);
procedure SetWidget(const AValue: QWidgetH);
function ShiftStateToQtModifiers(Shift: TShiftState): QtModifier;
procedure setInitialColor;
procedure setInitialFontColor;
protected
// IUnknown implementation
function QueryInterface(constref iid: TGuid; out obj): LongInt; {$IFDEF WINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
@ -284,7 +286,6 @@ type
procedure setFocusProxy(const AWidget: QWidgetH);
procedure setFont(AFont: QFontH);
procedure setGeometry(ARect: TRect); virtual;
procedure setInitialFontColor(AControl: TWinControl); virtual;
procedure setLayoutDirection(ADirection: QtLayoutDirection);
procedure setMaximumSize(AWidth, AHeight: Integer);
procedure setMask(AMask: QBitmapH); overload;
@ -2138,7 +2139,7 @@ begin
QWidget_setMouseTracking(Widget, True);
if Assigned(LCLObject) and FWidgetNeedFontColorInitialization then
setInitialFontColor(LCLObject);
setInitialFontColor;
if (FParams.Style and WS_VISIBLE) = 0 then
QWidget_hide(Widget)
else
@ -2552,7 +2553,10 @@ begin
if not getEnabled then
Palette.setTextColor(@Palette.DisabledTextColor)
else
setInitialFontColor(LCLObject);
begin
setInitialColor;
setInitialFontColor;
end;
end;
end;
QEventShow:
@ -5016,12 +5020,29 @@ begin
QWidget_setGeometry(Widget, @ARect);
end;
procedure TQtWidget.setInitialFontColor(AControl: TWinControl);
procedure TQtWidget.setInitialColor;
var
AColorRef: TColorRef;
QColor: TQColor;
begin
// issue #40471
if LCLObject.Color <> clDefault then
begin
BeginUpdate;
Palette.ForceColor := True;
AColorRef := ColorToRGB(LCLObject.Color);
QColor_fromRgb(@QColor,Red(AColorRef),Green(AColorRef),Blue(AColorRef));
setColor(@QColor);
EndUpdate;
end;
end;
procedure TQtWidget.setInitialFontColor;
var
QColor: TQColor;
ColorRef: TColorRef;
begin
if AControl.Font.Color = clDefault then
if LCLObject.Font.Color = clDefault then
begin
BeginUpdate;
Palette.ForceColor := True;
@ -5031,7 +5052,7 @@ begin
end
else
begin
ColorRef := ColorToRGB(AControl.Font.Color);
ColorRef := ColorToRGB(LCLObject.Font.Color);
QColor_fromRgb(@QColor,Red(ColorRef),Green(ColorRef),Blue(ColorRef));
BeginUpdate;
Palette.ForceColor := True;

View File

@ -152,6 +152,8 @@ type
procedure SetStyleSheet(const AValue: WideString);
procedure SetWidget(const AValue: QWidgetH);
function ShiftStateToQtModifiers(Shift: TShiftState): QtModifier;
procedure setInitialColor;
procedure setInitialFontColor;
protected
// IUnknown implementation
function QueryInterface(constref iid: TGuid; out obj): LongInt; {$IFDEF WINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
@ -288,7 +290,6 @@ type
procedure setFocusProxy(const AWidget: QWidgetH);
procedure setFont(AFont: QFontH);
procedure setGeometry(ARect: TRect); virtual;
procedure setInitialFontColor(AControl: TWinControl); virtual;
procedure setLayoutDirection(ADirection: QtLayoutDirection);
procedure setMaximumSize(AWidth, AHeight: Integer);
procedure setMask(AMask: QBitmapH); overload;
@ -2254,7 +2255,7 @@ begin
QWidget_setMouseTracking(Widget, True);
if Assigned(LCLObject) and FWidgetNeedFontColorInitialization then
setInitialFontColor(LCLObject);
setInitialFontColor;
if (FParams.Style and WS_VISIBLE) = 0 then
QWidget_hide(Widget)
else
@ -2664,7 +2665,10 @@ begin
if not getEnabled then
Palette.setTextColor(@Palette.DisabledTextColor)
else
setInitialFontColor(LCLObject);
begin
setInitialColor;
setInitialFontColor;
end;
end;
end;
QEventShow:
@ -5093,12 +5097,29 @@ begin
QWidget_setGeometry(Widget, @ARect);
end;
procedure TQtWidget.setInitialFontColor(AControl: TWinControl);
procedure TQtWidget.setInitialColor;
var
AColorRef: TColorRef;
QColor: TQColor;
begin
// issue #40471
if LCLObject.Color <> clDefault then
begin
BeginUpdate;
Palette.ForceColor := True;
AColorRef := ColorToRGB(LCLObject.Color);
QColor_fromRgb(@QColor,Red(AColorRef),Green(AColorRef),Blue(AColorRef));
setColor(@QColor);
EndUpdate;
end;
end;
procedure TQtWidget.setInitialFontColor;
var
QColor: TQColor;
ColorRef: TColorRef;
begin
if AControl.Font.Color = clDefault then
if LCLObject.Font.Color = clDefault then
begin
BeginUpdate;
Palette.ForceColor := True;
@ -5108,7 +5129,7 @@ begin
end
else
begin
ColorRef := ColorToRGB(AControl.Font.Color);
ColorRef := ColorToRGB(LCLObject.Font.Color);
QColor_fromRgb(@QColor,Red(ColorRef),Green(ColorRef),Blue(ColorRef));
BeginUpdate;
Palette.ForceColor := True;

View File

@ -151,6 +151,8 @@ type
procedure SetStyleSheet(const AValue: WideString);
procedure SetWidget(const AValue: QWidgetH);
function ShiftStateToQtModifiers(Shift: TShiftState): QtModifier;
procedure setInitialColor;
procedure setInitialFontColor;
protected
// IUnknown implementation
function QueryInterface(constref iid: TGuid; out obj): LongInt; {$IFDEF WINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
@ -287,7 +289,6 @@ type
procedure setFocusProxy(const AWidget: QWidgetH);
procedure setFont(AFont: QFontH);
procedure setGeometry(ARect: TRect); virtual;
procedure setInitialFontColor(AControl: TWinControl); virtual;
procedure setLayoutDirection(ADirection: QtLayoutDirection);
procedure setMaximumSize(AWidth, AHeight: Integer);
procedure setMask(AMask: QBitmapH); overload;
@ -2252,7 +2253,7 @@ begin
QWidget_setMouseTracking(Widget, True);
if Assigned(LCLObject) and FWidgetNeedFontColorInitialization then
setInitialFontColor(LCLObject);
setInitialFontColor;
if (FParams.Style and WS_VISIBLE) = 0 then
QWidget_hide(Widget)
else
@ -2662,7 +2663,10 @@ begin
if not getEnabled then
Palette.setTextColor(@Palette.DisabledTextColor)
else
setInitialFontColor(LCLObject);
begin
setInitialColor;
setInitialFontColor;
end;
end;
end;
QEventShow:
@ -5098,12 +5102,29 @@ begin
QWidget_setGeometry(Widget, @ARect);
end;
procedure TQtWidget.setInitialFontColor(AControl: TWinControl);
procedure TQtWidget.setInitialColor;
var
AColorRef: TColorRef;
QColor: TQColor;
begin
// issue #40471
if LCLObject.Color <> clDefault then
begin
BeginUpdate;
Palette.ForceColor := True;
AColorRef := ColorToRGB(LCLObject.Color);
QColor_fromRgb(@QColor,Red(AColorRef),Green(AColorRef),Blue(AColorRef));
setColor(@QColor);
EndUpdate;
end;
end;
procedure TQtWidget.setInitialFontColor;
var
QColor: TQColor;
ColorRef: TColorRef;
begin
if AControl.Font.Color = clDefault then
if LCLObject.Font.Color = clDefault then
begin
BeginUpdate;
Palette.ForceColor := True;
@ -5113,7 +5134,7 @@ begin
end
else
begin
ColorRef := ColorToRGB(AControl.Font.Color);
ColorRef := ColorToRGB(LCLObject.Font.Color);
QColor_fromRgb(@QColor,Red(ColorRef),Green(ColorRef),Blue(ColorRef));
BeginUpdate;
Palette.ForceColor := True;