X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.h;h=3cbf22a8ba48d1c7270b46025393456caedbe44f;hb=8d8988de4;hp=ee2de8276e3a597c258d14ea65d8de435068b6ea;hpb=148b3ae773c441430311feb29eba01a765bc6c48;p=lyx.git diff --git a/src/BufferView.h b/src/BufferView.h index ee2de8276e..3cbf22a8ba 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -41,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; @@ -105,17 +106,26 @@ 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; /// \return true if the BufferView is at the bottom of the document. bool isBottomScreen() const; - /// perform pending metrics updates. - /** \c Update::FitCursor means first to do a FitCursor, and to + /// Add \p flags to current update flags and trigger an update. + /* If this method is invoked several times before the update + * actually takes place, the effect is cumulative. + * \c Update::FitCursor means first to do a FitCursor, and to * force an update if screen position changes. * \c Update::Force means to force an update in any case. - * \retval true if a screen redraw is needed */ void processUpdateFlags(Update::flags flags); @@ -123,6 +133,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; @@ -248,7 +261,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); @@ -274,6 +287,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); @@ -291,12 +308,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(); @@ -352,13 +368,15 @@ private: /// Update current paragraph metrics. /// \return true if no further update is needed. bool singleParUpdate(); + /// do the work for the public updateMetrics() + void updateMetrics(Update::flags & update_flags); // 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); + void checkCursorScrollOffset(); /// The minimal size of the document that is visible. Used /// when it is allowed to scroll below the document.