]> git.lyx.org Git - lyx.git/blobdiff - development/PAINTING_ANALYSIS
Russian doc files: finished review from Yuriy
[lyx.git] / development / PAINTING_ANALYSIS
index f86ad2d4dab7d3910570d13a0a3b4a57c0ebe78b..e53b4b23df02d29b1a2eaee4a32c34ccece8a243 100644 (file)
@@ -33,14 +33,14 @@ is acted on.
 ** Buffer::change issues
 
 When calling Buffer::changed outside of bv::processUpdateFlags,
-how do we now that the update strategy is set correctly? It is
+how do we know that the update strategy is set correctly? It is
 possible to reset the strategy at the end of bv::draw. What would be
 a good value? NoScreenUpdate?
 
 On a related note, what is the semantics of a call to
 Buffer::changed(false)? What does the caller mean?
 
-** How to avoid  redraw 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
 and NoScreenUpdate strategy.
@@ -58,21 +58,39 @@ The global idea would be to extend FitCursor to cover also horizontal
 cursor.
 
 
-* Proposals
+* Clean-up of drawing code
 
-** get rid of pm::insetDimension.
+The goal is to make painting with drawing disable fast enough that it
+can be used after every metrics computation. Then we can separate real
+drawing from metrics.
 
-The information contained there is already in bv::coordCache.
+Other changes are only clean-ups.
 
-Effect: only code simplification.
+** When a paragraph ends with a newline, compute correctly the height of the extra row.
+** Rewrite TextMetrics::editXY, checkInsetHit using row information (getPosNearX)?
 
-** set inset position during metrics phase
+   The helper version should return a Row::Element instead of an InsetTable.
 
-This implies to set inset positions relative to outer isnet during
-metrics phase and then in a second loop to descend into insets and
-update positions correctly.
+** Set inset position during metrics phase
 
-Effect: avoid going through the painter machinery when it is not necessary.
+In order to do that, a no-paint drawing will be initiated after every
+redoParagraph. This code path will need to be made as fast as possible.
+
+Effect: avoid depending on actual drawing having taken place. In turn,
+it will allow to do drawing on paint events, like any reasonable
+application would do.
+
+** Cleanup after complete metrics
+   Then the following can be done:
+   + remove hack in InsetMathNest::drawSelection
+   + remove painting when not inside in drawParagraph
+   + remove Cursor::inCoordCache?
+
+** Paint directly to screen
+
+Instead of using an intermediary pixmap. I have no idea of how
+difficult it will prove.
+One benefit will be that subpixel aliasing will work again (#9972)
 
 ** Merging bv::updateMetrics and tm::metrics
 
@@ -81,28 +99,21 @@ paragraphs that are rebroken, the version that is used for inner inset
 does not try any such optimization. This can be very bad for very tall
 insets. We should re-use the bv::updateMetrics logic:
  + transfer all the logic of bv::updateMetrics to tm.
- +  Main InsetText should not be special.
+ + Main InsetText should not be special.
 
-** Metrics outside of visible area
-
-Currently metrics are computed for current visible paet of text, the
-page above and the page below. It should be possible to compute hidden
-rows ony on demand, although it might be a bit slow.
-
-There was a proposal to always compute _all_ rows, but this may become
-expensive for large files. This would though help scrolling.
+The difficuly for a tall table cell for example, is that it may be
+necessary to break the whole contents to know the width of the cell.
 
 
 * Description of current drawing mechanism
 
-** Two phase drawing
+** Two stage drawing
 
 There are two parts to drawing the work area:
 
  + the metrics phase computes the size of insets and breaks the
    paragraphs into rows. It stores the dimension of insets (both
-   normal and math) in bv::coordCache, and the size of normal
-   insets in pm::insetDimension.
+   normal and math) in bv::coordCache.
 
  + the drawing phase draws the contents and caches the inset
    positions. Since the caching of positions is useful in itself,
@@ -110,7 +121,6 @@ There are two parts to drawing the work area:
    thing we want is to cache inset positions
    (Painter::setDrawingEnabled).
 
-
 The machinery is controlled via bv::processUpdateFlags. This method is
 called at the end of bv::mouseEventDispatch and in
 GuiApplication::dispatch, via the updateCurrentView method. There are
@@ -135,12 +145,8 @@ update flag is Update::None.
 ** Metrics computation
 
 This is triggered by bv::updateMetrics, which calls tm::redoParagraph for
-  + all visible paragraphs
-  + paragraph above the screen (up to one page)
-  + paragraphs below the screen (up to one page again)
-
-The paragraphs outside of the screen are required to make PageUp/Down
-work.
+all visible paragraphs. Paragraphs above or below the screen (needed
+for page up/down) and computed as needed.
 
 tm::redoParagraph will call Inset::metrics for each inset. In the case
 of text insets, this will invoke recursively tm::metrics, which redoes