On Tue, Oct 28, 2003 at 12:26:25PM +0100, Lars Gullik Bj�nnes wrote:
> Alfredo Braunstein <[EMAIL PROTECTED]> writes:
>
> | Andre Poenitz wrote:
> >
> >
> >> Lots of small stuff.
> >
> | very.
> >
> >> Should be uncontroversial.
> >
> | completely.
>
> concur... but the cleanup is infinitesimal
Urgs...
sorry.
Andre'
Index: lyxtext.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxtext.h,v
retrieving revision 1.248
diff -u -p -r1.248 lyxtext.h
--- lyxtext.h 27 Oct 2003 12:41:20 -0000 1.248
+++ lyxtext.h 28 Oct 2003 10:08:07 -0000
@@ -66,17 +66,13 @@ public:
LyXFont real_current_font;
/// our buffer's default layout font
LyXFont defaultfont_;
-private:
- /// offset of drawn area to document start.
- int anchor_y_;
-public:
- /// update all cached row positions
- void updateRowPositions();
///
InsetText * inset_owner;
///
UpdatableInset * the_locking_inset;
+ /// update all cached row positions
+ void updateRowPositions();
///
int getRealCursorX() const;
///
@@ -382,7 +378,7 @@ public:
*/
int leftMargin(ParagraphList::iterator pit, Row const & row) const;
///
- int rightMargin(Paragraph const & par, Buffer const &, Row const & row) const;
+ int rightMargin(Paragraph const & par, Buffer const &) const;
/** this calculates the specified parameters. needed when setting
* the cursor and when creating a visible row */
@@ -452,6 +448,8 @@ public:
///
std::string selectionAsString(Buffer const & buffer, bool label) const;
+ ///
+ double spacing(Paragraph const &) const;
private:
/** Cursor related data.
Later this variable has to be removed. There should be now internal
Index: metricsinfo.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/metricsinfo.C,v
retrieving revision 1.10
diff -u -p -r1.10 metricsinfo.C
--- metricsinfo.C 6 Oct 2003 15:42:29 -0000 1.10
+++ metricsinfo.C 28 Oct 2003 10:08:07 -0000
@@ -161,7 +161,7 @@ WidthChanger::WidthChanger(MetricsBase &
: Changer<MetricsBase>(mb)
{
save_ = mb;
- mb.textwidth = w;
+ mb.textwidth = w;
}
Index: paragraph_funcs.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph_funcs.C,v
retrieving revision 1.80
diff -u -p -r1.80 paragraph_funcs.C
--- paragraph_funcs.C 27 Oct 2003 12:41:20 -0000 1.80
+++ paragraph_funcs.C 28 Oct 2003 10:08:07 -0000
@@ -494,7 +494,9 @@ TeXOnePar(Buffer const & buf,
}
if (!pit->params().spacing().isDefault()
- && (pit == const_cast<ParagraphList&>(paragraphs).begin() ||
!boost::prior(pit)->hasSameLayout(*pit))) {
+ && (pit == const_cast<ParagraphList&>(paragraphs).begin()
+ || !boost::prior(pit)->hasSameLayout(*pit)))
+ {
os << pit->params().spacing().writeEnvirBegin() << '\n';
texrow.newline();
}
@@ -660,7 +662,9 @@ TeXOnePar(Buffer const & buf,
}
if (!pit->params().spacing().isDefault()
- && (boost::next(pit) ==
const_cast<ParagraphList&>(paragraphs).end()||
!boost::next(pit)->hasSameLayout(*pit))) {
+ && (boost::next(pit) ==
const_cast<ParagraphList&>(paragraphs).end()
+ || !boost::next(pit)->hasSameLayout(*pit)))
+ {
os << pit->params().spacing().writeEnvirEnd() << '\n';
texrow.newline();
}
Index: rowpainter.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/rowpainter.C,v
retrieving revision 1.86
diff -u -p -r1.86 rowpainter.C
--- rowpainter.C 27 Oct 2003 15:39:59 -0000 1.86
+++ rowpainter.C 28 Oct 2003 10:08:07 -0000
@@ -761,7 +761,7 @@ void RowPainter::paintFirst()
double x = x_;
if (layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) {
x = ((is_rtl ? leftMargin() : x_)
- + ww - text_.rightMargin(*pit_,
*bv_.buffer(), row_)) / 2;
+ + ww - text_.rightMargin(*pit_,
*bv_.buffer())) / 2;
x -= font_metrics::width(str, font) / 2;
} else if (is_rtl) {
x = ww - leftMargin() -
@@ -797,11 +797,10 @@ void RowPainter::paintLast()
// draw an endlabel
switch (endlabel) {
case END_LABEL_BOX:
- case END_LABEL_FILLED_BOX:
- {
+ case END_LABEL_FILLED_BOX: {
LyXFont const font = getLabelFont();
int const size = int(0.75 * font_metrics::maxAscent(font));
- int const y = (yo_ + row_.baseline()) - size;
+ int const y = yo_ + row_.baseline() - size;
int x = is_rtl ? LEFT_MARGIN : ww - PAPER_MARGIN - size;
if (row_.fill() <= size)
@@ -813,16 +812,17 @@ void RowPainter::paintLast()
pain_.fillRectangle(x, y, size, size, LColor::eolmarker);
break;
}
- case END_LABEL_STATIC:
- {
+
+ case END_LABEL_STATIC: {
LyXFont font = getLabelFont();
string const & str = pit_->layout()->endlabelstring();
double const x = is_rtl ?
x_ - font_metrics::width(str, font)
- : ww - text_.rightMargin(*pit_, *bv_.buffer(), row_) -
row_.fill();
+ : ww - text_.rightMargin(*pit_, *bv_.buffer()) - row_.fill();
pain_.text(int(x), yo_ + row_.baseline(), str, font);
break;
}
+
case END_LABEL_NO_LABEL:
break;
}
@@ -1043,9 +1043,7 @@ int getLengthMarkerHeight(BufferView con
LyXFont font;
font.decSize();
- int const min_size = max(3 * arrow_size,
- font_metrics::maxAscent(font)
- + font_metrics::maxDescent(font));
+ int const min_size = max(3 * arrow_size, font_metrics::maxHeight(font));
if (vsp.length().len().value() < 0.0)
return min_size;
Index: text.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text.C,v
retrieving revision 1.487
diff -u -p -r1.487 text.C
--- text.C 27 Oct 2003 20:23:26 -0000 1.487
+++ text.C 28 Oct 2003 10:08:07 -0000
@@ -97,6 +97,14 @@ BufferView * LyXText::bv()
}
+double LyXText::spacing(Paragraph const & par) const
+{
+ if (par.params().spacing().isDefault())
+ return bv()->buffer()->params().spacing().getValue();
+ return par.params().spacing().getValue();
+}
+
+
BufferView * LyXText::bv() const
{
BOOST_ASSERT(bv_owner != 0);
@@ -175,7 +183,6 @@ int LyXText::singleWidth(ParagraphList::
return 0;
}
-
// The most common case is handled first (Asger)
if (IsPrintable(c)) {
if (!font.language()->RightToLeft()) {
@@ -193,15 +200,8 @@ int LyXText::singleWidth(ParagraphList::
return font_metrics::width(c, font);
}
- if (c == Paragraph::META_INSET) {
- InsetOld * tmpinset = pit->getInset(pos);
- BOOST_ASSERT(tmpinset);
- if (tmpinset->lyxCode() == InsetOld::HFILL_CODE) {
- // Because of the representation as vertical lines
- return 3;
- }
- return tmpinset->width();
- }
+ if (c == Paragraph::META_INSET)
+ return pit->getInset(pos)->width();
if (IsSeparatorChar(c))
c = ' ';
@@ -224,50 +224,43 @@ int LyXText::leftMargin(ParagraphList::i
// this is the way, LyX handles the LaTeX-Environments.
// I have had this idea very late, so it seems to be a
// later added hack and this is true
- if (!pit->getDepth()) {
+ if (pit->getDepth() == 0) {
if (pit->layout() == tclass.defaultLayout()) {
// find the previous same level paragraph
if (pit != ownerParagraphs().begin()) {
ParagraphList::iterator newpit =
- depthHook(pit, ownerParagraphs(),
- pit->getDepth());
- if (newpit == pit &&
- newpit->layout()->nextnoindent)
+ depthHook(pit, ownerParagraphs(),
pit->getDepth());
+ if (newpit == pit && newpit->layout()->nextnoindent)
parindent.erase();
}
}
} else {
// find the next level paragraph
-
- ParagraphList::iterator newpar = outerHook(pit,
- ownerParagraphs());
+ ParagraphList::iterator newpar =
+ outerHook(pit, ownerParagraphs());
// make a corresponding row. Needed to call leftMargin()
-
// check wether it is a sufficent paragraph
- if (newpar != ownerParagraphs().end() &&
- newpar->layout()->isEnvironment()) {
+ if (newpar != ownerParagraphs().end()
+ && newpar->layout()->isEnvironment()) {
x = leftMargin(newpar, Row(newpar->size()));
}
- if (newpar != ownerParagraphs().end() &&
- pit->layout() == tclass.defaultLayout()) {
+ if (newpar != ownerParagraphs().end()
+ && pit->layout() == tclass.defaultLayout()) {
if (newpar->params().noindent())
parindent.erase();
- else {
+ else
parindent = newpar->layout()->parindent;
- }
-
}
}
LyXFont const labelfont = getLabelFont(pit);
switch (layout->margintype) {
case MARGIN_DYNAMIC:
- if (!layout->leftmargin.empty()) {
+ if (!layout->leftmargin.empty())
x += font_metrics::signedWidth(layout->leftmargin,
tclass.defaultfont());
- }
if (!pit->getLabelstring().empty()) {
x += font_metrics::signedWidth(layout->labelindent,
labelfont);
@@ -276,6 +269,7 @@ int LyXText::leftMargin(ParagraphList::i
x += font_metrics::width(layout->labelsep, labelfont);
}
break;
+
case MARGIN_MANUAL:
x += font_metrics::signedWidth(layout->labelindent, labelfont);
// The width of an empty par, even with manual label, should be 0
@@ -287,10 +281,12 @@ int LyXText::leftMargin(ParagraphList::i
}
}
break;
+
case MARGIN_STATIC:
x += font_metrics::signedWidth(layout->leftmargin,
tclass.defaultfont()) * 4
/ (pit->getDepth() + 4);
break;
+
case MARGIN_FIRST_DYNAMIC:
if (layout->labeltype == LABEL_MANUAL) {
if (row.pos() >= pit->beginningOfBody()) {
@@ -320,8 +316,7 @@ int LyXText::leftMargin(ParagraphList::i
}
break;
- case MARGIN_RIGHT_ADDRESS_BOX:
- {
+ case MARGIN_RIGHT_ADDRESS_BOX: {
// ok, a terrible hack. The left margin depends on the widest
// row in this paragraph.
RowList::iterator rit = pit->rows.begin();
@@ -381,8 +376,7 @@ int LyXText::leftMargin(ParagraphList::i
}
-int LyXText::rightMargin(Paragraph const & par,
- Buffer const & buf, Row const &) const
+int LyXText::rightMargin(Paragraph const & par, Buffer const & buf) const
{
LyXTextClass const & tclass = buf.params().getLyXTextClass();
LyXLayout_ptr const & layout = par.layout();
@@ -398,16 +392,14 @@ int LyXText::rightMargin(Paragraph const
int LyXText::labelEnd(ParagraphList::iterator pit, Row const & row) const
{
- if (pit->layout()->margintype == MARGIN_MANUAL) {
- Row tmprow = row;
- tmprow.pos(pit->size());
- // return the beginning of the body
- return leftMargin(pit, tmprow);
- }
+ // labelEnd is only needed if the layout fills a flushleft label.
+ if (pit->layout()->margintype != MARGIN_MANUAL)
+ return 0;
- // LabelEnd is only needed if the layout
- // fills a flushleft label.
- return 0;
+ Row tmprow = row;
+ tmprow.pos(pit->size());
+ // return the beginning of the body
+ return leftMargin(pit, tmprow);
}
@@ -438,8 +430,7 @@ void LyXText::rowBreakPoint(ParagraphLis
}
// maximum pixel width of a row.
- int width = workWidth()
- - rightMargin(*pit, *bv()->buffer(), row);
+ int width = workWidth() - rightMargin(*pit, *bv()->buffer());
// - leftMargin(pit, row);
// inset->textWidth() returns -1 via workWidth(),
@@ -598,14 +574,12 @@ void LyXText::fill(ParagraphList::iterat
// We re-use the font resolution for the entire span when possible
LyXFont font = getFont(pit, i);
lyx::pos_type endPosOfFontSpan = pit->getEndPosOfFontSpan(i);
- while (i < end) {
+ for ( ; i < end; ++i) {
if (body_pos > 0 && i == body_pos) {
w += font_metrics::width(layout->labelsep,
getLabelFont(pit));
if (pit->isLineSeparator(i - 1))
w -= singleWidth(pit, i - 1);
- int left_margin = labelEnd(pit, row);
- if (w < left_margin)
- w = left_margin;
+ w = max(w, labelEnd(pit, row));
}
char const c = pit->getChar(i);
if (IsPrintable(c) && i > endPosOfFontSpan) {
@@ -614,21 +588,19 @@ void LyXText::fill(ParagraphList::iterat
endPosOfFontSpan = pit->getEndPosOfFontSpan(i);
}
w += singleWidth(pit, i, c, font);
- ++i;
}
}
+
if (body_pos > 0 && body_pos >= end) {
w += font_metrics::width(layout->labelsep, getLabelFont(pit));
if (end > 0 && pit->isLineSeparator(end - 1))
w -= singleWidth(pit, end - 1);
- int const left_margin = labelEnd(pit, row);
- if (w < left_margin)
- w = left_margin;
+ w = max(w, labelEnd(pit, row));
}
- int const fill = paper_width - w - rightMargin(*pit, *bv()->buffer(), row);
+ int const fill = workwidth - w - rightMargin(*pit, *bv()->buffer());
row.fill(fill);
- row.width(paper_width - fill);
+ row.width(workwidth - fill);
}
@@ -650,15 +622,11 @@ int LyXText::labelFill(ParagraphList::it
for (pos_type i = row.pos(); i <= last; ++i)
w += singleWidth(pit, i);
- int fill = 0;
- string const & labwidstr = pit->params().labelWidthString();
- if (!labwidstr.empty()) {
- LyXFont const labfont = getLabelFont(pit);
- int const labwidth = font_metrics::width(labwidstr, labfont);
- fill = max(labwidth - w, 0);
- }
+ string const & label = pit->params().labelWidthString();
+ if (label.empty())
+ return 0;
- return fill;
+ return max(0, font_metrics::width(label, getLabelFont(pit)) - w);
}
@@ -666,8 +634,7 @@ LColor_color LyXText::backgroundColor()
{
if (inset_owner)
return inset_owner->backgroundColor();
- else
- return LColor::background;
+ return LColor::background;
}
@@ -676,7 +643,7 @@ void LyXText::setHeightOfRow(ParagraphLi
// get the maximum ascent and the maximum descent
double layoutasc = 0;
double layoutdesc = 0;
- double tmptop = 0;
+ double const dh = defaultRowHeight();
// ok, let us initialize the maxasc and maxdesc value.
// Only the fontsize count. The other properties
@@ -694,25 +661,18 @@ void LyXText::setHeightOfRow(ParagraphLi
LyXFont labelfont = getLabelFont(pit);
- double spacing_val = 1.0;
- if (!pit->params().spacing().isDefault())
- spacing_val = pit->params().spacing().getValue();
- else
- spacing_val = bv()->buffer()->params().spacing().getValue();
- //lyxerr << "spacing_val = " << spacing_val << endl;
-
// these are minimum values
- int maxasc = int(font_metrics::maxAscent(font) *
- layout->spacing.getValue() * spacing_val);
- int maxdesc = int(font_metrics::maxDescent(font) *
- layout->spacing.getValue() * spacing_val);
+ double const spacing_val = layout->spacing.getValue() * spacing(*pit);
+ //lyxerr << "spacing_val = " << spacing_val << endl;
+ int maxasc = int(font_metrics::maxAscent(font) * spacing_val);
+ int maxdesc = int(font_metrics::maxDescent(font) * spacing_val);
// insets may be taller
InsetList::iterator ii = pit->insetlist.begin();
InsetList::iterator iend = pit->insetlist.end();
for ( ; ii != iend; ++ii) {
if (ii->pos >= row.pos() && ii->pos < row.endpos()) {
- maxasc = max(maxasc, ii->inset->ascent());
+ maxasc = max(maxasc, ii->inset->ascent());
maxdesc = max(maxdesc, ii->inset->descent());
}
}
@@ -727,7 +687,7 @@ void LyXText::setHeightOfRow(ParagraphLi
pit->highestFontInRange(row.pos(), pos_end, size);
if (maxsize > font.size()) {
font.setSize(maxsize);
- maxasc = max(maxasc, font_metrics::maxAscent(font));
+ maxasc = max(maxasc, font_metrics::maxAscent(font));
maxdesc = max(maxdesc, font_metrics::maxDescent(font));
}
@@ -738,52 +698,34 @@ void LyXText::setHeightOfRow(ParagraphLi
row.ascent_of_text(maxasc);
// is it a top line?
- if (!row.pos()) {
+ if (row.pos() == 0) {
BufferParams const & bufparams = bv()->buffer()->params();
// some parksips VERY EASY IMPLEMENTATION
- if (bv()->buffer()->params().paragraph_separation ==
- BufferParams::PARSEP_SKIP)
+ if (bv()->buffer()->params().paragraph_separation
+ == BufferParams::PARSEP_SKIP
+ && pit != ownerParagraphs().begin()
+ && ((layout->isParagraph() && pit->getDepth() == 0)
+ || (boost::prior(pit)->layout()->isParagraph()
+ && boost::prior(pit)->getDepth() == 0)))
{
- if (layout->isParagraph()
- && pit->getDepth() == 0
- && pit != ownerParagraphs().begin())
- {
maxasc += bufparams.getDefSkip().inPixels(*bv());
- } else if (pit != ownerParagraphs().begin() &&
- boost::prior(pit)->layout()->isParagraph() &&
- boost::prior(pit)->getDepth() == 0)
- {
- // is it right to use defskip here too? (AS)
- maxasc += bufparams.getDefSkip().inPixels(*bv());
- }
}
// the top margin
if (pit == ownerParagraphs().begin() && !isInInset())
maxasc += PAPER_MARGIN;
- // add the vertical spaces, that the user added
+ // add user added vertical space
maxasc += getLengthMarkerHeight(*bv(), pit->params().spaceTop());
if (pit->params().startOfAppendix())
- maxasc += 3 * defaultRowHeight();
+ maxasc += int(3 * dh);
// This is special code for the chapter, since the label of this
// layout is printed in an extra row
if (layout->counter == "chapter" && bufparams.secnumdepth >= 0) {
- float spacing_val = 1.0;
- if (!pit->params().spacing().isDefault()) {
- spacing_val = pit->params().spacing().getValue();
- } else {
- spacing_val = bufparams.spacing().getValue();
- }
-
- labeladdon = int(font_metrics::maxDescent(labelfont) *
- layout->spacing.getValue() *
- spacing_val)
- + int(font_metrics::maxAscent(labelfont) *
- layout->spacing.getValue() *
- spacing_val);
+ labeladdon = int(font_metrics::maxHeight(labelfont)
+ * layout->spacing.getValue() * spacing(*pit));
}
// special code for the top label
@@ -793,20 +735,11 @@ void LyXText::setHeightOfRow(ParagraphLi
&& isFirstInSequence(pit, ownerParagraphs())
&& !pit->getLabelstring().empty())
{
- float spacing_val = 1.0;
- if (!pit->params().spacing().isDefault()) {
- spacing_val = pit->params().spacing().getValue();
- } else {
- spacing_val = bufparams.spacing().getValue();
- }
-
labeladdon = int(
- (font_metrics::maxAscent(labelfont) +
- font_metrics::maxDescent(labelfont)) *
- layout->spacing.getValue() *
- spacing_val
- + layout->topsep * defaultRowHeight()
- + layout->labelbottomsep * defaultRowHeight());
+ font_metrics::maxHeight(labelfont)
+ * layout->spacing.getValue()
+ * spacing(*pit)
+ + (layout->topsep + layout->labelbottomsep) * dh);
}
// And now the layout spaces, for example before and after
@@ -814,28 +747,26 @@ void LyXText::setHeightOfRow(ParagraphLi
// environment.
ParagraphList::iterator prev =
- depthHook(pit, ownerParagraphs(),
- pit->getDepth());
- if (prev != pit && prev->layout() == layout &&
- prev->getDepth() == pit->getDepth() &&
- prev->getLabelWidthString() == pit->getLabelWidthString())
+ depthHook(pit, ownerParagraphs(), pit->getDepth());
+ if (prev != pit
+ && prev->layout() == layout
+ && prev->getDepth() == pit->getDepth()
+ && prev->getLabelWidthString() == pit->getLabelWidthString())
{
- layoutasc = (layout->itemsep * defaultRowHeight());
+ layoutasc = layout->itemsep * dh;
} else if (pit != ownerParagraphs().begin() || row.pos() != 0) {
- tmptop = layout->topsep;
-
- if (tmptop > 0)
- layoutasc = (tmptop * defaultRowHeight());
+ if (layout->topsep > 0)
+ layoutasc = layout->topsep * dh;
}
prev = outerHook(pit, ownerParagraphs());
- if (prev != ownerParagraphs().end()) {
- maxasc += int(prev->layout()->parsep * defaultRowHeight());
+ if (prev != ownerParagraphs().end()) {
+ maxasc += int(prev->layout()->parsep * dh);
} else if (pit != ownerParagraphs().begin()) {
ParagraphList::iterator prior_pit = boost::prior(pit);
if (prior_pit->getDepth() != 0 ||
prior_pit->layout() == layout) {
- maxasc += int(layout->parsep * defaultRowHeight());
+ maxasc += int(layout->parsep * dh);
}
}
}
@@ -854,35 +785,29 @@ void LyXText::setHeightOfRow(ParagraphLi
// a section, or between the items of a itemize or enumerate
// environment
if (nextpit != ownerParagraphs().end()) {
- ParagraphList::iterator comparepit = pit;
- float usual = 0;
- float unusual = 0;
-
- if (comparepit->getDepth() > nextpit->getDepth()) {
- usual = (comparepit->layout()->bottomsep *
defaultRowHeight());
- comparepit = depthHook(comparepit, ownerParagraphs(),
nextpit->getDepth());
- if (comparepit->layout()!= nextpit->layout()
- || nextpit->getLabelWidthString() !=
- comparepit->getLabelWidthString())
+ ParagraphList::iterator cpit = pit;
+ double usual = 0;
+ double unusual = 0;
+
+ if (cpit->getDepth() > nextpit->getDepth()) {
+ usual = cpit->layout()->bottomsep * dh;
+ cpit = depthHook(cpit, ownerParagraphs(),
nextpit->getDepth());
+ if (cpit->layout() != nextpit->layout()
+ || nextpit->getLabelWidthString() !=
cpit->getLabelWidthString())
{
- unusual = (comparepit->layout()->bottomsep *
defaultRowHeight());
+ unusual = cpit->layout()->bottomsep * dh;
}
- if (unusual > usual)
- layoutdesc = unusual;
- else
- layoutdesc = usual;
- } else if (comparepit->getDepth() == nextpit->getDepth()) {
-
- if (comparepit->layout() != nextpit->layout()
- || nextpit->getLabelWidthString() !=
- comparepit->getLabelWidthString())
- layoutdesc =
int(comparepit->layout()->bottomsep * defaultRowHeight());
+ layoutdesc = max(unusual, usual);
+ } else if (cpit->getDepth() == nextpit->getDepth()) {
+ if (cpit->layout() != nextpit->layout()
+ || nextpit->getLabelWidthString() !=
cpit->getLabelWidthString())
+ layoutdesc = int(cpit->layout()->bottomsep *
dh);
}
}
}
// incalculate the layout spaces
- maxasc += int(layoutasc * 2 / (2 + pit->getDepth()));
+ maxasc += int(layoutasc * 2 / (2 + pit->getDepth()));
maxdesc += int(layoutdesc * 2 / (2 + pit->getDepth()));
row.height(maxasc + maxdesc + labeladdon);
@@ -1039,7 +964,6 @@ void LyXText::insertChar(char c)
}
}
-
// First check, if there will be two blanks together or a blank at
// the beginning of a paragraph.
// I decided to handle blanks like normal characters, the main
@@ -1115,7 +1039,7 @@ void LyXText::prepareToPrint(ParagraphLi
bool const is_rtl =
pit->isRightToLeftPar(bv()->buffer()->params());
if (is_rtl)
- x = workWidth() > 0 ? rightMargin(*pit, *bv()->buffer(), row) : 0;
+ x = workWidth() > 0 ? rightMargin(*pit, *bv()->buffer()) : 0;
else
x = workWidth() > 0 ? leftMargin(pit, row) : 0;
@@ -1214,9 +1137,9 @@ void LyXText::prepareToPrint(ParagraphLi
pos_type body_pos = pit->beginningOfBody();
pos_type end = row.endpos();
- if (body_pos > 0 &&
- (body_pos > end ||
- !pit->isLineSeparator(body_pos - 1))) {
+ if (body_pos > 0
+ && (body_pos > end || !pit->isLineSeparator(body_pos - 1)))
+ {
x += font_metrics::width(layout->labelsep, getLabelFont(pit));
if (body_pos <= end)
x += fill_label_hfill;
@@ -1646,18 +1569,18 @@ void LyXText::backspace()
Buffer & buf = *bv()->buffer();
BufferParams const & bufparams = buf.params();
LyXTextClass const & tclass = bufparams.getLyXTextClass();
+ ParagraphList::iterator const cpit = cursorPar();
- if (cursorPar() != tmppit
- && (cursorPar()->layout() == tmppit->layout()
- || tmppit->layout() == tclass.defaultLayout())
- && cursorPar()->getAlign() == tmppit->getAlign()) {
- mergeParagraph(bufparams,
- buf.paragraphs(), cursorPar());
+ if (cpit != tmppit
+ && (cpit->layout() == tmppit->layout()
+ || tmppit->layout() == tclass.defaultLayout())
+ && cpit->getAlign() == tmppit->getAlign()) {
+ mergeParagraph(bufparams, buf.paragraphs(), cpit);
- if (cursor.pos() && cursorPar()->isSeparator(cursor.pos() - 1))
+ if (cursor.pos() && cpit->isSeparator(cursor.pos() - 1))
cursor.pos(cursor.pos() - 1);
- // the row may have changed, block, hfills etc.
+ // the counters may have changed
updateCounters();
setCursor(cursor.par(), cursor.pos(), false);
}
@@ -1719,7 +1642,19 @@ RowList::iterator
LyXText::getRowNearY(int y, ParagraphList::iterator & pit) const
{
//lyxerr << "getRowNearY: y " << y << endl;
+#if 0
+ ParagraphList::iterator const pend = ownerParagraphs().end();
+ pit = ownerParagraphs().begin();
+ while (int(pit->y + pit->height) < y && pit != pend)
+ ++pit;
+ RowList::iterator rit = pit->rows.begin();
+ RowList::iterator const rend = pit->rows.end();
+ while (int(pit->y + rit->y_offset()) < y && rit != rend)
+ ++rit;
+ return rit;
+
+#else
pit = boost::prior(ownerParagraphs().end());
RowList::iterator rit = lastRow();
@@ -1729,6 +1664,7 @@ LyXText::getRowNearY(int y, ParagraphLis
previousRow(pit, rit);
return rit;
+#endif
}
@@ -1888,7 +1824,6 @@ void LyXText::metrics(MetricsInfo & mi,
//lyxerr << "LyXText::metrics: width: " << mi.base.textwidth
// << " workWidth: " << workWidth() << "\nfont: " << mi.base.font << endl;
//BOOST_ASSERT(mi.base.textwidth);
- //anchor_y_ = 0;
// rebuild row cache. This recomputes height as well.
redoParagraphs(ownerParagraphs().begin(), ownerParagraphs().end());
Index: text2.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text2.C,v
retrieving revision 1.487
diff -u -p -r1.487 text2.C
--- text2.C 27 Oct 2003 12:41:23 -0000 1.487
+++ text2.C 28 Oct 2003 10:08:08 -0000
@@ -70,7 +70,7 @@ using std::string;
LyXText::LyXText(BufferView * bv, InsetText * inset, bool ininset,
ParagraphList & paragraphs)
- : height(0), width(0), anchor_y_(0),
+ : height(0), width(0),
inset_owner(inset), the_locking_inset(0), bv_owner(bv),
in_inset_(ininset), paragraphs_(¶graphs),
cache_pos_(-1)
@@ -89,8 +89,6 @@ void LyXText::init(BufferView * bview)
width = 0;
height = 0;
-
- anchor_y_ = 0;
cache_pos_ = -1;
current_font = getFont(beg, 0);
@@ -601,9 +599,10 @@ void LyXText::toggleFree(LyXFont const &
// If there is a change in the language the implicit word selection
// is disabled.
LyXCursor resetCursor = cursor;
- bool implicitSelection = (font.language() == ignore_language
- && font.number() == LyXFont::IGNORE)
- ? selectWordWhenUnderCursor(lyx::WHOLE_WORD_STRICT) : false;
+ bool implicitSelection =
+ font.language() == ignore_language
+ && font.number() == LyXFont::IGNORE
+ && selectWordWhenUnderCursor(lyx::WHOLE_WORD_STRICT);
// Set font
setFont(font, toggleall);
@@ -1795,8 +1794,8 @@ bool LyXText::deleteEmptyParagraphMechan
// we can't possibly have deleted a paragraph before this point
bool deleted = false;
- if (old_pit->empty() ||
- (old_pit->size() == 1 && old_pit->isLineSeparator(0))) {
+ if (old_pit->empty()
+ || (old_pit->size() == 1 && old_pit->isLineSeparator(0))) {
// ok, we will delete something
LyXCursor tmpcursor;
@@ -1828,15 +1827,17 @@ bool LyXText::deleteEmptyParagraphMechan
selection.cursor = cursor;
}
}
- if (!deleted) {
- if (old_pit->stripLeadingSpaces()) {
- redoParagraph(old_pit);
- // correct cursor y
- setCursorIntern(cursor.par(), cursor.pos());
- selection.cursor = cursor;
- }
+
+ if (deleted)
+ return true;
+
+ if (old_pit->stripLeadingSpaces()) {
+ redoParagraph(old_pit);
+ // correct cursor y
+ setCursorIntern(cursor.par(), cursor.pos());
+ selection.cursor = cursor;
}
- return deleted;
+ return false;
}
@@ -1868,6 +1869,5 @@ bool LyXText::isInInset() const
int defaultRowHeight()
{
LyXFont const font(LyXFont::ALL_SANE);
- return int(font_metrics::maxAscent(font)
- + font_metrics::maxDescent(font) * 1.5);
+ return int(font_metrics::maxHeight(font) * 1.2);
}
Index: frontends/font_metrics.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/font_metrics.h,v
retrieving revision 1.9
diff -u -p -r1.9 font_metrics.h
--- frontends/font_metrics.h 6 Oct 2003 15:42:44 -0000 1.9
+++ frontends/font_metrics.h 28 Oct 2003 10:08:08 -0000
@@ -46,14 +46,26 @@ namespace font_metrics {
int maxAscent(LyXFont const & f);
/// return the maximum descent of the font
int maxDescent(LyXFont const & f);
+ /// return the maximum descent of the font
+ inline int maxHeight(LyXFont const & f) {
+ return maxAscent(f) + maxDescent(f);
+ }
/// return the ascent of the char in the font
int ascent(char c, LyXFont const & f);
/// return the descent of the char in the font
int descent(char c, LyXFont const & f);
+ /// return the descent of the char in the font
+ inline int height(char c, LyXFont const & f) {
+ return ascent(c, f) + descent(c, f);
+ }
/// return the left bearing of the char in the font
int lbearing(char c, LyXFont const & f);
/// return the right bearing of the char in the font
int rbearing(char c, LyXFont const & f);
+ /// return the inner width of the char in the font
+ inline int center(char c, LyXFont const & f) {
+ return (rbearing(c, f) - lbearing(c, f)) / 2;
+ }
/// return the width of the string in the font
int width(char const * s, size_t n, LyXFont const & f);
/// return the width of the char in the font
@@ -62,8 +74,7 @@ namespace font_metrics {
}
/// return the width of the string in the font
inline int width(std::string const & s, LyXFont const & f) {
- if (s.empty()) return 0;
- return width(s.data(), s.length(), f);
+ return s.empty() ? 0 : width(s.data(), s.length(), f);
}
/// FIXME ??
int signedWidth(std::string const & s, LyXFont const & f);
Index: insets/insethfill.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insethfill.C,v
retrieving revision 1.10
diff -u -p -r1.10 insethfill.C
--- insets/insethfill.C 10 Oct 2003 21:08:54 -0000 1.10
+++ insets/insethfill.C 28 Oct 2003 10:08:08 -0000
@@ -22,6 +22,27 @@ InsetHFill::InsetHFill()
{}
+std::auto_ptr<InsetBase> InsetHFill::clone() const
+{
+ return std::auto_ptr<InsetBase>(new InsetHFill);
+}
+
+
+void InsetHFill::metrics(MetricsInfo &, Dimension & dim) const
+{
+ dim.wid = 3;
+ dim.asc = 3;
+ dim.des = 3;
+ dim_ = dim;
+}
+
+
+std::string const InsetHFill::getScreenLabel(Buffer const &) const
+{
+ return getContents();
+}
+
+
int InsetHFill::latex(Buffer const &, ostream & os,
LatexRunParams const &) const
{
@@ -49,6 +70,7 @@ int InsetHFill::docbook(Buffer const &,
os << '\n';
return 0;
}
+
void InsetHFill::write(Buffer const &, ostream & os) const
{
Index: insets/insetlatexaccent.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetlatexaccent.C,v
retrieving revision 1.84
diff -u -p -r1.84 insetlatexaccent.C
--- insets/insetlatexaccent.C 6 Oct 2003 15:43:04 -0000 1.84
+++ insets/insetlatexaccent.C 28 Oct 2003 10:08:08 -0000
@@ -49,6 +49,12 @@ InsetLatexAccent::InsetLatexAccent(strin
}
+auto_ptr<InsetBase> InsetLatexAccent::clone() const
+{
+ return auto_ptr<InsetBase>(new InsetLatexAccent(contents));
+}
+
+
void InsetLatexAccent::checkContents()
// check, if we know the modifier and can display it ok on screen
{
@@ -319,37 +325,58 @@ bool InsetLatexAccent::displayISO8859_9(
unsigned char tmpic = ic;
switch (modtype) {
- case CEDILLA:
- {
+
+ case CEDILLA: {
if (ic == 'c') tmpic = 0xe7;
if (ic == 'C') tmpic = 0xc7;
if (ic == 's') tmpic = 0xfe;
if (ic == 'S') tmpic = 0xde;
break;
}
- case BREVE:
- { if (ic == 'g') tmpic = 0xf0;
- if (ic == 'G') tmpic = 0xd0;
- break;
+
+ case BREVE: {
+ if (ic == 'g') tmpic = 0xf0;
+ if (ic == 'G') tmpic = 0xd0;
+ break;
}
- case UMLAUT:
- {
+
+ case UMLAUT: {
if (ic == 'o') tmpic = 0xf6;
if (ic == 'O') tmpic = 0xd6;
if (ic == 'u') tmpic = 0xfc;
if (ic == 'U') tmpic = 0xdc;
break;
}
- case DOT: if (ic == 'I') tmpic = 0xdd; break;
- case DOT_LESS_I: tmpic = 0xfd; break;
- default: return false;
- }
- if (tmpic != ic) {
- pi.pain.text(x, y, char(tmpic), pi.base.font);
- return true;
+
+ case DOT:
+ if (ic == 'I') tmpic = 0xdd;
+ break;
+
+ case DOT_LESS_I:
+ tmpic = 0xfd;
+ break;
+
+ default:
+ return false;
}
- else
+
+ if (tmpic == ic)
return false;
+
+ pi.pain.text(x, y, char(tmpic), pi.base.font);
+ return true;
+}
+
+
+void InsetLatexAccent::drawAccent(PainterInfo const & pi, int x, int y,
+ char accent) const
+{
+ LyXFont const & font = pi.base.font;
+ x -= font_metrics::center(accent, font);
+ y -= font_metrics::ascent(ic, font);
+ y -= font_metrics::descent(accent, font);
+ y -= font_metrics::height(accent, font) / 2;
+ pi.pain.text(x, y, accent, font);
}
@@ -359,7 +386,6 @@ void InsetLatexAccent::draw(PainterInfo
if (displayISO8859_9(pi, x, baseline))
return;
- /* draw it! */
// All the manually drawn accents in this function could use an
// overhaul. Different ways of drawing (what metrics to use)
// should also be considered.
@@ -369,23 +395,22 @@ void InsetLatexAccent::draw(PainterInfo
font.setLanguage(english_language);
if (candisp) {
- float x2 = x + (rbearing(font) - lbearing(font)) / 2.0;
- float hg;
+ int x2 = int(x + (rbearing(font) - lbearing(font)) / 2);
+ int hg;
int y;
if (plusasc) {
// mark at the top
hg = font_metrics::maxDescent(font);
y = baseline - dim_.asc;
-
if (font.shape() == LyXFont::ITALIC_SHAPE)
- x2 += (4.0 * hg) / 5.0; // italic
+ x2 += int(0.8 * hg); // italic
} else {
// at the bottom
hg = dim_.des;
y = baseline;
}
- float hg35 = float(hg * 3.0) / 5.0;
+ double hg35 = hg * 0.6;
// display with proper accent mark
// first the letter
@@ -413,107 +438,72 @@ void InsetLatexAccent::draw(PainterInfo
ic = tmpic; // set the orig ic back
y = baseline - asc; // update to new y coord.
}
- // now the rest - draw within (x, y, x+wid, y+hg)
+
+ // now the rest - draw within (x, y, x + wid, y + hg)
switch (modtype) {
- case ACUTE: // acute 0xB4
- {
- pi.pain.text(int(x2 - (font_metrics::rbearing(0xB4, font)
- - font_metrics::lbearing(0xB4, font)) / 2),
- baseline - font_metrics::ascent(ic, font)
- - font_metrics::descent(0xB4, font)
- - (font_metrics::ascent(0xB4, font)
- + font_metrics::descent(0xB4, font))
/ 2,
- char(0xB4), font);
+ case ACUTE:
+ drawAccent(pi, x2, baseline, char(0xB4));
break;
- }
- case GRAVE: // grave 0x60
- {
- pi.pain.text(int(x2 - (font_metrics::rbearing(0x60, font) -
font_metrics::lbearing(0x60, font)) / 2),
- int(baseline - font_metrics::ascent(ic, font) -
font_metrics::descent(0x60, font) - (font_metrics::ascent(0x60, font) +
font_metrics::descent(0x60, font)) / 2.0),
- char(0x60), font);
+
+ case GRAVE:
+ drawAccent(pi, x2, baseline, char(0x60));
break;
- }
- case MACRON: // macron
- {
- pi.pain.text(int(x2 - (font_metrics::rbearing(0xAF, font) -
font_metrics::lbearing(0xAF, font)) / 2),
- baseline - font_metrics::ascent(ic, font) -
font_metrics::descent(0xAF, font) - (font_metrics::ascent(0xAF, font) +
font_metrics::descent(0xAF, font)),
- char(0xAF), font);
+
+ case MACRON:
+ drawAccent(pi, x2, baseline, char(0xAF));
break;
- }
- case TILDE: // tilde
- {
- pi.pain.text(int(x2 - (font_metrics::rbearing('~', font) -
font_metrics::lbearing('~', font)) / 2),
- baseline - font_metrics::ascent(ic, font) -
font_metrics::descent('~', font) - (font_metrics::ascent('~', font) +
font_metrics::descent('~', font)) / 2,
- '~', font);
+
+ case TILDE:
+ drawAccent(pi, x2, baseline, '~');
break;
- }
+
case UNDERBAR: // underbar 0x5F
- {
- pi.pain.text(int(x2 - (font_metrics::rbearing(0x5F, font) -
font_metrics::lbearing(0x5F, font)) / 2), baseline,
+ pi.pain.text(x2 - font_metrics::center(0x5F, font), baseline,
char(0x5F), font);
break;
- }
- case CEDILLA: // cedilla
- {
- pi.pain.text(int(x2 - (font_metrics::rbearing(0xB8, font) -
font_metrics::lbearing(0xB8, font)) / 2), baseline,
- char(0xB8), font);
+ case CEDILLA:
+ pi.pain.text(x2 - font_metrics::center(0xB8, font), baseline,
+ char(0xB8), font);
break;
- }
- case UNDERDOT: // underdot
- {
- pi.pain.text(int(x2 - (font_metrics::rbearing('.', font) -
font_metrics::lbearing('.', font)) / 2.0),
- int(baseline + 3.0 / 2.0 *
(font_metrics::ascent('.', font) + font_metrics::descent('.', font))),
+
+ case UNDERDOT:
+ pi.pain.text(x2 - font_metrics::center('.', font),
+ int(baseline + 1.5 * font_metrics::height('.',
font)),
'.', font);
break;
- }
- case DOT: // dot
- {
- pi.pain.text(int(x2 - (font_metrics::rbearing('.', font) -
font_metrics::lbearing('.', font)) / 2.0),
- baseline - font_metrics::ascent(ic, font) -
font_metrics::descent('.', font) - (font_metrics::ascent('.', font) +
font_metrics::descent('.', font)) / 2,
- '.', font);
+ case DOT:
+ drawAccent(pi, x2, baseline, '.');
break;
- }
- case CIRCLE: // circle
- {
- LyXFont tmpf = font;
- tmpf.decSize().decSize();
- pi.pain.text(int(x2 - (font_metrics::rbearing(0xB0, tmpf) -
font_metrics::lbearing(0xB0, tmpf)) / 2.0),
- int(baseline - font_metrics::ascent(ic, font) -
font_metrics::descent(0xB0, tmpf) - (font_metrics::ascent(0xB0, tmpf) +
font_metrics::descent(0xB0, tmpf)) / 3.0),
- char(0xB0), tmpf);
+ case CIRCLE:
+ drawAccent(pi, x2, baseline, char(0xB0));
break;
- }
- case TIE: // tie
- {
- pi.pain.arc(int(x2 + hg35), int(y + hg / 2.0),
- int(2 * hg), int(hg), 0, 360 * 32,
+
+ case TIE:
+ pi.pain.arc(int(x2 + hg35), y + hg / 2, 2 * hg, hg, 0, 360 *
32,
LColor::foreground);
break;
- }
- case BREVE: // breve
- {
- pi.pain.arc(int(x2 - (hg / 2.0)), y,
- int(hg), int(hg), 0, -360*32,
+
+ case BREVE:
+ pi.pain.arc(int(x2 - hg / 2), y, hg, hg, 0, -360*32,
LColor::foreground);
break;
- }
- case CARON: // caron
- {
- int xp[3], yp[3];
- xp[0] = int(x2 - hg35); yp[0] = int(y + hg35);
- xp[1] = int(x2); yp[1] = int(y + hg);
- xp[2] = int(x2 + hg35); yp[2] = int(y + hg35);
+ case CARON: {
+ int xp[3], yp[3];
+ xp[0] = int(x2 - hg35); yp[0] = int(y + hg35);
+ xp[1] = int(x2); yp[1] = int(y + hg);
+ xp[2] = int(x2 + hg35); yp[2] = int(y + hg35);
pi.pain.lines(xp, yp, 3, LColor::foreground);
break;
}
- case SPECIAL_CARON: // special caron
- {
+
+ case SPECIAL_CARON: {
switch (ic) {
- case 'L': dim_.wid = int(4.0 * dim_.wid / 5.0); break;
- case 't': y -= int(hg35 / 2.0); break;
+ case 'L': dim_.wid = int(4.0 * dim_.wid / 5.0); break;
+ case 't': y -= int(hg35 / 2.0); break;
}
int xp[3], yp[3];
xp[0] = int(x + dim_.wid);
@@ -528,74 +518,61 @@ void InsetLatexAccent::draw(PainterInfo
pi.pain.lines(xp, yp, 3, LColor::foreground);
break;
}
- case HUNGARIAN_UMLAUT: // hung. umlaut
- {
- pi.pain.text(int(x2 - (font_metrics::rbearing('�', font) -
font_metrics::lbearing('�', font))),
- baseline - font_metrics::ascent(ic, font) -
font_metrics::descent('�', font) - (font_metrics::ascent('�', font) +
font_metrics::descent('�', font)) / 2,
- '�', font);
- pi.pain.text(int(x2),
- baseline - font_metrics::ascent(ic, font) -
font_metrics::descent('�', font) - (font_metrics::ascent('�', font) +
font_metrics::descent('�', font)) / 2,
- '�', font);
+
+ case HUNGARIAN_UMLAUT:
+ drawAccent(pi, x2 - font_metrics::center('�', font), baseline,
'�');
+ drawAccent(pi, x2 + font_metrics::center('�', font), baseline,
'�');
break;
- }
- case UMLAUT: // umlaut
- {
- pi.pain.text(int(x2 - (font_metrics::rbearing('�', font) -
font_metrics::lbearing('�', font)) / 2),
- baseline - font_metrics::ascent(ic, font) -
font_metrics::descent('�', font) - (font_metrics::ascent('�', font) +
font_metrics::descent('�', font)) / 2,
- '�', font);
+
+ case UMLAUT:
+ drawAccent(pi, x2, baseline, '"');
break;
- }
- case CIRCUMFLEX: // circumflex
- {
- LyXFont tmpf(font);
- tmpf.decSize().decSize().decSize();
- pi.pain.text(int(x2 - (font_metrics::rbearing(0x5E, tmpf) -
font_metrics::lbearing(0x5E, tmpf)) / 2),
- int(baseline - font_metrics::ascent(ic, font) -
font_metrics::descent(0x5E, tmpf) - (font_metrics::ascent(0x5E, tmpf) +
font_metrics::descent(0x5E, tmpf)) / 3.0),
- char(0x5E), tmpf);
+
+ case CIRCUMFLEX:
+ drawAccent(pi, x2, baseline, 0x5E);
break;
- }
- case OGONEK: // ogonek
- {
+
+ case OGONEK: {
// this does probably not look like an ogonek, so
// it should certainly be refined
int xp[4], yp[4];
- xp[0] = int(x2);
+ xp[0] = x2;
yp[0] = y;
- xp[1] = int(x2);
+ xp[1] = x2;
yp[1] = y + int(hg35);
xp[2] = int(x2 - hg35);
- yp[2] = y + int(hg / 2.0);
+ yp[2] = y + hg / 2;
- xp[3] = int(x2 + hg / 4.0);
+ xp[3] = x2 + hg / 4;
yp[3] = y + int(hg);
pi.pain.lines(xp, yp, 4, LColor::foreground);
break;
}
+
case lSLASH:
- case LSLASH:
- {
+ case LSLASH: {
int xp[2], yp[2];
- xp[0] = int(x);
- yp[0] = y + int(3.0 * hg);
+ xp[0] = x;
+ yp[0] = y + int(3 * hg);
- xp[1] = int(x + float(dim_.wid) * 0.75);
+ xp[1] = int(x + dim_.wid * 0.75);
yp[1] = y + int(hg);
pi.pain.lines(xp, yp, 2, LColor::foreground);
break;
}
+
case DOT_LESS_I: // dotless-i
case DOT_LESS_J: // dotless-j
- {
// nothing to do for these
break;
}
- }
+
} else {
pi.pain.fillRectangle(x + 1,
baseline - dim_.asc + 1, dim_.wid - 2,
@@ -655,12 +632,6 @@ int InsetLatexAccent::docbook(Buffer con
bool InsetLatexAccent::directWrite() const
{
return true;
-}
-
-
-auto_ptr<InsetBase> InsetLatexAccent::clone() const
-{
- return auto_ptr<InsetBase>(new InsetLatexAccent(contents));
}
Index: insets/insetlatexaccent.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetlatexaccent.h,v
retrieving revision 1.61
diff -u -p -r1.61 insetlatexaccent.h
--- insets/insetlatexaccent.h 6 Oct 2003 15:43:04 -0000 1.61
+++ insets/insetlatexaccent.h 28 Oct 2003 10:08:08 -0000
@@ -116,6 +116,8 @@ private:
/// Check if we know the modifier and can display it ok on screen.
void checkContents();
///
+ void drawAccent(PainterInfo const & pi, int x, int y, char accent) const;
+ ///
std::string contents;
/// can display as proper char
bool candisp;
Index: insets/insettoc.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettoc.C,v
retrieving revision 1.57
diff -u -p -r1.57 insettoc.C
--- insets/insettoc.C 17 Oct 2003 18:01:15 -0000 1.57
+++ insets/insettoc.C 28 Oct 2003 10:08:08 -0000
@@ -7,6 +7,7 @@
*
* Full author contact details are available in file CREDITS.
*/
+
#include <config.h>
#include "insettoc.h"
@@ -22,6 +23,7 @@ using std::string;
using std::ostream;
+
InsetTOC::InsetTOC(InsetCommandParams const & p)
: InsetCommand(p)
{}
@@ -29,16 +31,19 @@ InsetTOC::InsetTOC(InsetCommandParams co
InsetTOC::~InsetTOC()
{
- InsetCommandMailer mailer("toc", *this);
- mailer.hideDialog();
+ InsetCommandMailer("toc", *this).hideDialog();
}
-string const InsetTOC::getScreenLabel(Buffer const &) const
+std::auto_ptr<InsetBase> InsetTOC::clone() const
{
- string const cmdname(getCmdName());
+ return std::auto_ptr<InsetBase>(new InsetTOC(*this));
+}
- if (cmdname == "tableofcontents")
+
+string const InsetTOC::getScreenLabel(Buffer const &) const
+{
+ if (getCmdName() == "tableofcontents")
return _("Table of Contents");
return _("Unknown toc list");
}
@@ -46,8 +51,7 @@ string const InsetTOC::getScreenLabel(Bu
InsetOld::Code InsetTOC::lyxCode() const
{
- string const cmdname(getCmdName());
- if (cmdname == "tableofcontents")
+ if (getCmdName() == "tableofcontents")
return InsetOld::TOC_CODE;
return InsetOld::NO_CODE;
}
@@ -56,10 +60,8 @@ InsetOld::Code InsetTOC::lyxCode() const
void InsetTOC::metrics(MetricsInfo & mi, Dimension & dim) const
{
InsetCommand::metrics(mi, dim);
- int center_indent = (mi.base.textwidth - dim.wid) / 2;
- Box b(center_indent, center_indent + dim.wid, -dim.asc, dim.des);
- button().setBox(b);
-
+ int const x1 = (mi.base.textwidth - dim.wid) / 2;
+ button().setBox(Box(x1, x1 + dim.wid, -dim.asc, dim.des));
dim.wid = mi.base.textwidth;
dim_ = dim;
}
@@ -67,13 +69,12 @@ void InsetTOC::metrics(MetricsInfo & mi,
void InsetTOC::draw(PainterInfo & pi, int x, int y) const
{
- InsetCommand::draw(pi, x + button().box().x1, y);
+ InsetCommand::draw(pi, button().box().x1, y);
}
dispatch_result
-InsetTOC::priv_dispatch(FuncRequest const & cmd,
- idx_type & idx, pos_type & pos)
+InsetTOC::priv_dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos)
{
switch (cmd.action) {
case LFUN_MOUSE_RELEASE: