Hi John,
can you run SynEdit with console output, or output to a logfile? And put some debugging in (and rebuild it)?
If yes, try this
1) in components/synedit/SynEditMarkup.pp line 244 currently:
procedure TSynEditMarkup.InvalidateSynLines(FirstLine, LastLine : integer);
begin
if assigned(fInvalidateLinesMethod)
then fInvalidateLinesMethod(FirstLine, LastLine);
end;
make it:
procedure TSynEditMarkup.InvalidateSynLines(FirstLine, LastLine : integer);
begin
debugln(['Markup InvalidateLin first=', FirstLine,' Last=', LastLine]);
if assigned(fInvalidateLinesMethod)
then fInvalidateLinesMethod(FirstLine, LastLine);
end;
and add "LCLProc" to the uses clause.
2) In components/synedit/SynEditMarkupBracket.pp after line 69 in
procedure TSynEditMarkupBracket.FindMatchingBracketPair(PhysCaret : TPoint;
find the "begin" and add at the start of the procedure: (LCLProc should be in uses already)
debugln('Brackets Invalidate');
3) in components/synedit/SynEdit.pp line 2851 (inside procedure Paint) uncomment the line:
DebugLn('TCustomSynEdit.Paint LinesInWindow=',dbgs(LinesInWindow),' nL1=',dbgs(nL1),' nL2=',dbgs(nL2));
Rebuild Lazarus.
Now if you approach or leave a bracket (it will be recognized to the right and to the left of the caret)
you should get some debug lines like
BracketsInvalidate
Markup InValidate start = xx last= yy
Markup InValidate start = xx last= yy
TCustomSynEdit.Paint LinesInWindow=25 nL1=xx nl2=yy
Possible some of them are repeated more/less often. Do they match the line number(s) where your brackets are? Can you get the result for 2 brackets on the same line, and 2 brackets on different lines?
Also ensure you do not use code folding => there are a few cases where code folding may affect the calculation of the correct line number.
Thanks
Martin
John Stoneham wrote 151 lines
Ok, a quick experiment leads me to believe it is indeed a redrawing
issue. As you suggested, I tried moving another window over the editor
window. When this happens, the highlighting appears as it should (when
the cursor is touching a bracket, the other bracket is highlighted;
when the cursor is away from the bracket, neither are highlighted). As
soon as the editor window receives focus again, the redrawing doesn't
work anymore to highlight or de-highlight the brackets.
BTW, the same thing happens if I pageup/pagedown with the cursor next
to the bracket. When I pageup/pagedown to bring that section back onto
the screen, the highlighting has repainted correctly. It also repaints
correctly if I CTRL+UP or CTRL+DOWN to scroll the editor window by one
line while the cursor remains on the line.
So, it definitely seems like a repaint or redrawing issue.
On Fri, Oct 10, 2008 at 9:00 AM, Martin Friebe <
<mailto:>> wrote:
Well, I don't have a mac, so I can't test this, but I was involved
into
some refactor around the bracket-highlights (a few month back).
one of the major changes was
http://bugs.freepascal.org/view.php?id=11693 revision 15861
Did it work before that? Did/does it work in 0.9.24?
A few of the other work items were
http://bugs.freepascal.org/view.php?id=11732 revision 15845
http://bugs.freepascal.org/view.php?id=11754 revision 15883 (highlight
bracket on either side of caret)
Anyway, a few things that may help to nail it down (even so I will not
be able to do too much, since I have no mac...)
1) Do determine if it is an issue, with synedit thinking it needs to
highlight a bracket, or is it an issue with Synedit not redrawing?
Do find out: When the highlight goes wrong:
a) Bracket is highlighted, but the cursor moved away
b) Bracket is not highlighted, but the cursor is on the bracket
resize the window, or overlap it with another window => anything that
should force a redraw => does synedit correct the highlighting?
2) Fontsize issues (there is a good chance to find it here)
- Try highlighter = "none" or "text" does that look any better?
- does it make a diff,if the caret is on the opening or closing
bracket
(the bracket occurring first on the line, or last?)
- does it make a diff if the 2 brackets are on the same line, or on 2
different lines (especially with highlighter none/text ?
Synedit with highlighter, paints the line as a selection of small
"tokens". It calculates the width of each of them. If the actual
textdrawer gets a different width => all sort of strange things
can happen.
That could explain an operating system dependent issue.
Martin
John Stoneham wrote:
>
>
> On Fri, Oct 10, 2008 at 4:17 AM, Mattias G?rtner
> < <mailto:>
<mailto:
<mailto:>>> wrote:
>
> Zitat von John Stoneham <
<mailto:>
> <mailto:
<mailto:>>>:
>
> > I've been using the latest svn (Carbon) for a while now,
> updating once a day
> > or so, and matching brackets never seem to highlight properly.
> This issue
> > appears on 10.4.11 and 10.5.3 (different builds for Tiger and
> Leopard).
> > Usually, they don't they do highlight,
> one or both
> > often get "stuck" with the highlighting on after the cursor
> moves away.
>
> Some weeks ago I saw the same problem. It was the wrong font.
> Since then it works almost nice, only sometimes the highlighting
> is not updated.
>
>
> Well, this would be a major improvement over what I see all the
time.
> Thing is, I've tried all the fixed width fonts (Andale Mono,
Courier,
> Courier New, Monaco), and changing font doesn't have any effect. It
> still doesn't work properly, ever. Which font are you using that's
> causing the bracket highlighting to almost work? Actually, it'd be
> better if you posted all your settings: the color scheme you use,
> font, font size, whether anti-aliasing is enabled, and your settings
> for matching brackets (e.g. bold, inverted, etc). Maybe they're some
> "magic combination" and you've stumbled onto it.
>
> Perhaps you could attach your editoroptions.xml file?
>
>
>
> > Is anyone else noticing this issue? If so, I'll submit a
bug report.
>
> If you have some clues how to reproduce it reliable , yes
please.
>
>
> It reproduces reliably for me, in that bracket highlighting never
> works the way it's supposed to. However, it seems to be working
> somewhat for you. If I can reproduce your settings and see the same
> behaviour, then I'm sure you could reproduce mine and see what I'm
> seeing. Then I'd say it's reproducable and I'll file a bug report.
>
> --
> _| ( ) |-| |\|
>
------------------------------------------------------------------------
>
> _______________________________________________
> Lazarus mailing list
>
<mailto:>
>
http://www.lazarus.freepascal.org/mailman/listinfo/lazarus
>
_______________________________________________
Lazarus mailing list
<mailto:>
http://www.lazarus.freepascal.org/mailman/listinfo/lazarus
--
_| ( ) |-| |\|
------------------------------------------------------------------------
_______________________________________________
Lazarus mailing list
http://www.lazarus.freepascal.org/mailman/listinfo/lazarus