X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.h;h=ad725f2121861a598cc5c724758c4bc214035302;hb=0e4ca9aa88eb7b9351bb563dcd2df59c15744aa5;hp=7f0bcca9e4afb45f6ebd4ff26cd8af101910eba8;hpb=c19c54dd5b85726df1b5187616d17d5430028c16;p=lyx.git diff --git a/src/BufferView.h b/src/BufferView.h index 7f0bcca9e4..ad725f2121 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -15,6 +15,7 @@ #ifndef BUFFER_VIEW_H #define BUFFER_VIEW_H +#include "CoordCache.h" #include "DocumentClassPtr.h" #include "TexRow.h" #include "update_flags.h" @@ -26,27 +27,27 @@ namespace lyx { namespace support { class FileName; } +namespace frontend { struct CaretGeometry; } namespace frontend { class Painter; } namespace frontend { class GuiBufferViewDelegate; } class Buffer; class Change; -class CoordCache; class Cursor; class CursorSlice; +class Dimension; class DispatchResult; class DocIterator; -class DocumentClass; class FuncRequest; class FuncStatus; class Intl; class Inset; +class InsetMathNest; class Length; -class ParIterator; +class MathData; +class MathRow; class ParagraphMetrics; class Point; -class Row; -class TexRow; class Text; class TextMetrics; @@ -100,11 +101,19 @@ public: /// void setFullScreen(bool full_screen) { full_screen_ = full_screen; } + /// default value for the margins + int defaultMargin() const; /// right margin int rightMargin() const; - /// left margin int leftMargin() const; + /// top margin + int topMargin() const; + /// bottom margin + int bottomMargin() const; + + docstring const & searchRequestCache() const; + void setSearchRequestCache(docstring const & text); /// return the on-screen size of this length /* @@ -114,13 +123,18 @@ public: */ 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; - /// Add \p flags to current updte flags and trigger an update. + /// 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 @@ -133,9 +147,6 @@ 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; @@ -144,19 +155,20 @@ 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(); + /// reset the scrollbar parameters to reflect current view position. + void updateScrollbarParameters(); /// return the Scrollbar Parameters. ScrollbarParameters const & scrollbarParameters() const; /// \return Tool tip for the given position. docstring toolTip(int x, int y) const; /// \return the context menu for the given position. std::string contextMenu(int x, int y) const; + /// \return the math inset with a context menu for the given position + Inset const * mathContextMenu(InsetMathNest const * inset, + CoordCache::Insets const & inset_cache, int x, int y) const; + /// \return the clickable math inset for the given position + Inset const * clickableMathInset(InsetMathNest const * inset, + CoordCache::Insets const & inset_cache, int x, int y) const; /// Save the current position as bookmark. /// if idx == 0, save to temp_bookmark @@ -193,13 +205,13 @@ public: /// This method will automatically scroll and update the BufferView /// (metrics+drawing) if needed. /// \param recenter Whether the cursor should be centered on screen - void showCursor(DocIterator const & dit, bool recenter, + /// \param force If true, disregard current position + void showCursor(DocIterator const & dit, bool recenter, bool force, bool update); /// Scroll to the cursor. - void scrollToCursor(); - /// Scroll to the cursor. /// \param recenter Whether the cursor should be centered on screen - bool scrollToCursor(DocIterator const & dit, bool recenter); + /// \param force If true, disregard current position + bool scrollToCursor(DocIterator const & dit, bool recenter, bool force); /// scroll down document by the given number of pixels. int scrollDown(int pixels); /// scroll up document by the given number of pixels. @@ -219,7 +231,7 @@ public: /// return the inline completion postfix. docstring const & inlineCompletion() const; /// return the number of unique characters in the inline completion. - size_t const & inlineCompletionUniqueChars() const; + size_t inlineCompletionUniqueChars() const; /// return the position in the buffer of the inline completion postfix. DocIterator const & inlineCompletionPos() const; /// make sure inline completion position is OK @@ -239,7 +251,7 @@ public: /// request an X11 selection. /// \return the selected string. - docstring const requestSelection(); + docstring requestSelection(); /// clear the X11 selection. void clearSelection(); @@ -251,9 +263,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. @@ -302,14 +311,23 @@ 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; + /// 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 caretPosAndDim(Point & p, Dimension & dim) const; + /// compute the shape of the caret + void buildCaretGeometry(bool complet); + /// the shape of the caret + frontend::CaretGeometry const & caretGeometry() const; /// void draw(frontend::Painter & pain, bool paint_caret); @@ -331,7 +349,7 @@ public: /// This signal is emitted when some dialog needs to be shown with /// some data. void showDialog(std::string const & name, std::string const & data, - Inset * inset = 0); + Inset * inset = nullptr); /// This signal is emitted when some dialogs needs to be updated. void updateDialog(std::string const & name, std::string const & data); @@ -344,7 +362,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. @@ -357,6 +375,8 @@ public: bool clickableInset() const; /// void makeDocumentClass(); + /// Are we currently performing a selection with the mouse? + bool mouseSelecting() const; private: /// noncopyable @@ -368,6 +388,8 @@ 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);