X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FBufferView.h;h=6cdc68534b3b3d2eed93d7547b1dd8ccf256a421;hb=1dc55bd88b9671ade0b3ad84fcbd992db1c66ca3;hp=4a020eb3b21a2c3aa9be3240ba073e791fbdc526;hpb=2a594d3e90a673c56df9766658a79cf0bcaeb9a8;p=lyx.git diff --git a/src/BufferView.h b/src/BufferView.h index 4a020eb3b2..6cdc68534b 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,12 +27,12 @@ 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; @@ -41,12 +42,12 @@ class FuncRequest; class FuncStatus; class Intl; class Inset; +class InsetMathNest; class Length; class MathData; class MathRow; class ParagraphMetrics; class Point; -class TexRow; class Text; class TextMetrics; @@ -56,6 +57,16 @@ enum CursorStatus { CUR_BELOW }; +/// How to show cursor +enum ScrollType { + // Make sure row if visible (do nothing if it is visible already) + SCROLL_VISIBLE, + // Force cursor to be on top of screen + SCROLL_TOP, + // Force cursor to be at center of screen + SCROLL_CENTER +}; + /// Scrollbar Parameters. struct ScrollbarParameters { @@ -100,6 +111,8 @@ 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 @@ -109,6 +122,9 @@ public: /// bottom margin int bottomMargin() const; + docstring const & searchRequestCache() const; + void setSearchRequestCache(docstring const & text); + /// return the on-screen size of this length /* * This is a wrapper around Length::inPixels that uses the @@ -149,14 +165,20 @@ public: int horizScrollOffset(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 @@ -189,17 +211,17 @@ public: /// This method will automatically scroll and update the BufferView /// (metrics+drawing) if needed. void showCursor(); + /// Ensure the passed cursor \p dit is visible. /// 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, - bool update); - /// Scroll to the cursor. - void scrollToCursor(); + /// \param how Use this scroll strategy + /// \param force If true, update screen after scrolling + void showCursor(DocIterator const & dit, ScrollType how, bool update); /// Scroll to the cursor. - /// \param recenter Whether the cursor should be centered on screen - bool scrollToCursor(DocIterator const & dit, bool recenter); + /// \param how Use this scroll strategy + /// \return true if screen was scrolled + bool scrollToCursor(DocIterator const & dit, ScrollType how); /// scroll down document by the given number of pixels. int scrollDown(int pixels); /// scroll up document by the given number of pixels. @@ -219,7 +241,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 @@ -312,6 +334,10 @@ public: bool caretInView() const; /// get the position and height of the caret 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); @@ -359,6 +385,8 @@ public: bool clickableInset() const; /// void makeDocumentClass(); + /// Are we currently performing a selection with the mouse? + bool mouseSelecting() const; private: /// noncopyable