X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.h;h=40dd0d29c352a4496ef0b3301b2910fda1c67226;hb=62af7ee772f16f154225d2d0b65d77f4376b6001;hp=f57801f6a3bc6c7335e4fbc3944f943429b85e24;hpb=96fee0ed7acdd9d757d59b126f07631176e2d96f;p=lyx.git diff --git a/src/BufferView.h b/src/BufferView.h index f57801f6a3..40dd0d29c3 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -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,13 @@ class FuncRequest; class FuncStatus; class Intl; class Inset; -class PainterInfo; +class Length; +class MathData; +class MathRow; class ParIterator; class ParagraphMetrics; class Point; +class Row; class TexRow; class Text; class TextMetrics; @@ -57,15 +61,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. @@ -104,17 +108,31 @@ 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 the number of pixels equivalent to \c pix pixels at + * 100dpi and 100% zoom. + */ + int zoomedPixels(int pix) 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); @@ -130,11 +148,6 @@ public: int horizScrollOffset(Text const * text, pit_type pit, pos_type pos) 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(); /// return the Scrollbar Parameters. @@ -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 *); @@ -237,9 +250,6 @@ public: /// \sa WorkArea void mouseEventDispatch(FuncRequest const & ev); - /// access to anchor. - pit_type anchor_ref() const; - /// CursorStatus cursorStatus(DocIterator const & dit) const; /// access to full cursor. @@ -247,8 +257,10 @@ 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); /// Check deleteEmptyParagraphMechanism and update metrics if needed. /// \retval true if an update was needed. bool checkDepm(Cursor & cur, Cursor & old); @@ -271,6 +283,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); @@ -282,18 +298,22 @@ public: /// CoordCache const & coordCache() const; + /// + MathRow const & mathRow(MathData const * cell) const; + /// + void setMathRow(MathData const * cell, MathRow const & mrow); + /// Point getPos(DocIterator const & dit) const; /// is the paragraph of the cursor visible ? 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; - + /// is the caret currently visible in the view + bool caretInView() 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(); @@ -325,7 +345,7 @@ public: // Insert plain text file (if filename is empty, prompt for one) void insertPlaintextFile(support::FileName const & f, bool asParagraph); /// - void insertLyXFile(support::FileName const & f); + void insertLyXFile(support::FileName const & f, bool const ignorelang = false); /// save temporary bookmark for jump back navigation void bookmarkEditPosition(); /// Find and return the inset associated with given dialog name. @@ -349,13 +369,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.