#define BUFFER_VIEW_H
#include "DocumentClassPtr.h"
+#include "TexRow.h"
#include "update_flags.h"
#include "support/strfwd.h"
class Change;
class CoordCache;
class Cursor;
+class CursorSlice;
class DispatchResult;
class DocIterator;
class DocumentClass;
class FuncStatus;
class Intl;
class Inset;
+class PainterInfo;
class ParIterator;
class ParagraphMetrics;
class Point;
+class TexRow;
class Text;
class TextMetrics;
/// 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.
*/
void processUpdateFlags(Update::flags flags);
- /// move the screen to fit the cursor.
+ /// return true if one shall move the screen to fit the cursor.
/// Only to be called with good y coordinates (after a bv::metrics)
- bool fitCursor();
+ bool needsFitCursor() const;
+
+ // Returns the amount of horizontal scrolling applied to the
+ // top-level row where the cursor lies
+ int horizScrollOffset() const;
+ // Returns the amount of horizontal scrolling applied to the
+ // row of text starting at (pit, pos)
+ 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.
void gotoLabel(docstring const & label);
/// set the cursor based on the given TeX source row.
- void setCursorFromRow(int row);
+ 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 *);
void recenter();
/// Ensure that the BufferView cursor is visible.
/// This method will automatically scroll and update the BufferView
- /// if needed.
+ /// (metrics+drawing) if needed.
void showCursor();
/// Ensure the passed cursor \p dit is visible.
/// This method will automatically scroll and update the BufferView
- /// if needed.
+ /// (metrics+drawing) if needed.
/// \param recenter Whether the cursor should be centered on screen
void showCursor(DocIterator const & dit, bool recenter,
bool update);
/// sets cursor.
/// This will also open all relevant collapsable 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);
/// \return true if no further update is needed.
bool singleParUpdate();
+ // 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);
+
/// The minimal size of the document that is visible. Used
/// when it is allowed to scroll below the document.
int minVisiblePart();