X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetGraphicsParams.cpp;h=b7ea377f4208a40d35c308bd2a57fe06f47519f4;hb=1bd422355430d4753e48eee298dafaf8c1ac458f;hp=1a03fdd3919b0f0a041a2222f28863d4080eb996;hpb=0cbcc8a166d0fd798478bddf8c078819f1193bc9;p=lyx.git diff --git a/src/insets/InsetGraphicsParams.cpp b/src/insets/InsetGraphicsParams.cpp index 1a03fdd391..b7ea377f42 100644 --- a/src/insets/InsetGraphicsParams.cpp +++ b/src/insets/InsetGraphicsParams.cpp @@ -19,7 +19,6 @@ #include "LyXRC.h" #include "graphics/epstools.h" -#include "graphics/GraphicsParams.h" #include "graphics/GraphicsTypes.h" #include "support/convert.h" @@ -51,12 +50,13 @@ InsetGraphicsParams::InsetGraphicsParams(InsetGraphicsParams const & igp) } -void InsetGraphicsParams::operator=(InsetGraphicsParams const & params) +InsetGraphicsParams & InsetGraphicsParams::operator=(InsetGraphicsParams const & params) { // Are we assigning the object into itself? if (this == ¶ms) - return; + return *this; copy(params); + return *this; } @@ -72,7 +72,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 +94,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 +117,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 +160,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"; @@ -177,17 +177,20 @@ void InsetGraphicsParams::Write(ostream & os, Buffer const & buffer) const } -bool InsetGraphicsParams::Read(Lexer & lex, string const & token, string const & bufpath) +bool InsetGraphicsParams::Read(Lexer & lex, string const & token, + Buffer const & buf, bool allowOrigin) { if (token == "filename") { lex.eatLine(); - filename.set(lex.getString(), bufpath); + if (allowOrigin) + filename = buf.getReferencedFileName(lex.getString()); + else + filename.set(lex.getString(), buf.filePath()); } else if (token == "lyxscale") { lex.next(); lyxscale = lex.getInteger(); } else if (token == "display") { lex.next(); - string const type = lex.getString(); display = lex.getString() != "false"; } else if (token == "scale") { lex.next(); @@ -207,13 +210,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 +256,7 @@ graphics::Params InsetGraphicsParams::as_grfxParams() const pars.angle = convert(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); @@ -262,36 +266,36 @@ graphics::Params InsetGraphicsParams::as_grfxParams() const unsigned int const bb_orig_yb = convert(token(tmp, ' ', 1)); // new pars.bb values must be >= zero - if (pars.bb.xl > bb_orig_xl) - pars.bb.xl -= bb_orig_xl; + if (pars.bb.xl.inBP() > static_cast(bb_orig_xl)) + pars.bb.xl = Length(pars.bb.xl.inBP() - bb_orig_xl, Length::BP); else - pars.bb.xl = 0; + pars.bb.xl = Length(); - if (pars.bb.xr > bb_orig_xl) - pars.bb.xr -= bb_orig_xl; + if (pars.bb.xr.inBP() > static_cast(bb_orig_xl)) + pars.bb.xr = Length(pars.bb.xr.inBP() - bb_orig_xl, Length::BP); else - pars.bb.xr = 0; + pars.bb.xr = Length(); - if (pars.bb.yb > bb_orig_yb) - pars.bb.yb -= bb_orig_yb; + if (pars.bb.yb.inBP() > static_cast(bb_orig_yb)) + pars.bb.yb = Length(pars.bb.yb.inBP() - bb_orig_yb, Length::BP); else - pars.bb.yb = 0; + pars.bb.yb = Length(); - if (pars.bb.yt > bb_orig_yb) - pars.bb.yt -= bb_orig_yb; + if (pars.bb.yt.inBP() > static_cast(bb_orig_yb)) + pars.bb.yt = Length(pars.bb.yt.inBP() - bb_orig_yb, Length::BP); else - pars.bb.yt = 0; + pars.bb.yt = Length(); } // Paranoia check. - int const width = pars.bb.xr - pars.bb.xl; - int const height = pars.bb.yt - pars.bb.yb; + int const width = pars.bb.xr.inBP() - pars.bb.xl.inBP(); + int const height = pars.bb.yt.inBP() - pars.bb.yb.inBP(); if (width < 0 || height < 0) { - pars.bb.xl = 0; - pars.bb.xr = 0; - pars.bb.yb = 0; - pars.bb.yt = 0; + pars.bb.xl = Length(); + pars.bb.xr = Length(); + pars.bb.yb = Length(); + pars.bb.yt = Length(); } }