]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.h
Account for old versions of Pygments
[lyx.git] / src / BufferView.h
index 6aa2f067778cb41fe3d094a2fcd1c8cf520949e0..92e898735065ac2f8146fbb7b14fd8a3f43fac80 100644 (file)
@@ -16,6 +16,7 @@
 #define BUFFER_VIEW_H
 
 #include "DocumentClassPtr.h"
+#include "TexRow.h"
 #include "update_flags.h"
 
 #include "support/strfwd.h"
@@ -40,10 +41,12 @@ class FuncRequest;
 class FuncStatus;
 class Intl;
 class Inset;
+class Length;
 class PainterInfo;
 class ParIterator;
 class ParagraphMetrics;
 class Point;
+class TexRow;
 class Text;
 class TextMetrics;
 
@@ -56,15 +59,15 @@ enum CursorStatus {
 /// Scrollbar Parameters.
 struct ScrollbarParameters
 {
+       // These parameters are normalized against the screen geometry and pixel
+       // coordinates. Position 0 corresponds to the top the the screen.
        ScrollbarParameters()
-               : min(0), max(0), position(0), single_step(1), page_step(1)
+               : min(0), max(0), single_step(1), page_step(1)
        {}
        /// Minimum scrollbar position in pixels.
        int min;
        /// Maximum scrollbar position in pixels.
        int max;
-       /// Current position in the document in pixels.
-       int position;
        /// Line-scroll amount in pixels.
        int single_step;
        /// Page-scroll amount in pixels.
@@ -103,6 +106,14 @@ public:
        /// left margin
        int leftMargin() const;
 
+       /// return the on-screen size of this length
+       /*
+        *  This is a wrapper around Length::inPixels that uses the
+        *  bufferview width as width and the EM value of the default
+        *  document font.
+        */
+       int inPixels(Length const & len) const;
+
        /// \return true if the BufferView is at the top of the document.
        bool isTopScreen() const;
 
@@ -117,19 +128,22 @@ 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;
+       // Returns the amount of horizontal scrolling applied to the
+       // row of text starting at (pit, pos)
+       int horizScrollOffset(Text const * text,
+                             pit_type pit, pos_type pos) 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;
+       // Returns true if the row of text starting at (pit, pos) was scrolled
+       // at the last draw event.
+       bool hadHorizScrollOffset(Text const * text,
+                              pit_type pit, pos_type pos) const;
 
        /// reset the scrollbar to reflect current view position.
        void updateScrollbar();
@@ -158,7 +172,9 @@ public:
        void gotoLabel(docstring const & label);
 
        /// set the cursor based on the given TeX source row.
-       void setCursorFromRow(int row);
+       bool setCursorFromRow(int row);
+       /// set the cursor based on the given start and end TextEntries.
+       bool setCursorFromEntries(TexRow::TextEntry start, TexRow::TextEntry end);
 
        /// set cursor to the given inset. Return true if found.
        bool setCursorFromInset(Inset const *);
@@ -167,11 +183,11 @@ public:
        void recenter();
        /// Ensure that the BufferView cursor is visible.
        /// This method will automatically scroll and update the BufferView
-       /// if needed.
+       /// (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);
@@ -243,6 +259,8 @@ public:
        /// sets cursor.
        /// This will also open all relevant collapsable insets.
        void setCursor(DocIterator const &);
+       /// set the selection up to dit.
+       void setCursorSelectionTo(DocIterator const & dit);
        /// Check deleteEmptyParagraphMechanism and update metrics if needed.
        /// \retval true if an update was needed.
        bool checkDepm(Cursor & cur, Cursor & old);