cocoa: adjusting the cursor color for the standard NSTextField controls to be oppostive of their background. bug #38033

git-svn-id: trunk@64360 -
This commit is contained in:
dmitry 2021-01-09 07:31:16 +00:00
parent 9ffd47ce9f
commit b508eb30dc
2 changed files with 44 additions and 1 deletions

View File

@ -174,6 +174,8 @@ type
keyCaptured: Boolean;
function lclGetCallback: ICommonCallback; override;
function becomeFirstResponder: LCLObjCBoolean; override;
procedure setDelegate(adelegate: NSTextDelegateProtocol); override;
procedure lclReviseCursorColor; message 'lclReviseCursorColor';
// keyboard
procedure doCommandBySelector(aSelector: SEL); override;
procedure insertNewline(sender: id); override;
@ -756,12 +758,40 @@ begin
else Result := nil;
end;
function ReverseColor(clr: NSColor): NSColor;
var
r,g,b: byte;
begin
r := $FF xor byte(Round(clr.redComponent * 255));
g := $FF xor byte(Round(clr.greenComponent * 255));
b := $FF xor byte(Round(clr.blueComponent * 255));
Result := NSColor.colorWithRed_green_blue_alpha(r / 255, g / 255, b / 255, 1);
end;
function TCocoaFieldEditor.becomeFirstResponder: LCLObjCBoolean;
begin
if goingReadOnly then Result := false
else Result:=inherited becomeFirstResponder;
end;
procedure TCocoaFieldEditor.setDelegate(adelegate: NSTextDelegateProtocol);
begin
inherited setDelegate(adelegate);
lclReviseCursorColor;
end;
procedure TCocoaFieldEditor.lclReviseCursorColor;
var
clr :NSColor;
begin
if not Assigned(delegate) then Exit;
if not (NSObject(delegate).isKindOfClass(NSTextField)) then Exit;
clr := NSTextField(delegate).backgroundColor.colorUsingColorSpace(NSColorSpace.deviceRGBColorSpace);
if Assigned(clr) then
setInsertionPointColor(ReverseColor(clr));
end;
procedure TCocoaFieldEditor.doCommandBySelector(aSelector: SEL);
begin
inherited doCommandBySelector(aSelector);

View File

@ -999,7 +999,10 @@ end;
class procedure TCocoaWSCustomEdit.SetColor(const AWinControl: TWinControl);
var
field: TCocoaTextField;
field : TCocoaTextField;
w : NSWindow;
rsp : NSResponder;
ed : TCocoaFieldEditor;
begin
field := GetTextField(AWinControl);
if not Assigned(field) then Exit;
@ -1008,6 +1011,16 @@ begin
field.setBackgroundColor( NSColor.textBackgroundColor )
else
field.setBackgroundColor( ColorToNSColor(ColorToRGB(AWinControl.Color)));
w := NSView(AWinControl.Handle).window;
if not Assigned(w) then Exit;
rsp := w.firstResponder;
if (Assigned(rsp)) and (rsp.isKindOfClass(TCocoaFieldEditor)) then
begin
ed := TCocoaFieldEditor(rsp);
if (NSObject(ed.delegate) = NSView(AWinControl.Handle)) then
ed.lclReviseCursorColor;
end;
end;
class procedure TCocoaWSCustomEdit.SetBorderStyle(