fix some fbox drawing

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8903 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2004-08-13 15:06:46 +00:00
parent a5d39ee28e
commit 25b1956b2a
8 changed files with 135 additions and 25 deletions

View File

@ -25,6 +25,8 @@ libmathed_la_SOURCES = \
math_boldsymbolinset.h \
math_boxinset.C \
math_boxinset.h \
math_boxedinset.C \
math_boxedinset.h \
math_braceinset.C \
math_braceinset.h \
math_casesinset.C \

View File

@ -0,0 +1,77 @@
/**
* \file math_boxedinset.C
* 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.
*/
#include <config.h>
#include "math_boxedinset.h"
#include "math_data.h"
#include "math_mathmlstream.h"
#include "math_parser.h"
#include "math_streamstr.h"
#include "LaTeXFeatures.h"
#include "LColor.h"
#include "support/std_ostream.h"
#include "frontends/Painter.h"
using std::auto_ptr;
MathBoxedInset::MathBoxedInset()
: MathNestInset(1)
{}
auto_ptr<InsetBase> MathBoxedInset::clone() const
{
return auto_ptr<InsetBase>(new MathBoxedInset(*this));
}
void MathBoxedInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
cell(0).metrics(mi, dim);
metricsMarkers2(dim, 3); // 1 pixel space, 1 frame, 1 space
dim_ = dim;
}
void MathBoxedInset::draw(PainterInfo & pi, int x, int y) const
{
pi.pain.rectangle(x + 1, y - dim_.ascent() + 1,
dim_.width() - 2, dim_.height() - 2, LColor::foreground);
cell(0).draw(pi, x + 3, y);
setPosCache(pi, x, y);
}
void MathBoxedInset::write(WriteStream & os) const
{
os << "\\boxed{" << cell(0) << '}';
}
void MathBoxedInset::normalize(NormalStream & os) const
{
os << "[boxed " << cell(0) << ']';
}
void MathBoxedInset::infoize(std::ostream & os) const
{
os << "Boxed: ";
}
void MathBoxedInset::validate(LaTeXFeatures & features) const
{
features.require("amsmath");
}

View File

@ -0,0 +1,39 @@
// -*- C++ -*-
/**
* \file math_boxedinset.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 MATH_BOXEDINSET_H
#define MATH_BOXEDINSET_H
#include "math_nestinset.h"
/// Non-AMS-style frame
class MathBoxedInset : public MathNestInset {
public:
///
MathBoxedInset();
///
std::auto_ptr<InsetBase> clone() const;
///
void validate(LaTeXFeatures & features) const;
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///
void write(WriteStream & os) const;
/// write normalized content
void normalize(NormalStream & ns) const;
///
void infoize(std::ostream & os) const;
};
#endif

View File

@ -16,6 +16,7 @@
#include "math_amsarrayinset.h"
#include "math_binominset.h"
#include "math_boxinset.h"
#include "math_boxedinset.h"
#include "math_boldsymbolinset.h"
#include "math_casesinset.h"
#include "math_colorinset.h"
@ -275,6 +276,8 @@ MathAtom createMathInset(string const & s)
if (s.size() == 3 && s[0] == '\\' && s[1] == '#'
&& s[2] >= '1' && s[2] <= '9')
return MathAtom(new MathMacroArgument(s[2] - '0'));
if (s == "boxed")
return MathAtom(new MathBoxedInset());
if (s == "mbox")
return MathAtom(new MathBoxInset("mbox"));
if (s == "fbox")

View File

@ -44,7 +44,7 @@ void MathFboxInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
FontSetChanger dummy(mi.base, "textnormal");
cell(0).metrics(mi, dim);
metricsMarkers(dim, 5); // 5 pixels margin
metricsMarkers(dim, 3); // 1 pixel space, 1 frame, 1 space
dim_ = dim;
}
@ -54,7 +54,7 @@ void MathFboxInset::draw(PainterInfo & pi, int x, int y) const
pi.pain.rectangle(x + 1, y - dim_.ascent() + 1,
dim_.width() - 2, dim_.height() - 2, LColor::foreground);
FontSetChanger dummy(pi.base, "textnormal");
cell(0).draw(pi, x + 5, y);
cell(0).draw(pi, x + 3, y);
setPosCache(pi, x, y);
}

View File

@ -15,9 +15,7 @@
#include "math_nestinset.h"
class latexkeys;
/// Extra nesting
/// Non-AMS-style frame
class MathFboxInset : public MathNestInset {
public:
///

View File

@ -144,8 +144,7 @@ enum {
FLAG_EQUATION = 1 << 9, // next \] leaves the loop
FLAG_SIMPLE2 = 1 << 10, // next \) leaves the loop
FLAG_OPTION = 1 << 11, // read [...] style option
FLAG_BRACED = 1 << 12, // read {...} style argument
FLAG_SKIPSPACE = 1 << 13 // skip spaces
FLAG_BRACED = 1 << 12 // read {...} style argument
};
@ -585,14 +584,6 @@ void Parser::parse1(MathGridInset & grid, unsigned flags,
lyxerr << endl;
#endif
if (flags & FLAG_SKIPSPACE) {
if (t.cat() == catSpace || t.cat() == catNewline)
continue;
pop_back();
return;
}
if (flags & FLAG_ITEM) {
if (t.cat() == catBegin) {

View File

@ -305,12 +305,12 @@ bool MathScriptInset::hasLimits() const
void MathScriptInset::removeScript(bool up)
{
lyxerr << "MathNestInset::removeScript: 1 up: " << up << endl;
lyxerr << "MathScriptInset::removeScript: 1 up: " << up << endl;
if (nargs() == 2) {
lyxerr << "MathNestInset::removeScript: a up: " << up << endl;
lyxerr << "MathScriptInset::removeScript: a up: " << up << endl;
if (up == cell_1_is_up_)
cells_.pop_back();
lyxerr << "MathNestInset::removeScript: b up: " << up << endl;
lyxerr << "MathScriptInset::removeScript: b up: " << up << endl;
} else if (nargs() == 3) {
if (up == true) {
swap(cells_[1], cells_[2]);
@ -320,7 +320,7 @@ void MathScriptInset::removeScript(bool up)
}
cells_.pop_back();
}
lyxerr << "MathNestInset::removeScript: 2 up: " << up << endl;
lyxerr << "MathScriptInset::removeScript: 2 up: " << up << endl;
}
@ -557,22 +557,22 @@ void MathScriptInset::notifyCursorLeaves(LCursor & cur)
{
MathNestInset::notifyCursorLeaves(cur);
lyxerr << "MathScriptInset::notifyCursorLeaves: 1 " << cur << endl;
// remove empty scripts if possible
if (0) {
if (nargs() > 2 && cur.idx() == 2 && cell(2).empty()) {
// must be a subscript...
removeScript(false);
// sanitize cursor, even if this slice will be removed immediately
cur.idx() = 0;
cur.pos() = 0;
} else if (nargs() > 1 && cur.idx() == 1 && cell(1).empty()) {
// could be either subscript or super script
removeScript(cell_1_is_up_);
// sanitize cursor, even if this slice will be removed immediately
cur.idx() = 0;
cur.pos() = 0;
}
}
lyxerr << "MathScriptInset::notifyCursorLeaves: 2 " << cur << endl;
}
void MathScriptInset::priv_dispatch(LCursor & cur, FuncRequest & cmd)
{