// transition...
class LyXText : public TextCursor {
public:
- /// what repainting is needed
- enum refresh_status {
- /// no repaint is needed
- REFRESH_NONE = 0,
- /// the refresh_row needs repainting
- REFRESH_ROW = 1,
- /// everything from refresh_y downwards needs repainting
- REFRESH_AREA = 2
- };
-
/// Constructor
LyXText(BufferView *);
/// sets inset as owner
LyXText(BufferView *, InsetText *);
- void init(BufferView *, bool reinit = false);
+ void init(BufferView *);
///
int height;
///
void partialRebreak();
/// a full rebreak of the whole text
void fullRebreak();
+ /// rebuild RowList cache
+ void rebuild();
///
RowList::iterator need_break_row;
/// clear any pending paints
void clearPaint();
- /**
- * Mark position y as the starting point for a repaint
- */
- void postPaint(int start_y);
-
- /**
- * Mark the given row at position y as needing a repaint.
- */
- void postRowPaint(RowList::iterator rit, int start_y);
+ /// submit repaint request
+ void postPaint();
///
Inset::RESULT dispatch(FuncRequest const & cmd);
* Return the status. This represents what repaints are
* pending after some operation (e.g. inserting a char).
*/
- refresh_status refreshStatus() const;
+ bool needRefresh() const;
private:
- /**
- * The pixel y position from which to repaint the screen.
- * The position is absolute along the height of outermost
- * lyxtext (I think). REFRESH_AREA and REFRESH_ROW
- * repaints both use this as a starting point (if it's within
- * the viewable portion of the lyxtext).
- */
- int refresh_y;
- /**
- * The row from which to repaint the screen, used by screen.c.
- * This must be set if the pending update is REFRESH_ROW.
- * It doesn't make any difference for REFRESH_AREA.
- */
- RowList::iterator refresh_row;
-
- refresh_status refresh_status_;
+ // do we need a refresh?
+ bool need_refresh_;
+public:
/// only the top-level LyXText has this non-zero
BufferView * bv_owner;
+private:
/// returns a pointer to a specified row.
RowList::iterator
getRow(ParagraphList::iterator pit, lyx::pos_type pos) const;
RowList::iterator getRow(LyXCursor const & cursor) const;
/// convenience
RowList::iterator cursorRow() const;
+ /**
+ * Return the next row, when cursor is at the end of the
+ * previous row, for insets that take a full row.
+ *
+ * FIXME: explain why we need this ? especially for y...
+ */
+ RowList::iterator cursorIRow() const;
/** returns a pointer to the row near the specified y-coordinate
(relative to the whole text). y is set to the real beginning