mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-25 09:50:31 +01:00
cocoa: store NSColor in TCocoaBrush object for GetSysColor/SetSysColor functions
git-svn-id: trunk@34416 -
This commit is contained in:
parent
b347fbbe04
commit
e88c7b31b7
@ -117,18 +117,25 @@ type
|
||||
FCGPattern: CGPatternRef;
|
||||
FColored: Boolean;
|
||||
FBitmap: TCocoaBitmap;
|
||||
FColor: NSColor;
|
||||
private
|
||||
FImage: CGImageRef;
|
||||
strict protected
|
||||
procedure Clear;
|
||||
|
||||
procedure SetHatchStyle(AHatch: PtrInt);
|
||||
procedure SetBitmap(ABitmap: TCocoaBitmap);
|
||||
procedure SetImage(AImage: NSImage);
|
||||
procedure SetColor(AColor: NSColor); overload;
|
||||
public
|
||||
constructor CreateDefault(const AGlobal: Boolean = False);
|
||||
constructor Create(const ALogBrush: TLogBrush; const AGlobal: Boolean = False);
|
||||
constructor Create(const AColor: NSColor; const AGlobal: Boolean = False);
|
||||
destructor Destroy; override;
|
||||
procedure Apply(ADC: TCocoaContext; UseROP2: Boolean = True);
|
||||
|
||||
// for brushes created by NCColor
|
||||
property Color: NSColor read FColor write SetColor;
|
||||
end;
|
||||
|
||||
const
|
||||
@ -557,8 +564,7 @@ begin
|
||||
Result := TColorRef(RGBToColor(FR, FG, FB));
|
||||
end;
|
||||
|
||||
constructor TCocoaColorObject.Create(const AColor: TColor; ASolid,
|
||||
AGlobal: Boolean);
|
||||
constructor TCocoaColorObject.Create(const AColor: TColor; ASolid, AGlobal: Boolean);
|
||||
begin
|
||||
inherited Create(AGlobal);
|
||||
|
||||
@ -571,8 +577,7 @@ begin
|
||||
FA := ASolid;
|
||||
end;
|
||||
|
||||
procedure TCocoaColorObject.GetRGBA(AROP2: Integer; out AR, AG, AB, AA: Single
|
||||
);
|
||||
procedure TCocoaColorObject.GetRGBA(AROP2: Integer; out AR, AG, AB, AA: Single);
|
||||
begin
|
||||
case AROP2 of
|
||||
R2_BLACK:
|
||||
@ -2275,12 +2280,39 @@ begin
|
||||
Ord(FColored), ACallBacks);
|
||||
end;
|
||||
|
||||
procedure TCocoaBrush.SetColor(AColor: NSColor);
|
||||
var
|
||||
RGBColor, PatternColor: NSColor;
|
||||
begin
|
||||
Clear;
|
||||
|
||||
FColor := AColor;
|
||||
FColor.retain;
|
||||
|
||||
RGBColor := AColor.colorUsingColorSpaceName(NSCalibratedRGBColorSpace);
|
||||
|
||||
if Assigned(RGBColor) then
|
||||
SetColor(NSColorToRGB(RGBColor), True)
|
||||
else
|
||||
begin
|
||||
PatternColor := AColor.colorUsingColorSpaceName(NSPatternColorSpace);
|
||||
if Assigned(PatternColor) then
|
||||
begin
|
||||
SetColor(0, False);
|
||||
SetImage(PatternColor.patternImage);
|
||||
end
|
||||
else
|
||||
SetColor(0, True);
|
||||
end;
|
||||
end;
|
||||
|
||||
constructor TCocoaBrush.CreateDefault(const AGlobal: Boolean = False);
|
||||
begin
|
||||
inherited Create(clWhite, True, AGlobal);
|
||||
FBitmap := nil;
|
||||
FImage := nil;
|
||||
FCGPattern := nil;
|
||||
FColor := nil;
|
||||
end;
|
||||
|
||||
constructor TCocoaBrush.Create(const ALogBrush: TLogBrush; const AGlobal: Boolean = False);
|
||||
@ -2288,6 +2320,7 @@ begin
|
||||
FCGPattern := nil;
|
||||
FBitmap := nil;
|
||||
FImage := nil;
|
||||
FColor := nil;
|
||||
case ALogBrush.lbStyle of
|
||||
BS_SOLID:
|
||||
inherited Create(ColorToRGB(TColor(ALogBrush.lbColor)), True, AGlobal);
|
||||
@ -2314,6 +2347,9 @@ constructor TCocoaBrush.Create(const AColor: NSColor; const AGlobal: Boolean);
|
||||
var
|
||||
RGBColor, PatternColor: NSColor;
|
||||
begin
|
||||
FColor := AColor;
|
||||
FColor.retain;
|
||||
|
||||
FCGPattern := nil;
|
||||
FBitmap := nil;
|
||||
FImage := nil;
|
||||
@ -2333,13 +2369,32 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCocoaBrush.Clear;
|
||||
begin
|
||||
if FColor <> nil then
|
||||
begin
|
||||
FColor.release;
|
||||
FColor := nil;
|
||||
end;
|
||||
|
||||
if FCGPattern <> nil then
|
||||
begin
|
||||
CGPatternRelease(FCGPattern);
|
||||
FGGPattern := nil;
|
||||
end;
|
||||
|
||||
FreeAndNil(FBitmap);
|
||||
|
||||
if FImage <> nil then
|
||||
begin
|
||||
CGImageRelease(FImage);
|
||||
FImage := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
destructor TCocoaBrush.Destroy;
|
||||
begin
|
||||
if FCGPattern <> nil then
|
||||
CGPatternRelease(FCGPattern);
|
||||
FBitmap.Free;
|
||||
if FImage <> nil then
|
||||
CGImageRelease(FImage);
|
||||
Clear;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
|
||||
@ -1064,8 +1064,18 @@ var
|
||||
Color, RGBColor, PatternColor: NSColor;
|
||||
ImageRep: NSImageRep;
|
||||
x, y: Integer;
|
||||
SysBrush: HBrush;
|
||||
begin
|
||||
Color := SysColorToNSColor(nIndex);
|
||||
// 1. get the system brush - it has a NSColor reference
|
||||
SysBrush := GetSysColorBrush(nIndex);
|
||||
if SysBrush = 0 then
|
||||
begin
|
||||
Result := 0;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
Color := TCocoaBrush(SysBrush).Color;
|
||||
|
||||
if Assigned(Color) then
|
||||
begin
|
||||
LocalPool := NSAutoReleasePool.alloc.init;
|
||||
@ -1756,6 +1766,33 @@ begin
|
||||
Result := ExtSelectClipRgn(DC, RGN, RGN_COPY);
|
||||
end;
|
||||
|
||||
function TCocoaWidgetSet.SetSysColors(cElements: Integer; const lpaElements; const lpaRgbValues): Boolean;
|
||||
type
|
||||
TLongArray = array[0..0] of Longint;
|
||||
PLongArray = ^TLongArray;
|
||||
var
|
||||
n: Integer;
|
||||
Element: LongInt;
|
||||
Color: NSColor;
|
||||
begin
|
||||
Result := False;
|
||||
if cElements > MAX_SYS_COLORS then Exit;
|
||||
|
||||
for n := 0 to cElements - 1 do
|
||||
begin
|
||||
Element := PLongArray(lpaElements)^[n];
|
||||
if (Element > MAX_SYS_COLORS) or (Element < 0) then
|
||||
Exit;
|
||||
Color := ColorToNSColor(PLongArray(lpaRgbValues)^[n]);
|
||||
if (FSysColorBrushes[Element] <> 0) then
|
||||
FSysColorBrushes[Element].Color := Color
|
||||
else
|
||||
FSysColorBrushes[Element] := HBrush(TCocoaBrush.Create(SysColorToNSColor(nIndex), True));
|
||||
end;
|
||||
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
function TCocoaWidgetSet.RestoreDC(DC: HDC; SavedDC: Integer): Boolean;
|
||||
var
|
||||
ctx: TCocoaContext;
|
||||
|
||||
@ -177,6 +177,7 @@ function SetForegroundWindow(HWnd: HWND): boolean; override;
|
||||
function SetProp(Handle: hwnd; Str: PChar; Data: Pointer) : Boolean; override;
|
||||
function SetROP2(DC: HDC; Mode: Integer): Integer; override;
|
||||
function SetScrollInfo(Handle : HWND; SBStyle : Integer; ScrollInfo: TScrollInfo; bRedraw : Boolean): Integer; override;
|
||||
function SetSysColors(cElements: Integer; const lpaElements; const lpaRgbValues): Boolean; override;
|
||||
function SetTextColor(DC: HDC; Color: TColorRef): TColorRef; override;
|
||||
{function SetWindowOrgEx(DC : HDC; NewX, NewY : Integer; OldPoint: PPoint) : Boolean; override;
|
||||
function ShowCaret(hWnd: HWND): Boolean; override;}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user