mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 05:16:21 +00:00
Embedding: display a pin at the top left corner of embedded figures
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22439 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
e40499d5df
commit
06254d11df
@ -1428,6 +1428,7 @@ lib_images_files = Split('''
|
||||
note-next.png
|
||||
paste.png
|
||||
promote.png
|
||||
pin.png
|
||||
psnfss1.png
|
||||
psnfss2.png
|
||||
psnfss3.png
|
||||
|
@ -335,6 +335,7 @@ dist_images_DATA = \
|
||||
images/note-insert.png \
|
||||
images/note-next.png \
|
||||
images/paste.png \
|
||||
images/pin.png \
|
||||
images/promote.png \
|
||||
images/psnfss1.png \
|
||||
images/psnfss2.png \
|
||||
|
BIN
lib/images/pin.png
Normal file
BIN
lib/images/pin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 399 B |
@ -24,7 +24,8 @@ namespace graphics {
|
||||
Params::Params()
|
||||
: display(ColorDisplay),
|
||||
scale(100),
|
||||
angle(0)
|
||||
angle(0),
|
||||
icon("")
|
||||
{}
|
||||
|
||||
|
||||
@ -34,7 +35,8 @@ bool operator==(Params const & a, Params const & b)
|
||||
a.display == b.display &&
|
||||
a.bb == b.bb &&
|
||||
a.scale == b.scale &&
|
||||
a.angle == b.angle);
|
||||
a.angle == b.angle &&
|
||||
a.icon == b.icon);
|
||||
}
|
||||
|
||||
|
||||
|
@ -72,6 +72,12 @@ public:
|
||||
*/
|
||||
/// 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 &);
|
||||
|
@ -173,7 +173,7 @@ void InsetGraphics::doDispatch(Cursor & cur, FuncRequest & cmd)
|
||||
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
|
||||
|
@ -274,6 +274,7 @@ graphics::Params InsetGraphicsParams::as_grfxParams() const
|
||||
{
|
||||
graphics::Params pars;
|
||||
pars.filename = filename.availableFile();
|
||||
pars.icon = filename.embedded() ? "pin.png" : "";
|
||||
pars.scale = lyxscale;
|
||||
pars.angle = convert<double>(rotateAngle);
|
||||
|
||||
|
@ -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 @@ namespace lyx {
|
||||
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 @@ void RenderGraphic::update(graphics::Params const & params)
|
||||
|
||||
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 @@ void RenderGraphic::draw(PainterInfo & pi, int x, int y) const
|
||||
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 @@ void RenderGraphic::draw(PainterInfo & pi, int x, int y) const
|
||||
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());
|
||||
}
|
||||
|
||||
|
||||
|
@ -45,6 +45,7 @@ private:
|
||||
|
||||
/// The stored data.
|
||||
graphics::Loader loader_;
|
||||
graphics::Loader icon_;
|
||||
graphics::Params params_;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user