lyx_mirror/src/rowpainter.h
Abdelrazak Younes 926abae753 Simplify single par drawing:
* ParagraphMetrics::computeRowSignature(): Integrate row's dimensions and selection status in the row signature.
* TextMetrics::drawParagraph(): compute the row signature here and rely on that to decide if a redraw is needed or not.
* BufferView::Private: get rid of the ViewMetricsInfo member. Just keep the ScreenUpdateStrategy.
* BufferView::draw(): full screen update even for singlePar case because the row signature will detect if something needs to be redrawn.
* Text3.cpp: get rid of hack following architecture update.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21650 a592a061-630c-0410-9148-cb99ea01b6c8
2007-11-17 11:27:03 +00:00

108 lines
2.4 KiB
C++

// -*- C++ -*-
/**
* \file rowpainter.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author various
* \author John Levon
* \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#ifndef ROWPAINTER_H
#define ROWPAINTER_H
#include "support/types.h"
namespace lyx {
class Bidi;
class BufferView;
class Font;
class FontInfo;
class Inset;
class Language;
class PainterInfo;
class Paragraph;
class ParagraphList;
class ParagraphMetrics;
class Row;
class Text;
class TextMetrics;
namespace frontend { class Painter; }
/**
* A class used for painting an individual row of text.
* FIXME: get rid of that class.
*/
class RowPainter {
public:
/// initialise and run painter
RowPainter(PainterInfo & pi, Text const & text,
pit_type pit, Row const & row, Bidi & bidi, int x, int y);
/// paint various parts
/// FIXME: transfer to TextMetrics
void paintAppendix();
void paintDepthBar();
void paintChangeBar();
void paintFirst();
void paintLast();
void paintText();
void paintOnlyInsets();
private:
void paintForeignMark(double orig_x, Language const * lang, int desc = 0);
void paintHebrewComposeChar(pos_type & vpos, FontInfo const & font);
void paintArabicComposeChar(pos_type & vpos, FontInfo const & font);
void paintChars(pos_type & vpos, FontInfo const & font,
bool hebrew, bool arabic);
int paintAppendixStart(int y);
void paintFromPos(pos_type & vpos);
void paintInset(Inset const * inset, pos_type const pos);
void paintHfill(pos_type const pos, pos_type const body_pos);
/// return left margin
int leftMargin() const;
/// return the label font for this row
FontInfo const getLabelFont() const;
/// contains painting related information.
PainterInfo & pi_;
/// Text for the row
Text const & text_;
TextMetrics & text_metrics_;
ParagraphList const & pars_;
/// The row to paint
Row const & row_;
/// Row's paragraph
pit_type const pit_;
Paragraph const & par_;
ParagraphMetrics const & pm_;
/// bidi cache, comes from outside the rowpainter because
/// rowpainters are normally created in a for loop and there only
/// one of them is active at a time.
Bidi & bidi_;
/// is row erased? (change tracking)
bool erased_;
// Looks ugly - is
double const xo_;
int const yo_; // current baseline
double x_;
int width_;
};
} // namespace lyx
#endif // ROWPAINTER_H