* \author various
* \author John Levon
*
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
*/
#include <config.h>
int RowPainter::singleWidth(lyx::pos_type pos, char c) const
{
- return text_.singleWidth(pit_, pos, c);
+ LyXFont const & font = text_.getFont(pit_, pos);
+ return text_.singleWidth(pit_, pos, c, font);
}
y_top += paintLengthMarker(_("Space above"), parparams.spaceTop(),
yo_ + y_top);
- Buffer const * buffer = bv_.buffer();
+ Buffer const & buffer = *bv_.buffer();
LyXLayout_ptr const & layout = pit_->layout();
- if (buffer->params.paragraph_separation == BufferParams::PARSEP_SKIP) {
+ if (buffer.params.paragraph_separation == BufferParams::PARSEP_SKIP) {
if (pit_ != text_.ownerParagraphs().begin()) {
if (layout->latextype == LATEX_PARAGRAPH
&& !pit_->getDepth()) {
- y_top += buffer->params.getDefSkip().inPixels(bv_);
+ y_top += buffer.params.getDefSkip().inPixels(bv_);
} else {
LyXLayout_ptr const & playout =
boost::prior(pit_)->layout();
if (playout->latextype == LATEX_PARAGRAPH
&& !boost::prior(pit_)->getDepth()) {
// is it right to use defskip here, too? (AS)
- y_top += buffer->params.getDefSkip().inPixels(bv_);
+ y_top += buffer.params.getDefSkip().inPixels(bv_);
}
}
}
// printed in an extra row and has a pagebreak at
// the top.
if (layout->labeltype == LABEL_COUNTER_CHAPTER) {
- if (buffer->params.secnumdepth >= 0) {
+ if (buffer.params.secnumdepth >= 0) {
float spacing_val = 1.0;
if (!parparams.spacing().isDefault()) {
spacing_val = parparams.spacing().getValue();
} else {
- spacing_val = buffer->params.spacing.getValue();
+ spacing_val = buffer.params.spacing.getValue();
}
int const maxdesc =
if (!parparams.spacing().isDefault()) {
spacing_val = parparams.spacing().getValue();
} else {
- spacing_val = buffer->params.spacing.getValue();
+ spacing_val = buffer.params.spacing.getValue();
}
int maxdesc =
void RowPainter::paint()
{
- width_ = text_.workWidth();
-
- // FIXME: must be a cleaner way here. Aren't these calculations
- // belonging to row metrics ?
- text_.prepareToPrint(pit_, row_, x_, separator_, hfill_, label_hfill_);
+ width_ = text_.workWidth();
+ x_ = row_->x();
+ separator_ = row_->fill_separator();
+ hfill_ = row_->fill_hfill();
+ label_hfill_ = row_->fill_label_hfill();
// FIXME: what is this fixing ?
if (text_.isInInset() && x_ < 0)
}
-} // namespace anon
-
-
-int getLengthMarkerHeight(BufferView const & bv, VSpace const & vsp)
-{
- if (vsp.kind() == VSpace::NONE)
- return 0;
-
- int const arrow_size = 4;
- int const space_size = vsp.inPixels(bv);
-
- LyXFont font;
- font.decSize();
- int const min_size = max(3 * arrow_size,
- font_metrics::maxAscent(font)
- + font_metrics::maxDescent(font));
-
- if (vsp.length().len().value() < 0.0)
- return min_size;
- else
- return max(min_size, space_size);
-}
-
-
int paintRows(BufferView const & bv, LyXText const & text,
- RowList::iterator rit, int xo, int y, int yf, int y2, int yo)
+ ParagraphList::iterator pit, RowList::iterator rit,
+ int xo, int y, int yf, int yo)
{
- //lyxerr << "paintRows: rit: " << &*rit << endl;
- const_cast<LyXText&>(text).updateRowPositions();
- int yy = yf - y;
-
- ParagraphList::iterator pit = text.ownerParagraphs().begin();
+ //lyxerr << " paintRows: rit: " << &*rit << endl;
+ //const_cast<LyXText&>(text).updateRowPositions();
+ int const yy = yf - y;
+ int const y2 = bv.painter().paperHeight();
+
ParagraphList::iterator end = text.ownerParagraphs().end();
bool active = false;
if (row == rit)
active = true;
if (active) {
- RowPainter painter(bv, text, pit, row, y + yo, xo, y + text.top_y());
+ RowPainter painter(bv, text, pit, row, y + yo, xo, y + bv.top_y());
painter.paint();
y += row->height();
if (yy + y >= y2)
return y;
}
+} // namespace anon
+
+
+int paintText(BufferView & bv)
+{
+ int const topy = bv.top_y();
+ ParagraphList::iterator pit;
+ RowList::iterator rit = bv.text->getRowNearY(topy, pit);
+ int y = rit->y() - topy;
+ return paintRows(bv, *bv.text, pit, rit, 0, y, y, 0);
+}
+
+
+void paintTextInset(BufferView & bv, LyXText & text, int x, int baseline)
+{
+ RowList::iterator rit = text.firstRow();
+ RowList::iterator end = text.endRow();
+ ParagraphList::iterator pit = text.ownerParagraphs().begin();
+
+ int y_offset = baseline - rit->ascent_of_text();
+ int y = y_offset;
+ while (rit != end && y + rit->height() <= 0) {
+ y += rit->height();
+ text.nextRow(pit, rit);
+ }
+ if (y_offset < 0)
+ paintRows(bv, text, pit, rit, x, 0, y, y);
+ else
+ paintRows(bv, text, pit, rit, x, 0, y_offset, y_offset);
+}
+
+
+int getLengthMarkerHeight(BufferView const & bv, VSpace const & vsp)
+{
+ if (vsp.kind() == VSpace::NONE)
+ return 0;
+
+ int const arrow_size = 4;
+ int const space_size = vsp.inPixels(bv);
+
+ LyXFont font;
+ font.decSize();
+ int const min_size = max(3 * arrow_size,
+ font_metrics::maxAscent(font)
+ + font_metrics::maxDescent(font));
+
+ if (vsp.length().len().value() < 0.0)
+ return min_size;
+ else
+ return max(min_size, space_size);
+}