]> git.lyx.org Git - features.git/commitdiff
You won't believe I SOLVED the smart insettext-update, finally!
authorJürgen Vigna <jug@sad.it>
Fri, 7 Jul 2000 08:24:42 +0000 (08:24 +0000)
committerJürgen Vigna <jug@sad.it>
Fri, 7 Jul 2000 08:24:42 +0000 (08:24 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@865 a592a061-630c-0410-9148-cb99ea01b6c8

ChangeLog
src/insets/insettext.C
src/lyxtext.h
src/screen.C
src/text.C

index 4dfc898a7618a94fe03b1741825a9b0d51c44e63..ccd86583e3718b38b0b68bac47ed4a3062433cc6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2000-07-07  Juergen Vigna  <jug@sad.it>
+
+       * src/insets/insettext.C (draw): set the status of the bv->text to
+       CHANGED_IN_DRAW if top_x changed and so a reinit is necessary.
+
+       * src/screen.C (DrawOneRow): 
+       (DrawFromTo): redraw the actual row if something has changed in it
+       while drawing.
+
+       * src/text.C (draw): call an update of the toplevel-inset if something
+       has changed inside while drawing.
+
+       * src/lyxtext.h: added CHANGED_IN_DRAW status.
+
 2000-07-06  Angus Leeming  <a.leeming@ic.ac.uk>
 
        * src/insets/insetbib.[Ch] (callback) new method, moving callback
index aba63bb514ef0c6ef722bab242a80491806c85fc..c595f6d72e20bb1e08736e6e7c63d369105d813c 100644 (file)
@@ -263,6 +263,7 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
        need_update = INIT;
        top_x = int(x);
        owner()->update(bv, f, true);
+       bv->text->status = LyXText::CHANGED_IN_DRAW;
     }
 
     top_baseline = baseline;
index 71b365c5e15e565c4f0f89294a66abe5c6888709..09881225959b2f46d52fdfe71c79dc938a0fd4a0 100644 (file)
@@ -41,7 +41,9 @@ public:
                ///
                NEED_MORE_REFRESH,
                ///
-               NEED_VERY_LITTLE_REFRESH
+               NEED_VERY_LITTLE_REFRESH,
+               ///
+               CHANGED_IN_DRAW
        };
 
        /// Constructor
index 929ffe28a6b89275dfda52e9e317027a867c46c0..621e0b4cfe48b70b2592655ab0d512020e891bcc 100644 (file)
@@ -98,7 +98,13 @@ void LyXScreen::DrawFromTo(LyXText * text, int y1, int y2, int y_offset, int x_o
        // y1 is now the real beginning of row on the screen
        
        while (row != 0 && y < y2) {
-               text->GetVisibleRow(owner.owner(), y+y_offset, x_offset, row, y + text->first);
+               LyXText::text_status st = text->status;
+               do {
+                       text->status = st;
+                       text->GetVisibleRow(owner.owner(), y+y_offset,
+                                           x_offset, row, y + text->first);
+               } while (text->status == LyXText::CHANGED_IN_DRAW);
+               text->status = st;
                y += row->height();
                row = row->next();
        }
@@ -121,7 +127,13 @@ void LyXScreen::DrawOneRow(LyXText * text, Row * row, long y_text,
        if (y + row->height() > 0
            && y - row->height() <= long(owner.height())) {
                // ok there is something visible
-               text->GetVisibleRow(owner.owner(), y, x_offset, row, y + text->first);
+               LyXText::text_status st = text->status;
+               do {
+                       text->status = st;
+                       text->GetVisibleRow(owner.owner(), y, x_offset, row,
+                                           y + text->first);
+               } while (text->status == LyXText::CHANGED_IN_DRAW);
+               text->status = st;
        }
 }
 
@@ -405,6 +417,7 @@ void LyXScreen::Update(LyXText * text, int y_offset, int x_offset)
                       owner.workWidth(), text->refresh_row->height());
        }
        break;
+       case LyXText::CHANGED_IN_DRAW: // just to remove the warning
        case LyXText::UNCHANGED:
                // Nothing needs done
                break;
index d3945cd6ac1ccc2759ce67a824c44ff26821096f..862579febac8443a53cc6becd296b11cd775a741 100644 (file)
@@ -504,6 +504,8 @@ void LyXText::draw(BufferView * bview, Row const * row,
 //                     tmpinset->update(bview, font, false);
                        tmpinset->draw(bview, font, offset+row->baseline(), x,
                                       cleared);
+                       if (status == CHANGED_IN_DRAW)
+                               UpdateInset(bview, tmpinset);
                }
                ++vpos;