mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-08 00:37:14 +01:00
Qt: reduce getSysColor() overhead by caching colors.
git-svn-id: trunk@17700 -
This commit is contained in:
parent
f7e1b1b5ac
commit
738fb1f569
@ -67,6 +67,8 @@ type
|
||||
FDockImage: QRubberBandH;
|
||||
FDragImageList: QWidgetH;
|
||||
FDragHotSpot: TPoint;
|
||||
FCachedColors: Array[0..MAX_SYS_COLORS + 1] of PLongWord;
|
||||
procedure ClearCachedColors;
|
||||
procedure SetOverrideCursor(const AValue: TObject);
|
||||
protected
|
||||
FStockNullBrush: HBRUSH;
|
||||
|
||||
@ -29,6 +29,7 @@ begin
|
||||
App := QApplication_Create(@argc, argv);
|
||||
InitStockItems;
|
||||
QtWidgetSet := Self;
|
||||
ClearCachedColors;
|
||||
FDockImage := nil;
|
||||
end;
|
||||
|
||||
@ -55,6 +56,8 @@ begin
|
||||
QtDefaultContext.Free;
|
||||
QtScreenContext.Free;
|
||||
|
||||
ClearCachedColors;
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
@ -290,6 +293,7 @@ var
|
||||
begin
|
||||
Result := False;
|
||||
case QEvent_type(Event) of
|
||||
QEventStyleChange: ClearCachedColors;
|
||||
LCLQt_Destroy:
|
||||
begin
|
||||
AObject := TQtObject(Pointer(QLCLMessageEvent_getWParam(QLCLMessageEventH(Event))));
|
||||
@ -641,4 +645,16 @@ begin
|
||||
FStockDefaultDC := 0; // app must be initialized
|
||||
end;
|
||||
|
||||
procedure TQtWidgetSet.ClearCachedColors;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := 0 to High(FCachedColors) do
|
||||
begin
|
||||
if FCachedColors[i] <> nil then
|
||||
FreeMem(FCachedColors[i]);
|
||||
FCachedColors[i] := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
@ -2778,61 +2778,67 @@ begin
|
||||
exit;
|
||||
end;
|
||||
|
||||
case nIndex of
|
||||
{$IFDEF USE_QT_44}
|
||||
COLOR_SCROLLBAR : Result:=GetColor(QPaletteActive, QPaletteButton);
|
||||
{$ELSE}
|
||||
COLOR_SCROLLBAR : Result:=GetColor(QPaletteActive, QPaletteMid);
|
||||
{$ENDIF}
|
||||
COLOR_BACKGROUND : Result:=GetColor(QPaletteActive, QPaletteWindow);
|
||||
COLOR_WINDOW : Result:=GetColor(QPaletteInActive, QPaletteBase);
|
||||
COLOR_WINDOWFRAME : Result:=GetColor(QPaletteActive, QPaletteShadow);
|
||||
COLOR_WINDOWTEXT : Result:=GetColor(QPaletteActive, QPaletteWindowText);
|
||||
COLOR_ACTIVEBORDER : Result:=GetColor(QPaletteActive, QPaletteWindow);
|
||||
COLOR_INACTIVEBORDER : Result:=GetColor(QPaletteInactive, QPaletteWindow);
|
||||
COLOR_APPWORKSPACE : Result:=GetColor(QPaletteActive, QPaletteWindow);
|
||||
COLOR_HIGHLIGHT : Result:=GetColor(QPaletteActive, QPaletteHighlight);
|
||||
COLOR_HIGHLIGHTTEXT : Result:=GetColor(QPaletteActive, QPaletteHighlightedText);
|
||||
COLOR_BTNFACE : Result:=GetColor(QPaletteActive, QPaletteButton);
|
||||
COLOR_BTNSHADOW : Result:=GetColor(QPaletteActive, QPaletteDark);
|
||||
COLOR_GRAYTEXT : Result:=GetColor(QPaletteActive, QPaletteText);
|
||||
COLOR_BTNTEXT : Result:=GetColor(QPaletteActive, QPaletteButtonText);
|
||||
COLOR_BTNHIGHLIGHT : Result:=GetColor(QPaletteActive, QPaletteLight);
|
||||
COLOR_3DDKSHADOW : Result:=GetColor(QPaletteActive, QPaletteShadow);
|
||||
COLOR_3DLIGHT : Result:=GetColor(QPaletteActive, QPaletteMidlight);
|
||||
{$IFDEF USE_QT_44}
|
||||
COLOR_INFOTEXT : Result:=GetColor(QPaletteInActive, QPaletteToolTipText);
|
||||
COLOR_INFOBK : Result:=GetColor(QPaletteInActive, QPaletteToolTipBase);
|
||||
{$ELSE}
|
||||
COLOR_INFOTEXT : Result:=GetClInfo(False);
|
||||
COLOR_INFOBK : Result:=GetClInfo(True);
|
||||
{$ENDIF}
|
||||
COLOR_HOTLIGHT : Result:=GetColor(QPaletteActive, QPaletteLight);
|
||||
if FCachedColors[nIndex] = nil then
|
||||
begin
|
||||
case nIndex of
|
||||
{$IFDEF USE_QT_44}
|
||||
COLOR_SCROLLBAR : Result:=GetColor(QPaletteActive, QPaletteButton);
|
||||
{$ELSE}
|
||||
COLOR_SCROLLBAR : Result:=GetColor(QPaletteActive, QPaletteMid);
|
||||
{$ENDIF}
|
||||
COLOR_BACKGROUND : Result:=GetColor(QPaletteActive, QPaletteWindow);
|
||||
COLOR_WINDOW : Result:=GetColor(QPaletteInActive, QPaletteBase);
|
||||
COLOR_WINDOWFRAME : Result:=GetColor(QPaletteActive, QPaletteShadow);
|
||||
COLOR_WINDOWTEXT : Result:=GetColor(QPaletteActive, QPaletteWindowText);
|
||||
COLOR_ACTIVEBORDER : Result:=GetColor(QPaletteActive, QPaletteWindow);
|
||||
COLOR_INACTIVEBORDER : Result:=GetColor(QPaletteInactive, QPaletteWindow);
|
||||
COLOR_APPWORKSPACE : Result:=GetColor(QPaletteActive, QPaletteWindow);
|
||||
COLOR_HIGHLIGHT : Result:=GetColor(QPaletteActive, QPaletteHighlight);
|
||||
COLOR_HIGHLIGHTTEXT : Result:=GetColor(QPaletteActive, QPaletteHighlightedText);
|
||||
COLOR_BTNFACE : Result:=GetColor(QPaletteActive, QPaletteButton);
|
||||
COLOR_BTNSHADOW : Result:=GetColor(QPaletteActive, QPaletteDark);
|
||||
COLOR_GRAYTEXT : Result:=GetColor(QPaletteActive, QPaletteText);
|
||||
COLOR_BTNTEXT : Result:=GetColor(QPaletteActive, QPaletteButtonText);
|
||||
COLOR_BTNHIGHLIGHT : Result:=GetColor(QPaletteActive, QPaletteLight);
|
||||
COLOR_3DDKSHADOW : Result:=GetColor(QPaletteActive, QPaletteShadow);
|
||||
COLOR_3DLIGHT : Result:=GetColor(QPaletteActive, QPaletteMidlight);
|
||||
{$IFDEF USE_QT_44}
|
||||
COLOR_INFOTEXT : Result:=GetColor(QPaletteInActive, QPaletteToolTipText);
|
||||
COLOR_INFOBK : Result:=GetColor(QPaletteInActive, QPaletteToolTipBase);
|
||||
{$ELSE}
|
||||
COLOR_INFOTEXT : Result:=GetClInfo(False);
|
||||
COLOR_INFOBK : Result:=GetClInfo(True);
|
||||
{$ENDIF}
|
||||
COLOR_HOTLIGHT : Result:=GetColor(QPaletteActive, QPaletteLight);
|
||||
|
||||
// qt does not provide any methods to retrieve titlebar colors
|
||||
{$IFNDEF MSWINDOWS}
|
||||
COLOR_ACTIVECAPTION : Result:=GetColor(QPaletteActive, QPaletteHighlight);
|
||||
COLOR_INACTIVECAPTION : Result:=GetColor(QPaletteInActive, QPaletteHighlight);
|
||||
COLOR_CAPTIONTEXT : Result:=GetColor(QPaletteActive, QPaletteHighlightedText);
|
||||
COLOR_INACTIVECAPTIONTEXT : Result:=GetColor(QPaletteInactive, QPaletteHighlightedText);
|
||||
COLOR_GRADIENTACTIVECAPTION : Result:=GetColor(QPaletteActive, QPaletteBase);
|
||||
COLOR_GRADIENTINACTIVECAPTION : Result:=GetColor(QPaletteInactive, QPaletteBase);
|
||||
{$ELSE}
|
||||
COLOR_ACTIVECAPTION : Result:=Windows.GetSysColor(COLOR_ACTIVECAPTION);
|
||||
COLOR_INACTIVECAPTION : Result:=Windows.GetSysColor(COLOR_INACTIVECAPTION);
|
||||
COLOR_CAPTIONTEXT : Result:=Windows.GetSysColor(COLOR_CAPTIONTEXT);
|
||||
COLOR_INACTIVECAPTIONTEXT : Result:=Windows.GetSysColor(COLOR_INACTIVECAPTIONTEXT);
|
||||
COLOR_GRADIENTACTIVECAPTION : Result:=Windows.GetSysColor(COLOR_GRADIENTACTIVECAPTION);
|
||||
COLOR_GRADIENTINACTIVECAPTION : Result:=Windows.GetSysColor(COLOR_GRADIENTINACTIVECAPTION);
|
||||
{$ENDIF}
|
||||
COLOR_MENU : Result:=GetColor(QPaletteActive, QPaletteButton, 'QMenu');
|
||||
COLOR_MENUTEXT : Result:=GetColor(QPaletteActive, QPaletteButtonText, 'QMenu');
|
||||
COLOR_MENUHILIGHT : Result:=GetColor(QPaletteDisabled, QPaletteHighlight, 'QMenu');
|
||||
COLOR_MENUBAR : Result:=GetColor(QPaletteActive, QPaletteButton, 'QMenu');
|
||||
COLOR_FORM : Result:=GetColor(QPaletteActive, QPaletteWindow);
|
||||
else
|
||||
Result:=0;
|
||||
end;
|
||||
// qt does not provide any methods to retrieve titlebar colors
|
||||
{$IFNDEF MSWINDOWS}
|
||||
COLOR_ACTIVECAPTION : Result:=GetColor(QPaletteActive, QPaletteHighlight);
|
||||
COLOR_INACTIVECAPTION : Result:=GetColor(QPaletteInActive, QPaletteHighlight);
|
||||
COLOR_CAPTIONTEXT : Result:=GetColor(QPaletteActive, QPaletteHighlightedText);
|
||||
COLOR_INACTIVECAPTIONTEXT : Result:=GetColor(QPaletteInactive, QPaletteHighlightedText);
|
||||
COLOR_GRADIENTACTIVECAPTION : Result:=GetColor(QPaletteActive, QPaletteBase);
|
||||
COLOR_GRADIENTINACTIVECAPTION : Result:=GetColor(QPaletteInactive, QPaletteBase);
|
||||
{$ELSE}
|
||||
COLOR_ACTIVECAPTION : Result:=Windows.GetSysColor(COLOR_ACTIVECAPTION);
|
||||
COLOR_INACTIVECAPTION : Result:=Windows.GetSysColor(COLOR_INACTIVECAPTION);
|
||||
COLOR_CAPTIONTEXT : Result:=Windows.GetSysColor(COLOR_CAPTIONTEXT);
|
||||
COLOR_INACTIVECAPTIONTEXT : Result:=Windows.GetSysColor(COLOR_INACTIVECAPTIONTEXT);
|
||||
COLOR_GRADIENTACTIVECAPTION : Result:=Windows.GetSysColor(COLOR_GRADIENTACTIVECAPTION);
|
||||
COLOR_GRADIENTINACTIVECAPTION : Result:=Windows.GetSysColor(COLOR_GRADIENTINACTIVECAPTION);
|
||||
{$ENDIF}
|
||||
COLOR_MENU : Result:=GetColor(QPaletteActive, QPaletteButton, 'QMenu');
|
||||
COLOR_MENUTEXT : Result:=GetColor(QPaletteActive, QPaletteButtonText, 'QMenu');
|
||||
COLOR_MENUHILIGHT : Result:=GetColor(QPaletteDisabled, QPaletteHighlight, 'QMenu');
|
||||
COLOR_MENUBAR : Result:=GetColor(QPaletteActive, QPaletteButton, 'QMenu');
|
||||
COLOR_FORM : Result:=GetColor(QPaletteActive, QPaletteWindow);
|
||||
else
|
||||
Result:=0;
|
||||
end;
|
||||
FCachedColors[nIndex] := getMem(SizeOf(LongWord));
|
||||
FCachedColors[nIndex]^ := Result;
|
||||
end else
|
||||
Result := FCachedColors[nIndex]^;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
|
||||
Loading…
Reference in New Issue
Block a user