lyx_mirror/src/Dimension.h
Jean-Marc Lasgouttes f3f9b083d1 Only display a blue rectangle for editable empty insets
Empty insets should use a minimal amount of space, especially when
they are part of a built-in macro in lib/symbols.

With this change, blue rectangles signal actually editable places.
Empty macros in editable data are shown as grey boxes, but they do not
appear when further nested.

This is done by adding a new type BOX of MathRow::Element object and a
MetricsInfo::macro_nesting that keeps track of macros (and is reset to
0 in editable macro arguments).
2016-11-16 18:33:02 +01:00

96 lines
1.9 KiB
C++

// -*- C++ -*-
/**
* \file Dimension.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#ifndef DIMENSION_H
#define DIMENSION_H
namespace lyx {
/// Simple wrapper around three ints
class Dimension {
public:
/// constructor
Dimension() : wid(0), asc(0), des(0) {}
/// initialize data
Dimension(int w, int a, int d) : wid(w), asc(a), des(d) {}
Dimension & operator=(Dimension const & dim) {
wid = dim.wid;
asc = dim.asc;
des = dim.des;
return *this;
}
/// glue horizontally
void operator+=(Dimension const & dim);
/// set to empty box
void clear() { wid = asc = des = 0; }
/// check if box is empty
bool empty() const { return wid == 0 && asc == 0 && wid == 0; }
/// get height
int height() const { return asc + des; }
/// get ascent
int ascent() const { return asc; }
/// get descent
int descent() const { return des; }
/// get width
int width() const { return wid; }
/// add space for a frame
//void addFrame(int frame) const;
/// add space for bottom part of a frame
//void addFrameBottom(int frame) const;
public:
/// these are intentionally public as things like
///
/// dim.asc += 20;
///
/// are used all over the place and "hiding" those behind
///
/// dim.ascent(dim.ascent() + 20);
///
/// makes the code neither faster nor clearer
/// width
int wid;
/// ascent
int asc;
/// descent
int des;
};
inline
bool operator==(Dimension const & a, Dimension const & b)
{
return a.wid == b.wid && a.asc == b.asc && a.des == b.des ;
}
inline
bool operator!=(Dimension const & a, Dimension const & b)
{
return a.wid != b.wid || a.asc != b.asc || a.des != b.des ;
}
class Point {
public:
Point()
: x_(0), y_(0)
{}
Point(int x, int y);
int x_, y_;
};
} // namespace lyx
#endif