commit d377e765a236832aab13e0ec66579afdc2979f6b
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Sun Oct 4 22:28:36 2015 +0200

    More updates to painting analysis

diff --git a/development/PAINTING_ANALYSIS b/development/PAINTING_ANALYSIS
index 08afa50..f86ad2d 100644
--- a/development/PAINTING_ANALYSIS
+++ b/development/PAINTING_ANALYSIS
@@ -40,14 +40,22 @@ a good value? NoScreenUpdate?
 On a related note, what is the semantics of a call to
 Buffer::changed(false)? What does the caller mean?
 
-** What happens with FitCursor when the cursor is already OK?
+** How to avoid  redraw with FitCursor when the cursor is already OK?
 
-In this case, we invoke Buffer::change(false) with drawing disabled,
-which means that the paint machinery is invoked to update inset
-positions.
+In this case, we invoke Buffer::change(false) with drawing disabled
+and NoScreenUpdate strategy.
 
-Actually, this was added as part of the horizontal scrolling GSoC
-work. We need to investigate how costly this is.
+In the draw phase, bv::checkCursorScrollOffset (the horizontal
+scrolling machinery) will change the strategy to FullScreenUpdate if
+the current row needs further scrolling.
+
+When the update strategy it kept to NoScreenUpdate, there is currently
+a no-draw full repaint, which should not be necessary. It would be
+possible to avoid that if the call to checkCursorScrollOffset was done
+in bv::processUpdateFlags instead of bv::draw.
+
+The global idea would be to extend FitCursor to cover also horizontal
+cursor.
 
 
 * Proposals
@@ -85,7 +93,9 @@ There was a proposal to always compute _all_ rows, but this 
may become
 expensive for large files. This would though help scrolling.
 
 
-* Two phase drawing
+* Description of current drawing mechanism
+
+** Two phase drawing
 
 There are two parts to drawing the work area:
 
@@ -122,7 +132,7 @@ The screen is drawn (with appropriate update strategy), 
except when
 update flag is Update::None.
 
 
-* Metrics computation
+** Metrics computation
 
 This is triggered by bv::updateMetrics, which calls tm::redoParagraph for
   + all visible paragraphs
@@ -137,7 +147,7 @@ of text insets, this will invoke recursively tm::metrics, 
which redoes
 all the paragraphs of the inset.
 
 
-* Drawing the work area.
+** Drawing the work area.
 
 This is done in bv::draw. This method is triggered mainly by
 Buffer::changed, which draws all the work areas that show the given buffer.
diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index 0006be4..d871095 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -471,7 +471,7 @@ void BufferView::processUpdateFlags(Update::flags flags)
                        return;
                }
                // no screen update is needed in principle, but this
-               // could change if cursor row needs scrolling.
+               // could change if cursor row needs horizontal scrolling.
                d->update_strategy_ = NoScreenUpdate;
                buffer_.changed(false);
                return;

Reply via email to