View Issue Details

IDProjectCategoryView StatusLast Update
0011715LazarusIDEpublic2009-10-23 00:40
ReporterMartin Friebe Assigned ToMartin Friebe  
Status closedResolutionfixed 
Product Version0.9.25 (SVN) 
Target Version1.0.0Fixed in Version0.9.27 (SVN) 
Summary0011715: Synedit on windows, SetTopline "paints", outside of "procedure paint". possible flicker, or unnecessary paint
DescriptionAll painting (drawing/textout) for Synedit is done within the WM_PAINT event (triggered by invalidate).

The only exception is scrolling the window in SetTopline (windows only). This can lead to:
- flicker (see bug 0011474)
- unnecessary repaints(moving up and down several times.

Also for better modularity, this could be moved into the SynTextDrawer (which should handle all Paint/canvas/draw operation => thinking of testcases, they could use a special textdrawer to capture output.
Additional InformationSetTopline should:
- invalidate
  - if possible an invisible part of the window, just to triger the WM_PAINT
  - otherwise the minimum possible (1 pixel)
- set a flag => scroll_or_redraw_all

- if anything else gets invalidated (before or after), then all lines should be redrawn (Invalidate removes possible_scroll flag, and invalidates the full rect)

- if scrolling is not available (non windows, not implemented) all lines are repainted ( same if the Y delta is to big)
- if posible scrolling is done
 => this will trigger a 2nd WM_PAINT (windows does this from inside scroll), so the new lines will be painted then

* I am sure there are a few more cases to take care off, but the outline should be good to serve as reminder
TagsNo tags attached.
Fixed in Revision20975
Attached Files


related to 0011474 closedMattias Gaertner Patches flicker in incremental search (patch) 
related to 0007717 closedMartin Friebe Lazarus Scrolling down with arrow in TSynEdit = 100%CPU 


Martin Friebe

2009-07-27 18:28

manager   ~0029287

scrolling is now deferred to the latest possible time.

Issue History

Date Modified Username Field Change
2008-07-21 11:37 Martin Friebe New Issue
2008-07-21 11:37 Martin Friebe LazTarget => -
2008-07-21 11:37 Martin Friebe Widgetset => Win32
2008-07-21 11:37 Martin Friebe Status new => assigned
2008-07-21 11:37 Martin Friebe Assigned To => Martin Friebe
2008-07-21 11:37 Martin Friebe Relationship added related to 0011474
2009-04-23 14:04 Martin Friebe Relationship added related to 0007717
2009-07-27 18:28 Martin Friebe Fixed in Revision => 20975
2009-07-27 18:28 Martin Friebe LazTarget - => 1.0
2009-07-27 18:28 Martin Friebe Widgetset Win32/Win64 =>
2009-07-27 18:28 Martin Friebe Status assigned => resolved
2009-07-27 18:28 Martin Friebe Fixed in Version => 0.9.27 (SVN)
2009-07-27 18:28 Martin Friebe Resolution open => fixed
2009-07-27 18:28 Martin Friebe Note Added: 0029287
2009-07-27 18:28 Martin Friebe Target Version => 1.0.0
2009-10-23 00:40 Marc Weustink Status resolved => closed