X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.h;h=bceaf1f82fd92d4d6bdffc091c312130802d6bd6;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=514534739be0504241cbf983d4844f3aac52eea9;hpb=ed99f752f9b4ce52cf55cac2a94658fb087c7383;p=lyx.git diff --git a/src/BufferView.h b/src/BufferView.h index 514534739b..bceaf1f82f 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -18,9 +18,12 @@ #include "coordcache.h" #include "cursor.h" #include "metricsinfo.h" +#include "TextMetrics.h" #include "UpdateFlags.h" + #include "support/types.h" +#include #include #include @@ -38,10 +41,10 @@ class DocIterator; class FuncRequest; class FuncStatus; class Intl; -class Language; class LCursor; class LyXText; class ParIterator; +class ParagraphMetrics; class ViewMetricsInfo; /// Scrollbar Parameters. @@ -90,21 +93,16 @@ public: /// resize the BufferView. void resize(); - /// redisplay the referenced buffer. - void reload(); /// load a buffer into the view. bool loadLyXFile(support::FileName const & name, bool tolastfiles = true); - /// perform pending painting updates. - /** \c fitcursor means first - * to do a fitcursor, and to force an update if screen - * position changes. \c forceupdate means to force an update - * in any case. - * \retval (false, xxx) if no redraw is required - * \retval (true, true) if a single paragraph redraw is needed - * \retval (true, false) if a full redraw is needed + /// perform pending metrics updates. + /** \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 */ - std::pair update(Update::flags flags = Update::FitCursor | Update::Force); + bool update(Update::flags flags = Update::FitCursor | Update::Force); /// move the screen to fit the cursor. /// Only to be called with good y coordinates (after a bv::metrics) @@ -117,8 +115,10 @@ public: /// Save the current position as bookmark. /// if persistent=false, save to temp_bookmark void saveBookmark(bool persistent); - /// goto a specified position. - void moveToPosition( + /// goto a specified position, try par_id first, and then par_pit + /// return the par_pit and par_id of the new paragraph + boost::tuple moveToPosition( + pit_type par_pit, ///< Paragraph pit, used when par_id is zero or invalid. int par_id, ///< Paragraph ID, \sa Paragraph pos_type par_pos ///< Position in the \c Paragraph ); @@ -172,10 +172,8 @@ public: /// dispatch method helper for \c WorkArea /// \sa WorkArea - /// \retval (false, xxx) if no redraw is required - /// \retval (true, true) if a single paragraph redraw is needed - /// \retval (true, false) if a full redraw is needed - std::pair workAreaDispatch(FuncRequest const & ev); + /// \retval true if a redraw is needed + bool workAreaDispatch(FuncRequest const & ev); /// access to anchor. pit_type anchor_ref() const; @@ -187,9 +185,12 @@ public: /// sets cursor. /// This will also open all relevant collapsable insets. void setCursor(DocIterator const &); + /// Check deleteEmptyParagraphMechanism and update metrics if needed. + /// \retval true if an update was needed. + bool checkDepm(LCursor & cur, LCursor & old); /// sets cursor. /// This is used when handling LFUN_MOUSE_PRESS. - void mouseSetCursor(LCursor & cur); + bool mouseSetCursor(LCursor & cur); /// sets the selection. /* When \c backwards == false, set anchor @@ -209,6 +210,12 @@ public: /// \param singlepar indicates wether void updateMetrics(bool singlepar = false); + /// + TextMetrics const & textMetrics(LyXText const * t) const; + TextMetrics & textMetrics(LyXText const * t); + /// + ParagraphMetrics const & parMetrics(LyXText const *, pit_type) const; + /// CoordCache & coordCache() { return coord_cache_; @@ -283,6 +290,13 @@ private: /// keyboard mapping object. boost::scoped_ptr const intl_; + + /// last visited inset (kept to send setMouseHover(false) ) + InsetBase * last_inset_; + + /// A map from a LyXText to the associated text metrics + typedef std::map TextMetricsCache; + mutable TextMetricsCache text_metrics_; };