mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-20 12:19:31 +02:00
SynEdit: Replace TextDrawer.RegisterOnFontChangeHandler with SynEdit.RegisterStatusChangedHandler(... scFontOrStyleChanged)
This commit is contained in:
parent
fc053b01ee
commit
7ea532fc16
@ -10,7 +10,7 @@ interface
|
||||
|
||||
uses
|
||||
windows, imm, LazSynIMMBase, Classes, SysUtils, Controls, LazLoggerBase, LCLType, LazUTF8,
|
||||
Graphics, SynEditMiscClasses, SynTextDrawer, SynEditPointClasses, SynEditMarkupSelection,
|
||||
Graphics, SynEditMiscClasses, SynEditPointClasses, SynEditMarkupSelection,
|
||||
SynEditMarkup, SynEditTypes, SynEditKeyCmds, LazSynEditText, SynEditTextBase,
|
||||
LazEditTextAttributes;
|
||||
|
||||
@ -29,12 +29,10 @@ type
|
||||
private
|
||||
FImeBlockSelection: TSynEditSelection;
|
||||
FImeWinX, FImeWinY: Integer;
|
||||
FTextDrawer: TheTextDrawer;
|
||||
procedure SetTextDrawer(AValue: TheTextDrawer);
|
||||
procedure UpdateImeWinXY(aX, aY: Integer; aImc: HIMC = 0; aForce: Boolean = False);
|
||||
procedure UpdateImeWinFont(aImc: HIMC = 0);
|
||||
procedure DoStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||
procedure DoDrawerFontChanged(Sender: TObject);
|
||||
procedure DoDrawerFontChanged;
|
||||
procedure DoOnCommand(Sender: TObject; AfterProcessing: boolean; var Handled: boolean;
|
||||
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer;
|
||||
HandlerData: pointer);
|
||||
@ -48,7 +46,6 @@ type
|
||||
procedure WMImeStartComposition(var Msg: TMessage); override;
|
||||
procedure WMImeEndComposition(var Msg: TMessage); override;
|
||||
procedure FocusKilled; override;
|
||||
property TextDrawer: TheTextDrawer read FTextDrawer write SetTextDrawer;
|
||||
end;
|
||||
|
||||
{ LazSynImeFull }
|
||||
@ -118,12 +115,17 @@ end;
|
||||
|
||||
procedure LazSynImeSimple.DoStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||
begin
|
||||
if scFontOrStyleChanged in Changes then begin
|
||||
DoDrawerFontChanged;
|
||||
if Changes = [scFontOrStyleChanged] then exit;
|
||||
end;
|
||||
|
||||
UpdateImeWinXY(FriendEdit.CaretXPix, FriendEdit.CaretYPix);
|
||||
if Changes * [scCaretX, scCaretY] <> [] then
|
||||
StopIme(False);
|
||||
end;
|
||||
|
||||
procedure LazSynImeSimple.DoDrawerFontChanged(Sender: TObject);
|
||||
procedure LazSynImeSimple.DoDrawerFontChanged;
|
||||
var
|
||||
imc: HIMC;
|
||||
begin
|
||||
@ -173,16 +175,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure LazSynImeSimple.SEtTextDrawer(AValue: TheTextDrawer);
|
||||
begin
|
||||
if FTextDrawer = AValue then Exit;
|
||||
if FTextDrawer <> nil then
|
||||
FTextDrawer.UnRegisterOnFontChangeHandler(@DoDrawerFontChanged);
|
||||
FTextDrawer := AValue;
|
||||
if FTextDrawer <> nil then
|
||||
FTextDrawer.RegisterOnFontChangeHandler(@DoDrawerFontChanged);
|
||||
end;
|
||||
|
||||
procedure LazSynImeSimple.UpdateImeWinFont(aImc: HIMC);
|
||||
var
|
||||
imc: HIMC;
|
||||
@ -207,14 +199,13 @@ begin
|
||||
FImeBlockSelection := TSynEditSelection.Create(ViewedTextBuffer, False);
|
||||
FImeBlockSelection.InvalidateLinesMethod := @InvalidateLines;
|
||||
|
||||
FriendEdit.RegisterStatusChangedHandler(@DoStatusChanged, [scCaretX, scCaretY, scLeftChar, scTopLine, scModified]);
|
||||
FriendEdit.RegisterStatusChangedHandler(@DoStatusChanged, [scCaretX, scCaretY, scLeftChar, scTopLine, scModified, scFontOrStyleChanged]);
|
||||
FriendEdit.RegisterCommandHandler(@DoOnCommand, nil, [hcfInit]);
|
||||
FriendEdit.RegisterBeforeMouseDownHandler(@DoOnMouse);
|
||||
end;
|
||||
|
||||
destructor LazSynImeSimple.Destroy;
|
||||
begin
|
||||
TextDrawer := nil;
|
||||
FreeAndNil(FImeBlockSelection);
|
||||
FriendEdit.UnregisterBeforeMouseDownHandler(@DoOnMouse);
|
||||
FriendEdit.UnregisterCommandHandler(@DoOnCommand);
|
||||
|
@ -150,7 +150,7 @@ type
|
||||
procedure SetLeftChar(AValue: Integer);
|
||||
procedure SetPadding(Side: TLazSynBorderSide; AValue: integer);
|
||||
procedure SetTopLine(AValue: TLinePos);
|
||||
procedure DoDrawerFontChanged(Sender: TObject);
|
||||
procedure DoDrawerFontChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||
protected
|
||||
procedure BoundsChanged; override;
|
||||
procedure DoPaint(ACanvas: TCanvas; AClip: TRect); override;
|
||||
@ -158,7 +158,7 @@ type
|
||||
FirstCol, LastCol: integer); virtual;
|
||||
property Canvas: TCanvas read FCanvas;
|
||||
public
|
||||
constructor Create(AOwner: TWinControl; ATextDrawer: TheTextDrawer);
|
||||
constructor Create(AOwner: TSynEditBase; ATextDrawer: TheTextDrawer);
|
||||
destructor Destroy; override;
|
||||
procedure Assign(Src: TLazSynSurface); override;
|
||||
procedure InvalidateLines(FirstTextLine, LastTextLine: TLineIdx; AScreenLineOffset: Integer = 0); override;
|
||||
@ -245,7 +245,7 @@ type
|
||||
procedure DoDisplayViewChanged; override;
|
||||
procedure BoundsChanged; override;
|
||||
public
|
||||
constructor Create(AOwner: TWinControl);
|
||||
constructor Create(AOwner: TSynEditBase);
|
||||
procedure InvalidateLines(FirstTextLine, LastTextLine: TLineIdx; AScreenLineOffset: Integer = 0); override;
|
||||
procedure InvalidateTextLines(FirstTextLine, LastTextLine: TLineIdx; AScreenLineOffset: Integer = 0); virtual;
|
||||
procedure InvalidateGutterLines(FirstTextLine, LastTextLine: TLineIdx; AScreenLineOffset: Integer = 0); virtual;
|
||||
@ -1304,7 +1304,7 @@ begin
|
||||
FRightGutterArea.SetBounds(Top, r, Bottom, Right);
|
||||
end;
|
||||
|
||||
constructor TLazSynSurfaceManager.Create(AOwner: TWinControl);
|
||||
constructor TLazSynSurfaceManager.Create(AOwner: TSynEditBase);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
FLeftGutterWidth := 0;
|
||||
@ -1405,7 +1405,7 @@ begin
|
||||
FTopLine := AValue;
|
||||
end;
|
||||
|
||||
procedure TLazSynTextArea.DoDrawerFontChanged(Sender: TObject);
|
||||
procedure TLazSynTextArea.DoDrawerFontChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||
begin
|
||||
FontChanged;
|
||||
end;
|
||||
@ -1424,7 +1424,7 @@ begin
|
||||
Result := FTextBounds.Left + (Col - LeftChar) * fCharWidth;
|
||||
end;
|
||||
|
||||
function TLazSynTextArea.RowColumnToPixels(const RowCol: TScreenPoint): TPoint;
|
||||
function TLazSynTextArea.RowColumnToPixels(const RowCol: TScreenPoint_0): TPoint;
|
||||
begin
|
||||
// Inludes LeftChar, but not Topline
|
||||
Result.X := FTextBounds.Left + (RowCol.X - LeftChar) * CharWidth;
|
||||
@ -1453,7 +1453,7 @@ begin
|
||||
if Result.Y < 0 then Result.Y := 0;
|
||||
end;
|
||||
|
||||
constructor TLazSynTextArea.Create(AOwner: TWinControl; ATextDrawer: TheTextDrawer);
|
||||
constructor TLazSynTextArea.Create(AOwner: TSynEditBase; ATextDrawer: TheTextDrawer);
|
||||
var
|
||||
i: TLazSynBorderSide;
|
||||
begin
|
||||
@ -1461,7 +1461,8 @@ begin
|
||||
FTextSizeChangeList := TMethodList.Create;
|
||||
FTokenBreaker := TLazSynPaintTokenBreaker.Create;
|
||||
FTextDrawer := ATextDrawer;
|
||||
FTextDrawer.RegisterOnFontChangeHandler(@DoDrawerFontChanged);
|
||||
|
||||
Owner.RegisterStatusChangedHandler(@DoDrawerFontChanged, [scFontOrStyleChanged]);
|
||||
FPaintLineColor := TSynSelectedColor.Create;
|
||||
FPaintLineColor2 := TSynSelectedColor.Create;
|
||||
for i := low(TLazSynBorderSide) to high(TLazSynBorderSide) do
|
||||
@ -1477,7 +1478,7 @@ end;
|
||||
destructor TLazSynTextArea.Destroy;
|
||||
begin
|
||||
FreeAndNil(FTokenBreaker);
|
||||
FTextDrawer.UnRegisterOnFontChangeHandler(@DoDrawerFontChanged);
|
||||
Owner.UnRegisterStatusChangedHandler(@DoDrawerFontChanged);
|
||||
FreeAndNil(FPaintLineColor);
|
||||
FreeAndNil(FPaintLineColor2);
|
||||
FreeAndNil(FTextSizeChangeList);
|
||||
|
@ -8964,6 +8964,7 @@ begin
|
||||
for i := 0 to Pred(fHighlighter.AttrCount) do
|
||||
fTextDrawer.BaseStyle := fHighlighter.Attribute[i].Style;
|
||||
fTextDrawer.CharExtra := ExtraCharSpacing;
|
||||
StatusChanged([scFontOrStyleChanged]); // Font or Spacing
|
||||
|
||||
FLines.IsUtf8 := True;
|
||||
finally
|
||||
|
@ -558,7 +558,7 @@ type
|
||||
FBounds: TRect;
|
||||
FBoundsChangeList: TMethodList;
|
||||
FDisplayView: TLazSynDisplayView;
|
||||
FOwner: TWinControl;
|
||||
FOwner: TSynEditBase;
|
||||
function GetHandle: HWND;
|
||||
procedure SetDisplayView(AValue: TLazSynDisplayView);
|
||||
protected
|
||||
@ -566,8 +566,9 @@ type
|
||||
procedure DoPaint(ACanvas: TCanvas; AClip: TRect); virtual; abstract;
|
||||
procedure DoDisplayViewChanged; virtual;
|
||||
property Handle: HWND read GetHandle;
|
||||
property Owner: TSynEditBase read FOwner;
|
||||
public
|
||||
constructor Create(AOwner: TWinControl);
|
||||
constructor Create(AOwner: TSynEditBase);
|
||||
destructor Destroy; override;
|
||||
procedure Assign(Src: TLazSynSurface); virtual;
|
||||
procedure AddBoundsChangeHandler(AHandler: TNotifyEvent);
|
||||
@ -1561,7 +1562,7 @@ begin
|
||||
//
|
||||
end;
|
||||
|
||||
constructor TLazSynSurface.Create(AOwner: TWinControl);
|
||||
constructor TLazSynSurface.Create(AOwner: TSynEditBase);
|
||||
begin
|
||||
FOwner := AOwner;
|
||||
FBoundsChangeList := TMethodList.Create;
|
||||
|
@ -118,6 +118,7 @@ type
|
||||
scInsertMode, scModified, scSelection, scReadOnly,
|
||||
scFocus, // received or lost focus
|
||||
scHandleCreated, // handle created
|
||||
scFontOrStyleChanged,
|
||||
scOptions // some Options were changed (only triggered by some optinos)
|
||||
);
|
||||
TSynStatusChanges = set of TSynStatusChange;
|
||||
|
@ -46,7 +46,7 @@ type
|
||||
function PreferedWidthAtCurrentPPI: Integer; override;
|
||||
procedure LineCountChanged(Sender: TSynEditStrings; AIndex, ACount: Integer);
|
||||
procedure BufferChanged(Sender: TObject);
|
||||
procedure FontChanged(Sender: TObject);
|
||||
procedure FontChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||
procedure SetAutoSize(const AValue : boolean); override;
|
||||
procedure SetVisible(const AValue: boolean); override;
|
||||
function CreateMouseActions: TSynEditMouseInternalActions; override;
|
||||
@ -88,14 +88,14 @@ begin
|
||||
FTextDrawer := Gutter.TextDrawer;
|
||||
ViewedTextBuffer.AddChangeHandler(senrLineCount, @LineCountChanged);
|
||||
ViewedTextBuffer.AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
|
||||
FTextDrawer.RegisterOnFontChangeHandler(@FontChanged);
|
||||
FriendEdit.RegisterStatusChangedHandler(@FontChanged, [scFontOrStyleChanged]);
|
||||
LineCountchanged(nil, 0, 0);
|
||||
end;
|
||||
|
||||
destructor TSynGutterLineNumber.Destroy;
|
||||
begin
|
||||
ViewedTextBuffer.RemoveHandlers(self);
|
||||
FTextDrawer.UnRegisterOnFontChangeHandler(@FontChanged);
|
||||
FriendEdit.UnRegisterStatusChangedHandler(@FontChanged);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
@ -208,7 +208,7 @@ begin
|
||||
LineCountChanged(nil, 0, 0);
|
||||
end;
|
||||
|
||||
procedure TSynGutterLineNumber.FontChanged(Sender: TObject);
|
||||
procedure TSynGutterLineNumber.FontChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||
begin
|
||||
DoAutoSize;
|
||||
end;
|
||||
|
@ -133,7 +133,7 @@ type
|
||||
procedure DoDisplayViewChanged; override;
|
||||
procedure BoundsChanged; override;
|
||||
public
|
||||
constructor Create(AOwner: TWinControl; AnOriginalManager: TLazSynSurfaceManager);
|
||||
constructor Create(AOwner: TSynEditBase; AnOriginalManager: TLazSynSurfaceManager);
|
||||
destructor Destroy; override;
|
||||
procedure InvalidateLines(FirstTextLine, LastTextLine: TLineIdx; AScreenLineOffset: Integer = 0); override;
|
||||
procedure InvalidateTextLines(FirstTextLine, LastTextLine: TLineIdx; AScreenLineOffset: Integer = 0); override;
|
||||
@ -1519,7 +1519,8 @@ begin
|
||||
FOriginalManager.SetBounds(t, Left, Bottom, Right);
|
||||
end;
|
||||
|
||||
constructor TSourceLazSynSurfaceManager.Create(AOwner: TWinControl; AnOriginalManager: TLazSynSurfaceManager);
|
||||
constructor TSourceLazSynSurfaceManager.Create(AOwner: TSynEditBase;
|
||||
AnOriginalManager: TLazSynSurfaceManager);
|
||||
var
|
||||
txt: TLazSynTextArea;
|
||||
lgutter, rgutter: TLazSynGutterArea;
|
||||
@ -2138,7 +2139,6 @@ var
|
||||
begin
|
||||
if ImeHandler is LazSynImeSimple then exit;
|
||||
Ime := LazSynImeSimple.Create(Self);
|
||||
LazSynImeSimple(Ime).TextDrawer := TextDrawer;
|
||||
Ime.InvalidateLinesMethod := @InvalidateLines;
|
||||
ImeHandler := Ime;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user