#define BUFFER_VIEW_H
#include "DocumentClassPtr.h"
+#include "TexRow.h"
#include "update_flags.h"
#include "support/strfwd.h"
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;
- // Points to the top-level row where the cursor lies (during draw).
- CursorSlice const & currentRowSlice() const;
-
- // Points to the top-level row where the cursor lied at last draw event.
- CursorSlice const & lastRowSlice() 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();
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);