mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-03 08:28:25 +00:00
Store InsetGraphics bounding box in parsed form
This is like InsetExternal does it, avoids some string parsing, reduces the amount of code and makes it more robust.
This commit is contained in:
parent
bf515425e1
commit
dc6d201f8f
@ -525,7 +525,7 @@ void GuiGraphics::paramsToDialog(InsetGraphicsParams const & igp)
|
||||
filename->setText(toqstr(name));
|
||||
|
||||
// set the bounding box values
|
||||
if (igp.bb.empty()) {
|
||||
if (igp.bbox.empty()) {
|
||||
string const bb = readBoundingBox(igp.filename.absFileName());
|
||||
// the values from the file always have the bigpoint-unit bp
|
||||
doubleToWidget(lbX, token(bb, ' ', 0));
|
||||
@ -539,39 +539,18 @@ void GuiGraphics::paramsToDialog(InsetGraphicsParams const & igp)
|
||||
bbChanged = false;
|
||||
} else {
|
||||
// get the values from the inset
|
||||
Length anyLength;
|
||||
string const xl = token(igp.bb, ' ', 0);
|
||||
string const yl = token(igp.bb, ' ', 1);
|
||||
string const xr = token(igp.bb, ' ', 2);
|
||||
string const yr = token(igp.bb, ' ', 3);
|
||||
if (isValidLength(xl, &anyLength)) {
|
||||
doubleToWidget(lbX, anyLength.value());
|
||||
string const unit = unit_name[anyLength.unit()];
|
||||
lbXunit->setCurrentIndex(lbXunit->findData(toqstr(unit)));
|
||||
} else {
|
||||
lbX->setText(toqstr(xl));
|
||||
}
|
||||
if (isValidLength(yl, &anyLength)) {
|
||||
doubleToWidget(lbY, anyLength.value());
|
||||
string const unit = unit_name[anyLength.unit()];
|
||||
lbYunit->setCurrentIndex(lbYunit->findData(toqstr(unit)));
|
||||
} else {
|
||||
lbY->setText(toqstr(xl));
|
||||
}
|
||||
if (isValidLength(xr, &anyLength)) {
|
||||
doubleToWidget(rtX, anyLength.value());
|
||||
string const unit = unit_name[anyLength.unit()];
|
||||
rtXunit->setCurrentIndex(rtXunit->findData(toqstr(unit)));
|
||||
} else {
|
||||
rtX->setText(toqstr(xl));
|
||||
}
|
||||
if (isValidLength(yr, &anyLength)) {
|
||||
doubleToWidget(rtY, anyLength.value());
|
||||
string const unit = unit_name[anyLength.unit()];
|
||||
rtYunit->setCurrentIndex(rtYunit->findData(toqstr(unit)));
|
||||
} else {
|
||||
rtY->setText(toqstr(xl));
|
||||
}
|
||||
doubleToWidget(lbX, igp.bbox.xl.value());
|
||||
string unit = unit_name[igp.bbox.xl.unit()];
|
||||
lbXunit->setCurrentIndex(lbXunit->findData(toqstr(unit)));
|
||||
doubleToWidget(lbY, igp.bbox.yb.value());
|
||||
unit = unit_name[igp.bbox.yb.unit()];
|
||||
lbYunit->setCurrentIndex(lbYunit->findData(toqstr(unit)));
|
||||
doubleToWidget(rtX, igp.bbox.xr.value());
|
||||
unit = unit_name[igp.bbox.xr.unit()];
|
||||
rtXunit->setCurrentIndex(rtXunit->findData(toqstr(unit)));
|
||||
doubleToWidget(rtY, igp.bbox.yt.value());
|
||||
unit = unit_name[igp.bbox.yt.unit()];
|
||||
rtYunit->setCurrentIndex(rtYunit->findData(toqstr(unit)));
|
||||
bbChanged = true;
|
||||
}
|
||||
|
||||
@ -673,7 +652,7 @@ void GuiGraphics::applyView()
|
||||
igp.filename.set(fromqstr(filename->text()), fromqstr(bufferFilePath()));
|
||||
|
||||
// the bb section
|
||||
igp.bb.erase();
|
||||
igp.bbox = graphics::BoundingBox();
|
||||
if (bbChanged) {
|
||||
string bb;
|
||||
string lbXs = widgetToDoubleStr(lbX);
|
||||
@ -685,22 +664,17 @@ void GuiGraphics::applyView()
|
||||
convert<int>(rtXs) + convert<int>(rtXs);
|
||||
if (bb_sum) {
|
||||
if (lbXs.empty())
|
||||
bb = "0 ";
|
||||
else
|
||||
bb = lbXs + fromqstr(lbXunit->currentText()) + ' ';
|
||||
lbXs = "0";
|
||||
igp.bbox.xl = Length(lbXs + fromqstr(lbXunit->currentText()));
|
||||
if (lbYs.empty())
|
||||
bb += "0 ";
|
||||
else
|
||||
bb += (lbYs + fromqstr(lbYunit->currentText()) + ' ');
|
||||
lbYs = "0";
|
||||
igp.bbox.yb = Length(lbYs + fromqstr(lbYunit->currentText()));
|
||||
if (rtXs.empty())
|
||||
bb += "0 ";
|
||||
else
|
||||
bb += (rtXs + fromqstr(rtXunit->currentText()) + ' ');
|
||||
rtXs = "0";
|
||||
igp.bbox.xr = Length(rtXs + fromqstr(rtXunit->currentText()));
|
||||
if (rtYs.empty())
|
||||
bb += '0';
|
||||
else
|
||||
bb += (rtYs + fromqstr(rtYunit->currentText()));
|
||||
igp.bb = bb;
|
||||
rtYs = "0";
|
||||
igp.bbox.yt = Length(rtYs + fromqstr(rtYunit->currentText()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -310,8 +310,11 @@ string InsetGraphics::createLatexOptions() const
|
||||
// stream since we might have a trailing comma that we would like to remove
|
||||
// before writing it to the output stream.
|
||||
ostringstream options;
|
||||
if (!params().bb.empty())
|
||||
options << "bb=" << rtrim(params().bb) << ',';
|
||||
if (!params().bbox.empty())
|
||||
options << "bb=" << params().bbox.xl.asLatexString() << ' '
|
||||
<< params().bbox.yb.asLatexString() << ' '
|
||||
<< params().bbox.xr.asLatexString() << ' '
|
||||
<< params().bbox.yt.asLatexString() << ',';
|
||||
if (params().draft)
|
||||
options << "draft,";
|
||||
if (params().clip)
|
||||
@ -734,7 +737,7 @@ void InsetGraphics::latex(otexstream & os,
|
||||
&& params().filename.isReadableFile();
|
||||
string message;
|
||||
if (!file_exists) {
|
||||
if (params().bb.empty())
|
||||
if (params().bbox.empty())
|
||||
message = "bb = 0 0 200 100";
|
||||
if (!params().draft) {
|
||||
if (!message.empty())
|
||||
|
@ -19,7 +19,6 @@
|
||||
#include "LyXRC.h"
|
||||
|
||||
#include "graphics/epstools.h"
|
||||
#include "graphics/GraphicsParams.h"
|
||||
#include "graphics/GraphicsTypes.h"
|
||||
|
||||
#include "support/convert.h"
|
||||
@ -72,7 +71,7 @@ void InsetGraphicsParams::init()
|
||||
draft = false; // draft mode
|
||||
scaleBeforeRotation = false; // scale image before rotating
|
||||
|
||||
bb = string(); // bounding box
|
||||
bbox = graphics::BoundingBox(); // bounding box
|
||||
clip = false; // clip image
|
||||
|
||||
rotateAngle = "0"; // angle of rotation in degrees
|
||||
@ -94,7 +93,7 @@ void InsetGraphicsParams::copy(InsetGraphicsParams const & igp)
|
||||
draft = igp.draft;
|
||||
scaleBeforeRotation = igp.scaleBeforeRotation;
|
||||
|
||||
bb = igp.bb;
|
||||
bbox = igp.bbox;
|
||||
clip = igp.clip;
|
||||
|
||||
rotateAngle = igp.rotateAngle;
|
||||
@ -117,7 +116,7 @@ bool operator==(InsetGraphicsParams const & left,
|
||||
left.draft == right.draft &&
|
||||
left.scaleBeforeRotation == right.scaleBeforeRotation &&
|
||||
|
||||
left.bb == right.bb &&
|
||||
left.bbox == right.bbox &&
|
||||
left.clip == right.clip &&
|
||||
|
||||
left.rotateAngle == right.rotateAngle &&
|
||||
@ -160,8 +159,8 @@ void InsetGraphicsParams::Write(ostream & os, Buffer const & buffer) const
|
||||
if (scaleBeforeRotation)
|
||||
os << "\tscaleBeforeRotation\n";
|
||||
|
||||
if (!bb.empty()) // bounding box
|
||||
os << "\tBoundingBox " << bb << '\n';
|
||||
if (!bbox.empty()) // bounding box
|
||||
os << "\tBoundingBox " << bbox << '\n';
|
||||
if (clip) // clip image
|
||||
os << "\tclip\n";
|
||||
|
||||
@ -207,13 +206,14 @@ bool InsetGraphicsParams::Read(Lexer & lex, string const & token, string const &
|
||||
} else if (token == "scaleBeforeRotation") {
|
||||
scaleBeforeRotation = true;
|
||||
} else if (token == "BoundingBox") {
|
||||
bb.erase();
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
if (i != 0)
|
||||
bb += ' ';
|
||||
lex.next();
|
||||
bb += lex.getString();
|
||||
}
|
||||
lex.next();
|
||||
bbox.xl = Length(lex.getString());
|
||||
lex.next();
|
||||
bbox.yb = Length(lex.getString());
|
||||
lex.next();
|
||||
bbox.xr = Length(lex.getString());
|
||||
lex.next();
|
||||
bbox.yt = Length(lex.getString());
|
||||
} else if (token == "clip") {
|
||||
clip = true;
|
||||
} else if (token == "rotateAngle") {
|
||||
@ -252,7 +252,7 @@ graphics::Params InsetGraphicsParams::as_grfxParams() const
|
||||
pars.angle = convert<double>(rotateAngle);
|
||||
|
||||
if (clip) {
|
||||
pars.bb = bb;
|
||||
pars.bb = bbox;
|
||||
|
||||
// Get the original Bounding Box from the file
|
||||
string const tmp = graphics::readBB_from_PSFile(filename);
|
||||
|
@ -14,7 +14,7 @@
|
||||
#define INSETGRAPHICSPARAMS_H
|
||||
|
||||
|
||||
#include "Length.h"
|
||||
#include "graphics/GraphicsParams.h"
|
||||
|
||||
#include "support/FileName.h"
|
||||
|
||||
@ -51,8 +51,8 @@ public:
|
||||
/// scale image before rotating
|
||||
bool scaleBeforeRotation;
|
||||
|
||||
/// The bounding box with "xLB yLB yRT yRT ", divided by a space!
|
||||
std::string bb;
|
||||
/// The bounding box
|
||||
graphics::BoundingBox bbox;
|
||||
/// clip image
|
||||
bool clip;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user