Could anybody please have a look whether there are any drawing issues with
that patch?
Andre'
--
Those who desire to give up Freedom in order to gain Security, will not have,
nor do they deserve, either one. (T. Jefferson or B. Franklin or both...)
Index: rowpainter.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/rowpainter.C,v
retrieving revision 1.18
diff -u -p -r1.18 rowpainter.C
--- rowpainter.C 30 May 2003 06:48:20 -0000 1.18
+++ rowpainter.C 17 Jun 2003 11:04:20 -0000
@@ -104,14 +104,18 @@ void RowPainter::paintInset(pos_type con
lyx::Assert(inset);
-#warning inset->update FIXME
- inset->update(perv(bv_), false);
+ MetricsInfo mi;
+ mi.base.bv = perv(bv_);
+ mi.base.font = getFont(pos);
+
+ Dimension dim;
+ inset->metrics(mi, dim);
PainterInfo pi(perv(bv_));
- pi.base.font = getFont(pos);
- int const w = inset->width(perv(bv_), pi.base.font);
+ //pi.base.font = getFont(pos);
+ //int const w = inset->width(perv(bv_), pi.base.font);
inset->draw(pi, int(x_), yo_ + row_->baseline());
- x_ += w;
+ x_ += dim.wid;
}
Index: text.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text.C,v
retrieving revision 1.367
diff -u -p -r1.367 text.C
--- text.C 12 Jun 2003 11:09:53 -0000 1.367
+++ text.C 17 Jun 2003 11:04:20 -0000
@@ -33,6 +33,7 @@
#include "WordLangTuple.h"
#include "paragraph_funcs.h"
#include "rowpainter.h"
+#include "metricsinfo.h"
#include "lyxrow_funcs.h"
#include "insets/insettext.h"
@@ -310,9 +311,15 @@ int LyXText::singleWidth(ParagraphList::
// this IS needed otherwise on initialitation we don't get the
fill
// of the row right (ONLY on initialization if we read a file!)
// should be changed! (Jug 20011204)
- tmpinset->update(bv());
+ //tmpinset->update(bv());
#endif
- return tmpinset->width(bv(), font);
+ //return tmpinset->width(bv(), font);
+ MetricsInfo mi;
+ mi.base.bv = bv();
+ mi.base.font = font;
+ Dimension dim;
+ tmpinset->metrics(mi, dim);
+ return dim.wid;
}
return 0;
}
@@ -1070,13 +1077,21 @@ void LyXText::setHeightOfRow(RowList::it
if (tmpinset) {
#if 1 // this is needed for deep update on initialitation
#warning inset->update FIXME
- tmpinset->update(bv());
+ //tmpinset->update(bv());
#endif
- maxwidth += tmpinset->width(bv(), tmpfont);
- maxasc = max(maxasc,
- tmpinset->ascent(bv(), tmpfont));
- maxdesc = max(maxdesc,
- tmpinset->descent(bv(),
tmpfont));
+ //maxwidth += tmpinset->width(bv(), tmpfont);
+ //maxasc = max(maxasc,
+ // tmpinset->ascent(bv(), tmpfont));
+ //maxdesc = max(maxdesc,
+ // tmpinset->descent(bv(),
tmpfont));
+ MetricsInfo mi;
+ mi.base.bv = bv();
+ mi.base.font = tmpfont;
+ Dimension dim;
+ tmpinset->metrics(mi, dim);
+ maxwidth += dim.wid;
+ maxasc = max(maxasc, dim.asc);
+ maxdesc = max(maxdesc, dim.des);
}
} else {
maxwidth += singleWidth(pit, pos);
Index: insets/inset.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/inset.h,v
retrieving revision 1.101
diff -u -p -r1.101 inset.h
--- insets/inset.h 16 Jun 2003 11:49:30 -0000 1.101
+++ insets/inset.h 17 Jun 2003 11:04:20 -0000
@@ -160,9 +160,6 @@ public:
int descent(BufferView *, LyXFont const &) const;
///
int width(BufferView *, LyXFont const &) const;
- /// update the inset representation
- virtual void update(BufferView *, bool = false)
- {}
/// what appears in the minibuffer when opening
virtual string const editMessage() const;
///
Index: insets/insetcollapsable.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcollapsable.C,v
retrieving revision 1.148
diff -u -p -r1.148 insetcollapsable.C
--- insets/insetcollapsable.C 16 Jun 2003 11:49:30 -0000 1.148
+++ insets/insetcollapsable.C 17 Jun 2003 11:04:21 -0000
@@ -286,6 +286,7 @@ int InsetCollapsable::docbook(Buffer con
}
+#if 0
void InsetCollapsable::update(BufferView * bv, bool reinit)
{
if (in_update) {
@@ -301,6 +302,7 @@ void InsetCollapsable::update(BufferView
}
in_update = false;
}
+#endif
Inset::RESULT InsetCollapsable::localDispatch(FuncRequest const & cmd)
Index: insets/insetcollapsable.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcollapsable.h,v
retrieving revision 1.110
diff -u -p -r1.110 insetcollapsable.h
--- insets/insetcollapsable.h 16 Jun 2003 11:49:30 -0000 1.110
+++ insets/insetcollapsable.h 17 Jun 2003 11:04:21 -0000
@@ -51,8 +51,6 @@ public:
/// draw, either inlined (no button) or collapsed/open
void draw(PainterInfo & pi, int x, int y, bool inlined) const;
///
- void update(BufferView *, bool = false);
- ///
EDITABLE editable() const;
///
bool insertInset(BufferView *, Inset * inset);
Index: insets/insetert.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetert.C,v
retrieving revision 1.131
diff -u -p -r1.131 insetert.C
--- insets/insetert.C 16 Jun 2003 11:49:30 -0000 1.131
+++ insets/insetert.C 17 Jun 2003 11:04:21 -0000
@@ -456,7 +456,7 @@ Inset::RESULT InsetERT::localDispatch(Fu
t->need_break_row = t->rows().begin();
t->fullRebreak();
t->setCursorIntern(t->cursor.par(), t->cursor.pos());
- inset.update(cmd.view(), true);
+ //inset.update(cmd.view(), true);
bv->updateInset(this);
result = DISPATCHED;
}
@@ -554,6 +554,7 @@ bool InsetERT::checkInsertChar(LyXFont &
void InsetERT::metrics(MetricsInfo & mi, Dimension & dim) const
{
+ setButtonLabel();
if (inlined())
inset.metrics(mi, dim);
else
@@ -664,17 +665,6 @@ int InsetERT::getMaxWidth(BufferView * b
if (text->rows().size() == 1 && rw < w)
return -1;
return w;
-}
-
-
-void InsetERT::update(BufferView * bv, bool reinit)
-{
- if (inset.need_update & InsetText::INIT ||
- inset.need_update & InsetText::FULL) {
- setButtonLabel();
- }
-
- InsetCollapsable::update(bv, reinit);
}
Index: insets/insetert.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetert.h,v
retrieving revision 1.76
diff -u -p -r1.76 insetert.h
--- insets/insetert.h 16 Jun 2003 11:49:31 -0000 1.76
+++ insets/insetert.h 17 Jun 2003 11:04:21 -0000
@@ -114,8 +114,6 @@ public:
}
///
int getMaxWidth(BufferView *, UpdatableInset const *) const;
- ///
- void update(BufferView *, bool =false);
private:
///
Index: insets/insetminipage.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetminipage.C,v
retrieving revision 1.78
diff -u -p -r1.78 insetminipage.C
--- insets/insetminipage.C 16 Jun 2003 11:49:31 -0000 1.78
+++ insets/insetminipage.C 17 Jun 2003 11:04:21 -0000
@@ -121,7 +121,7 @@ dispatch_result InsetMinipage::localDisp
LyXText * t = inset.getLyXText(cmd.view());
t->need_break_row = t->rows().begin();
t->fullRebreak();
- inset.update(cmd.view(), true);
+ //inset.update(cmd.view(), true);
t->setCursorIntern(t->cursor.par(), t->cursor.pos());
cmd.view()->updateInset(this);
return DISPATCHED;
Index: insets/insettabular.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettabular.C,v
retrieving revision 1.290
diff -u -p -r1.290 insettabular.C
--- insets/insettabular.C 16 Jun 2003 11:49:32 -0000 1.290
+++ insets/insettabular.C 17 Jun 2003 11:04:21 -0000
@@ -245,9 +245,49 @@ void InsetTabular::read(Buffer const * b
}
-void InsetTabular::metrics(MetricsInfo &,
- Dimension & dim) const
+void InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const
{
+ int cell = -1;
+ int maxAsc = 0;
+ int maxDesc = 0;
+ InsetText * inset;
+
+ // FIXME: since InsetText ignores this anyway, it doesn't
+ // matter what we pass it. Ugly
+ LyXFont font;
+
+ // if we have a locking_inset we should have to check only this cell for
+ // change so I'll try this to have a boost, but who knows ;)
+ for (int i = 0; i < tabular.rows(); ++i) {
+ maxAsc = 0;
+ maxDesc = 0;
+ for (int j = 0; j < tabular.columns(); ++j) {
+ if (tabular.isPartOfMultiColumn(i,j))
+ continue;
+ ++cell;
+ inset = tabular.getCellInset(cell);
+ Dimension dim;
+ MetricsInfo m = mi;
+ LyXLength len = tabular.getPWidth(cell);
+ if (!len.zero()) {
+ m.base.restrictwidth = true;
+ m.base.textwidth = len.inPixels(mi.base.textwidth);
+ //lyxerr << "InsetTabular: cell of bounded width: "
+ // << len.asString() << "\n";
+ }
+ inset->metrics(m, dim);
+ //if (!reinit && !tabular.getPWidth(cell).zero())
+ // inset->update(bv, false);
+ maxAsc = max(maxAsc, inset->ascent(mi.base.bv, font));
+ maxDesc = max(maxDesc, inset->descent(mi.base.bv, font));
+ tabular.setWidthOfCell(cell, inset->width(mi.base.bv, font));
+ }
+ tabular.setAscentOfRow(i, maxAsc + ADD_TO_HEIGHT);
+ tabular.setDescentOfRow(i, maxDesc + ADD_TO_HEIGHT);
+ }
+ tabular.reinit();
+
+ resetPos(mi.base.bv);
dim.asc = tabular.getAscentOfRow(0);
dim.des = tabular.getHeightOfTabular() - tabular.getAscentOfRow(0) + 1;
dim.wid = tabular.getWidthOfTabular() + 2 * ADD_TO_TABULAR_WIDTH;
@@ -391,8 +431,13 @@ void InsetTabular::drawCellSelection(Pai
}
+/*
void InsetTabular::update(BufferView * bv, bool reinit)
{
+ static int count = 0;
+ ++count;
+
+ lyxerr << "InsetTabular::update(): " << count << "\n";
if (in_update) {
if (reinit) {
resetPos(bv);
@@ -436,6 +481,8 @@ void InsetTabular::update(BufferView * b
}
in_update = false;
}
+*/
+
string const InsetTabular::editMessage() const
@@ -1258,13 +1305,13 @@ void InsetTabular::validate(LaTeXFeature
}
-bool InsetTabular::calculate_dimensions_of_cells(BufferView * bv, bool reinit) const
+bool InsetTabular::calculate_dimensions_of_cells
+ (BufferView * bv, bool reinit) const
{
int cell = -1;
int maxAsc = 0;
int maxDesc = 0;
InsetText * inset;
- bool changed = false;
// FIXME: since InsetText ignores this anyway, it doesn't
// matter what we pass it. Ugly
@@ -1272,19 +1319,6 @@ bool InsetTabular::calculate_dimensions_
// if we have a locking_inset we should have to check only this cell for
// change so I'll try this to have a boost, but who knows ;)
- if ((need_update != INIT) &&
- (the_locking_inset == tabular.getCellInset(actcell))) {
- for(int i = 0; i < tabular.columns(); ++i) {
- maxAsc = max(tabular.getCellInset(actrow, i)->ascent(bv, font),
- maxAsc);
- maxDesc = max(tabular.getCellInset(actrow, i)->descent(bv,
font),
- maxDesc);
- }
- changed = tabular.setWidthOfCell(actcell, the_locking_inset->width(bv,
font));
- changed = tabular.setAscentOfRow(actrow, maxAsc + ADD_TO_HEIGHT) ||
changed;
- changed = tabular.setDescentOfRow(actrow, maxDesc + ADD_TO_HEIGHT) ||
changed;
- return changed;
- }
for (int i = 0; i < tabular.rows(); ++i) {
maxAsc = 0;
maxDesc = 0;
@@ -1293,18 +1327,17 @@ bool InsetTabular::calculate_dimensions_
continue;
++cell;
inset = tabular.getCellInset(cell);
- if (!reinit && !tabular.getPWidth(cell).zero())
- inset->update(bv, false);
+ //if (!reinit && !tabular.getPWidth(cell).zero())
+ // inset->update(bv, false);
maxAsc = max(maxAsc, inset->ascent(bv, font));
maxDesc = max(maxDesc, inset->descent(bv, font));
- changed = tabular.setWidthOfCell(cell, inset->width(bv, font))
|| changed;
+ tabular.setWidthOfCell(cell, inset->width(bv, font));
}
- changed = tabular.setAscentOfRow(i, maxAsc + ADD_TO_HEIGHT) || changed;
- changed = tabular.setDescentOfRow(i, maxDesc + ADD_TO_HEIGHT) ||
changed;
+ tabular.setAscentOfRow(i, maxAsc + ADD_TO_HEIGHT);
+ tabular.setDescentOfRow(i, maxDesc + ADD_TO_HEIGHT);
}
- if (changed)
- tabular.reinit();
- return changed;
+ tabular.reinit();
+ return true;
}
Index: insets/insettabular.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettabular.h,v
retrieving revision 1.126
diff -u -p -r1.126 insettabular.h
--- insets/insettabular.h 16 Jun 2003 11:49:33 -0000 1.126
+++ insets/insettabular.h 17 Jun 2003 11:04:21 -0000
@@ -87,8 +87,6 @@ public:
///
void draw(PainterInfo & pi, int x, int y) const;
///
- void update(BufferView *, bool = false);
- ///
string const editMessage() const;
//
void insetUnlock(BufferView *);
Index: insets/insettext.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettext.C,v
retrieving revision 1.407
diff -u -p -r1.407 insettext.C
--- insets/insettext.C 16 Jun 2003 11:49:33 -0000 1.407
+++ insets/insettext.C 17 Jun 2003 11:04:21 -0000
@@ -289,13 +289,22 @@ void InsetText::read(Buffer const * buf,
void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const
{
+ //lyxerr << "InsetText: metrics: " << mi.base.textwidth << "\n";
BufferView * bv = mi.base.bv;
LyXText * text = getLyXText(bv);
+ if (mi.base.restrictwidth) {
+ //lyxerr << "InsetText: bounded width: " << mi.base.textwidth << "\n";
+ old_max_width = mi.base.textwidth;
+ last_drawn_width = mi.base.textwidth;
+ lt ? lt->init(bv, true) : getLyXText(bv)->init(bv, true);
+ }
dim.asc = text->rows().begin()->ascent_of_text() + TEXT_TO_INSET_OFFSET;
dim.des = text->height - dim.asc + TEXT_TO_INSET_OFFSET;
dim.wid = max(textWidth(bv), int(text->width)) + 2 * TEXT_TO_INSET_OFFSET;
dim.wid = max(dim.wid, 10);
dim_ = dim;
+ //textwidth_ = mi.base.textwidth;
+ //restrictwidth_ = mi.base.restrictwidth;
}
@@ -303,12 +312,14 @@ int InsetText::textWidth(BufferView * bv
{
int w = autoBreakRows ? getMaxWidth(bv, this) : -1;
+/*
if (fordraw)
return max(w - 2 * TEXT_TO_INSET_OFFSET,
(int)getLyXText(bv)->width);
if (w < 0)
return -1;
+*/
return w - 2 * TEXT_TO_INSET_OFFSET;
}
@@ -316,8 +327,12 @@ int InsetText::textWidth(BufferView * bv
void InsetText::draw(PainterInfo & pi, int x, int baseline) const
{
- if (nodraw())
- return;
+ //if (nodraw())
+ // return;
+
+ //MetricsInfo mi;
+ //mi.base = pi.base;
+ //metrics(mi, dim_);
// update our idea of where we are. Clearly, we should
// not have to know this information.
@@ -426,6 +441,7 @@ void InsetText::drawFrame(Painter & pain
}
+/*
void InsetText::update(BufferView * bv, bool reinit)
{
if (in_update) {
@@ -486,6 +502,7 @@ void InsetText::update(BufferView * bv,
old_max_width = nw;
}
}
+*/
void InsetText::setUpdateStatus(BufferView * bv, int what) const
@@ -1905,7 +1922,7 @@ bool InsetText::checkAndActivateInset(Bu
int InsetText::getMaxWidth(BufferView * bv, UpdatableInset const * inset) const
{
-#if 0
+#if 1
int w = UpdatableInset::getMaxWidth(bv, inset);
if (w < 0) {
return -1;
Index: insets/insettext.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettext.h,v
retrieving revision 1.168
diff -u -p -r1.168 insettext.h
--- insets/insettext.h 16 Jun 2003 11:49:34 -0000 1.168
+++ insets/insettext.h 17 Jun 2003 11:04:21 -0000
@@ -90,8 +90,6 @@ public:
///
void draw(PainterInfo & pi, int x, int y) const;
///
- void update(BufferView *, bool = false);
- ///
void setUpdateStatus(BufferView *, int what) const;
///
string const editMessage() const;