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_(&paragraphs),
                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:

Reply via email to