diff --git a/src/ce_synmemo.pas b/src/ce_synmemo.pas index 90e03bd2..ba2903e5 100644 --- a/src/ce_synmemo.pas +++ b/src/ce_synmemo.pas @@ -91,7 +91,7 @@ type fMousePos: TPoint; fCallTipWin: TCEEditorHintWindow; fDDocWin: TCEEditorHintWindow; - fIdleTimer: TIdleTimer; + fHintTimer: TIdleTimer; fCanShowHint: boolean; fOldMousePos: TPoint; function getMouseStart: Integer; @@ -100,8 +100,7 @@ type procedure saveCache; procedure loadCache; procedure setDefaultFontSize(aValue: Integer); - procedure hintWinClick(sender: TObject); - procedure EditorIdle(sender: TObject); + procedure HintTimerEvent(sender: TObject); procedure InitHintWins; protected procedure SetVisible(Value: Boolean); override; @@ -326,12 +325,15 @@ end; constructor TCESynMemo.Create(aOwner: TComponent); begin inherited; - InitHintWins; - self.ShowHint:=false; - SetDefaultKeystrokes; // not called in inherited if owner = nil ! + // fDefaultFontSize := 10; - fIdleTimer := TIdleTimer.Create(self); - fIdleTimer.OnTimer := @EditorIdle; + SetDefaultKeystrokes; // not called in inherited if owner = nil ! + // + ShowHint :=false; + InitHintWins; + fHintTimer := TIdleTimer.Create(self); + fHintTimer.OnTimer := @HintTimerEvent; + // Gutter.LineNumberPart.ShowOnlyLineNumbersMultiplesOf := 5; Gutter.LineNumberPart.MarkupInfo.Foreground := clGray; Gutter.SeparatorPart.LineOffset := 1; @@ -352,11 +354,11 @@ begin fTempFileName := GetTempDir(false) + 'temp_' + uniqueObjStr(self) + '.d'; fFilename := '<new document>'; fModified := false; - //ShowHint := true; TextBuffer.AddNotifyHandler(senrUndoRedoAdded, @changeNotify); // fPositions := TCESynMemoPositions.create(self); fMultiDocSubject := TCEMultiDocSubject.create; + // subjDocNew(TCEMultiDocSubject(fMultiDocSubject), self); end; @@ -370,6 +372,7 @@ begin // if fileExists(fTempFileName) then sysutils.DeleteFile(fTempFileName); + // inherited; end; @@ -398,28 +401,21 @@ begin if Value then setFocus; end; -procedure TCESynMemo.hintWinClick(sender: TObject); -begin - with THintWindow(sender) do Hide; -end; - procedure TCESynMemo.InitHintWins; begin if fCallTipWin = nil then begin fCallTipWin := TCEEditorHintWindow.Create(self); fCallTipWin.Color := clInfoBk + $01010100; fCallTipWin.Font.Color:= clInfoText; - fCallTipWin.OnClick:= @hintWinClick; end; if fDDocWin = nil then begin fDDocWin := TCEEditorHintWindow.Create(self); fDDocWin.Color := clInfoBk + $01010100; fDDocWin.Font.Color:= clInfoText; - fDDocWin.OnClick:= @hintWinClick; end; end; -procedure TCESynMemo.EditorIdle(sender: TObject); +procedure TCESynMemo.HintTimerEvent(sender: TObject); var str: string; begin @@ -427,7 +423,7 @@ begin if not isDSource then exit; // if not fCanShowHint then exit; - if Identifier = '' then exit; + fCanShowHint := false; DcdWrapper.getDdocFromCursor(str); // if (length(str) > 0) then @@ -440,8 +436,7 @@ begin if str <> '' then begin fDDocWin.FontSize := Font.Size; - fDDocWin.Font.Size:=Font.Size; - fDDocWin.HintRect := fCallTipWin.CalcHintRect(0, str, nil); + fDDocWin.HintRect := fDDocWin.CalcHintRect(0, str, nil); fDDocWin.OffsetHintRect(mouse.CursorPos, Font.Size); fDDocWin.ActivateHint(fDDocWin.HintRect, str); end; @@ -610,7 +605,7 @@ begin begin fCallTipWin.FontSize := Font.Size; fCallTipWin.HintRect := fCallTipWin.CalcHintRect(0, str, nil); - fCallTipWin.OffsetHintRect(point(CaretXPix, CaretYPix), Font.Size); + fCallTipWin.OffsetHintRect(ClientToScreen(point(CaretXPix, CaretYPix)), - (Font.Size * 2 + 5)); fCallTipWin.ActivateHint(str); end; end else fCallTipWin.Hide; @@ -628,13 +623,19 @@ begin end; procedure TCESynMemo.MouseMove(Shift: TShiftState; X, Y: Integer); +var + dX, dY: Integer; begin fDDocWin.Hide; fCallTipWin.Hide; inherited; - fCanShowHint := (shift = []) and - (Y - fOldMousePos.y < 2) and (Y - fOldMousePos.y > -2) and - (X - fOldMousePos.x < 2) and (X - fOldMousePos.x > -2); + dx := X - fOldMousePos.x; + dy := Y - fOldMousePos.y; + fCanShowHint:=false; + if (shift = []) then if + ((dx < 0) and (dx > -5) or (dx > 0) and (dx < 5)) or + ((dy < 0) and (dy > -5) or (dy > 0) and (dy < 5)) then + fCanShowHint:=true; fOldMousePos := Point(X, Y); fMousePos := PixelsToRowColumn(fOldMousePos); if ssLeft in Shift then