]> git.lyx.org Git - lyx.git/commitdiff
reversed jug-bug, will apply pieces later
authorLars Gullik Bjønnes <larsbj@gullik.org>
Thu, 26 Apr 2001 17:47:40 +0000 (17:47 +0000)
committerLars Gullik Bjønnes <larsbj@gullik.org>
Thu, 26 Apr 2001 17:47:40 +0000 (17:47 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1958 a592a061-630c-0410-9148-cb99ea01b6c8

15 files changed:
src/ChangeLog
src/insets/ChangeLog
src/insets/inset.C
src/insets/insetcollapsable.C
src/insets/insetcollapsable.h
src/insets/insettabular.C
src/insets/insettabular.h
src/insets/insettext.C
src/insets/insettext.h
src/insets/lyxinset.h
src/lyxfunc.C
src/lyxrc.h
src/tabular.C
src/tabular.h
src/text.C

index 6ef14d75e76a7f76bec861bd137ce887034453bf..6511810196f2c697e9a9e5db2ac5923c70101f4f 100644 (file)
        * src/exporter.C (Export): Give an error message when path to file 
        contains spaces.
 
-2001-04-13  Juergen Vigna  <jug@sad.it>
-
-       * tabular.C (GetAdditionalHeight): changed parameter from cell to row.
-       (LyXTabular): tried to minimize operator= operations (and realized
-       hopfully Lars wish).
-
 2001-04-12  Dekel Tsur  <dekelts@tau.ac.il>
 
        * LaTeX.C (deplog): Always check that foundfile exists.
index 1ae41b2a6beca3adbfd01efa3ef7966d000187db..54d75c6cb02405161c85a3fc324313274eb7d2e2 100644 (file)
        * figinset.C (runqueue): #warning triggers an error on Sun CC 6.0 as
        an unrecognised preprocessor directive.  So ensure they're wrapped. 
 
-2001-04-13  Juergen Vigna  <jug@sad.it>
-
-       * insettext.C: tried to avoid unneeded redraws.
-       (doClearArea): return true also if I need a FULL|INIT redraw.
-
-       * insettabular.C: tried to avoid unneeded redraws. Still one
-       problem with scrolling remains (resetPos).
-       (doClearArea): return true also if I need a FULL|INIT redraw.
-
-       * lyxinset.h: changed the scroll() function behaviour a bit.
-       Added nodraw() function so that I can block unneeded redraws.
-       Implemented the above 2 functions correctly in InsetText,
-       InsetTabular and InsetCollapsable. Now only the topmost Inset
-       owner is scrolled (as it should be) if a child inset requests this!
-
 2001-04-06  John Levon  <moz@compsoc.man.ac.uk>
 
        * insetexternal.h:
index 5d748761078886fe02b1f0a8c673f657005fece5..38fcb1e36d782aa87615f7a9f6e3b15fe398c1df 100644 (file)
@@ -152,6 +152,7 @@ void UpdatableInset::draw(BufferView *, LyXFont const &,
 void UpdatableInset::SetFont(BufferView *, LyXFont const &, bool )
 {}
 
+
 void UpdatableInset::scroll(BufferView * bv, float s) const
 {
        LyXFont font;
@@ -204,7 +205,7 @@ void UpdatableInset::scroll(BufferView * bv, int offset) const
                        scx += offset;
                }
        }
-//     bv->updateInset(const_cast<UpdatableInset *>(this), false);
+       // bv->updateInset(const_cast<UpdatableInset *>(this), false);
 }
 
 
index 9bc73fe456625648db5014e7414952df81e4c609..795ac50025a8d8ece1cfcd88876857232b4f2d0c 100644 (file)
@@ -169,12 +169,9 @@ void InsetCollapsable::draw_collapsed(Painter & pain, LyXFont const &,
 }
 
 
-void InsetCollapsable::draw(BufferView * bv, LyXFont const & f,
-                            int baseline, float & x, bool cleared) const
+void InsetCollapsable::draw(BufferView * bv, LyXFont const & f, 
+                           int baseline, float & x, bool cleared) const
 {
-       if (nodraw())
-               return;
-
        Painter & pain = bv->painter();
 
        button_length = widthCollapsed;
@@ -188,27 +185,10 @@ void InsetCollapsable::draw(BufferView * bv, LyXFont const & f,
                return;
        }
 
-       float old_x = x;
-
-#if 0
-       UpdatableInset::draw(bv, f, baseline, x, cleared);
-#else
-       if (!owner())
-               x += static_cast<float>(scroll());
-#endif
-
        if (!cleared && (inset.need_update == InsetText::FULL ||
                         inset.need_update == InsetText::INIT ||
                         top_x != int(x) ||
-                        top_baseline != baseline))
-       {
-#if 1
-               // we don't need anymore to clear here we just have to tell
-               // the underlying LyXText that it should do the RowClear!
-               inset.SetUpdateStatus(bv, InsetText::FULL);
-               bv->text->status = LyXText::CHANGED_IN_DRAW;
-               return;
-#else
+                        top_baseline != baseline)) {
                int w = owner() ? width(bv, f) : pain.paperWidth();
                int h = ascent(bv, f) + descent(bv, f);
                int const tx = (needFullRow() && !owner()) ? 0 : int(x);
@@ -222,15 +202,15 @@ void InsetCollapsable::draw(BufferView * bv, LyXFont const & f,
                        h += (baseline - ascent(bv, f));
                pain.fillRectangle(tx, ty - 1, w, h + 2);
                cleared = true;
-#endif
        }
 
        top_x = int(x);
        top_baseline = baseline;
 
+       float dummy = x;
        int const bl = baseline - ascent(bv, f) + ascent_collapsed(pain, f);
 
-       draw_collapsed(pain, f, bl, old_x);
+       draw_collapsed(pain, f, bl, dummy);
        inset.draw(bv, f, 
                   bl + descent_collapsed(pain, f) + inset.ascent(bv, f),
                   x, cleared);
@@ -271,8 +251,6 @@ void InsetCollapsable::InsetUnlock(BufferView * bv)
                collapsed = true;
        }
        inset.InsetUnlock(bv);
-       if (scroll())
-               scroll(bv, 0.0F);
        bv->updateInset(this, false);
 }
 
@@ -403,8 +381,7 @@ bool InsetCollapsable::UnlockInsetInInset(BufferView * bv, UpdatableInset * in,
                bv->unlockInset(this);
                return true;
        }
-       bool const ret = inset.UnlockInsetInInset(bv, in, lr);
-       return ret;
+       return inset.UnlockInsetInInset(bv, in, lr);
 }
 
 
@@ -495,19 +472,3 @@ std::vector<string> const InsetCollapsable::getLabelList() const
 {
        return inset.getLabelList();
 }
-
-bool InsetCollapsable::nodraw() const
-{
-       return inset.nodraw();
-}
-
-
-int InsetCollapsable::scroll(bool recursive) const
-{
-       int sx = UpdatableInset::scroll(false);
-
-       if (recursive)
-               sx += inset.scroll(recursive);
-
-       return sx;
-}
index 5b89661942708c4becd8c7732c131fd2a729fed1..3632e6b09122f8be0b8a2903526be155340da797 100644 (file)
@@ -131,17 +131,6 @@ public:
        void resizeLyXText(BufferView *) const;
        ///
        std::vector<string> const getLabelList() const;
-       ///
-       bool nodraw() const;
-       ///
-       int scroll(bool recursive=true) const;
-       void scroll(BufferView *bv, float sx) const {
-               UpdatableInset::scroll(bv, sx);
-       }
-       void scroll(BufferView *bv, int offset) const {
-               UpdatableInset::scroll(bv, offset);
-       }
-
 protected:
        ///
        int ascent_collapsed(Painter &, LyXFont const &) const;
index 8cb1c1310fc6014e74b692ddb61912e3c2655d4e..3f2afa9880874f50a0c75c826b2fe6c6d88b3577 100644 (file)
@@ -133,6 +133,7 @@ InsetTabular::InsetTabular(Buffer const & buf, int rows, int columns)
        actrow = actcell = 0;
        clearSelection();
        need_update = INIT;
+       no_draw = false;
 }
 
 
@@ -146,6 +147,7 @@ InsetTabular::InsetTabular(InsetTabular const & tab, Buffer const & buf)
        actrow = actcell = 0;
        sel_cell_start = sel_cell_end = 0;
        need_update = INIT;
+       no_draw = false;
 }
 
 
@@ -221,24 +223,15 @@ int InsetTabular::width(BufferView *, LyXFont const &) const
 void InsetTabular::draw(BufferView * bv, LyXFont const & font, int baseline,
                        float & x, bool cleared) const
 {
-       if (nodraw())
-               return;
-       if (bv->text->status == LyXText::CHANGED_IN_DRAW)
-                       return;
-
-//     lyxerr << "InsetTabular::draw(" << need_update << ")\n";
+               if (no_draw)
+                               return;
        
        Painter & pain = bv->painter();
        int i;
        int j;
        int nx;
 
-#if 0
        UpdatableInset::draw(bv, font, baseline, x, cleared);
-#else
-       if (!owner())
-               x += static_cast<float>(scroll());
-#endif
        if (!cleared && ((need_update == INIT) || (need_update == FULL) ||
                         (top_x != int(x)) || (top_baseline != baseline))) {
                int h = ascent(bv, font) + descent(bv, font);
@@ -258,6 +251,9 @@ void InsetTabular::draw(BufferView * bv, LyXFont const & font, int baseline,
        }
        top_x = int(x);
        top_baseline = baseline;
+       if (bv->text->status == LyXText::CHANGED_IN_DRAW)
+               return;
+       bool dodraw;
        x += ADD_TO_TABULAR_WIDTH;
        if (cleared) {
                int cell = 0;
@@ -265,41 +261,32 @@ void InsetTabular::draw(BufferView * bv, LyXFont const & font, int baseline,
                first_visible_cell = -1;
                for (i = 0; i < tabular->rows(); ++i) {
                        nx = int(x);
-                       cell = tabular->GetCellNumber(i, 0);
-                       if (!((baseline + tabular->GetDescentOfRow(i)) > 0) &&
-                               (baseline - tabular->GetAscentOfRow(i))<pain.paperHeight())
-                       {
-                               baseline += tabular->GetDescentOfRow(i) +
-                                       tabular->GetAscentOfRow(i + 1) +
-                                       tabular->GetAdditionalHeight(i + 1);
-                               continue;
-                       }
+                       dodraw = ((baseline + tabular->GetDescentOfRow(i)) > 0) &&
+                               (baseline - tabular->GetAscentOfRow(i))<pain.paperHeight();
                        for (j = 0; j < tabular->columns(); ++j) {
-                               if (nx > bv->workWidth())
-                                       break;
                                if (tabular->IsPartOfMultiColumn(i, j))
                                        continue;
                                cx = nx + tabular->GetBeginningOfTextInCell(cell);
-                               if (first_visible_cell < 0)
-                                       first_visible_cell = cell;
-                               if (hasSelection())
-                                       DrawCellSelection(pain, nx, baseline, i, j, cell);
-                               tabular->GetCellInset(cell)->draw(bv, font, baseline, cx,
-                                                                                                 cleared);
-                               DrawCellLines(pain, nx, baseline, i, cell);
+                               if (dodraw) {
+                                       if (first_visible_cell < 0)
+                                               first_visible_cell = cell;
+                                       if (hasSelection())
+                                               DrawCellSelection(pain, nx, baseline, i, j, cell);
+                                       tabular->GetCellInset(cell)->draw(bv, font, baseline, cx,
+                                                                         cleared);
+                                       DrawCellLines(pain, nx, baseline, i, cell);
+                               }
                                nx += tabular->GetWidthOfColumn(cell);
                                ++cell;
                        }
                        baseline += tabular->GetDescentOfRow(i) +
                                tabular->GetAscentOfRow(i + 1) +
-                               tabular->GetAdditionalHeight(i + 1);
+                               tabular->GetAdditionalHeight(cell);
                }
        } else if (need_update == CELL) {
                int cell = 0;
                nx = int(x);
-               if (the_locking_inset &&
-                       tabular->GetCellInset(actcell) != the_locking_inset)
-               {
+               if (the_locking_inset) {
                        Inset * inset = tabular->GetCellInset(cell);
                        for (i = 0;
                             inset != the_locking_inset && i < tabular->rows();
@@ -318,23 +305,24 @@ void InsetTabular::draw(BufferView * bv, LyXFont const & font, int baseline,
                                        nx = int(x);
                                        baseline += tabular->GetDescentOfRow(i) +
                                                tabular->GetAscentOfRow(i + 1) +
-                                               tabular->GetAdditionalHeight(i + 1);
+                                               tabular->GetAdditionalHeight(cell);
                                }
                        }
                } else {
-                       // copute baseline for actual row
-                       for (i = 0; i < actrow; ++i) {
-                               baseline += tabular->GetDescentOfRow(i) +
-                                       tabular->GetAscentOfRow(i + 1) +
-                                       tabular->GetAdditionalHeight(i + 1);
-                       }
-                       // now compute the right x position
-                       cell = tabular->GetCellNumber(actrow, 0);
-                       for (j = 0; (cell < actcell) && (j < tabular->columns()); ++j) {
-                                       if (tabular->IsPartOfMultiColumn(actrow, j))
+                       for (i = 0;
+                            cell < actcell && i < tabular->rows(); ++i) {
+                               for (j = 0; (cell < actcell) && (j < tabular->columns()); ++j) {
+                                       if (tabular->IsPartOfMultiColumn(i, j))
                                                continue;
                                        nx += tabular->GetWidthOfColumn(cell);
                                        ++cell;
+                               }
+                               if (tabular->row_of_cell(cell) > i) {
+                                       nx = int(x);
+                                       baseline += tabular->GetDescentOfRow(i) +
+                                               tabular->GetAscentOfRow(i + 1) +
+                                               tabular->GetAdditionalHeight(cell);
+                               }
                        }
                }
                i = tabular->row_of_cell(cell);
@@ -447,9 +435,12 @@ void InsetTabular::update(BufferView * bv, LyXFont const & font, bool reinit)
                        owner()->update(bv, font, true);
                return;
        }
-       if (the_locking_inset)
+       if (the_locking_inset) {
                the_locking_inset->update(bv, font, reinit);
-
+//     resetPos(bv);
+//     inset_x = cursor.x() - top_x + tabular->GetBeginningOfTextInCell(actcell);
+//     inset_y = cursor.y();
+       }
        switch (need_update) {
        case INIT:
        case FULL:
@@ -505,9 +496,9 @@ void InsetTabular::InsetUnlock(BufferView * bv)
        no_selection = false;
        oldcell = -1;
        locked = false;
-       if (scroll(false) || hasSelection()) {
+       if (scroll() || hasSelection()) {
                sel_cell_start = sel_cell_end = 0;
-               if (scroll(false)) {
+               if (scroll()) {
                        scroll(bv, 0.0F);
                }
                UpdateLocal(bv, FULL, false);
@@ -567,10 +558,7 @@ bool InsetTabular::UnlockInsetInInset(BufferView * bv, UpdatableInset * inset,
        if (the_locking_inset == inset) {
                the_locking_inset->InsetUnlock(bv);
                the_locking_inset = 0;
-               if (scroll(false))
-                       scroll(bv, 0.0F);
-               else
-                       UpdateLocal(bv, CELL, false);
+               UpdateLocal(bv, CELL, false);
                ShowInsetCursor(bv, false);
                return true;
        }
@@ -784,10 +772,7 @@ InsetTabular::LocalDispatch(BufferView * bv,
                sel_cell_start = sel_cell_end = actcell;
                if (hs)
                        UpdateLocal(bv, SELECTION, false);
-               if (!the_locking_inset) {
-                       ShowInsetCursor(bv);
-                       return DISPATCHED_NOUPDATE;
-               }
+               ShowInsetCursor(bv);
                return result;
        }
        // this to avoid compiler warnings.
@@ -1046,19 +1031,19 @@ InsetTabular::LocalDispatch(BufferView * bv,
                result = UNDISPATCHED;
                if (the_locking_inset)
                        break;
-               nodraw(true);
+               no_draw = true;
                if (ActivateCellInset(bv)) {
                        result = the_locking_inset->LocalDispatch(bv, action, arg);
                        if ((result == UNDISPATCHED) || (result == FINISHED)) {
                                UnlockInsetInInset(bv, the_locking_inset);
-                               nodraw(false);
+                               no_draw = false;
                                the_locking_inset = 0;
                                return UNDISPATCHED;
                        }
-                       nodraw(false);
-//                     the_locking_inset->ToggleInsetCursor(bv);
+                       no_draw = false;
+                       the_locking_inset->ToggleInsetCursor(bv);
                        UpdateLocal(bv, CELL, false);
-//                     the_locking_inset->ToggleInsetCursor(bv);
+                       the_locking_inset->ToggleInsetCursor(bv);
                        return result;
                }
                break;
@@ -1188,7 +1173,8 @@ void InsetTabular::ShowInsetCursor(BufferView * bv, bool show)
                int const desc = lyxfont::maxDescent(font);
                bv->fitLockedInsetCursor(cursor.x(), cursor.y(), asc, desc);
                if (show)
-                       bv->showLockedInsetCursor(cursor.x(), cursor.y(), asc, desc);
+                       bv->showLockedInsetCursor(cursor.x(), cursor.y(),
+                                                 asc, desc);
                setCursorVisible(true);
        }
 }
@@ -1214,9 +1200,13 @@ void InsetTabular::setPos(BufferView * bv, int x, int y) const
 
        // first search the right row
        while((ly < y) && (actrow < tabular->rows())) {
-               cursor.y(cursor.y() + tabular->GetDescentOfRow(actrow) +
-                                tabular->GetAscentOfRow(actrow + 1) +
-                                tabular->GetAdditionalHeight(actrow + 1));
+               cursor.y(cursor.y()
+                        + tabular->GetDescentOfRow(actrow)
+                        + tabular->GetAscentOfRow(actrow + 1)
+                        + tabular->
+                        GetAdditionalHeight(tabular->
+                                            GetCellNumber(actrow + 1,
+                                                          actcol)));
                ++actrow;
                ly = cursor.y() + tabular->GetDescentOfRow(actrow);
        }
@@ -1270,9 +1260,10 @@ void InsetTabular::resetPos(BufferView * bv) const
        cursor.y(0);
        for (; (cell < actcell) && !tabular->IsLastRow(cell); ++cell) {
                if (tabular->IsLastCellInRow(cell)) {
-                       cursor.y(cursor.y() + tabular->GetDescentOfRow(actrow) +
-                                        tabular->GetAscentOfRow(actrow + 1) +
-                                        tabular->GetAdditionalHeight(actrow + 1));
+                       cursor.y(cursor.y()
+                                + tabular->GetDescentOfRow(actrow)
+                                + tabular->GetAscentOfRow(actrow + 1)
+                                + tabular->GetAdditionalHeight(cell + 1));
                        ++actrow;
                }
        }
@@ -1282,10 +1273,9 @@ void InsetTabular::resetPos(BufferView * bv) const
        new_x += offset;
        cursor.x(new_x);
 //    cursor.x(getCellXPos(actcell) + offset);
-       if (scroll(false) && (tabular->GetWidthOfTabular() < bv->workWidth()-20)) {
+       if (scroll() && (tabular->GetWidthOfTabular() < bv->workWidth()-20))
                scroll(bv, 0.0F);
-               UpdateLocal(bv, FULL, false);
-       } else if (the_locking_inset &&
+       else if (the_locking_inset &&
                 (tabular->GetWidthOfColumn(actcell) > bv->workWidth()-20)) {
                int xx = cursor.x() - offset + bv->text->GetRealCursorX(bv);
                if (xx > (bv->workWidth()-20))
@@ -1297,7 +1287,6 @@ void InsetTabular::resetPos(BufferView * bv) const
                                xx = 60;
                        scroll(bv, xx);
                }
-               UpdateLocal(bv, FULL, false);
        } else if ((cursor.x() - offset) > 20 &&
                   (cursor.x() - offset + tabular->GetWidthOfColumn(actcell))
                   > (bv->workWidth() - 20)) {
@@ -1306,10 +1295,9 @@ void InsetTabular::resetPos(BufferView * bv) const
        } else if ((cursor.x() - offset) < 20) {
                scroll(bv, 20 - cursor.x() + offset);
                UpdateLocal(bv, FULL, false);
-       } else if (scroll(false) && top_x > 20 &&
+       } else if (scroll() && top_x > 20 &&
                   (top_x + tabular->GetWidthOfTabular()) > (bv->workWidth() - 20)) {
                scroll(bv, old_x - cursor.x());
-               UpdateLocal(bv, FULL, false);
        }
        if ((!the_locking_inset ||
             !the_locking_inset->GetFirstLockingInsetOfType(TABULAR_CODE)) &&
@@ -2305,33 +2293,3 @@ bool InsetTabular::isRightToLeft(BufferView *bv )
 {
        return bv->getParentLanguage(this)->RightToLeft();
 }
-
-bool InsetTabular::nodraw() const
-{
-       if (the_locking_inset)
-               return the_locking_inset->nodraw();
-       return UpdatableInset::nodraw();
-}
-
-
-int InsetTabular::scroll(bool recursive) const
-{
-       int sx = UpdatableInset::scroll(false);
-
-       if (recursive && the_locking_inset)
-               sx += the_locking_inset->scroll(recursive);
-
-       return sx;
-}
-
-
-bool InsetTabular::doClearArea() const
-{
-       return !locked || (need_update & (FULL|INIT));
-}
-/* Emacs:
- * Local variables:
- * tab-width: 4
- * End:
- * vi:set tabstop=4:
- */
index ba72465347d888035e94748d4bc635afc9f47c52..39521dbbbaa6d3a61776df2d100e7e834699361d 100644 (file)
@@ -101,7 +101,7 @@ public:
        ///
        void Edit(BufferView *, int x, int y, unsigned int);
        ///
-       bool doClearArea() const;
+       bool doClearArea() const { return !locked; };
        ///
        void InsetUnlock(BufferView *);
        ///
@@ -178,20 +178,6 @@ public:
        LyXFunc::func_status getStatus(string const & argument) const;
        ///
        std::vector<string> const getLabelList() const;
-       ///
-       void nodraw(bool b) {
-               UpdatableInset::nodraw(b);
-       }
-       bool nodraw() const;
-       ///
-       int scroll(bool recursive=true) const;
-       void scroll(BufferView *bv, float sx) const {
-               UpdatableInset::scroll(bv, sx);
-       }
-       void scroll(BufferView *bv, int offset) const {
-               UpdatableInset::scroll(bv, offset);
-       }
-
        //
        // Public structures and variables
        ///
@@ -297,6 +283,8 @@ private:
        ///
        bool no_selection;
        ///
+       bool no_draw;
+       ///
        mutable bool locked;
        ///
        mutable UpdateCodes need_update;
index 18c39ca006b727965c60d20c93beeadda1dbbd6b..6107391f1f2eef76f17f654ecc604a0cbdbb2f9c 100644 (file)
@@ -97,19 +97,18 @@ void InsetText::init(InsetText const * ins)
        drawTextXOffset = 0;
        drawTextYOffset = 0;
        autoBreakRows = false;
-       drawFrame_ = NEVER;
+       drawFrame = NEVER;
        xpos = 0.0;
        if (ins) {
-               SetParagraphData(ins->par);
-               autoBreakRows = ins->autoBreakRows;
-               drawFrame_ = ins->drawFrame_;
+       SetParagraphData(ins->par);
+       autoBreakRows = ins->autoBreakRows;
+       drawFrame = ins->drawFrame;
        }
        par->SetInsetOwner(this);
        frame_color = LColor::insetframe;
        locked = false;
        old_par = 0;
        last_drawn_width = -1;
-       frame_is_visible = false;
 }
 
 
@@ -298,29 +297,26 @@ int InsetText::textWidth(BufferView * bv) const
 void InsetText::draw(BufferView * bv, LyXFont const & f,
                      int baseline, float & x, bool cleared) const
 {
-       if (nodraw())
-               return;
-
        Painter & pain = bv->painter();
 
        // no draw is necessary !!!
-       if ((drawFrame_ == LOCKED) && !locked && !par->size()) {
-               top_x = int(x);
-               top_baseline = baseline;
-               x += width(bv, f);
-               if (!cleared && (need_update & CLEAR_FRAME))
-                       clearFrame(pain, cleared);
-               need_update = NONE;
-               return;
+       if ((drawFrame == LOCKED) && !locked && !par->size()) {
+                       if (!cleared && (need_update & CLEAR_FRAME)) {
+                                       pain.rectangle(top_x + 1, baseline - insetAscent + 1,
+                                                                  width(bv, f) - 1,
+                                                                  insetAscent + insetDescent - 1,
+                                                                  LColor::background);
+                       }
+                       top_x = int(x);
+                       top_baseline = baseline;
+                       x += width(bv, f);
+                       need_update = NONE;
+                       return;
        }
 
        xpos = x;
-#if 0
        UpdatableInset::draw(bv, f, baseline, x, cleared);
-#else
-       if (!owner())
-               x += static_cast<float>(scroll());
-#endif
+       
        // update insetWidth and insetHeight with dummy calls
        (void)ascent(bv, f);
        (void)descent(bv, f);
@@ -328,9 +324,8 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
 
        // if top_x differs we have a rule down and we don't have to clear anything
        if (!cleared && (top_x == int(x)) &&
-               ((need_update&(INIT|FULL)) || (top_baseline!=baseline) ||
-                (last_drawn_width!=insetWidth)))
-       {
+           ((need_update == INIT) || (need_update == FULL) || (top_baseline != baseline) ||
+                (last_drawn_width!=insetWidth))) {
                int w =  insetWidth;
                int h = insetAscent + insetDescent;
                int ty = baseline - insetAscent;
@@ -351,14 +346,11 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
                return;
 
        if (top_x != int(x)) {
-               need_update |= INIT;
+               need_update = INIT;
                top_x = int(x);
                bv->text->status = LyXText::CHANGED_IN_DRAW;
                return;
        }
-
-//     lyxerr << "InsetText::draw[" << this << "](" << need_update << ":" << int(x) << ":" << top_x << ")\n";
-
        if (cleared || (last_drawn_width != insetWidth)) {
                need_update |= FULL;
                last_drawn_width = insetWidth;
@@ -374,7 +366,6 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
                inset_y = cy(bv) + drawTextYOffset;
        }
        if (!cleared && (need_update == CURSOR) && !TEXT(bv)->selection) {
-               drawFrame(pain, cleared);
                x += width(bv, f);
                need_update = NONE;
                return;
@@ -401,7 +392,7 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
        if (y_offset < 0)
                y_offset = y;
        TEXT(bv)->first = first;
-       if (cleared) {
+       if (cleared) { // (need_update&FULL) || (need_update&INIT)
                int yf = y_offset;
                y = 0;
                while ((row != 0) && (yf < ph)) {
@@ -434,46 +425,30 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
        TEXT(bv)->refresh_y = 0;
        TEXT(bv)->status = LyXText::UNCHANGED;
        if ((need_update != CURSOR_PAR) &&
-               ((drawFrame_ == ALWAYS) || ((drawFrame_ == LOCKED) && locked)))
-               drawFrame(pain, cleared);
-       else if (need_update & CLEAR_FRAME)
-               clearFrame(pain, cleared);
+               ((drawFrame == ALWAYS) || ((drawFrame == LOCKED) && locked)))
+       {
+               pain.rectangle(top_x + 1, baseline - insetAscent + 1,
+                              width(bv, f) - 1,
+                              insetAscent + insetDescent - 1,
+                              frame_color);
+       } else if (need_update & CLEAR_FRAME) {
+               pain.rectangle(top_x + 1, baseline - insetAscent + 1,
+                              width(bv, f) - 1,
+                              insetAscent + insetDescent - 1,
+                              LColor::background);
+       }
        x += width(bv, f) - TEXT_TO_INSET_OFFSET;
        if (bv->text->status==LyXText::CHANGED_IN_DRAW) {
-               need_update |= INIT;
+               need_update = INIT;
        } else if (need_update != INIT)
                need_update = NONE;
 }
 
 
-void InsetText::drawFrame(Painter & pain, bool cleared) const
-{
-       if (!frame_is_visible || cleared) {
-               pain.rectangle(top_x + 1, top_baseline - insetAscent + 1,
-                              insetWidth - 1, insetAscent + insetDescent - 1,
-                              frame_color);
-               frame_is_visible = true;
-       }
-}
-
-
-void InsetText::clearFrame(Painter & pain, bool cleared) const
-{
-       if (frame_is_visible) {
-               if (!cleared) {
-                       pain.rectangle(top_x + 1, top_baseline - insetAscent + 1,
-                                      insetWidth - 1, insetAscent + insetDescent - 1,
-                                      LColor::background);
-               }
-               frame_is_visible = false;
-       }
-}
-
-
 void InsetText::update(BufferView * bv, LyXFont const & font, bool reinit)
 {
-       if (reinit) {
-               need_update |= INIT;
+       if (reinit) {  // && (need_update != CURSOR)) {
+               need_update = INIT;
                resizeLyXText(bv);
                if (owner())
                        owner()->update(bv, font, true);
@@ -484,39 +459,47 @@ void InsetText::update(BufferView * bv, LyXFont const & font, bool reinit)
                inset_y = cy(bv) + drawTextYOffset;
                the_locking_inset->update(bv, font, reinit);
        }
-#if 0
        if (need_update == INIT) {
                resizeLyXText(bv);
-               need_update |= FULL;
+               need_update = FULL;
        }
-#endif
        int oldw = insetWidth;
+#if 1
        insetWidth = TEXT(bv)->width + (2 * TEXT_TO_INSET_OFFSET);
+       // max(textWidth(bv->painter()),
+       // static_cast<int>(TEXT(bv)->width) + drawTextXOffset) +
+       // (2 * TEXT_TO_INSET_OFFSET);
+#else
+       insetWidth = textWidth(bv);
+       if (insetWidth < 0)
+               insetWidth = static_cast<int>(TEXT(bv)->width);
+#endif
        if (oldw != insetWidth) {
+//         printf("TW(%p): %d-%d-%d-%d\n",this,insetWidth, oldw,
+//                textWidth(bv->painter()),static_cast<int>(TEXT(bv)->width));
                resizeLyXText(bv);
-               need_update |= FULL;
-//             update(bv, font, reinit);
+               need_update = FULL;
+               update(bv, font, reinit);
                return;
        }
-       if ((need_update&CURSOR_PAR) && (TEXT(bv)->status==LyXText::UNCHANGED) &&
+       if ((need_update == CURSOR_PAR) && (TEXT(bv)->status == LyXText::UNCHANGED) &&
                the_locking_inset)
        {
                TEXT(bv)->UpdateInset(bv, the_locking_inset);
        }
        
        if (TEXT(bv)->status == LyXText::NEED_MORE_REFRESH)
-               need_update |= FULL;
-#if 0
+               need_update = FULL;
+
        int y_temp = 0;
        Row * row = TEXT(bv)->GetRowNearY(y_temp);
        insetAscent = row->ascent_of_text() + TEXT_TO_INSET_OFFSET;
        insetDescent = TEXT(bv)->height - row->ascent_of_text() +
                TEXT_TO_INSET_OFFSET;
-#endif
 }
 
 
-void InsetText::SetUpdateStatus(BufferView * bv, int what) const
+void InsetText::SetUpdateStatus(BufferView * bv, int what)
 {
        need_update |= what;
        if (TEXT(bv)->status == LyXText::NEED_MORE_REFRESH)
@@ -573,7 +556,7 @@ void InsetText::Edit(BufferView * bv, int x, int y, unsigned int button)
        TEXT(bv)->sel_cursor = TEXT(bv)->cursor;
        bv->text->FinishUndo();
        ShowInsetCursor(bv);
-       UpdateLocal(bv, CURSOR, false);
+       UpdateLocal(bv, FULL, false);
 
        // If the inset is empty set the language of the current font to the
        // language to the surronding text.
@@ -659,10 +642,7 @@ bool InsetText::UnlockInsetInInset(BufferView * bv, UpdatableInset * inset,
                if (lr)
                        moveRight(bv, false);
                old_par = 0; // force layout setting
-               if (scroll())
-                       scroll(bv, 0.0F);
-               else
-                       UpdateLocal(bv, CURSOR, false);
+               UpdateLocal(bv, CURSOR_PAR, false);
                return true;
        }
        return the_locking_inset->UnlockInsetInInset(bv, inset, lr);
@@ -1535,7 +1515,7 @@ bool InsetText::checkAndActivateInset(BufferView * bv, bool behind)
                inset->Edit(bv, x, y, 0);
                if (!the_locking_inset)
                        return false;
-               UpdateLocal(bv, CURSOR, false);
+               UpdateLocal(bv, CURSOR_PAR, false);
                return true;
        }
        return false;
@@ -1559,7 +1539,7 @@ bool InsetText::checkAndActivateInset(BufferView * bv, int x, int y,
                inset->Edit(bv, x - inset_x, y - inset_y, button);
                if (!the_locking_inset)
                        return false;
-               UpdateLocal(bv, CURSOR, false);
+               UpdateLocal(bv, CURSOR_PAR, false);
                return true;
        }
        return false;
@@ -1656,8 +1636,8 @@ void InsetText::SetAutoBreakRows(bool flag)
 
 void InsetText::SetDrawFrame(BufferView * bv, DrawFrame how)
 {
-       if (how != drawFrame_) {
-               drawFrame_ = how;
+       if (how != drawFrame) {
+               drawFrame = how;
                if (bv)
                        UpdateLocal(bv, DRAW_FRAME, false);
        }
@@ -1860,34 +1840,3 @@ void InsetText::removeNewlines()
                }
        }
 }
-
-               
-bool InsetText::nodraw() const
-{
-       if (the_locking_inset)
-               return the_locking_inset->nodraw();
-       return UpdatableInset::nodraw();
-}
-
-
-int InsetText::scroll(bool recursive) const
-{
-       int sx = UpdatableInset::scroll(false);
-
-       if (recursive && the_locking_inset)
-               sx += the_locking_inset->scroll(recursive);
-
-       return sx;
-}
-
-
-bool InsetText::doClearArea() const
-{
-       return !locked || (need_update & (FULL|INIT));
-}
-/* Emacs:
- * Local variables:
- * tab-width: 4
- * End:
- * vi:set tabstop=4:
- */
index 4d2c08985d4c060b58a36f2d92e085ca47be1443..a473e816287eaddf69e396af0a598046c50e52ee 100644 (file)
@@ -99,7 +99,7 @@ public:
        ///
        void update(BufferView *, LyXFont const &, bool =false);
        ///
-       void SetUpdateStatus(BufferView *, int what) const;
+       void SetUpdateStatus(BufferView *, int what);
        ///
        string const EditMessage() const;
        ///
@@ -107,7 +107,7 @@ public:
        ///
        bool IsTextInset() const { return true; }
        ///
-       bool doClearArea() const;
+       bool doClearArea() const { return !locked; }
        ///
        void InsetUnlock(BufferView *);
        ///
@@ -180,16 +180,6 @@ public:
        ///
        std::vector<string> const getLabelList() const;
        ///
-       bool nodraw() const;
-       ///
-       int scroll(bool recursive=true) const;
-       void scroll(BufferView *bv, float sx) const {
-               UpdatableInset::scroll(bv, sx);
-       }
-       void scroll(BufferView *bv, int offset) const {
-               UpdatableInset::scroll(bv, offset);
-       }
-
        LyXParagraph * par;
        ///
        mutable int need_update;
@@ -204,7 +194,7 @@ protected:
        ///
        bool autoBreakRows;
        ///
-       DrawFrame drawFrame_;
+       DrawFrame drawFrame;
        ///
        LColor::color frame_color;
 
@@ -247,8 +237,8 @@ private:
        ///
        bool checkAndActivateInset(BufferView * bv, int x = 0, int y = 0,
                                   int button = 0);
-       ///
        void removeNewlines();
+
        ///
        int cx(BufferView *) const;
        ///
@@ -261,15 +251,11 @@ private:
        bool cboundary(BufferView *) const;
        ///
        Row * crow(BufferView *) const;
-       ///
+
        /// This instead of a macro
        LyXText * TEXT(BufferView * bv) const {
                return getLyXText(bv);
        }
-       ///
-       void drawFrame(Painter &, bool cleared) const;
-       void clearFrame(Painter &, bool cleared) const;
-       ///
        
        /* Private structures and variables */
        ///
@@ -310,7 +296,5 @@ private:
        mutable Cache cache;
        ///
        mutable int last_drawn_width;
-       ///
-       mutable bool frame_is_visible;
 };
 #endif
index 74631128c9f3b7b1dc36ffae0c20be2cb0fbaf13..eea2d76d9edec8f8eb4e0313faf7dae509223b1c 100644 (file)
@@ -234,11 +234,7 @@ public:
        ///
        virtual void resizeLyXText(BufferView *) const {}
        /// returns the actuall scroll-value
-       virtual int scroll(bool recursive=true) const {
-               if (!recursive || !owner_)
-                       return scx;
-               return 0;
-       }
+       int scroll() const { return scx; }
 protected:
        ///
        mutable int top_x;
@@ -308,7 +304,7 @@ public:
        }
 
        ///
-       UpdatableInset() : cursor_visible_(false), block_drawing_(false) {}
+       UpdatableInset() : cursor_visible_(false) {}
        ///
        virtual EDITABLE Editable() const;
        
@@ -367,20 +363,12 @@ public:
        ///
        virtual int getMaxWidth(BufferView * bv, UpdatableInset const *) const;
        ///
-       int scroll(bool recursive=true) const {
+       int scroll() const {
                // We need this method to not clobber the real method in Inset
-               return Inset::scroll(recursive);
+               return Inset::scroll();
        }
        ///
        virtual bool ShowInsetDialog(BufferView *) const { return false; }
-       ///
-       virtual void nodraw(bool b) {
-               block_drawing_ = b;
-       }
-       ///
-       virtual bool nodraw() const {
-               return block_drawing_;
-       }
 protected:
        ///
        void toggleCursorVisible() const {
@@ -394,11 +382,8 @@ protected:
        void scroll(BufferView *, float sx) const;
        /// scrolls offset pixels
        void scroll(BufferView *, int offset) const;
-
 private:
        ///
        mutable bool cursor_visible_;
-       ///
-       bool block_drawing_;
 };
 #endif
index c93c537be87d379636f16e8050e50ce2bb126b95..fc224e654eb9c7bb3c20decec8b98aa3d2955671 100644 (file)
@@ -603,7 +603,7 @@ string const LyXFunc::Dispatch(int ac,
        }
     
        selection_possible = false;
-
+       
        if (owner->view()->available())
                owner->view()->hideCursor();
 
index 941e6ce2cf9f29f85877fb46c43c10704f0d5686..5b0882b51e18d26016ce673d7c6889bdca03ba6a 100644 (file)
@@ -187,8 +187,8 @@ enum LyXRCTags {
        string ps_command;
        /// option for telling the dvi viewer about the paper size
        string view_dvi_paper_option;
-       /// default paper size for local xdvi/dvips/ghostview/whatever
-       BufferParams::PAPER_SIZE default_papersize;
+        /// default paper size for local xdvi/dvips/ghostview/whatever
+        BufferParams::PAPER_SIZE default_papersize;
        /// command to run chktex incl. options
        string chktex_command;
        ///
index a3515f32a2b2da3e068cd65474f78ffb9adc401a..d7aadbd6bff992618a92ceedcaf3d83c6b1623bb 100644 (file)
@@ -96,13 +96,11 @@ LyXTabular::LyXTabular(InsetTabular * inset, int rows_arg, int columns_arg)
 LyXTabular::LyXTabular(InsetTabular * inset, LyXTabular const & lt)
 {
        owner_ = inset;
-       Init(lt.rows_, lt.columns_, &lt);
-#if 0
+       Init(lt.rows_, lt.columns_);
 #ifdef WITH_WARNINGS
 #warning Jürgen, can you make it the other way round. So that copy assignment depends on the copy constructor and not the other way. (Lgb)
 #endif
        operator=(lt);
-#endif
 }
 
 
@@ -142,7 +140,6 @@ LyXTabular & LyXTabular::operator=(LyXTabular const & lt)
 LyXTabular * LyXTabular::Clone(InsetTabular * inset)
 {
        LyXTabular * result = new LyXTabular(inset, *this);
-#if 0
        // don't know if this is good but I need to Clone also
        // the text-insets here, this is for the Undo-facility!
        for (int i = 0; i < rows_; ++i) {
@@ -151,13 +148,12 @@ LyXTabular * LyXTabular::Clone(InsetTabular * inset)
                        result->cell_info[i][j].inset.setOwner(inset);
                }
        }
-#endif
        return result;
 }
 
 
 /* activates all lines and sets all widths to 0 */
-void LyXTabular::Init(int rows_arg, int columns_arg, LyXTabular const * lt)
+void LyXTabular::Init(int rows_arg, int columns_arg)
 {
        rows_ = rows_arg;
        columns_ = columns_arg;
@@ -165,11 +161,6 @@ void LyXTabular::Init(int rows_arg, int columns_arg, LyXTabular const * lt)
        column_info = column_vector(columns_, columnstruct());
        cell_info = cell_vvector(rows_, cell_vector(columns_, cellstruct()));
 
-       if (lt) {
-               operator=(*lt);
-               return;
-       }
-       
        int cellno = 0;
        for (int i = 0; i < rows_; ++i) {
                for (int j = 0; j < columns_; ++j) {
@@ -437,8 +428,10 @@ bool LyXTabular::RightLine(int cell, bool onlycolumn) const
 
 bool LyXTabular::TopAlreadyDrawed(int cell) const
 {
+       if (GetAdditionalHeight(cell))
+               return false;
        int row = row_of_cell(cell);
-       if ((row > 0) && !GetAdditionalHeight(row)) {
+       if (row > 0) {
                int column = column_of_cell(cell);
                --row;
                while (column
@@ -476,10 +469,10 @@ bool LyXTabular::IsLastRow(int cell) const
 }
 
 
-int LyXTabular::GetAdditionalHeight(int row) const
+int LyXTabular::GetAdditionalHeight(int cell) const
 {
-       if (!row || row >= rows_)
-               return 0;
+       int const row = row_of_cell(cell);
+       if (!row) return 0;
        
        bool top = true;
        bool bottom = true;
@@ -675,7 +668,7 @@ bool LyXTabular::SetMColumnPWidth(int cell, string const & width)
 
 
 bool LyXTabular::SetAlignSpecial(int cell, string const & special,
-                                 LyXTabular::Feature what)
+                                LyXTabular::Feature what)
 {
        if (what == SET_SPECIAL_MULTI)
                cellinfo_of_cell(cell)->align_special = special;
@@ -1888,7 +1881,7 @@ int LyXTabular::GetHeightOfTabular() const
 
        for (int row = 0; row < rows_; ++row)
                height += GetAscentOfRow(row) + GetDescentOfRow(row) +
-                       GetAdditionalHeight(row);
+                       GetAdditionalHeight(GetCellNumber(row, 0));
        return height;
 }
 
@@ -2592,9 +2585,3 @@ LyXTabular::BoxType LyXTabular::UseParbox(int cell) const
        return BOX_NONE;
 }
 #endif
-/* Emacs:
- * Local variables:
- * tab-width: 4
- * End:
- * vi:set tabstop=4:
- */
index 6abb179ce2e353a3bba0157ed2be959edc69aad2..4910024086439589465bd14485e5d2cdd5c27adb 100644 (file)
@@ -182,7 +182,7 @@ public:
        bool IsLastRow(int cell) const;
 
        ///
-       int GetAdditionalHeight(int row) const;
+       int GetAdditionalHeight(int cell) const;
 
        ///
        int GetAdditionalWidth(int cell) const;
@@ -493,7 +493,7 @@ private:
        InsetTabular * owner_;
 
        ///
-       void Init(int columns_arg, int rows_arg, LyXTabular const * lt = 0);
+       void Init(int columns_arg, int rows_arg);
        ///
        void Reinit();
        ///
index 9dea165c555e8fbeabbaa3dacb30a4cf5c246369..066717f57dca9dcb98cdeb450541da64fdf78449 100644 (file)
@@ -1157,7 +1157,7 @@ LyXText::NextBreakPoint(BufferView * bview, Row const * row, int width) const
 int LyXText::Fill(BufferView * bview, Row * row, int paper_width) const
 {
        if (paper_width < 0)
-               return 20;
+               return 0;
 
        int w;
        // get the pure distance
@@ -1202,8 +1202,6 @@ int LyXText::Fill(BufferView * bview, Row * row, int paper_width) const
        }
        
        int const fill = paper_width - w - RightMargin(bview->buffer(), row);
-       if (fill < 0)
-               return 0;
        return fill;
 }
 
@@ -1414,7 +1412,7 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const
                   tmpfont = GetFont(bview->buffer(), row_ptr->par(), pos);
                   tmpinset = row_ptr->par()->GetInset(pos);
                   if (tmpinset) {
-//                        tmpinset->update(bview, tmpfont);
+                          tmpinset->update(bview, tmpfont);
                           asc = tmpinset->ascent(bview, tmpfont);
                           desc = tmpinset->descent(bview, tmpfont);
                           maxwidth += tmpinset->width(bview, tmpfont);