|
From: <et...@us...> - 2003-09-21 17:12:19
|
Update of /cvsroot/synedit/SynEdit/Source
In directory sc8-pr-cvs1:/tmp/cvs-serv4352/Source
Modified Files:
SynEdit.pas
Log Message:
New OnMouseCursor event.
Index: SynEdit.pas
===================================================================
RCS file: /cvsroot/synedit/SynEdit/Source/SynEdit.pas,v
retrieving revision 1.298
retrieving revision 1.299
diff -u -d -r1.298 -r1.299
--- SynEdit.pas 19 Sep 2003 17:02:06 -0000 1.298
+++ SynEdit.pas 21 Sep 2003 17:12:12 -0000 1.299
@@ -240,6 +240,9 @@
TStatusChangeEvent = procedure(Sender: TObject; Changes: TSynStatusChanges)
of object;
+ TMouseCursorEvent = procedure(Sender: TObject; const aLineCharPos: TPoint;
+ var aCursor: TCursor) of object;
+
TCustomSynEdit = class;
TSynEditMark = class
@@ -419,6 +422,7 @@
fOnCommandProcessed: TProcessCommandEvent;
fOnDropFiles: TDropFilesEvent;
fOnGutterClick: TGutterClickEvent;
+ fOnMouseCursor: TMouseCursorEvent;
fOnPaint: TPaintEvent;
fOnPlaceMark: TPlaceMarkEvent;
fOnProcessCommand: TProcessCommandEvent;
@@ -552,7 +556,7 @@
procedure UpdateModifiedStatus; //mr.maX 2003-05-22
procedure UndoRedoAdded(Sender: TObject);
procedure UpdateLastCaretX; //jr 2002-04-26
- function UpdateMouseCursor: boolean;
+ procedure UpdateMouseCursor;
procedure UpdateScrollBars;
procedure WriteAddedKeystrokes(Writer: TWriter);
procedure WriteRemovedKeystrokes(Writer: TWriter);
@@ -887,6 +891,8 @@
write fOnGutterGetText;
property OnGutterPaint: TGutterPaintEvent read fOnGutterPaint
write fOnGutterPaint;
+ property OnMouseCursor: TMouseCursorEvent read fOnMouseCursor
+ write fOnMouseCursor;
property OnPaint: TPaintEvent read fOnPaint write fOnPaint;
property OnPlaceBookmark: TPlaceMarkEvent
read FOnPlaceMark write FOnPlaceMark;
@@ -1000,6 +1006,7 @@
property OnGutterGetText;
property OnGutterPaint;
property OnLineNumber;
+ property OnMouseCursor;
property OnPaint;
property OnPlaceBookmark;
property OnProcessCommand;
@@ -3812,7 +3819,7 @@
end
else
InvalidateLines(-1, -1);
- if ([eoAutoSizeMaxLineWidth, eoScrollPastEol] - Options = []) and
+ if (Options >= [eoAutoSizeMaxLineWidth, eoScrollPastEol]) and
(MaxLineWidth < LeftChar + CharsInWindow) then
begin
MaxLineWidth := LeftChar + CharsInWindow
@@ -7910,7 +7917,9 @@
procedure TCustomSynEdit.WMSetCursor(var Msg: TWMSetCursor);
begin
- if not UpdateMouseCursor then
+ if (Msg.HitTest = HTCLIENT) and (Msg.CursorWnd = Handle) then
+ UpdateMouseCursor
+ else
inherited;
end;
{$ENDIF}
@@ -8159,7 +8168,7 @@
inherited;
end;
-function TCustomSynEdit.UpdateMouseCursor: boolean;
+procedure TCustomSynEdit.UpdateMouseCursor;
{$IFDEF SYN_CLX}
procedure SetCursor(aCursor: QCursorH);
@@ -8170,29 +8179,29 @@
var
ptCursor, ptLineCol: TPoint;
+ iNewCursor: TCursor;
begin
- Result := True;
GetCursorPos(ptCursor);
ptCursor := ScreenToClient(ptCursor);
{$IFDEF SYN_CLX}
ptLineCol := GetClientRect.BottomRight;
if (ptCursor.X >= ptLineCol.X) or (ptCursor.Y >= ptLineCol.Y) then
begin
- QWidget_setCursor( Handle, Screen.Cursors[crDefault] );
+ QWidget_setCursor( Handle, Screen.Cursors[crArrow] );
Exit;
end;
{$ENDIF}
if (ptCursor.X < fGutterWidth) then
SetCursor(Screen.Cursors[fGutter.Cursor])
else begin
- ptLineCol.X := (LeftChar * fCharWidth + ptCursor.X - fGutterWidth - 2)
- div fCharWidth;
- ptLineCol.Y := TopLine + ptCursor.Y div fTextHeight;
- ptLineCol := PhysicalToLogicalPos(ptLineCol);
+ ptLineCol := PhysicalToLogicalPos( PixelsToRowColumn( ptCursor ) );
if (eoDragDropEditing in fOptions) and IsPointInSelection(ptLineCol) then
- SetCursor(Screen.Cursors[crDefault])
- else
- Result := False;
+ iNewCursor := crArrow
+ else
+ iNewCursor := Cursor;
+ if Assigned( OnMouseCursor ) then
+ OnMouseCursor( Self, ptLineCol, iNewCursor );
+ SetCursor( Screen.Cursors[iNewCursor] );
end;
end;
|