]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView_pimpl.C
Forgot to save changed file ;)
[lyx.git] / src / BufferView_pimpl.C
index e4c70906e48c2c9b14ffed83dfbe54bf46800ba6..be1e1020be14f96ed295139960179bd0de536acc 100644 (file)
@@ -412,7 +412,7 @@ void BufferView::Pimpl::updateScrollbar()
 
        lyxerr[Debug::GUI] << "text_height now " << text_height << endl;
        lyxerr[Debug::GUI] << "work_height " << work_height << endl;
+
        /* If the text is smaller than the working area, the scrollbar
         * maximum must be the working area height. No scrolling will
         * be possible */
@@ -435,7 +435,7 @@ void BufferView::Pimpl::updateScrollbar()
 void BufferView::Pimpl::scrollCB(double value)
 {
        lyxerr[Debug::GUI] << "scrollCB of " << value << endl;
+
        if (!buffer_) return;
 
        current_scrollbar_value = long(value);
@@ -547,12 +547,12 @@ void BufferView::Pimpl::workAreaMotionNotify(int x, int y, unsigned int state)
                                                  cursor.par(), cursor.pos());
                int width = bv_->theLockingInset()->width(bv_, font);
                int inset_x = font.isVisibleRightToLeft()
-                       ? cursor.x() - width : cursor.x();
+                       ? cursor.ix() - width : cursor.ix();
                int start_x = inset_x + bv_->theLockingInset()->scroll();
                bv_->theLockingInset()->
                        insetMotionNotify(bv_,
                                          x - start_x,
-                                         y - cursor.y() + bv_->text->first_y,
+                                         y - cursor.iy() + bv_->text->first_y,
                                          state);
                return;
        }
@@ -912,13 +912,13 @@ Box BufferView::Pimpl::insetDimensions(LyXText const & text,
 
        int const width = inset.width(bv_, font);
        int const inset_x = font.isVisibleRightToLeft()
-               ? (cursor.x() - width) : cursor.x();
+               ? (cursor.ix() - width) : cursor.ix();
 
        return Box(
                inset_x + inset.scroll(),
                inset_x + width,
-               cursor.y() - inset.ascent(bv_, font),
-               cursor.y() + inset.descent(bv_, font));
+               cursor.iy() - inset.ascent(bv_, font),
+               cursor.iy() + inset.descent(bv_, font));
 }
 
 
@@ -951,7 +951,7 @@ Inset * BufferView::Pimpl::checkInset(LyXText const & text,
 
        x -= b.x1;
        // The origin of an inset is on the baseline
-       y -= (text.cursor.y());
+       y -= text.cursor.iy();
 
        return inset;
 }
@@ -1167,19 +1167,27 @@ void BufferView::Pimpl::cursorPrevious(LyXText * text)
        int y = text->first_y;
        Row * cursorrow = text->cursor.row();
 
-       text->setCursorFromCoordinates(bv_, bv_->text->cursor.x_fix(), y);
+       text->setCursorFromCoordinates(bv_, text->cursor.x_fix(), y);
        finishUndo();
        // This is to allow jumping over large insets
        if ((cursorrow == text->cursor.row()))
                text->cursorUp(bv_);
 
-       if (text->inset_owner ||
-           text->cursor.row()->height() < workarea_.height())
-               screen_->draw(bv_->text, bv_,
+       if (text->inset_owner) {
+               int new_y = bv_->text->cursor.iy()
+                       + bv_->theLockingInset()->insetInInsetY()
+                       + y
+                       + text->cursor.row()->height()
+                       - workarea_.height() + 1;
+
+               screen_->draw(bv_->text, bv_, new_y < 0 ? 0 : new_y);
+       } else if (text->cursor.row()->height() < workarea_.height()) {
+               screen_->draw(text, bv_,
                              text->cursor.y()
                              - text->cursor.row()->baseline()
                              + text->cursor.row()->height()
                              - workarea_.height() + 1);
+       }
        updateScrollbar();
 }
 
@@ -1190,8 +1198,11 @@ void BufferView::Pimpl::cursorNext(LyXText * text)
                return;
 
        int y = text->first_y + workarea_.height();
-//     if (text->inset_owner)
-//             y += bv_->text->first;
+       if (text->inset_owner && !text->first_y) {
+               y -= (bv_->text->cursor.iy()
+                         - bv_->text->first_y
+                         + bv_->theLockingInset()->insetInInsetY());
+       }
        text->getRowNearY(y);
 
        Row * cursorrow = text->cursor.row();
@@ -1201,10 +1212,16 @@ void BufferView::Pimpl::cursorNext(LyXText * text)
        if ((cursorrow == bv_->text->cursor.row()))
                text->cursorDown(bv_);
 
-       if (text->inset_owner ||
-           text->cursor.row()->height() < workarea_.height())
-               screen_->draw(bv_->text, bv_, text->cursor.y() -
+       if (text->inset_owner) {
+               screen_->draw(bv_->text, bv_,
+                             bv_->text->cursor.iy()
+                                 + bv_->theLockingInset()->insetInInsetY()
+                                 + y - text->cursor.row()->baseline());
+       } else if (text->cursor.irow()->height() < workarea_.height()) {
+               screen_->draw(text, bv_, text->cursor.y() -
                              text->cursor.row()->baseline());
+       } else {
+       }
        updateScrollbar();
 }
 
@@ -1438,7 +1455,7 @@ void BufferView::Pimpl::stuffClipboard(string const & stuff) const
 
 
 inline
-void BufferView::Pimpl::moveCursorUpdate(bool selecting)
+void BufferView::Pimpl::moveCursorUpdate(bool selecting, bool fitcur)
 {
        LyXText * lt = bv_->getLyXText();
 
@@ -1450,7 +1467,10 @@ void BufferView::Pimpl::moveCursorUpdate(bool selecting)
                        updateInset(lt->inset_owner, false);
        }
        if (lt->bv_owner) {
-               update(lt, BufferView::SELECT|BufferView::FITCUR);
+               if (fitcur)
+                       update(lt, BufferView::SELECT|BufferView::FITCUR);
+               else
+                       update(lt, BufferView::SELECT);
                showCursor();
        }
 
@@ -2040,7 +2060,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument)
                update(lt, BufferView::UPDATE);
                cursorNext(lt);
                finishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(false, false);
                owner_->showState();
        }
        break;
@@ -2193,7 +2213,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument)
 
                update(lt,
                       BufferView::SELECT|BufferView::FITCUR);
-               lt->cursorUp(bv_);
+               lt->cursorUp(bv_, true);
                finishUndo();
                moveCursorUpdate(true);
                owner_->showState();
@@ -2206,7 +2226,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument)
 
                update(lt,
                       BufferView::SELECT|BufferView::FITCUR);
-               lt->cursorDown(bv_);
+               lt->cursorDown(bv_, true);
                finishUndo();
                moveCursorUpdate(true);
                owner_->showState();