The problem here is in a bad interpretation by Scintilla of
painting parameters. When the character is added, that line needs to
be painted so is invalidated. When the marker is changed, the whole
margin is invalidated leading to an update region that looks like
http://scintilla.sourceforge.net/TShaped.png
   Inside the paint function, the lexer is called and the range with
style changed is checked to see that it is all being painted. If it is
not then the whole window is redrawn. However, this check looks at the
rcPaint field of the paint structure which is the bounding rectangle
of the whole T-shaped update region so is the whole window. Therefore
the check thinks the non-blue areas are already being painted so
doesn't trigger a big redraw.
http://scintilla.sourceforge.net/NotAllDone.png

   You should get correct drawing if you redraw the whole window after
adding the marker with a call to InvalidateRect on the window with a
NULL rectangle and FALSE for the bErase parameter.

   The bug can be hidden a bit for your issue by changing the marker
setting code to only invalidate the line gaining the marker leading to
a simple update region of just the line.

  This bug will recur in other circumstances. Its a tricky problem as
not all platforms provide the same access to the update region or set
of operations on regions.

   Neil

_______________________________________________
Scintilla-interest mailing list
[email protected]
http://mailman.lyra.org/mailman/listinfo/scintilla-interest

Reply via email to