]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.h
Collapsable -> Collapsible (part 1)
[lyx.git] / src / BufferView.h
index e6a29dee6b9961ffe81bf99fb7bfe68317ec0030..a5222599f2cf983f7dc514c53d39ffee8e6e6a48 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,11 @@ class FuncRequest;
 class FuncStatus;
 class Intl;
 class Inset;
-class PainterInfo;
+class Length;
 class ParIterator;
 class ParagraphMetrics;
 class Point;
+class Row;
 class TexRow;
 class Text;
 class TextMetrics;
@@ -104,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;
 
@@ -122,6 +132,9 @@ public:
        /// Only to be called with good y coordinates (after a bv::metrics)
        bool needsFitCursor() const;
 
+       /// returns true if this row needs to be repainted (to erase caret)
+       bool needRepaint(Text const * text, Row const & row) const;
+
        // Returns the amount of horizontal scrolling applied to the
        // top-level row where the cursor lies
        int horizScrollOffset() const;
@@ -162,9 +175,9 @@ public:
        void gotoLabel(docstring const & label);
 
        /// set the cursor based on the given TeX source row.
-       void setCursorFromRow(int row);
-       ///
-       void setCursorFromRow(int row, TexRow const & texrow);
+       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 *);
@@ -247,7 +260,7 @@ public:
        /// access to full cursor.
        Cursor const & cursor() const;
        /// sets cursor.
-       /// This will also open all relevant collapsable insets.
+       /// This will also open all relevant collapsible insets.
        void setCursor(DocIterator const &);
        /// set the selection up to dit.
        void setCursorSelectionTo(DocIterator const & dit);
@@ -273,6 +286,10 @@ public:
        /// update the internal \c ViewMetricsInfo.
        void updateMetrics();
 
+       // this is the "nodraw" drawing stage: only set the positions of the
+       // insets in metrics cache.
+       void updatePosCache();
+
        ///
        TextMetrics const & textMetrics(Text const * t) const;
        TextMetrics & textMetrics(Text const * t);
@@ -290,12 +307,11 @@ public:
        bool paragraphVisible(DocIterator const & dit) const;
        /// is the cursor currently visible in the view
        bool cursorInView(Point const & p, int h) const;
-       /// get the position and height of the cursor
-       void cursorPosAndHeight(Point & p, int & h) const;
-
+       /// get the position and height of the caret
+       void caretPosAndHeight(Point & p, int & h) const;
 
        ///
-       void draw(frontend::Painter & pain);
+       void draw(frontend::Painter & pain, bool paint_caret);
 
        /// get this view's keyboard map handler.
        Intl & getIntl();
@@ -357,7 +373,7 @@ private:
 
        // Check whether the row where the cursor lives needs to be scrolled.
        // Update the drawing strategy if needed.
-       void checkCursorScrollOffset(PainterInfo & pi);
+       void checkCursorScrollOffset();
 
        /// The minimal size of the document that is visible. Used
        /// when it is allowed to scroll below the document.