On Jan 7, 2008 1:02 PM, Bo Peng <[EMAIL PROTECTED]> wrote: > The attached new pin.png has transparent background.
With the attached updated patch, the icon is updated with embedding status changes. I will apply the patch tomorrow if there is no objection. Bo
Index: development/scons/scons_manifest.py =================================================================== --- development/scons/scons_manifest.py (revision 22418) +++ development/scons/scons_manifest.py (working copy) @@ -1428,6 +1428,7 @@ note-next.png paste.png promote.png + pin.png psnfss1.png psnfss2.png psnfss3.png Index: src/insets/InsetGraphics.cpp =================================================================== --- src/insets/InsetGraphics.cpp (revision 22418) +++ src/insets/InsetGraphics.cpp (working copy) @@ -173,7 +173,7 @@ InsetGraphicsMailer::string2params(to_utf8(cmd.argument()), buffer, p); if (!p.filename.empty()) { try { - updateEmbeddedFile(buffer, p.filename); + p.filename.enable(buffer.embeddedFiles().enabled(), &buffer); } catch (ExceptionMessage const & message) { Alert::error(message.title_, message.details_); // do not set parameter if an error happens Index: src/insets/InsetGraphicsParams.cpp =================================================================== --- src/insets/InsetGraphicsParams.cpp (revision 22418) +++ src/insets/InsetGraphicsParams.cpp (working copy) @@ -274,6 +274,7 @@ { graphics::Params pars; pars.filename = filename.availableFile(); + pars.icon = filename.embedded() ? "pin.png" : ""; pars.scale = lyxscale; pars.angle = convert<double>(rotateAngle); Index: src/insets/RenderGraphic.h =================================================================== --- src/insets/RenderGraphic.h (revision 22418) +++ src/insets/RenderGraphic.h (working copy) @@ -45,6 +45,7 @@ /// The stored data. graphics::Loader loader_; + graphics::Loader icon_; graphics::Params params_; }; Index: src/insets/RenderGraphic.cpp =================================================================== --- src/insets/RenderGraphic.cpp (revision 22418) +++ src/insets/RenderGraphic.cpp (working copy) @@ -14,6 +14,8 @@ #include "insets/Inset.h" +#include "support/FileName.h" +#include "support/filetools.h" #include "support/gettext.h" #include "LyX.h" #include "LyXRC.h" @@ -36,13 +38,16 @@ RenderGraphic::RenderGraphic(Inset const * inset) { loader_.connect(boost::bind(&Inset::updateFrontend, inset)); + icon_.connect(boost::bind(&Inset::updateFrontend, inset)); } RenderGraphic::RenderGraphic(RenderGraphic const & other, Inset const * inset) - : RenderBase(other), loader_(other.loader_), params_(other.params_) + : RenderBase(other), loader_(other.loader_), icon_(other.icon_), + params_(other.params_) { loader_.connect(boost::bind(&Inset::updateFrontend, inset)); + icon_.connect(boost::bind(&Inset::updateFrontend, inset)); } @@ -58,6 +63,15 @@ if (!params_.filename.empty()) loader_.reset(params_.filename, params_); + // If icon is set to empty, icon_ will not be reset to empty + // but will not be displayed. This is to avoid repeated loading + // of the same icon when figure status changes. + if (!params_.icon.empty()) { + support::FileName const icon = support::libFileSearch("images/", + params_.icon, "png"); + if (!icon.empty()) // using an empty bounding box + icon_.reset(icon, graphics::Params()); + } } @@ -172,6 +186,10 @@ loader_.startLoading(); if (!loader_.monitoring()) loader_.startMonitoring(); + if (icon_.status() == graphics::WaitingToLoad) + icon_.startLoading(); + if (!icon_.monitoring()) + icon_.startMonitoring(); } // This will draw the graphics. If the graphics has not been @@ -211,6 +229,9 @@ y - 4, msg, msgFont); } } + if (!params_.icon.empty() && readyToDisplay(icon_)) + pi.pain.image(x + Inset::TEXT_TO_INSET_OFFSET, y - dim_.asc, + 10, 10, *icon_.image()); } Index: src/graphics/GraphicsParams.cpp =================================================================== --- src/graphics/GraphicsParams.cpp (revision 22418) +++ src/graphics/GraphicsParams.cpp (working copy) @@ -24,7 +24,8 @@ Params::Params() : display(ColorDisplay), scale(100), - angle(0) + angle(0), + icon("") {} @@ -34,7 +35,8 @@ a.display == b.display && a.bb == b.bb && a.scale == b.scale && - a.angle == b.angle); + a.angle == b.angle && + a.icon == b.icon); } Index: src/graphics/GraphicsParams.h =================================================================== --- src/graphics/GraphicsParams.h (revision 22418) +++ src/graphics/GraphicsParams.h (working copy) @@ -72,6 +72,12 @@ */ /// Rotation angle. double angle; + + /** The icon to be displayed to the top-left corner of an image. + * It is mutable because an icon reflects a temporary state of + * the image, and is variable. + */ + mutable std::string icon; }; bool operator==(Params const &, Params const &); Index: lib/images/pin.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: lib/images/pin.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Index: lib/Makefile.am =================================================================== --- lib/Makefile.am (revision 22418) +++ lib/Makefile.am (working copy) @@ -335,6 +335,7 @@ images/note-insert.png \ images/note-next.png \ images/paste.png \ + images/pin.png \ images/promote.png \ images/psnfss1.png \ images/psnfss2.png \