this patch 

- renames MetricsBase::textwidth -> maxwidth (easier for the non-LaTeX
experts out here)
- adds a MetricsInfo::remaining_width member
- put children metrics calls into the rebreak loop again, passing this
remaining_width.

It doesn't use it yet, so behaviour should be unchanged.

Ok to go in?

Alfredo
? ChangeLog-old
? PosIterator.C-save
? PosIterator.h-save
? bfri.C
? safe
? textcursor.C-save
? textcursor.h-save
? insets/insetcollapsable-save.C
? insets/insettext-save.C
Index: metricsinfo.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/metricsinfo.C,v
retrieving revision 1.12
diff -u -p -u -r1.12 metricsinfo.C
--- metricsinfo.C	15 Dec 2003 09:17:04 -0000	1.12
+++ metricsinfo.C	21 Mar 2004 15:14:20 -0000
@@ -21,24 +21,25 @@ using std::string;
 
 MetricsBase::MetricsBase()
 	: bv(0), font(), style(LM_ST_TEXT), fontname("mathnormal"),
-	  textwidth(0)
+	  maxwidth(0)
 {}
 
 
 
 MetricsBase::MetricsBase(BufferView * b, LyXFont const & f, int w)
 	: bv(b), font(f), style(LM_ST_TEXT), fontname("mathnormal"),
-	  textwidth(w)
+	  maxwidth(w)
 {}
 
 
 
-MetricsInfo::MetricsInfo()
+MetricsInfo::MetricsInfo() : remaining_width(0)
 {}
 
 
-MetricsInfo::MetricsInfo(BufferView * bv, LyXFont const & font, int textwidth)
-	: base(bv, font, textwidth)
+MetricsInfo::MetricsInfo(BufferView * bv, LyXFont const & font,
+			 int maxwidth, int remaining_width)
+	: base(bv, font, maxwidth), remaining_width(remaining_width)
 {}
 
 
@@ -161,7 +162,7 @@ WidthChanger::WidthChanger(MetricsBase &
 	:	Changer<MetricsBase>(mb)
 {
 	save_ = mb;
-	mb.textwidth = w;
+	mb.maxwidth = w;
 }
 
 
Index: metricsinfo.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/metricsinfo.h,v
retrieving revision 1.10
diff -u -p -u -r1.10 metricsinfo.h
--- metricsinfo.h	6 Oct 2003 15:42:29 -0000	1.10
+++ metricsinfo.h	21 Mar 2004 15:14:20 -0000
@@ -40,7 +40,7 @@ struct MetricsBase {
 	///
 	MetricsBase();
 	///
-	MetricsBase(BufferView * bv, LyXFont const & font, int textwidth);
+	MetricsBase(BufferView * bv, LyXFont const & font, int maxwidth);
 
 	/// the current view
 	BufferView * bv;
@@ -51,7 +51,7 @@ struct MetricsBase {
 	/// name of current font - mathed specific
 	std::string fontname;
 	/// This is the width available in pixels
-	int textwidth;
+	int maxwidth;
 };
 
 
@@ -63,10 +63,13 @@ struct MetricsInfo {
 	///
 	MetricsInfo();
 	///
-	MetricsInfo(BufferView * bv, LyXFont const & font, int textwidth);
+	MetricsInfo(BufferView * bv, LyXFont const & font, int maxwidth,
+		    int remaining_width);
 
 	///
 	MetricsBase base;
+	///
+	int remaining_width;
 };
 
 
Index: text.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text.C,v
retrieving revision 1.553
diff -u -p -u -r1.553 text.C
--- text.C	18 Mar 2004 13:28:46 -0000	1.553
+++ text.C	21 Mar 2004 15:14:22 -0000
@@ -493,8 +493,15 @@ void LyXText::rowBreakPoint(ParagraphLis
 	pos_type point = end;
 	pos_type i = pos;
 	for ( ; i < end; ++i, ++fi) {
-		char const c = pit->getChar(i);
 
+		if (pit->isInset(i)) {
+			Dimension dim;
+			int const w = width - left;
+			MetricsInfo mi(bv(), getFont(pit, i), w, width - x);
+			pit->getInset(i)->metrics(mi, dim);
+		}
+		    
+		char const c = pit->getChar(i);
 		{
 			int thiswidth = singleWidth(pit, i, c, *fi);
 
@@ -1549,14 +1556,14 @@ void LyXText::redoParagraphInternal(Para
 	pit->width = 0;
 
 	// redo insets
-	InsetList::iterator ii = pit->insetlist.begin();
-	InsetList::iterator iend = pit->insetlist.end();
-	for (; ii != iend; ++ii) {
-		Dimension dim;
-		int const w = maxwidth_ - leftMargin(pit) - rightMargin(*pit);
-		MetricsInfo mi(bv(), getFont(pit, ii->pos), w);
-		ii->inset->metrics(mi, dim);
-	}
+	//InsetList::iterator ii = pit->insetlist.begin();
+	//InsetList::iterator iend = pit->insetlist.end();
+	//for (; ii != iend; ++ii) {
+	//	Dimension dim;
+	//	int const w = maxwidth_ - leftMargin(pit) - rightMargin(*pit);
+	//	MetricsInfo mi(bv(), getFont(pit, ii->pos), w);
+	//	ii->inset->metrics(mi, dim);
+	//}
 
 	// rebreak the paragraph
 	pit->setBeginOfBody();
@@ -1603,10 +1610,10 @@ void LyXText::fullRebreak()
 
 void LyXText::metrics(MetricsInfo & mi, Dimension & dim)
 {
-	//BOOST_ASSERT(mi.base.textwidth);
-	if (mi.base.textwidth)
-		maxwidth_ = mi.base.textwidth;
-	//lyxerr << "LyXText::metrics: width: " << mi.base.textwidth
+	//BOOST_ASSERT(mi.base.maxwidth);
+	if (mi.base.maxwidth)
+		maxwidth_ = mi.base.maxwidth;
+	//lyxerr << "LyXText::metrics: width: " << mi.base.maxwidth
 	//<< " maxWidth: " << maxwidth << "\nfont: " << mi.base.font
 	//<< endl;
 
Index: insets/insetbox.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetbox.C,v
retrieving revision 1.19
diff -u -p -u -r1.19 insetbox.C
--- insets/insetbox.C	18 Mar 2004 12:53:38 -0000	1.19
+++ insets/insetbox.C	21 Mar 2004 15:14:24 -0000
@@ -154,7 +154,7 @@ void InsetBox::setButtonLabel()
 void InsetBox::metrics(MetricsInfo & m, Dimension & dim) const
 {
 	MetricsInfo mi = m;
-	mi.base.textwidth = params_.width.inPixels(m.base.textwidth); 
+	mi.base.maxwidth = params_.width.inPixels(m.base.maxwidth); 
 	InsetCollapsable::metrics(mi, dim);
 	//if (params_.inner_box && isOpen())
 	//	dim.wid = mi.base.textwidth;
Index: insets/insetcollapsable.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcollapsable.C,v
retrieving revision 1.247
diff -u -p -u -r1.247 insetcollapsable.C
--- insets/insetcollapsable.C	18 Mar 2004 13:57:16 -0000	1.247
+++ insets/insetcollapsable.C	21 Mar 2004 15:14:24 -0000
@@ -136,7 +136,7 @@ void InsetCollapsable::metrics(MetricsIn
 		if (status_ == Open) {
 			Dimension insetdim;
 			inset.metrics(mi, insetdim);
-			openinlined_ = (insetdim.wid + dim.wid <= mi.base.textwidth);
+			openinlined_ = (insetdim.wid + dim.wid <= mi.base.maxwidth);
 			if (openinlined_) {
 				dim.wid += insetdim.wid;
 				dim.des = max(dim.des, insetdim.des);
Index: insets/insetinclude.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetinclude.C,v
retrieving revision 1.185
diff -u -p -u -r1.185 insetinclude.C
--- insets/insetinclude.C	18 Mar 2004 12:53:39 -0000	1.185
+++ insets/insetinclude.C	21 Mar 2004 15:14:24 -0000
@@ -535,11 +535,11 @@ void InsetInclude::metrics(MetricsInfo &
 		button_.metrics(mi, dim);
 	}
 	int center_indent = type(params_) == INPUT ?
-		0 : (mi.base.textwidth - dim.wid) / 2;
+		0 : (mi.base.maxwidth - dim.wid) / 2;
 	Box b(center_indent, center_indent + dim.wid, -dim.asc, dim.des);
 	button_.setBox(b);
 
-	dim.wid = mi.base.textwidth;
+	dim.wid = mi.base.maxwidth;
 	dim_ = dim;
 }
 
Index: insets/insetline.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetline.C,v
retrieving revision 1.3
diff -u -p -u -r1.3 insetline.C
--- insets/insetline.C	5 Nov 2003 12:06:16 -0000	1.3
+++ insets/insetline.C	21 Mar 2004 15:14:24 -0000
@@ -40,7 +40,7 @@ void InsetLine::metrics(MetricsInfo & mi
 {
 	dim.asc = 3;
 	dim.des = 3;
-	dim.wid = mi.base.textwidth;
+	dim.wid = mi.base.maxwidth;
 	dim_ = dim;
 }
 
Index: insets/insetpagebreak.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetpagebreak.C,v
retrieving revision 1.4
diff -u -p -u -r1.4 insetpagebreak.C
--- insets/insetpagebreak.C	5 Nov 2003 12:06:16 -0000	1.4
+++ insets/insetpagebreak.C	21 Mar 2004 15:14:24 -0000
@@ -41,7 +41,7 @@ void InsetPagebreak::metrics(MetricsInfo
 {
 	dim.asc = defaultRowHeight();
 	dim.des = defaultRowHeight();
-	dim.wid = mi.base.textwidth;
+	dim.wid = mi.base.maxwidth;
 	dim_ = dim;
 }
 
Index: insets/insettabular.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettabular.C,v
retrieving revision 1.412
diff -u -p -u -r1.412 insettabular.C
--- insets/insettabular.C	18 Mar 2004 13:57:16 -0000	1.412
+++ insets/insettabular.C	21 Mar 2004 15:14:26 -0000
@@ -225,7 +225,7 @@ void InsetTabular::read(Buffer const & b
 void InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const
 {
 	//lyxerr << "InsetTabular::metrics: " << mi.base.bv << " width: " <<
-	//	mi.base.textwidth << "\n";
+	//	mi.base.maxwidth << "\n";
 	if (!mi.base.bv) {
 		lyxerr << "InsetTabular::metrics: need bv" << endl;
 		BOOST_ASSERT(false);
@@ -240,8 +240,8 @@ void InsetTabular::metrics(MetricsInfo &
 			++cell;
 			Dimension dim;
 			MetricsInfo m = mi;
-			m.base.textwidth =
-				tabular.column_info[j].p_width.inPixels(mi.base.textwidth);
+			m.base.maxwidth =
+				tabular.column_info[j].p_width.inPixels(mi.base.maxwidth);
 			tabular.getCellInset(cell).metrics(m, dim);
 			maxAsc  = max(maxAsc, dim.asc);
 			maxDesc = max(maxDesc, dim.des);
Index: insets/insettext.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettext.C,v
retrieving revision 1.585
diff -u -p -u -r1.585 insettext.C
--- insets/insettext.C	18 Mar 2004 13:57:18 -0000	1.585
+++ insets/insettext.C	21 Mar 2004 15:14:26 -0000
@@ -173,14 +173,14 @@ void InsetText::read(Buffer const & buf,
 
 void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const
 {
-	//lyxerr << "InsetText::metrics: width: " << mi.base.textwidth << endl;
+	//lyxerr << "InsetText::metrics: width: " << mi.base.maxwidth << endl;
 	setViewCache(mi.base.bv);
-	mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET;
+	mi.base.maxwidth -= 2 * TEXT_TO_INSET_OFFSET;
 	text_.metrics(mi, dim);
 	dim.asc += TEXT_TO_INSET_OFFSET;
 	dim.des += TEXT_TO_INSET_OFFSET;
 	dim.wid += 2 * TEXT_TO_INSET_OFFSET;
-	mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET;
+	mi.base.maxwidth += 2 * TEXT_TO_INSET_OFFSET;
 	dim_ = dim;
 	font_ = mi.base.font;
 	text_.font_ = mi.base.font;
Index: insets/insettheorem.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettheorem.C,v
retrieving revision 1.25
diff -u -p -u -r1.25 insettheorem.C
--- insets/insettheorem.C	5 Nov 2003 12:06:18 -0000	1.25
+++ insets/insettheorem.C	21 Mar 2004 15:14:26 -0000
@@ -70,8 +70,8 @@ auto_ptr<InsetBase> InsetTheorem::clone(
 void InsetTheorem::metrics(MetricsInfo & mi, Dimension & dim) const
 {
 	InsetCollapsable::metrics(mi, dim);
-	center_indent_ = (mi.base.textwidth - dim.wid) / 2;
-	dim.wid = mi.base.textwidth;
+	center_indent_ = (mi.base.maxwidth - dim.wid) / 2;
+	dim.wid = mi.base.maxwidth;
 	dim_ = dim;
 }
 
Index: mathed/math_textinset.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/math_textinset.C,v
retrieving revision 1.22
diff -u -p -u -r1.22 math_textinset.C
--- mathed/math_textinset.C	2 Feb 2004 17:32:56 -0000	1.22
+++ mathed/math_textinset.C	21 Mar 2004 15:14:27 -0000
@@ -122,7 +122,7 @@ void MathTextInset::metrics(MetricsInfo 
 			// This is a regular char. Go on if we either don't care for
 			// the width limit or have not reached that limit.
 			curr += cell(0)[i]->width();
-			if (curr + safe <= mi.base.textwidth)
+			if (curr + safe <= mi.base.maxwidth)
 				continue;
 		}
 

Reply via email to