lyx_mirror/src/metricsinfo.h
Asger Ottar Alstrup c3a34a64f1 Undo cleaned up. It seems to work pretty well now.
* undo_funcs.h: Removed setCursorParUndo to simplify things a bit.
	Renamed setUndo family to recordUndo. Renamed FINISH to ATOMIC
	which I think is a bit clearer. EDIT is gone, since it was
	premature optimisation, and broken for mathed anyway.
	* undo_funcs.C (performUndoOrRedo): Cleaned up and made it work
	with cursor positioning in insets as well (math insets still do not
	work, but that's a different story anyway.) It mysteriously
	crashes sometimes with undo in the first paragraph, but I'm fairly
	confident that this is a compiler bug.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7358 a592a061-630c-0410-9148-cb99ea01b6c8
2003-07-25 19:18:43 +00:00

168 lines
2.9 KiB
C++

#ifndef METRICSINFO_H
#define METRICSINFO_H
#include "lyxfont.h"
#include "LString.h"
class Painter;
class BufferView;
/// Standard Sizes (mode styles)
enum Styles {
///
LM_ST_DISPLAY = 0,
///
LM_ST_TEXT,
///
LM_ST_SCRIPT,
///
LM_ST_SCRIPTSCRIPT
};
//
// This is the part common to MetricsInfo and PainterInfo
//
struct MetricsBase {
///
MetricsBase();
///
MetricsBase(BufferView * bv, LyXFont const & font, int textwidth);
/// the current view
BufferView * bv;
/// current font
LyXFont font;
/// current math style (display/text/script/..)
Styles style;
/// name of current font - mathed specific
string fontname;
/// This is the width available in pixels
int textwidth;
};
//
// This contains a Metricsbase and Information that's only relevant during
// the first phase of the two-phase draw
//
struct MetricsInfo {
///
MetricsInfo();
///
MetricsInfo(BufferView * bv, LyXFont const & font, int textwidth);
///
MetricsBase base;
};
//
// This contains a Metricsbase and Information that's only relevant during
// the second phase of the two-phase draw
//
struct PainterInfo {
///
explicit PainterInfo(BufferView * bv);
///
void draw(int x, int y, char c);
///
MetricsBase base;
///
Painter & pain;
/// width of current item
int width;
};
struct TextMetricsInfo {};
// Generic base for temporarily changing things.
// The original state gets restored when the Changer is destructed.
template <class Struct, class Temp = Struct>
struct Changer {
///
Changer(Struct & orig) : orig_(orig) {}
protected:
///
Struct & orig_;
///
Temp save_;
};
// temporarily change some aspect of a font
struct FontChanger : public Changer<LyXFont> {
///
FontChanger(LyXFont & orig, char const * font);
///
~FontChanger();
};
// temporarily change a full font
struct FontSetChanger : public Changer<MetricsBase> {
///
FontSetChanger(MetricsBase & mb, char const * font);
///
~FontSetChanger();
};
// temporarily change the style
struct StyleChanger : public Changer<MetricsBase> {
///
StyleChanger(MetricsBase & mb, Styles style);
///
~StyleChanger();
};
// temporarily change the style to script style
struct ScriptChanger : public StyleChanger {
///
ScriptChanger(MetricsBase & mb);
};
// temporarily change the style suitable for use in fractions
struct FracChanger : public StyleChanger {
///
FracChanger(MetricsBase & mb);
};
// temporarily change the style suitable for use in tabulars and arrays
struct ArrayChanger : public StyleChanger {
///
ArrayChanger(MetricsBase & mb);
};
// temporarily change the shape of a font
struct ShapeChanger : public Changer<LyXFont, LyXFont::FONT_SHAPE> {
///
ShapeChanger(LyXFont & font, LyXFont::FONT_SHAPE shape);
///
~ShapeChanger();
};
// temporarily change the available text width
struct WidthChanger : public Changer<MetricsBase>
{
///
WidthChanger(MetricsBase & mb, int width);
///
~WidthChanger();
};
#endif