From: Jürgen Vigna Date: Tue, 4 Jul 2000 15:46:55 +0000 (+0000) Subject: Some more changes for updating text-insets. X-Git-Tag: 1.6.10~22140 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=729f944d8805e888af25c703a4fd6e4322c47764;p=features.git Some more changes for updating text-insets. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@856 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/insets/insetcollapsable.C b/src/insets/insetcollapsable.C index 0daae7037f..718600a2d9 100644 --- a/src/insets/insetcollapsable.C +++ b/src/insets/insetcollapsable.C @@ -156,11 +156,11 @@ void InsetCollapsable::draw(BufferView * bv, LyXFont const & f, return; } - if (!cleared && ((need_update == FULL) || + if (!cleared && ((inset->need_update == InsetText::FULL) || (top_x!=int(x)) || (top_baseline!=baseline))) { int w = owner()? width(pain, f) : pain.paperWidth(); int h = ascent(pain,f) + descent(pain, f); - int tx = (display() && !owner())? 0:int(x); + int tx = (needFullRow() && !owner())? 0:int(x); int ty = baseline - ascent(pain,f); if (ty < 0) @@ -291,8 +291,8 @@ int InsetCollapsable::getMaxTextWidth(Painter & pain, } -void InsetCollapsable::update(BufferView * bv, - LyXFont const & font, bool dodraw) +void InsetCollapsable::update(BufferView * bv, LyXFont const & font, + bool dodraw) { if (!widthCollapsed) { widthCollapsed = width_collapsed(bv->painter(), font); diff --git a/src/insets/insettabular.h b/src/insets/insettabular.h index 9a2a6ee796..2cb39167ee 100644 --- a/src/insets/insettabular.h +++ b/src/insets/insettabular.h @@ -91,7 +91,7 @@ public: /// void draw(BufferView *, const LyXFont &, int , float &, bool) const; /// - void update(BufferView *, LyXFont const &, bool); + void update(BufferView *, LyXFont const &, bool =false); /// const char * EditMessage() const; /// diff --git a/src/insets/insettext.C b/src/insets/insettext.C index 10347afe2e..f8be238c2e 100644 --- a/src/insets/insettext.C +++ b/src/insets/insettext.C @@ -214,14 +214,14 @@ int InsetText::textWidth(Painter & pain) const } #if 0 if (owner()) { - w = w - top_x + owner()->x(); - printf("WW2: %d\n",w); + w = w - top_x; // + owner()->x(); +// printf("WW2: %d\n",w); return w; // - top_x + owner()->x(); } #endif w -= (2 * TEXT_TO_INSET_OFFSET); // printf("WW2: %d\n",w); - return w; // - top_x - (2 * TEXT_TO_INSET_OFFSET); + return w - top_x; // - top_x - (2 * TEXT_TO_INSET_OFFSET); } @@ -290,12 +290,12 @@ void InsetText::draw(BufferView * bv, LyXFont const & f, if ((drawFrame == ALWAYS) || ((drawFrame == LOCKED) && locked)) { pain.rectangle(top_x, baseline - insetAscent, insetWidth, insetAscent + insetDescent, frame_color); - } else { + } else if (need_update == CLEAR_FRAME) { pain.rectangle(top_x, baseline - insetAscent, insetWidth, insetAscent + insetDescent, LColor::background); } - x += width(pain, f) - TEXT_TO_INSET_OFFSET; + x += insetWidth - TEXT_TO_INSET_OFFSET; need_update = NONE; } @@ -310,9 +310,10 @@ void InsetText::update(BufferView * bv, LyXFont const & font, bool dodraw) } int oldw = insetWidth; #if 1 - insetWidth = max(textWidth(bv->painter()), - static_cast(TEXT(bv)->width) + drawTextXOffset) + - (2 * TEXT_TO_INSET_OFFSET); + insetWidth = TEXT(bv)->width + (2 * TEXT_TO_INSET_OFFSET); + // max(textWidth(bv->painter()), + // static_cast(TEXT(bv)->width) + drawTextXOffset) + + // (2 * TEXT_TO_INSET_OFFSET); #else insetWidth = textWidth(bv->painter()); if (insetWidth < 0) @@ -322,10 +323,13 @@ void InsetText::update(BufferView * bv, LyXFont const & font, bool dodraw) printf("TW(%p): %d-%d-%d-%d\n",this,insetWidth, oldw, textWidth(bv->painter()),static_cast(TEXT(bv)->width)); deleteLyXText(bv); + need_update = FULL; #if 0 if (owner()) { - owner()->update(bv, font, dodraw); - return; + owner()->update(bv, font, dodraw); + return; + } else { + update(bv, font, dodraw); } #else #if 1 @@ -347,6 +351,9 @@ void InsetText::update(BufferView * bv, LyXFont const & font, bool dodraw) TEXT(bv)->UpdateInset(bv, the_locking_inset); } + if (TEXT(bv)->status == LyXText::NEED_MORE_REFRESH) + need_update = FULL; + long int y_temp = 0; Row * row = TEXT(bv)->GetRowNearY(y_temp); insetAscent = row->ascent_of_text() + TEXT_TO_INSET_OFFSET; @@ -408,7 +415,7 @@ void InsetText::InsetUnlock(BufferView * bv) no_selection = false; locked = false; TEXT(bv)->selection = 0; - UpdateLocal(bv, CURSOR_PAR, false); + UpdateLocal(bv, CLEAR_FRAME, false); bv->owner()->getToolbar()->combox->select(bv->text->cursor.par()->GetLayout()+1); } @@ -1100,10 +1107,9 @@ bool InsetText::checkAndActivateInset(BufferView * bv, int x, int y, } -int InsetText::getMaxTextWidth(Painter & pain, - UpdatableInset const * inset) const +int InsetText::getMaxWidth(Painter & pain, UpdatableInset const * inset) const { - return getMaxWidth(pain, inset) - (2 * TEXT_TO_INSET_OFFSET); + return UpdatableInset::getMaxWidth(pain, inset) - (2*TEXT_TO_INSET_OFFSET); } @@ -1148,7 +1154,7 @@ void InsetText::SetDrawFrame(BufferView * bv, DrawFrame how) if (how != drawFrame) { drawFrame = how; if (bv) - UpdateLocal(bv, FRAME, false); + UpdateLocal(bv, DRAW_FRAME, false); } } @@ -1158,7 +1164,7 @@ void InsetText::SetFrameColor(BufferView * bv, LColor::color col) if (frame_color != col) { frame_color = col; if (bv) - UpdateLocal(bv, FRAME, false); + UpdateLocal(bv, DRAW_FRAME, false); } } diff --git a/src/insets/insettext.h b/src/insets/insettext.h index f6382fe61a..223b34ede1 100644 --- a/src/insets/insettext.h +++ b/src/insets/insettext.h @@ -45,7 +45,8 @@ public: CURSOR_PAR, CURSOR, SELECTION, - FRAME + DRAW_FRAME, + CLEAR_FRAME }; /// enum DrawFrame { @@ -135,6 +136,8 @@ public: /// void SetFont(BufferView *, LyXFont const &, bool toggleall = false); /// + int getMaxWidth(Painter &, UpdatableInset const *) const; + /// void init(InsetText const * ins = 0); /// void WriteParagraphData(Buffer const *, std::ostream &) const; @@ -153,12 +156,12 @@ public: void deleteLyXText(BufferView *); LyXParagraph * par; + /// + mutable UpdateCodes need_update; protected: /// void UpdateLocal(BufferView *, UpdateCodes, bool mark_dirty); - /// - virtual int getMaxTextWidth(Painter &, UpdatableInset const *) const; mutable int drawTextXOffset; mutable int drawTextYOffset; @@ -167,8 +170,6 @@ protected: DrawFrame drawFrame; /// LColor::color frame_color; - /// - mutable UpdateCodes need_update; private: /// diff --git a/src/text.C b/src/text.C index e769dc96e3..525bb54610 100644 --- a/src/text.C +++ b/src/text.C @@ -567,7 +567,7 @@ void LyXText::draw(BufferView * bview, Row const * row, if (c == LyXParagraph::META_INSET) { Inset * tmpinset = row->par()->GetInset(pos); if (tmpinset) { - tmpinset->update(bview, font); + tmpinset->update(bview, font, false); tmpinset->draw(bview, font, offset+row->baseline(), x, cleared); } @@ -1699,7 +1699,7 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const row_ptr->width(maxwidth+x); if (inset_owner) { Row * r = firstrow; - width = 0; + width = max(0,workWidth(bview)); while(r) { if (r->width() > width) width = r->width();