X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.h;h=31b6e94fc484d70f451592857780e07cabc7c6b9;hb=5a8e91d1c5381d8c152b12269707b547d5241624;hp=a94ddfd56b718b989bb53b7046401066dfe14c6b;hpb=183b188ebe3489aebb372c00818afaab870cf4b8;p=lyx.git diff --git a/src/BufferView.h b/src/BufferView.h index a94ddfd56b..31b6e94fc4 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -32,6 +32,7 @@ class Buffer; class Change; class CoordCache; class Cursor; +class CursorSlice; class DispatchResult; class DocIterator; class DocumentClass; @@ -39,9 +40,11 @@ class FuncRequest; class FuncStatus; class Intl; class Inset; +class PainterInfo; class ParIterator; class ParagraphMetrics; class Point; +class TexRow; class Text; class TextMetrics; @@ -115,9 +118,20 @@ public: */ void processUpdateFlags(Update::flags flags); - /// move the screen to fit the cursor. + /// return true if one shall move the screen to fit the cursor. /// Only to be called with good y coordinates (after a bv::metrics) - bool fitCursor(); + bool needsFitCursor() const; + + // Returns the amount of horizontal scrolling applied to the + // top-level row where the cursor lies + int horizScrollOffset() const; + + // Points to the top-level row where the cursor lies (during draw). + CursorSlice const & currentRowSlice() const; + + // Points to the top-level row where the cursor lied at last draw event. + CursorSlice const & lastRowSlice() const; + /// reset the scrollbar to reflect current view position. void updateScrollbar(); /// return the Scrollbar Parameters. @@ -146,6 +160,8 @@ public: /// set the cursor based on the given TeX source row. void setCursorFromRow(int row); + /// + void setCursorFromRow(int row, TexRow const & texrow); /// set cursor to the given inset. Return true if found. bool setCursorFromInset(Inset const *); @@ -154,11 +170,11 @@ public: void recenter(); /// Ensure that the BufferView cursor is visible. /// This method will automatically scroll and update the BufferView - /// if needed. - void showCursor(); + /// (metrics+drawing) if needed. + void showCursor(); /// Ensure the passed cursor \p dit is visible. /// This method will automatically scroll and update the BufferView - /// if needed. + /// (metrics+drawing) if needed. /// \param recenter Whether the cursor should be centered on screen void showCursor(DocIterator const & dit, bool recenter, bool update); @@ -331,6 +347,13 @@ private: /// \return true if no further update is needed. bool singleParUpdate(); + // Set the row on which the cursor lives. + void setCurrentRowSlice(CursorSlice const & rowSlice); + + // Check whether the row where the cursor lives needs to be scrolled. + // Update the drawing strategy if needed. + void checkCursorScrollOffset(PainterInfo & pi); + /// The minimal size of the document that is visible. Used /// when it is allowed to scroll below the document. int minVisiblePart();